工作任务1:PLC的数值运算

官方工学老师·22 页·深入(追求细节与边界)·0 次浏览·2 天前
PLC运算恒压供水PID控制工程实战

PLC数值运算

拆解恒压供水里每一个数值运算的控制逻辑与工程边界

按 空格/→ 演示下一步

1 / 22 页

全部页面点击任意一页,跳回舞台从这页播放

PLC运算恒压供水PID控制工程实战

PLC数值运算

拆解恒压供水里每一个数值运算的控制逻辑与工程边界

1第 1 页 · PLC数值运算

PLC的数值世界

上一页我们学了PLC做加减乘除,但PLC处理的'数'到底长什么样?一切得从两个世界说起——一个是只有'有'和'没有'的世界,另一个是连续变化的世界。

开关量
非0即1,像电灯开关,只有开和关两种状态
模拟量
连续可变的数值,比如温度从20℃慢慢升到30℃
为什么要升级
现实世界大多连续变化——温度、压力、速度都是渐变的
A/D转换
模拟信号先变成数字,PLC才能识别和参与运算
水龙头旋钮对应 →开关量与模拟量

老式龙头只有开/关两档对应开关量;可连续旋转的对应模拟量

2第 2 页 · PLC的数值世界

数值运算在控制系统中的位置

从左往右读一遍:物理量进PLC运算,再回到物理世界,最后闭环回到起点。

图解渲染中…
a2模拟信号变成数字量,PLC内部只处理离散数值a3本页焦点:加减乘除、PID、滤波等都在这里完成a6→a1虚线表示反馈:对象状态被传感器再次捕获,闭环成立
3第 3 页 · 数值运算在控制系统中的位置

递增递减指令概述

想象流水线:每过一个产品,计数器就跳一下,从1变2、变3。停车场每走一辆车,空位数就少一个。这两个动作——'加1'和'减1'——在PLC里就是INC和DEC。

最基础的算术原子
只做两件事:让数值+1或-1,是PLC运算指令里最简单的一对
触发式执行
每来一次执行信号动一次,不需写完整算式,像按钮按一下动一下
把静态数值变活
普通D0是死数据,接上INC后就成了会自己跳动的计数器
上层功能的基石
循环计数、步进控制、地址偏移、限次运行,几乎都建立在它之上
电梯楼层显示对应 →INC/DEC指令

每经过一层数字自动+1或-1;INC/DEC就是PLC里让数字'自己动'的机制

INC D0D0D0+1INC\ D0 \equiv D0 \leftarrow D0 + 1
4第 4 页 · 递增递减指令概述

INC递增指令详解

INC递增分五步推进:从16位取数到32位写回,最后揭示标志位特性。

1
16位取操作数
CPU从VW单元读出当前16位数值,送入ALU
2
16位加一回写
ALU执行+1,结果写回VW;越过32767则回绕到-32768
3
32位取操作数
CPU从VD单元读出32位双字(高位字与低位字组合)
4
32位加一回写
ALU对32位整体+1并写回VD;溢出边界扩至约21亿
5
标志位不变
INC不更新零位/溢出位/符号位,与ADD指令的关键区别
5第 5 页 · INC递增指令详解

DEC递减指令详解

DEC递减并非简单减1,到达边界时触发特殊的下溢与标志位联动。

1
执行减1
将源操作数减1,结果写回原存储单元
2
零值判定
结果等于0时置位零标志位,供后续判断
3
0下溢
0再减1,结果跳回数据类型最大值(如65535)
4
借位标志
下溢发生时借位标志位翻转,触发后续逻辑
6第 6 页 · DEC递减指令详解

递增递减应用示例

text

用 S7-200 STL 实现流水线计数器:产品经过 +1,卸料 -1,满 50 报警。

代码高亮加载中…

EU 上升沿保证每个产品只计一次;INCB/DECB 对 VB100 自增自减;MOVB 复位清零。

7第 7 页 · 递增递减应用示例

递增递减自测

点击作答

三菱FX PLC中执行INC D0指令。若D0当前为16位有符号数最大值32767,再执行一次后结果是?

