有谁做过modbustcp 为什么我通过 sendToClient发给客户端的内容是16进制 客户端收到以后就变了呢?

woshi66

有谁做过modbustcp 为什么我通过 sendToClient发给客户端的内容是16进制 客户端收到以后就变了呢?有做过 modbustcp 工业物联的大神能不能指点一下 有偿请教

1288 3 0
3个回答

yongdao35

你怎么发送的16进制?客户端收到后变成啥了?代码怎么写的。
你把问题说清楚,不然别人怎么给你看?

  • woshi66 2021-03-22

    非常感谢!搞定了 转换进制搞错了!目前能正常跑了

woshi66

我详细说一下目前一个网络io设备 wif版的 是用modbustcp协议传输 我建立了tcp的监听 可以接收到设备发上来的 消息 我通过 bin2hex 转16进制 可以拿到 00 00 00 00 00 04 01 02 01 00 我解析后可以拿到对应数值 相当于通道已经建立 设备的 通道 Clientid 我存下来了 现在上位机需要发送控制码给设备 00 01 00 00 00 08 01 0F 00 64 00 02 01 01 我把指令直接通过 sendToClient 发给客户端的时候 接收到的是如果原封不动的发送过应该就行了 但是收到的是 30 30 20 30 31 20 30 30 20 30 30 20 30 30 20 30 38 20 30 31 20 30 46 20 30 30 20 36 34 20 30 30 20 30 32 20 30 31 20 30 31 如果我把命令转成16进制再发送接收到的是 01 08 01 0f 64 02 01 01 我没搞明白我应该怎么解析 或者怎么传输 望大神们指点

  • 不败少龙 2021-03-22

    大神 workerman是怎么监听的modbustcp协议

  • woshi66 2021-03-22

    我们都理解错了 tcp 是tcp modbus协议是协议 你不用管协议的事情 对应控制码能发到指定客户端就行了 我也是走到误区好久

  • woshi66 2021-03-22

    总之最终走的都是tcp

  • 不败少龙 2021-03-22

    workerman这边还是发送的tcp的吗 不用管modbus协议吗?能贴一下你写的代码吗?

  • woshi66 2021-03-22

    不同的设备控制码不一样,接收和发送用workerman modbus协议 没啥研究的 对应上就完事了

  • 不败少龙 2021-03-22

    是workerman自定义协议modbus 去处理吗?

  • woshi66 2021-03-24

    不要纠结协议啊 发送16进制就可以了 干嘛要纠结协议 协议也基于tcp不是嘛

woshi66

附一个转换进制方法

for ($i=0; $i < strlen($hex)-1; $i+=2){
$string .= chr(hexdec($hex[$i].$hex[$i+1]));
}

  • 暂无评论
年代过于久远,无法发表回答
🔝