博图Tia Portal学习教程目录

设备介绍

我们以普通电动开关阀为例,一般至少会有开启、关闭、开启到位反馈、关闭到位反馈4个信号,如下图。

也有一些会更加丰富一点,例如这款西门子的电动风阀执行器,除了正常的正反转和开/关到位信号,还有开/关到位的取反信号以及电位计位置反馈。


因为在不同的工况下,对同一个阀门,要求的控制逻辑不尽相同,多以我们从简单到复杂,来编写几个典型的范例。

案例1

简单粗暴型(适用于开关到位后能自行内部断电的执行器)
按一下HMI上的开启按钮,开启阀门;按一下关闭按钮,关闭阀门。加个开/关输出互锁和开/关信号互锁。

IF "Open_value1" THEN"DQ_Open_value1_RLY" := TRUE;"DQ_Close_value1_RLY" := FALSE;"Close_value1" := FALSE;
END_IF;
IF "Close_value1" THEN"DQ_Close_value1_RLY" := TRUE;"DQ_Open_value1_RLY" := FALSE;"Open_value1" := FALSE;
END_IF;

案例2

到位断电型
阀门运行到位,PLC接收到信号,即断开动力电源。

IF "Open_value1" THEN"DQ_Open_value1_RLY" := TRUE;
END_IF;
IF "DI_Value1_opened" OR "Close_value1" THEN"DQ_Open_value1_RLY" := FALSE;"Open_value1" := FALSE;
END_IF;IF "Close_value1" THEN"DQ_Close_value1_RLY" := TRUE;
END_IF;
IF "DI_Value1_closed" OR "Open_value1" THEN"DQ_Close_value1_RLY" := FALSE;"Close_value1" := FALSE;
END_IF;

案例3

上面的方案在实际使用中,如果执行器质量不是特别好的话,有可能会遇到一个比较尴尬的问题——执行器已经发出运动到位的信号了,然而实际上阀门离走到位还差那么点。例如开启旋转阀,旋转到85°了,旋转到位的信号就已经发出来了,那PLC立刻断电的话,阀门就停在85℃这儿了。要知道,阀门关不严或者开不完全会导致一系列的问题,我遇到过一次比较极端的情况,因为阀门处风速特别高,如果阀门板不能开到完全跟风向平行,运行过程中就会慢慢被风“强行扳回去”,导致风阀被关闭。
应对方法呢,可以在PLC接受到限位信号和断开执行器动力电源之间加一个小延时。