8第 8 页 · 递增递减自测

逻辑运算指令全景图

中心是逻辑运算总入口,向左分出四条支线:每条支线给出功能口诀与IEC标准符号,对照记忆最有效。

图解渲染中…
APLC逻辑运算总入口,下挂四种基本运算B1AND规则:所有输入位为1,输出才为1D1XOR规则:两位相异输出1,相同时输出0E2IEC 61131-3标准图形符号,不同厂商叫法略异
9第 9 页 · 逻辑运算指令全景图

AND与OR的对比

AND和OR都做位运算,但一个要求"全部满足"、一个只要"一个就够"——串并联混淆是初学者最常踩的坑。

AND(与逻辑)
  • 逻辑本质:所有输入位都为1,结果才为1
  • 成立条件:必须全部条件同时为真
  • 电路类比:串联开关——全部闭合灯才亮
  • 典型场景:安全联锁,多条件齐备才动作
OR(或逻辑)
  • 逻辑本质:任一输入位为1,结果就为1
  • 成立条件:只要一个条件为真即可
  • 电路类比:并联开关——任一闭合灯就亮
  • 典型场景:多地点启停,任一按钮都能控制
多个条件都必须满足才动作→选AND(安全保护几乎都是AND);任一条件触发就要动作→选OR。
10第 10 页 · AND与OR的对比

XOR异或与NOT取反

上一页我们看到AND像「全部满足才通过」、OR像「任一满足即通过」。但控制系统里还有两类更微妙的问题:判断两个数是否完全相等、以及把一个数里某些位精准翻转——这正是XOR与NOT的舞台。

XOR 异或规则
逐位比较:相同得0、不同得1
XOR 位翻转
与掩码异或:掩码位为1处翻转,为0处保持
XOR 相等判断
两值异或结果全为0即完全相等
NOT 取反
逐位翻转,0变1、1变0;双重取反等于原值
「找不同」游戏对应 →XOR 异或

两数逐位比对:相同位像两图一致→得0;不同位像找到差异→得1;若全0,说明两个数一模一样

AA=0,A0=A,A1=AA\oplus A=0,\quad A\oplus 0=A,\quad A\oplus 1=\overline{A}
11第 11 页 · XOR异或与NOT取反

逻辑运算应用示例

text

用 AND/OR/NOT 拼一段真实的多条件保护:任一保护条件不满足,电机就停。

代码高亮加载中…

Motor_RUN 用 AND 把启动与各保护串成允许链;Alarm_Any 用 OR 把各故障聚成总报警。这就是梯形图『允许串行、故障并行』的典型写法。

12第 12 页 · 逻辑运算应用示例

加法ADD指令

ADD把两数相加,但16位结果有上限,超了就要靠标志位说话。

1
ADD指令格式
ADD S1 S2 D:两个源相加,结果写入目标元件
2
CPU执行加法
在ALU里按二进制位相加,得到一个16位结果
3
检测结果溢出
16位有符号范围-32768~+32767,超界即溢出
4
M8022置位
结果溢出时,进位标志位M8022被自动置为ON
5
标志位应用
用M8022触发报警、切换流程或改用32位DADD
13第 13 页 · 加法ADD指令

减法SUB指令

减法不止算差值,借位与负数表示才是深水区。

1
执行减法运算
从源操作数中减去目标操作数,得到原始差值
2
判断结果范围
检查差值是否低于该数据类型的最小表示范围
3
借位标志置位
下溢时借位标志位被置1,提示结果已超出范围
4
负数以补码存储
负数结果按二进制补码形式逐位写入目标寄存器
5
读取时还原符号
高位为1视为负值,取反加一还原为十进制负数
14第 14 页 · 减法SUB指令

乘法MUL与除法DIV

结果都装进双字,但高位含义截然不同——MUL 是溢出,DIV 是余数。

乘法 MUL
  • 运算:A × B,被乘数与乘数
  • 结果位数:自动扩展为双字 32 位
  • 高位含义:存储溢出的高位,不丢精度
  • 典型场景:模拟量缩放、单位换算
