R-C
一 | s7=200 smart Modbus 通讯简介 |
在上期Modbus主站通讯通知中,介绍了Modbus相关介绍,本篇不过多关注Modbus本身,主要讲如何将S7-200 samrt作为从站使用的相关配置。
s7-200 samrt 通常情况下是用作主站使用,来采集现场仪表、传感器等的485信号,但西门子s7-200 samrt 同时又支持作为从站使用(通信板和COM1口,同一时间仅支持作为主站或从站),多用于作为数据转发站点存在,随着越来越多的MES、I4.0项目上线,s7-200 smart 作为从站的需求也越来越多。本期内容教你如何使用西门子标准库组态配置Modbus从站;
二 | s7-200 Modbus RTU 从站指令库 |
西门子在 STEP 7-Micro/WIN SMART 中已经集成了 Modbus RTU 从站协议库(西门子标准库指令)库中应当包括MBUS_INIT和MBUS_SLAVE两个子程序。使用 Modbus RTU 从站指令库,可以将PLC内数据以Modbus 协议形式传输至上位机系统。
image-20240319161300097
三 | s7-200 Modbus RTU 从站配置步骤 |
1. 从站指令初始化
使用SM0.1调用子程序MBUS_INIT进行从站参数初始化,注意:SM0.1仅在第一个扫描周期执行,因此Modbus RTU 从站参数无法在线修改,每次修改完成必须重启CPU;
image-20240319165710113
各参数意义:
Mode | 模式选择 | 启动/停止Modbus,1=启动;0=停止 |
Addr | 从站地址 | Modbus从站地址,取值1~247 |
Baud | 波特率 | 可选1200,2400,4800,9600,19200,38400,57600,115200 |
Parity | 奇偶校验 | 0=无校验; 1=奇校验; 2=偶校验 |
Port | 端口 | 0=CPU中集成的 RS-485 1=可选信号板上的RS-485 或 RS-232。 |
Delay | 延时 | 附加字符间延时,缺省值为0 |
MaxIQ | 最大I/Q位 | 参与通信的最大I/O点数,S7-200 SMART 的I/O映像区为256/256(但目前只能最多连接4个扩展模块,因此目前最多I/O点数为188/188) |
MaxAI | 最大AI字数 | 参与通信的最大AI通道数,最多56个 |
MaxHold | 最大保持寄存器区 | 参与通信的V存储区字(VW) |
HoldStart | 保持寄存器区起始地址 | 以&VBx指定(间接寻址方式) |
Done | 初始化完成标志 | 成功初始化后置1 |
Error | 初始化错误代码 | 0=无错误 1=存储器范围错误 2=波特率或奇偶校验非法 3=从站地址非法 4=Modbus参数值非法 5=保持寄存器与Modbus从站符号重叠6=收到奇偶校验错误 7=收到CRC错误 8=功能请求非法 9=请求中的存储器地址非法 10=从站功能未启用 11=端口无效 12=信号板端口1缺失或未组态 |
2.调用从站指令初
使用SM0.0调用MBUS_SLAVE指,由于Modbus通讯从站不能主动发起数据传输,只有等待主站轮询,因此需要使用SM0.0一直执行;
image-20240319171337333
各参数意义:
Done | 从站指令响应状态 | 当 MBUS_SLAVE 指令响应 Modbus 请求时,“完成”(Done) 输出接通。 如果未处理任何请求,“完成”(Done) 输出关闭。 |
Error | 输出包含指令的执行结果 | 仅当“完成”(Done) 接通时,该输出才有效。如果“完成”(Done) 关闭,则错误参数不会改变。 |
四 | 在CPU的V数据区中分配库指令数据块 |
Modbus Slave 指令库需要一个781个字节的全局 V 存储区。
调用STEP 7 - Mciro/WIN SMART Instruction Library(指令库)需要分配库指令数据区(Library Memory)。库指令数据区是相应库的子程序和中断程序所要用到的变量存储空间。
如果在编程时不分配库指令数据区,编译时会产生许多相同的错误。
操作步骤:
在指令树的Project(项目)中,以鼠标右键单击Program Block(程序块),在弹出的快捷菜单中选择Library Memory。
image-20240318142619164在弹出的选项卡中设置库指令数据区,可以自己填地址,也可选择建议地址自动分配;注意:分配后的地址,不能再用在其他程序中;
image-20240318143740235配置结束,下载程序即可进行通讯测试;
五 | Modbus RTU 从站指令库支持的 Modbus 功能码 |
1 | 读取单个/多个线圈(离散量输出点)状态。 功能 1 返回任意个数输出点(Q)的 ON/OFF 状态。 |
2 | 读取单个/多个触点(离散量输入点)状态。 功能 2 返回任意个数输入点(I)的 ON/OFF 状态。 |
3 | 读取单个/多个保持寄存器。功能 3 返回 V 存储区的内容。在 Modbus 协议下保持寄存器都是“字”值,在一次请求中可以读取最多 120 个字的数据。 |
4 | 读取单个/多个输入寄存器。功能 4 返回 S7-200 SMART CPU 的模拟量数据值。 |
5 | 写单个线圈(离散量输出点)。功能 5 用于将离散量输出点设置为指定的值。这个点不是被强制的,用户程序可以覆盖 Modbus 通信请求写入的值。 |
6 | 写单个保持寄存器。功能 6 写一个值到 S7-200 SMART 的 V 存储区的保持寄存器中。 |
15 | 写多个线圈(离散量输出点)。功能 15 把多个离散量输出点的值写到 S7-200 SMART CPU 的输出映像寄存器(Q 区)。输出点的地址必须以字节边界起始(如 Q0.0 或 Q2.0),并且输出点的数目必须是 8 的整数倍。这是此 Modbus RTU 从站指令库的限制。些点不是被强制的,用户程序可以覆盖 Modbus 通信请求写入的值。 |
16 | 些多个保持寄存器。功能 16 写多个值到 S7-200 SMART CPU 的 V 存储区的保持寄存器中。在一次请求中可以写最多 120 个字的数据。 |