上次给大家分享了 S7-200 SMART 的开放以太网通信,虽然可以实现 SMART 与第三方设备进行以太网通信,但是很多人始终觉得双边的通信程序书写时较为麻烦,能不能实现单边以太网通信呢?其实 SMART 还支持 Modbus TCP 通信,结合了 TCP 通信和 Modbus RTU 通信的优点,只是编写 Modbus TCP 通信的库并非软件标配的功能,需要另外购买西门子公司开发的库文件,最多包括 8 个客户端库和 8 个服务器库。 1.MB_Client 指令库安装 打开 STEP 7-Micro/WIN SMART V2.2 及以上版本软件,鼠标右键项目树的“库”节点,并从快捷菜单中选择“打开库文件夹”,如图 1-1 所示。 图 1-1 打开库文件夹 1 )将 MB_Client 指令库添加到打开的 STEP 7-Micro/WINSMART 库文件夹中,如图 1-2 所示。 图 1-2 添加 MB_Client 指令库 备注: STEP 7-Micro/WIN SMART 库文件夹一般存储路径为 C:UsersPublicDocumentsSiemensSTEP7-MicroWIN SMARTLib 可以通过软件修改。 关闭 STEP 7-Micro/WIN SMART 库文件夹,然后鼠标右键项目树的 “ 库 ” 节点,并从快捷菜单中选择 “ 刷新库 ” 。刷新后,您可以看见 “MB_Client” 指令库已经被添加到项目树的库节点下,如图 1-3 所示。。 MB_Server 服务器库添加方法类似。。 图 1-3 2. 通信程序编写 有了 Modbus TCP 通信库后,只需要调用库进行编程,使 ModbusTCP 通信程序变得非常简单,首先看客户端程序如何编写: 1 )建立连接,如图 1-4 所示: 图 1-4 建立连接 MBC_Connect 指令各个参数定义如下: · EN 使能:必须保证每一扫描周期都被使能。 · Connect :启动 TCP 连接建立操作。 · Disconnect: 断开 TCP 连接操作。 · ConnID: TCP 连接标识。 注意: Modbus TCP 属于 TCP 通信,也是开放式用户通信中的一种,所以 ConnID 参数不能与其他 TCP 、 ISO-on-TCP 、 UDP 通信相同。 · IPaddr1~IPaddr4: Modbus TCP 客户端的 IP 地址, IPaddr1 是 IP 地址的最高有效字节, IPaddr4 是 IP 地址的最低有效字节。 · RemPort: Modbus TCP 客户端的端口号。 · LocPort :本地设备上端口号。 · ConnectDone : Modbus TCP 连接已经成功建立。 · Busy: 连接操作正在进行时。 · Error: 建立或断开连接时,发生错误。 · Status :如果指令置位“ Error ”输出, Status 输出会显示错误代码。该错误代码为参考开放式用户通信库指令错误代码,具体请参考 STEP 7-Micro/WIN SMART 在线帮助 注意 : 每个 MB_Client 指令库只能创建一个 Mdobus TCP 连接 , 如果一个 S7-200SMART 需要连接多个 Modbus TCP 服务器 , 则需要购买多个名称不同的 MB_Client 指令库 ( 例如 MB_Client_0 , MB_Client_1 , MB_Client_2 , MB_Client_3 ) 2 )读写数据 MBC_MSG ,如图 1-4 所示: 图 1-4 读写数据 MBC_MSG 指令各个参数定义如下: · EN 使能:同一时刻只能有一条 MB_Client_MSG 指令使能, EN 输入参数必须一直接通直到 MB_Client_MSG 指令 Done 位被置 1 。 · First 读写请求:每一条新的读写请求需要使用信号沿触发。 · RW 读写请求:为 0 时,读请求;为 1 时,写请求。开关量输出线圈和保存寄存器支持读请求和写请求,开关量输入触点和模拟量输入通道只支持读请求。 · Addr 读写 Modbus 服务器的 Modbus 地址: 00001 至 0XXXX 为开关量输出线圈; 10001 至 1XXXX 为开关量输入触点; 30001 至 3XXXX 为模拟量输入通道; 40001 至 4XXXX 为保持寄存器。 · Count 读写数据的个数:对于 Modbus 地址 0XXXX 、 1XXXX , Count 按位的个数计算;对于 Modbus 地址 3XXXX 、 4XXXX , Count 按字的个数计算;一个 MB_Client_MSG 指令最多读取或写入 120 个字或 1920 个位数据。 · DataPtr 数据指针:参数 DataPtr 是间接地址指针,指向 CPU 中与读 / 写请求相关的数据的 V 存储器地址。对于读请求, DataPtr 应指向用于存储从 Modbus 服务器读取的数据的第一个 CPU 存储单元。对于写请求, DataPtr 应指向要发送到 Modbus 服务器的数据的第一个 CPU 存储单元。 · Done 完成位:读写功能完成或者出现错误时,该位会自动置 1 。多条 MBC_MSG 指令执行时,可以使用该完成位激活下一条 MBC_MSG 指令的执行。 · Error :错误代码,只有在 Done 位为 1 时错误代码有效。 如下表 1-5 所示: MB_Client错误代码 描述 0 无错误 1 TCP 发送数据错误 2 TCP接收数据错误 3 Modbus 接收响应超时 4 请求参数出错:一个或多个输入参数(“从站”(Slave)、“读写”(RW)、“地址”(Addr) 或“计数”(Count))被设置为非法值。 5 TCP连接未成功建立 6 Modbus 正忙于处理另一请求。 7 Modbus响应出错,接收到的响应与请求不符合。 8 Modbus响应长度校验错误。 101 Modbus 服务器不支持该地址的请求功能。 102 Modbus 服务器不支持数据地址:“地址”(Addr) 加上“计数”(Count) 的请求地址范围超出服务器允许的地址范围。 103 Modbus服务器不支持数据类型:服务器设备不支持“地址”(Addr) 类型。 104 Modbus服务器设备故障 表 1-5MB_Client 错误代码 3 )为 MB_Client 指令库分配库存储器地址。 MB_Client 指令库需要占用 300 个字节 V 存储区用于库存储器地址分配。该库存储器分配地址不能与 MBC_MSG 指令参数 DataPtr 指向的 V 存储器地址重叠,也不能与其它程序使用的地址有重叠,库存储器地址分配过程见图 1-5 所示。 图 1-5 为 MB_Client 分配库存储区 接下来就是服务端程序的编写了: 注意: 每个 MB_Server 指令库只能创建一个 Mdobus TCP 连接,如果一个 S7-200 SMART 需要连接多个 Modbus TCP 客户端,则需要购买多个名称不同的 MB_Server 指令库(例如 MB_Server_0 , MB_Server_1 , MB_Server_2 ) 1 )建立与客户端连接,如图 1-6 所示: 图 1-6 建立与客户端连接 MBS_Connect 指令各个参数定义如下: · EN 使能:必须保证每一扫描周期都被使能。 · Connect :启动 TCP 连接建立操作。 · Disconnect: 断开 TCP 连接操作。 · ConnID: TCP 连接标识。 注意: Modbus TCP 属于 TCP 通信,也是开放式用户通信中的一种,所以 ConnID 参数不能与其他 TCP 、 ISO-on-TCP 、 UDP 通信相同。 · IPaddr1~IPaddr4: Modbus TCP 客户端的 IP 地址, IPaddr1 是 IP 地址的最高有效字节, IPaddr4 是 IP 地址的最低有效字节。如果不指定伙伴 IP ,则可以设置为 0.0.0.0 。 · LocPort :本地设备上端口号 MaxHold: 用于设置 Modbus 地址 4xxxx 或 4yyyyy 可访问的 V 存储器中的字保持寄存器数。 · HoldStart: 间接地址指针,指向 CPU 中 V 存储器中保持寄存器的起始地址,即 40001 从哪个地址开始。 · ConnectDone : Modbus TCP 连接已经成功建立。 · Busy: 连接操作正在进行时。 · Error: 建立或断开连接时,发生错误。 · Status :如果指令置位“ Error ”输出, Status 输出会显示错误代码。 MB_Server 指令库错误代码如表 1-7 所示。 表 1-7 MB_Server 错误代码 2 )收到客户端发来的命令要进行应答,如图 1-8 所示。 图 1-8 服务器应答 3 ) 为 MB_Server 指令库分配库存储器地址。 MB_Server 指令库需要占用 300 个字节 V 存储区用于库存储器地址分配。该库存储器分配地址不能与 MBS_Connect 指令参数 HoadStart 指向的 V 存储器地址重叠,也不能与其它程序使用的地址有重叠,否则可能导致通信故障无法实现通信,库存储器地址分配过程见图 1-9 所示。 图 1-9 为 MB_Server 库分配存储器 耐心看完本文的小伙伴们,恭喜你已经学会了 S7-200SMART 最新推出的 Modbus TCP 通信功能啦,是不是迫不及待的想去测试一下呢?可以联系工控帮美女客服索要原始程序,觉得学有所获记得转发哦! End