博图SCL中常规模拟量输入/输出的处理
程序员文章站
2022-04-28 09:39:46
...
本文只对SCL中模拟量处理程序的编写进行说明,详细的应用原理请参考博图中热电阻/热电偶(RTD/TC)模拟量信号的处理和博图电压/电流(U/I)模拟量信号的处理
1. 热电阻/热电偶(RTD/TC)
热电阻/热电偶直接连接到专用的RTD/TC模块,不使用变送器的,熟悉使用西门子PLC的人应该都知道,除以10就行了。
常规组态,修改测量类型,以K型热电偶为例:
程序如下:
"TIC1" := "AI_TIC1" / 10;
"TIC2" := "AI_TIC2" / 10;
"TIC3" := "AI_TIC3" / 10;
"TIC4" := "AI_TIC4" / 10;
如果精度要求不高,那直接除以10,如果需要保留小数点后一位的数值,就要注意,输出值要选real浮点型,同时要先将int型的IO变量转换为real,防止精度丢失。
"TIC1" := INT_TO_REAL("AI_TIC1") / 10;
"TIC2" := INT_TO_REAL("AI_TIC2") / 10;
"TIC3" := INT_TO_REAL("AI_TIC3") / 10;
"TIC4" := INT_TO_REAL("AI_TIC4") / 10;
仿真结果如下(%IW4输入值设为121):
数据类型不转换的话
数据类型先转换的话
2.电流/电压(U/I)
因为使用的指令不同,先说S7-1200/1500,至于300/400后面有空再添加。
这里涉及到两个指令——NORM_X和SCALE_X。指令说明还是看博图电压/电流(U/I)模拟量信号的处理
SCALE_X 和NORM_X 都是有返回值的,所以不能单独使用作为一行程序,需要赋值给一个变量。
//T101 Int %MW28 温度数值 量程 -35℃~35℃
#T101_temp := NORM_X(MIN := 0, VALUE := "AI_T101", MAX := 27648);
"T101" := SCALE_X(MIN := -35, VALUE := #T101_temp, MAX := 35);
//P101 Int %MW30 湿度数值 量程 0~100%RH
#RH101_temp := NORM_X(MIN := 0, VALUE := "AI_RH101", MAX := 27648);
"RH101" := SCALE_X(MIN := 0, VALUE := #RH101_temp, MAX := 100);
有一定编程基础的会发现, NORM_X 计算出的输出值可以直接用作SCSLE_X 的输入值,从而省略一个中间变量。
"T101" := SCALE_X(MIN := -35, VALUE := NORM_X(MIN := 0, VALUE := "AI_T101", MAX := 27648), MAX := 35);
"RH101" := SCALE_X(MIN := 0, VALUE := NORM_X(MIN := 0, VALUE := "AI_RH101", MAX := 27648), MAX := 100);
3.模拟量输出
会模拟量输入处理的原理,那输出同理,先缩放再标准化。
例如用4~20mA输出控制变频器频率。
//Motor_INV REAL %MD32 电机频率 0.0~50.0Hz
//AQ_INV INT %QW2 电机频率 4~20mA输出
"AQ_INV" := SCALE_X(MIN := 0, VALUE := NORM_X(MIN := 0.0, VALUE := "Motor_INV", MAX := 50.0), MAX := 27648);
上一篇: 深入解析中间件之-Canal
推荐阅读