作者 | 主题 |
---|---|
yanxiao 版主 经验值:25980 发帖数:11805 精华帖:43 |
楼主 2023-04-11 20:36:04
主题:串口服务器 Modbus-RTU 主站库 (基于OUC之UDP协议) 注:网页排版不整齐,以下内容在库指令内可见。 对 不欲 大侠发现的功能15问题,已改进,附件重新上传。 Modbus-RTU 主站模式网关 V1.0 利用以太网串口服务器,构建Modbus-RTU串口通讯。 使用开放式通信(OUC)中的UDP协议。 在CPU固件V2.7中测试通过。 串口服务器工作于UDP模式,IP地址、端口与库程序匹配。 每周期调用一次即可,必须包括第1个扫描周期。 对于扫描周期较长的程序,为了提高通讯响应速度, 可以在程序的适当地方,均匀分布地多次调用。 多次调用时,保持调用参数一致不变。 在启动轮询(ST=1)前,轮询参数块必须已建好。 1、指令调用(LAD) 2、调用参数定义: ST: 1=启动轮询。 ID: 网络连接ID,独一无二。 RIP:远端IP地址,4字节长整数 例:192.168.2.200=16#C0A802C8 RPort:远端端口 LPort:本地端口,按手册建议取值。 DPTR: 主站轮询参数块地址指针。 N: 参数块数量。 3、轮询参数块定义: 参数块顺序存放,程序自动循环轮询。 偏移 定义 0000:状态字节,D 0 E ErrCode 0001:控制字节,BIT0=REQ, BIT7=REP REQ=1参与轮询,0则不参与。 若REP=0则轮询一次后自复位。 对于按需只写一次的,REP=0 不会造成重复写入。 0002:字节,通讯成功计次,循环递增 0003:字节,通讯失败计次,循环递增 0004:字节,从站通讯地址(Addr) 程序不作合法性检查。 0005:字节,Modbus功能码(Func) 支持的功能:01/02/03/04/05/06/15/16 功能码定义,请参考Modbus-RTU协议文本。 0006:16位整数,从站数据起始地址(Start) 数据地址不带数据类型 例:保持寄存器40001,地址=0 0008:16位整数,读写数据量(Count) 离散量:最大1920个点 整形量:最大120个WORD 0010:16位整数,通讯超时设置,ms 从询问帧开始发送至返回帧接收完毕的 最大可能时间,应根据通讯数据量大小 具体计算,一般可取100ms先测试。 0012:32位指针,本地V区数据存放缓冲区指针 务必正确设置指针,不然可能乱指破坏 其它数据。并且应当留有足够的缓冲空 间容纳收、发的数据。 4、错误码(状态字节中的ErrCode编码): 1~15:从站响应的错误代码 从站返回错误码请参考Modbus协议文本。 16:返回帧CRC校验错误 17:返回帧地址或功能码不匹配 18:返回帧格式错误 19:从站响应超时 20:生成通讯帧失败(非法参数) 5、关于Modbus-RTU帧间隔定时 帧间隔定时由串口服务器设置,要求大于3.5字节收发宽度。 建议先设置10ms的间隔测试,成功之再测试其它值。 6、其它: 库指令内存的首字节(MG100_Stat)为UDP TCON 的连接状态,正常情况应为16#80,表示无错误。 该状态字节请参考手册中TCON指令部分。 发现非正常状况,可反馈给作者,以便改进提高。 Note: 1、使用:AC0、AC1、AC2、AC3 2、占用一个UDP连接资源。 3、库程序大小约950字节,库内存约290字节。 Siemens S7200 Smart版区 https://www.ad.siemens.com.cn/club/bbs/ 版本维护:yanxiao(版主) 声明: 版权归作者所有,免费使用与扩散,但请保持程序完整。 使用者自行测试评估本库程序是否适用于其编写的控制程序, 作者不承担使用本库程序所带来的风险与损失。 2023.4.12 |