对于 PLC 的输入输出,主要有数字量和模拟量这两种。数字量比较好理解,就是在时间和数量方面都处于离散状态的物理量,比如说启/停按钮、行程开关、电磁阀的通/断,这些都属于数字量。在 PLC 存储中,数字量就是 1 位,也就是 1 比特(binary digit,缩写 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(%);
图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) 是浮点数。
图2 NORM_X
SCALE_X:缩放指令
使用“缩放”指令(参考图 3 就行),就是把输入 VALUE 的值映射到指定的值范围内来缩放这个值。在执行“缩放”指令的时候,输入 VALUE 的浮点值会缩放到由参数 MIN 和 MAX 规定的值范围里。缩放的结果是整数,存放在 RET_VAL 输出里。这里面的 MIN 、 MAX 和 OUT(RET_VAL) 既可能是整数,也可能是浮点数。VALUE 是浮点数。
图3 SCALE_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 型)。
图4 定义变量
输出量 AQ1(Int 型)得在 PLC 变量里进行定义,而且模拟量输出的地址得跟实际的接线端子地址相同。用 SCL 语言来编程,就像图 5 展示的那样。
图5 SCL程序
第 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 到 12mA 对应的是 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”做相互复位操作
西门子SCL编程实例--通过模拟量控制比例阀
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=492641&fromuid=42656
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)