欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

博图SCL中常规模拟量输入/输出的处理

程序员文章站 2022-04-28 09:39:46
...

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

1. 热电阻/热电偶(RTD/TC)

热电阻/热电偶直接连接到专用的RTD/TC模块,不使用变送器的,熟悉使用西门子PLC的人应该都知道,除以10就行了。
常规组态,修改测量类型,以K型热电偶为例:
博图SCL中常规模拟量输入/输出的处理
博图SCL中常规模拟量输入/输出的处理
程序如下:

"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):
数据类型不转换的话
博图SCL中常规模拟量输入/输出的处理
数据类型先转换的话博图SCL中常规模拟量输入/输出的处理

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 的输入值,从而省略一个中间变量。
博图SCL中常规模拟量输入/输出的处理

"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输出控制变频器频率。
博图SCL中常规模拟量输入/输出的处理
博图SCL中常规模拟量输入/输出的处理

//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);