[西门子] S7-200 SMART 系列 PLC 的 Modbus 通信实战攻略(附程序)

[复制链接]
查看49 | 回复0 | 3 天前 | 显示全部楼层 |阅读模式
一、 导读


Modbus通信是应用极为广泛的通信协议,在变频器、智能仪表及众多智能设备上都有使用 。


西门子S7-200 SMART系列PLC既能充当Modbus主站,也能作为Modbus从站。


本文将通过S7-200 SMART间的Modbus通信,为大家详细分享S7-200 SMART作为Modbus主站与从站的应用实例。


 具体设定为:采用两个不同型号的PLC,ST40作为Modbus主站,ST20作为Modbus从站,通过Modbus通信协议实现数据交换,交换内容如下: 

  1. 主站PLC的输入IB0用以控制从站PLC的输出QB0。

  2.  从站PLC的输入IB0反过来控制主站PLC的输出QB0。

  3. 从站PLC的模拟量地址AIW12的数据会传输至主站PLC的VW100,以便后续运算。

  4. 主站PLC中的VD200的数据将被写入从站PLC的MD10。


二、地址对应关系与所支持的功能码


在 Modbus 通信体系中,PLC 作为从站时,其地址与 Modbus 寄存器地址的对应关系尤为关键。


Modbus 寄存器地址常见形式为 0XXXX、1XXXX、3XXXX 和 4XXXX 。


当 PLC 充当 Modbus 从站角色,就必须精准建立 PLC 地址与 Modbus 寄存器地址间的映射,确保数据传输准确无误

在 S7-200 SMART CPU 的 Modbus 通信中,T 代表缓冲区起始地址,由指令中的 HoldStart 指定,比如设定为 & VB100 。


此时,Modbus 地址 40001 对应的数据地址就是 VW100 。


经总结可得 Modbus 地址的计算公式:Modbus 地址 = 40000+((地址 - T)/2+1) 。


举例来说,若 T 为 & VB100,要计算 VW110 对应的 Modbus 地址,代入公式可得:40000+(110 - 100)/2+1 = 40006 。


S7 - 200 SMART 作为 MODBUS 从站可支持的功能码


将 S7-200 SMART 系列 PLC 用作 Modbus 从站时,其能够支持的 Modbus 功能码如下

三、主从站程序的编写


1 :硬件接口
两款 PLC 选用本体集成的通信口来搭建通信连接。连接硬件有两种选择,既可以采用 DB9 针公接头,也能选用西门子的 PROFIBUS - DP 接头。若选用 DB9 针公接头,连接方式如下:

    

2:主站PLC程序
于主站 PLC 内,需精准调用主站通信指令,严格按照 Modbus 通信协议规范,完成对数据读写、校验等关键功能的程序架构设计,从而搭建起完整且稳定的主站通信程序,确保数据交互的高效性与准确性

    

    

3:从站PLC程序

着手从站 PLC 程序编写,需先调用从站初始化指令。其间,要细致设置通信波特率、从站站号、奇偶校验位,同时明确 V 存储器的通信区域大小与起始地址。


特别注意,这些相关参数的设置务必与主站所设参数完全一致,以保障主从站间通信的顺畅与稳定

  在从站 PLC 程序编写环节,调用从站初始化指令完成基础设置后,需进一步调用从站中的响应请求指令,以此编写针对主站请求的响应程序。


具体而言,要实现将主站写入到 Modbus 地址 40001 和 40002 的数据,精准转存至从站的 MW10 和 MW12 存储单元。


在编写该程序时,需依据 Modbus 通信协议,严谨规划数据读取、地址匹配以及存储操作流程,确保从站能够准确响应主站请求,高效完成数据转存任务,维持主从站通信的流畅与数据交互的准确性    

Modbus 从站程序要点总结:


1.地址读写规则:通信时,对线圈地址的读写以及对离散输入地址的读操作,个位应选用 8 的整数倍。


2.存储区地址指定:从站指令中指定对应 4XXXX 的地址时,仅能选用 V 存储区地址,无法指定 M 存储区地址。若需读写 M 地址,要先转存至 V 存储器。


3.经济型 CPU 特殊设置:若作为 Modbus 从站的 CPU 是经济型的,因其不支持扩展功能,没有模拟量输入通道,所以在 MBUS_INIT 指令中,MaxAI 需设为 0,否则通信会出错。


4.MaxHold 参数含义:MBUS_INIT 指令中的 MaxHold 用于确定 V 存储区通信区域的大小,以字为单位计算。例如,若设置为 10,则表示通信区域大小为 10 个字。


5.指令使能要求:MBUS_INIT 指令的使能端 EN,只需接通一个扫描周期,通常用 SM0.1 使能;而 MBUS_SLAVE 指令必须在每个扫描周期都接通,才能响应主站请求。


6.库指令存储区分配:无论是从站库指令还是主站库指令,编写完成后都要为库指令分配存储区,具体分配方法可参考任务二。需注意,分配的存储区不可在程序其他地方使用,尤其是不能与 V 存储器通信区域重复。


7.错误排查与解决:不少技术人员易犯错误,当 MBUS_SLAVE 指令的 Error 报错误代码 10,提示从站功能未启用,即便检查初始化指令发现 Mode 管脚已设为 1,问题常出在库存储器分配的地址被其他地方占用,重新分配库存储器地址即可解决。 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则