dyysam513
级别: 略有小成
精华主题: 0
发帖数量: 228 个
工控威望: 272 点
下载积分: 4163 分
在线时间: 95(小时)
注册时间: 2015-05-21
最后登录: 2024-12-11
查看dyysam513的 主题 / 回贴
楼主  发表于: 2024-03-18 14:22
有台1200跟众为兴做标准modbus TCP/IP协议,现在一直连接不上,请高手帮忙看下是不是设置不对?我需要往众为兴地址60401里面写数据进去。




    
sjm213
有小知识,无大学问。
级别: 论坛版主

精华主题: 7 篇
发帖数量: 5212 个
工控威望: 7436 点
下载积分: 158953 分
在线时间: 3171(小时)
注册时间: 2007-11-21
最后登录: 2024-12-19
查看sjm213的 主题 / 回贴
1楼  发表于: 2024-04-02 16:55
注意:

对于一般的支持 Modbus TCP 设备,可能无法在其设备手册中查找到诸如 40001、30001 这种数据地址,而是以功能码 + 十六进制数形式的变量地址,这样有两种处理办法:

方法 1:将功能码 + 100 作为 MB_MODE,十六进制地址数转化为十进制数作为 MB_DATA_ADDR。例如 0x03 功能码,地址 0x00FF,这样就是 MB_MODE = 103, MB_DATA_ADDR = 255。

方法 2:通过判断功能码决定是读是写,决定 MB_MODE 为 0 读还是 1 写(2 写比较特殊,只用于不支持 5、6 号功能码的设备),然后将十六进制地址数转化为十进制数,然后对于不同的功能码,十进制数增加不同的偏移量,对于功能码 1、5、15 偏移量为 1,对于功能码 2 偏移量为 10001,对于功能码 3、6、16 偏移量为 40001(对于超过 9999 的地址,偏移量为 400001),对于功能码 4 偏移量为 30001。同样以 0x03 功能码,地址 0x00FF 为例,因为是读,所以 MB_MODE = 0, 0x00FF 转换为十进制为 255,加上偏移量 40001 就是 40256,这样 MB_DATA_ADDR = 40256。