博图SCL编程——多种情况下的开关阀控制
博图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编程——多种情况下的开关阀控制相关推荐
- 博图——多种情况下的开关阀控制
设备介绍 我们以普通电动开关阀为例,一般至少会有开启.关闭.开启到位反馈.关闭到位反馈4个信号,如下图. 也有一些会更加丰富一点,例如这款西门子的电动风阀执行器,除了正常的正反转和开/关到位信号,还有 ...
- 博图SCL编程——提升代码界面的美观性和易读性
博图Tia Portal学习教程目录 前言 几年前写C的时候,Tab键敲个不停,就是因为代码要对齐,不然影响美观,后来在网上找到个神器--代码格式化软件,写程序就随意多了,几个.c文件写完,批量选中, ...
- 博图SCL编程——常规模拟量输入/输出的处理
本文只对SCL中模拟量处理程序的编写进行说明,详细的应用原理请参考博图中热电阻/热电偶(RTD/TC)模拟量信号的处理和博图电压/电流(U/I)模拟量信号的处理 1. 热电阻/热电偶(RTD/TC) ...
- 博图SCL编程实例(一):SimMultizone
下面代码为西门子博图的一个实例功能块的SCL程序代码. 实例:PID_Temp_Multizone FUNCTION_BLOCK "SimMultizone" { S7_Optim ...
- 电机星三角降压启动 博图SCL编程练习
//实现要求:按下开始按键后 电机电源启动 电机星型启动 3s后 星型结束 1s后 电机三角型启动 //电源启动与星型接触器启动 IF #START = 1 THEN #GOTO := 1; END_ ...
- 西门子博途SCL高级博图SCL运动控制自动化项目实例西门子整 套高级SCL编程运动控制
西门子博途SCL高级博图SCL运动控制自动化项目实例西门子整 套高级SCL编程运动控制
- 【SCL】博图scl语言应用项目:装配流水线模拟控制
使用西门子博图SCL语言和factoryio软件来编写应用案例--装配流水线模拟控制项目 文章目录 目录 前言 一.应用:装配流水线模拟控制 1.控制要求 2.完善控制要求和场景 1.布置场景(fac ...
- 【SCL】博图SCL编程语言(1)
初识博图scl语言 文章目录 目录 一.scl语言简介 1.介绍 2.相关问题 3.scl语言的编写环境 二.表达式和运算符 1.算术表达式 1.介绍 2.算术表达式使用 3.例题 2.关系表达式 1 ...
- 【SCL】博图SCL语言学习 (指令篇 )
博图SCL语言常用指令的学习和使用以及相关例题. 文章目录 目录 文章目录 前言 一.逻辑运算符的使用 1.点动 2.自锁(起保停) 3.正反转 4.小结 二.常用程序控制指令 1. if...the ...
最新文章
- word2vec相似度计算_图解word2vec(原文翻译)
- PPT讲解机器人产业发展现状与未来展望,重磅资料
- 重点:怎样正确的使用QThread类(注:包括推荐使用QThread线程的新方法QObject::moveToThread)...
- sql 写query_为什么需要动态SQL
- Alpha冲刺第二天
- 【堆】这是要搞事情啊——取出
- 如何让手机快速运行AI应用?这有份TVM优化教程
- 开源媒体标注系统cvat
- Objective-C日记-之KVC
- Multi-level learning based memetic algorithm for community detection笔记
- 小程序图片上传formdata boundary + base64
- 抖音死亡计算机在线测,抖音死亡计算器测试
- macOS中修改hosts文件
- C语言编程三子棋程序代码,C语言实现三子棋源代码
- ultravnc中文版,5步教你如何进行ultravnc中文版配置
- 自然语言理解(NLU)概念浅析
- mysql ssd 应用_MySQL Disk--SSD 特性
- 辛普森复合求积公式matlab,MATLAB数值分析实验二(复合梯形、辛普森和龙贝格求积,以及二重积分计算等).doc...
- 对100层楼两个玻璃球测试问题的理解
- 哈希表、红黑树、B树、B+树基础
热门文章
- eis系统 java_Java消息系统介绍 - marvin_vov的个人空间 - OSCHINA - 中文开源技术交流社区...
- ip中继对接_【关关闯关】AR和Cisco 2900通过SIP IP中继对接案例
- 浪潮服务器开机没有信号输出,PLC输出指示灯已经点亮但是输出没有信号-工业支持中心-西门子中国...
- 将分开的微服务项目合到一个项目下面
- 辽宁启迪:拼多多直通车对搜索流量有什么影响?
- 什么是深度学习?kears简介,深度学习常用的三大模型,MLP(多层感知机),CNN(卷积神经网络),RNN(循环神经网络)
- org.springframework.dao.InvalidDataAccessApiUsageException: ERR wrong number of arguments for ‘srem‘
- PS基础 之 图层样式的使用
- 分号与逗号的区别及举例_顿号、逗号、分号的区别
- 读《深度思考 让所有事情都能正确入手》