S7200PLC整数加法指令详解ADDDI指令使用技巧常见错误避坑指南
at 2026.03.29 09:17 ca 设备销售区 pv 1664 by 工控设备哥
S7200PLC整数加法指令详解 | ADDDI指令使用技巧+常见错误避坑指南
🔥工控编程必看!S7200系列PLC整数加法指令ADDDI全
📌适用场景:S7-1200/1500/200/300系列编程
📅更新日期:11月(最新版)
💡一、指令速查表(收藏备用)
| 指令类型 | ADDDI(有符号整数加法) |
|----------|------------------------|
| 操作数 | 16位整数(DB/MB/EB) |
| 结果类型 | 32位整数 |
| 格式 | [目标] ADDDI [源1] [源2] |
| 执行时间 | 1.5μs(S7-1200) |
🚀二、指令核心(重点章节)
1️⃣ 指令本质:双操作数带进位加法
✅运算公式:目标=源1+源2+进位标志
✅进位标志:S7-1200默认使用R0寄存器
✅溢出处理:自动截断32位结果(-2^31~2^31-1)
2️⃣ 参数说明(图文对照)
📸图1:典型指令应用示例
DB10.DW0 ADDDI MB20 DB30.DW2
→ DB10.DW0 = MB20 + DB30.DW2 + R0
3️⃣ 执行流程(四步法)
① 源1数据读取
② 源2数据读取
③ 进位标志校验
④ 结果存储及进位更新
🛠️三、8大应用场景(附案例)
场景1:电机脉冲计数累加
案例:SM0.1触发时,累加器累加10脉冲
梯形图:
SM0.1 ADDDI V1.5 DB0.DW0
V1.5 DB0.DW0 → 脉冲总数
场景2:温度PID调节
案例:实时温度+设定值补偿
梯形图:
MB10 ADDDI MB11 DB2.DW0
DB2.DW0 → 新温度值
场景3:物料重量累计
案例:称重传感器数据累加
梯形图:
DB100.DW10 ADDDI MB50 DB200.DW5
DB200.DW5 → 总重量
场景4:物料计数器
案例:每扫描周期+1
梯形图:
MB100 ADDDI MB100 1
MB100 → 当前数量
场景5:时间累计计算

案例:累计运行时间(单位:秒)
梯形图:
DB30.DW2 ADDDI T1+DB30.DW0
T1 → 定时器当前值
场景6:压力补偿计算
案例:实时压力+基准值
梯形图:
MB20 ADDDI MB21 DB50.DW10
DB50.DW10 → 校准压力
场景7:流量累计
案例:瞬时流量累计
梯形图:
DB60.DW20 ADDDI MB30 DB70.DW5
DB70.DW5 → 累计流量
场景8:故障代码累加
案例:错误代码累加
梯形图:
DB100.DW10 ADDDI MB50 DB200.DW5
DB200.DW5 → 总错误次数
🆘四、常见错误排查指南
1️⃣ 溢出错误(OVRFLW)
✅原因:32位结果超出范围
✅解决:改用双字运算(ADDW)或分步计算
✅示例:
错误代码:DB10.DW0 = 2^31 → 0x80000000
正确方法:拆分为两个16位加法
2️⃣ 进位标志冲突
✅问题:R0寄存器被其他程序修改
✅解决:使用独立进位标志
✅示例:
R1.0 ADDB R1.1 → 初始化进位
DB20.DW0 ADDDI MB30 DB40.DW2 (R1.0)
3️⃣ 数据类型不匹配
✅典型错误:字节操作数使用双字指令
✅解决:统一数据类型
✅示例:
错误:DB5.B0 ADDDI MB10 DB20.DW2
正确:DB5.DW0 ADDDI MB10 DB20.DW2
4️⃣ 扫描周期干扰
✅问题:高频脉冲导致数据丢失
✅解决:增加保持寄存器
✅示例:
DB100.DW0 ADDDI MB50 DB200.DW5 → 每周期累加
DB100.DW0 → 保留当前周期值
5️⃣ 互锁冲突
✅典型错误:多个程序同时修改寄存器
✅解决:使用互锁位控制
✅示例:
SM0.1 ADDDI MB10 DB20.DW2
SM0.2 → 互锁位(仅允许一个程序执行)
🔧五、进阶调试技巧
1️⃣ 数据监控技巧
✅方法:使用TIA Portal监控表
✅步骤:
① 添加变量监控
② 设置刷新周期(建议1ms)
③ 查看实时运算结果
✅原则:减少数据搬运次数
✅示例:
DB10.DW0 ADDDI MB20 DB30.DW2
DB10.DW0 → 32位操作
MB20 ADDDI DB30.DW2 → 直接运算
DB10.DW0 → 保存结果
3️⃣ 故障诊断技巧
✅方法:使用强制功能
✅步骤:
① 强制源1为特定值
② 强制源2为特定值
③ 观察目标值变化
4️⃣ 安全防护技巧
✅建议:设置数据校验
✅示例:
DB100.DW0 ADDDI MB50 DB200.DW5
→ 添加校验位DB100.B0 = MB50.B0 XOR DB200.B0
📌六、注意事项清单
1️⃣ 进位标志初始化
✅每次程序启动需重置
✅推荐方法:R0.0 = 1(启动时清零)
2️⃣ 数据类型转换
✅16→32位转换公式:
目标 = 源1 + 源2 + 进位
✅32→16位转换公式:
目标 = (源1 + 源2) & 0xFFFF
3️⃣ 扫描周期影响
✅建议:保持寄存器周期≥100ms
✅示例:DB100.DW0 → 每100ms更新
4️⃣ 硬件限制
✅S7-1200最大32个双字寄存器
✅S7-1500最大512个双字寄存器
5️⃣ 安全编码原则

✅关键运算添加互锁
✅重要数据双备份
✅使用全局变量(GB)
📚七、学习资源推荐
1️⃣ 官方手册:
《S7-1200/1500系统手册》第7章
《S7-1200/1500编程手册》第5章
2️⃣ 在线课程:
西门子官方PLC编程课程(含ADDDI专项)
B站「工业自动化小课堂」系列
3️⃣ 工具软件:
TIA Portal V16+(最新版)
WinCC Advanced监控软件
4️⃣ 论坛交流:
西门子PLC技术论坛
工业自动化工程师社区
💡八、未来趋势展望
- 支持多寄存器操作
- 增加溢出自动处理功能
2️⃣ 工控升级建议:
- 逐步迁移至S7-1500系列
- 采用Profinet通信协议
3️⃣ 编程工具改进:
- 集成AI调试助手
- 支持云平台远程监控
📌九、(关键知识点回顾)
1️⃣ 指令本质:带进位的双操作数加法
2️⃣ 执行时间:1.5μs(S7-1200)
3️⃣ 溢出处理:自动截断32位结果
4️⃣ 进位标志:R0寄存器(需初始化)
5️⃣ 应用场景:累计计算、补偿计算等
🔑十、终极技巧包(限时获取)
回复「ADDDI秘籍」获取:
1. S7-1200/1500指令对照表(PDF)
2. 常见错误代码手册(Excel)
3. 典型应用案例库(含视频演示)
4. 调试快捷键大全(图文版)