除法 DIV
  • 运算:A ÷ B,被除数与除数
  • 结果位数:低字存商,高字存余数
  • 高位含义:余数 ≠ 错误,可判整除
  • 典型场景:缩放映射、除零保护
MUL 高位是溢出,DIV 高位是余数——同样双字,含义相反。DIV 务必先校验除数非零。
15第 15 页 · 乘法MUL与除法DIV

数据类型与运算范围

三条横向通道并列展示字节、字、双字的取值上限与溢出回绕规律。

图解渲染中…
a2BYTE 无符号,0~255 共256个值b2WORD 无符号,0~65535 共65536个值c2DWORD 无符号,0~4294967295a3加1溢出后悄悄回0,PLC不会报错
16第 16 页 · 数据类型与运算范围

数据运算综合示例

iecst

看真实工程——恒压供水系统如何把 ADD/SUB/MUL/DIV/INC 串成完整闭环压力计算。

代码高亮加载中…

高亮行体现工程套路:L6 标度变换用 MUL/DIV,L12 SUB 求偏差,L16 MUL 做比例,L19 ADD 累加,L21 IF 限幅,L32 INC 计小时——前几页指令在此串成完整闭环。

17第 17 页 · 数据运算综合示例

恒压供水控制需求分析

恒压供水通过目标压力与实际压力的闭环运算,让水泵自动跟随用水量变化。

1
设定目标压力SP
在HMI上输入期望压力,作为整个闭环的基准给定值
2
采集实际压力PV
压力变送器把管网压力转成4~20mA信号,实时送入PLC模拟量输入
3
计算压力偏差e
PLC用SUB指令做SP减PV,得到偏差值e,正负决定调节方向
4
PID运算输出MV
将偏差e送入PID控制器,输出对应频率给定值(操纵变量)
5
调节水泵转速
变频器按MV驱动水泵,改变流量使管网压力趋近SP,完成闭环
18第 18 页 · 恒压供水控制需求分析

PID控制中的数值运算

python

PID 控制器的离散化实现:把连续的微积分拆成 PLC 每个扫描周期里的加减乘除。

代码高亮加载中…

三行核心:误差 e(k) 是 SUB;积分靠累加器(ADD);微分用相邻两次误差之差(SUB+DIV)。last_error 必须保持,否则微分项失效。

19第 19 页 · PID控制中的数值运算

程序流程与调试要点

从顶部向下读:先参数准备,再三类错误排查,最后在线监控循环。

图解渲染中…
A3INT和DINT混用、字与位混用A6超过32767/65535等类型上限A9地址越界、未定义软元件B3观察运行中各寄存器的值
20第 20 页 · 程序流程与调试要点

数值运算要点回顾

  • 单周期执行是默认值,持续动作需自锁
  • 逻辑运算按位,算术运算按字
  • 数据类型边界即运算边界,超界即溢出
  • 基本运算的组合,就是PID这类高级控制
延伸主题:浮点运算与精度控制运算指令的扫描周期优化批量数据的数值处理策略
21第 21 页 · 数值运算要点回顾

课后思考

先独立想 1 分钟,再展开参考答案对照思路。

1为什么PLC做加法时必须关注数据类型?INT型两数相加超过32767会怎样?

参考答案INT上限32767,超出后高位被截断发生"环绕"。思路:先估算取值范围→选DINT/LREAL等合适类型→必要时加溢出判断。

2在恒压供水系统中,若压力传感器反馈值频繁抖动,如何用今天学到的运算指令滤波?

参考答案滑动平均是经典做法:用INC/DEC维护一个采样队列,ADD累加N个值后DIV求均值;也可用移位近似除法降低开销。

3XOR运算能否用于通信数据的奇偶校验?选哪种逻辑运算检测单比特错误最合适?

参考答案可以。XOR的"成对归零"特性天然适合校验:发送侧将数据与种子字节XOR,接收侧再XOR一次,结果非零即判定出错。

22第 22 页 · 课后思考