在触摸屏上输入数值,将这个数值传递到 PLC 的变量中,再通过计算把该变量转换为 PLC 模拟量输出(如 4-20mA、0-10V)对应的数值,最终驱动模拟量模块输出信号。这个过程核心是数值的标度变换(工程量与模拟量量程的转换),以下是详细的实现步骤,以常见的 PLC(三菱 FX、西门子 S7-1200)为例说明。
一、核心原理:标度变换公式
PLC 的模拟量输出模块(如 AO 模块)的输出值与实际工程量之间是线性对应关系,需要通过公式完成转换:
1. 模拟量输出模块的量程对应关系
以最常见的4-20mA 电流输出和0-10V 电压输出为例:
| 模拟量输出类型 | 工程量范围(用户输入的数值范围,如 0-100% 转速) | PLC 内部数字量范围(如 16 位 AO 模块,常见 0-27648 或 0-32767) | 对应关系 |
|---|---|---|---|
| 4-20mA | 0~100(假设为转速百分比) | 5530~27648(西门子 S7-1200/1500 标准)0~4095(三菱 FX 模拟量模块,4mA 对应 819,20mA 对应 4095) | 4mA 对应工程量最小值,20mA 对应最大值 |
| 0-10V | 0~50(假设为温度设定值) | 0~27648(西门子)0~4095(三菱) | 0V 对应最小值,10V 对应最大值 |
2. 通用标度变换公式(线性转换)
plaintext
转换后数字量 = ((工程量输入值 - 工程量最小值) / (工程量最大值 - 工程量最小值)) × (数字量最大值 - 数字量最小值) + 数字量最小值
这个公式的作用是将触摸屏输入的工程量(如 0-100 的转速) 转换为模拟量模块能识别的数字量(如 5530-27648)。
二、实现步骤(分 PLC 型号说明)
场景前提
假设需求:触摸屏输入0-100 的转速百分比,PLC 模拟量输出4-20mA驱动变频器(4mA 对应 0 转速,20mA 对应 100 转速)。
(一)西门子 S7-1200/1500 实现方案
1. 硬件与变量定义
2. TIA Portal 中编写转换程序(梯形图 / STL)
使用结构化文本(ST) 编写转换逻辑,更简洁:
st
// 变量定义(在DB块中提前定义) VAR Speed_Set: REAL := 0.0; // 触摸屏输入的转速值(0-100) AO_Output: INT := 0; // 模拟量输出数字量(5530-27648) // 常量定义 Eng_Min: REAL := 0.0; // 工程量最小值(转速0) Eng_Max: REAL := 100.0; // 工程量最大值(转速100) Dig_Min: INT := 5530; // 4mA对应的数字量 Dig_Max: INT := 27648; // 20mA对应的数字量 END_VAR // 标度变换计算(加入边界限制,防止超量程) IF Speed_Set < Eng_Min THEN AO_Output := Dig_Min; ELSIF Speed_Set > Eng_Max THEN AO_Output := Dig_Max; ELSE AO_Output := INT(((Speed_Set - Eng_Min) / (Eng_Max - Eng_Min)) * REAL(Dig_Max - Dig_Min) + REAL(Dig_Min)); END_IF; // 将计算后的数字量写入模拟量输出模块(地址为QW100,根据模块实际地址调整) "QW100" := AO_Output;
3. 关键说明
(二)三菱 FX 系列实现方案
1. 硬件与变量定义
2. GX Works2 中编写转换程序(梯形图)
plaintext
// 步骤1:初始化常量(上电执行) LD M8002 MOV K0 D200 // Eng_Min = 0 MOV K100 D201 // Eng_Max = 100 MOV K819 D202 // Dig_Min = 819(4mA对应) MOV K4095 D203 // Dig_Max = 4095(20mA对应) // 步骤2:边界限制(防止输入值超出0-100) LD M8000 CMP D100 K0 M0 // 如果D100 < 0,M0=1,设置为0 LD M0 MOV K0 D100 // 如果D100 > 100,M2=1,设置为100 CMP D100 K100 M3 LD M3 MOV K100 D100 // 步骤3:标度变换计算(公式转换) // 计算:(D100 - D200) * (D203 - D202) / (D201 - D200) + D202 LD M8000 SUB D100 D200 D300 // D300 = Speed_Set - Eng_Min SUB D203 D202 D301 // D301 = Dig_Max - Dig_Min MUL D300 D301 D302 // D302 = (Speed_Set - Eng_Min) * (Dig_Max - Dig_Min) DIV D302 D201 D303 // D303 = 上述结果 / (Eng_Max - Eng_Min) ADD D303 D202 D101 // D101 = 最终数字量(写入模拟量模块) // 步骤4:将D101写入FX2N-4DA模块的输出通道(如通道0) LD M8000 MOV K0 K4Y000 // 选择通道0 MOV D101 D8192 // 将数字量写入模块的输出寄存器(FX2N-4DA的通道0寄存器为D8192)


