S7-200 SMART GET/PUT 指令深度解析:从参数到故障排查(S7 协议的客户端 - 服务器通信)下
五、完整实战:两台 PLC 的数据交换案例
以 “生产线本地 PLC(192.168.2.10)与远程 PLC(192.168.2.20)数据交换” 为例,写完整程序逻辑:
需求
- GET:本地读取远程 VB100(产量计数,2 字节)、VB102(设备状态,1 字节),存到本地 VB200、VB202
- PUT:本地把 VB300(启停指令,1 字节)、VB301(设定值,2 字节),写到远程 VB400、VB401
- 定时 1 秒触发(避免连续触发),并监控通信状态
程序编写(LAD 梯形图)
Network 1:初始化(首次扫描清空缓冲区)
Network 2:定时 1 秒触发(用 SM0.5 上升沿)
Network 3:GET 指令配置与执行
LD M0.0 // 触发标志 配置TABLE参数(VB0为GET参数表起始) 远程IP第一段192 第二段168 第三段2 第四段20(远程IP:192.168.2.20) 数据长度3字节(VB100+VB101+VB102) 远程指针:VB100 本地指针:VB200 执行GET指令 复位触发标志 |
Network 4:PUT 指令配置与执行
1秒脉冲 下降沿触发(与GET错开,避免冲突) 配置TABLE参数(VB20为PUT参数表起始) 远程IP同上 数据长度3字节(VB400+VB401+VB402) 远程指针:VB400 MOVD &VB300, VD34 // 本地指针:VB300 PUT VB20 // 执行PUT指令 |
Network 5:通信状态监控(报警灯控制)
// GET错误监控 VB0.5 // GET错误位(E=1) // PUT错误监控 VB20.5 // PUT错误位(E=1) = Q0.0 // 错误时Q0.0报警灯亮 |
六、常见问题 Q&A(现场踩坑总结)
- Q:GET 指令触发后,VB0.7(完成位)一直不置 1,为什么?
A:先查错误代码:
- 若错误代码 0x0500:ping 远程 IP,看网口是否松动;若无错误代码:检查触发方式(别用 SM0.0 连续触发,用上升沿),或调整后台通信时间。
- Q:同一 IP 的 3 个 GET 指令,为什么偶尔会有 1 个失败?
A:同一 IP 共用 1 个连接,指令会 “排队执行”,若后台通信时间不够,会导致部分指令超时。解决:把后台通信时间从 10ms 改成 30ms 以上。
- Q:远程 PLC 在 RUN 模式,写 Q 区报错误代码 0x0400,怎么回事?
A:S7-200 SMART 的 Q 区默认 “STOP 模式写保护”,但 RUN 模式下若 Q 区被其他程序占用(如强制输出),也会写保护。解决:改写远程 V 区,远程 PLC 再用 V 区控制 Q 区。
最后
GET/PUT 指令看似简单,实则细节决定成败 —— 参数表的 16 个字节、8 个连接限制、错误代码的解读,每一步都要扣准。如果你的现场遇到 GET/PUT 通信问题,不妨按 “查错误代码→核参数→看连接数” 的步骤排查,基本都能解决。如果还有特殊场景(比如跨网段通信),欢迎在评论区留言,咱们一起拆解!