梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降

对于PLC的输入输出 , 分数字量和模拟量两种 。 数字量很好理解 , 就是在时间和数量上都离散的物理量 , 比如启/停按钮 , 行程开关 , 电磁阀通/断 , 这些都是数字量 。 数字量对应PLC存储就是1位 , 即1比特(binarydigit , 缩写bit) , 作为信息的最小单位 , 只有两种状态:0(低电平)和1(高电平) , 也表示为FALSE和TRUE 。 模拟量是在时间或数值上都连续的物理量 , 常见的如温度、氧含量、压力等 。
模拟量使用起来不太方便 , 不是有多难 , 而是在程序上需要做必要的处理 , 本文通过实例 , 讲一讲如何通过模拟量控制气缸升起和下降 。
通过模拟量输出控制运动对象动作 , 要先确定运动对象的信号类型和量程等参数 。 信号类型常见的有电流4~20mA和电压0~5V/10V等;量程是设备自身的参量 , 比如气缸控制阀流量开度为0~100% , K型热电偶测温范围0~1300℃等 。
本文选用的气缸控制阀控制特性如图1所示 , 可以看出信号类型4~20mA , 4~12mA对应的1通2 , 流量开度q对应100~0(%);12~20mA对应的1通4 , 流量开度q对应0~100(%);
梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降
文章图片
图1气缸控制阀控制特性
处理模拟量信号需要两个指令 , NORM_X:标准化和SCALE_X:缩放指令 。
NORM_X:标准化
使用“标准化”指令(参照图2所示) , 通过将输入VALUE中变量的值映射到线性标尺对其进行标准化 。 可以使用参数MIN和MAX定义(应用于该标尺的)值范围的限值 。 输出OUT(RET_VAL)中的结果经过计算并存储为浮点数 , 这取决于要标准化的值在该值范围中的位置 。
如果要标准化的值等于输入MIN中的值 , 则输出OUT将返回值“0.0” 。 如果要标准化的值等于输入MAX的值 , 则输出OUT需返回值“1.0” 。
其中MIN、MAX和VALUE既可以是整数 , 也可以是浮点数 。 OUT(RET_VAL)为浮点数 。
梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降
文章图片
图2NORM_X
SCALE_X:缩放指令
使用“缩放”指令(参照图3所示) , 通过将输入VALUE的值映射到指定的值范围内以缩放该值 。 当执行“缩放”指令时 , 输入VALUE的浮点值会缩放到由参数MIN和MAX定义的值范围 。 缩放结果为整数 , 存储在RET_VAL输出中 。
其中MIN、MAX和OUT(RET_VAL)既可以是整数 , 也可以是浮点数 。 VALUE为浮点数 。
梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降
文章图片
图3SCALE_X
接下来在FB中定义各变量 , 如图4所示 。 变量有升起和降落的指令rise_command、fall_command , 数据类型均为Bool型;升起和降落的开度百分比rise_rate、fall_rate , 此处数据类型均定义为Int型;以及标准化和缩放的变量 , NORM_rise_rate(Real型)、NORM_fall_rate_1(Real型)、NORM_fall_rate_2(Real型)、SCALE_rise_rate(Int型)、SCALE_fall_rate(Int型) 。
梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降
文章图片
图4定义变量
输出量AQ1(Int型)需要在PLC变量中定义 , 同时模拟量输出的地址要与实际的接线端子地址一致 。
用SCL语言编程 , 如图5所示 。
梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降
文章图片
【梁开心|西门子SCL编程——通过模拟量控制气缸升起和下降】图5SCL程序
第1行程序是将“rise_rate”标准化为0.0~1.0范围内的值;第2行程序是将“NORM_rise_rate”缩放到PLC能够执行的整数范围 , 这里需要了解PLC自身模拟量模块电流测量模拟值的范围 , 需要查找该模拟量模块的手册 , 本文使用的模拟量模块4~20mA电流测量范围为0~27648 , 中间值12mA对应的值为13824(该值需自己计算) 。 第3行程序是将“fall_rate”标准化为0.0~1.0范围内的值;第4行程序是一次转换 , 由于控制阀4~12m对应的是100~0 , 不太符合常规的表达逻辑 。 第5行程序是将“NORM_fall_rate_2”缩放为PLC能够执行的整数方位 , 解释同第2行 。 第6~8行程序是进行指令的判断 , 如果升起指令“rise_command”为真 , 则将缩放过的值“SCALE_rise_rate”赋值给输出变量AQ1 , 实现气缸升起;第9~10行程序是进行指令的判断 , 如果下降指令为真 , 则将缩放过的值“SCALE_fall_rate”赋值给输出变量AQ1 , 实现气缸下降;注意:这里为了简化程序 , 程序里没有进行“rise_rate”和“fall_rate”进行相互复位操作End