IF "Open_value1" THEN"DQ_Open_value1_RLY" := TRUE;
END_IF;
"Stop_opening_value1".TON(IN:="DI_Value1_opened",PT:=T#10s);
IF "Stop_opening_value1".Q OR "Close_value1" THEN"DQ_Open_value1_RLY" := FALSE;"Open_value1" := FALSE;
END_IF;IF "Close_value1" THEN"DQ_Close_value1_RLY" := TRUE;
END_IF;
"Stop_closing_value1".TON(IN := "DI_Value1_opened",PT := T#10s);
IF "Stop_closing_value1".Q OR "Open_value1" THEN"DQ_Close_value1_RLY" := FALSE;"Close_value1" := FALSE;
END_IF;

案例4

HMI上想要实时显示阀门状态,完全开启时显示绿色,完全关闭红色,中间状态灰色,信号错误红绿双色。
实现方案,用一个Byte变量代表阀门状态,0表示未知状态,1表示完全开启,2表示完全关闭,3代表信号错误。程序如下:

REGION Value1_HMIIF NOT #Value_opened AND NOT #Value_closed THEN#Value_state_HMI := 0;END_IF;IF #Value_opened AND NOT #Value_closed THEN#Value_state_HMI := 1;END_IF;IF NOT #Value_opened AND #Value_closed THEN#Value_state_HMI := 2;END_IF;IF #Value_opened AND #Value_closed THEN#Value_state_HMI := 3;END_IF;
END_REGION


HMI上先创建该种类阀门使用的图形列表。我是用Adobe Illustrator画的,建议长期画屏幕的同志还是要能熟用一款绘图软件,这样设计的界面会比较符合需求且美观。然后创建I/O域,赋值。


案例5

通过上面一顿猛如虎的操作,大家应该发现了,单独一个阀门就这么多行程序,那我一个设备十几个阀门的话,岂不是满屏幕哗啦啦的都是阀门控制程序,那还得了?所以最后我们需要把它做成一个函数块。
因为要用到好多TON定时器,所以创建一个FB块,在Static里面声明,这样每次调用该FB块都会在其DB块里面自动生成IEC_Timer数据。

程序如下:

REGION Open_valueIF #Open_value_HMI THEN#Open_value_RLY := TRUE;END_IF;#Stop_opening_value.TON(IN := #Value_opened,PT := T#10s);IF #Stop_opening_value.Q OR #Close_value_HMI THEN#Open_value_RLY := FALSE;#Open_value_HMI := FALSE;END_IF;
END_REGIONREGION Close_valueIF #Close_value_HMI THEN#Close_value_RLY := TRUE;END_IF;#Stop_closing_value.TON(IN := #Value_closed,PT := T#10s);IF #Stop_closing_value.Q OR #Open_value_HMI THEN#Close_value_RLY := FALSE;#Close_value_HMI := FALSE;END_IF;
END_REGIONREGION Value_HMIIF NOT #Value_opened AND NOT #Value_closed THEN#Value_state_HMI := 0;END_IF;IF #Value_opened AND NOT #Value_closed THEN#Value_state_HMI := 1;END_IF;IF NOT #Value_opened AND #Value_closed THEN#Value_state_HMI := 2;END_IF;IF #Value_opened AND #Value_closed THEN#Value_state_HMI := 3;END_IF;
END_REGION

主函数里调用是这么个情况,然后添加变量就行了。

"Value_Control_SCL_DB"(Value_opened:="DI_Value1_opened",Value_closed:="DI_Value1_closed",Value_state_HMI=>"Value1_state_HMI",Open_value_RLY=>"DQ_Open_value1_RLY",Close_value_RLY=>"DQ_Close_value1_RLY",Open_value_HMI:="Open_value1",Close_value_HMI:="Close_value1");"Value_Control_SCL_DB"(Value_opened := "DI_Value2_opened",Value_closed := "DI_Value2_closed",Value_state_HMI => "Value2_state_HMI",Open_value_RLY => "DQ_Open_value2_RLY",Close_value_RLY => "DQ_Close_value2_RLY",Open_value_HMI := "Open_value2",Close_value_HMI := "Close_value2");

博图SCL编程——多种情况下的开关阀控制相关推荐

  1. 博图——多种情况下的开关阀控制

    设备介绍 我们以普通电动开关阀为例,一般至少会有开启.关闭.开启到位反馈.关闭到位反馈4个信号,如下图. 也有一些会更加丰富一点,例如这款西门子的电动风阀执行器,除了正常的正反转和开/关到位信号,还有 ...

  2. 博图SCL编程——提升代码界面的美观性和易读性

    博图Tia Portal学习教程目录 前言 几年前写C的时候,Tab键敲个不停,就是因为代码要对齐,不然影响美观,后来在网上找到个神器--代码格式化软件,写程序就随意多了,几个.c文件写完,批量选中, ...

  3. 博图SCL编程——常规模拟量输入/输出的处理

    本文只对SCL中模拟量处理程序的编写进行说明,详细的应用原理请参考博图中热电阻/热电偶(RTD/TC)模拟量信号的处理和博图电压/电流(U/I)模拟量信号的处理 1. 热电阻/热电偶(RTD/TC) ...

  4. 博图SCL编程实例(一):SimMultizone

    下面代码为西门子博图的一个实例功能块的SCL程序代码. 实例:PID_Temp_Multizone FUNCTION_BLOCK "SimMultizone" { S7_Optim ...

  5. 电机星三角降压启动 博图SCL编程练习

    //实现要求:按下开始按键后 电机电源启动 电机星型启动 3s后 星型结束 1s后 电机三角型启动 //电源启动与星型接触器启动 IF #START = 1 THEN #GOTO := 1; END_ ...

  6. 西门子博途SCL高级博图SCL运动控制自动化项目实例西门子整 套高级SCL编程运动控制

    西门子博途SCL高级博图SCL运动控制自动化项目实例西门子整 套高级SCL编程运动控制

  7. 【SCL】博图scl语言应用项目:装配流水线模拟控制

    使用西门子博图SCL语言和factoryio软件来编写应用案例--装配流水线模拟控制项目 文章目录 目录 前言 一.应用:装配流水线模拟控制 1.控制要求 2.完善控制要求和场景 1.布置场景(fac ...

  8. 【SCL】博图SCL编程语言(1)

    初识博图scl语言 文章目录 目录 一.scl语言简介 1.介绍 2.相关问题 3.scl语言的编写环境 二.表达式和运算符 1.算术表达式 1.介绍 2.算术表达式使用 3.例题 2.关系表达式 1 ...

  9. 【SCL】博图SCL语言学习 (指令篇 )

    博图SCL语言常用指令的学习和使用以及相关例题. 文章目录 目录 文章目录 前言 一.逻辑运算符的使用 1.点动 2.自锁(起保停) 3.正反转 4.小结 二.常用程序控制指令 1. if...the ...

最新文章

  1. word2vec相似度计算_图解word2vec(原文翻译)
  2. PPT讲解机器人产业发展现状与未来展望,重磅资料
  3. 重点:怎样正确的使用QThread类(注:包括推荐使用QThread线程的新方法QObject::moveToThread)...
  4. sql 写query_为什么需要动态SQL
  5. Alpha冲刺第二天
  6. 【堆】这是要搞事情啊——取出
  7. 如何让手机快速运行AI应用?这有份TVM优化教程
  8. 开源媒体标注系统cvat
  9. Objective-C日记-之KVC
  10. Multi-level learning based memetic algorithm for community detection笔记
  11. 小程序图片上传formdata boundary + base64
  12. 抖音死亡计算机在线测,抖音死亡计算器测试
  13. macOS中修改hosts文件
  14. C语言编程三子棋程序代码,C语言实现三子棋源代码
  15. ultravnc中文版,5步教你如何进行ultravnc中文版配置
  16. 自然语言理解(NLU)概念浅析
  17. mysql ssd 应用_MySQL Disk--SSD 特性
  18. 辛普森复合求积公式matlab,MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等).doc...
  19. 对100层楼两个玻璃球测试问题的理解
  20. 哈希表、红黑树、B树、B+树基础

热门文章

  1. eis系统 java_Java消息系统介绍 - marvin_vov的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
  3. 浪潮服务器开机没有信号输出,PLC输出指示灯已经点亮但是输出没有信号-工业支持中心-西门子中国...
  4. 将分开的微服务项目合到一个项目下面
  5. 辽宁启迪:拼多多直通车对搜索流量有什么影响?
  6. 什么是深度学习?kears简介,深度学习常用的三大模型,MLP(多层感知机),CNN(卷积神经网络),RNN(循环神经网络)
  7. org.springframework.dao.InvalidDataAccessApiUsageException: ERR wrong number of arguments for ‘srem‘
  8. PS基础 之 图层样式的使用
  9. 分号与逗号的区别及举例_顿号、逗号、分号的区别
  10. 读《深度思考 让所有事情都能正确入手》