我正在尝试通过modbusTCP或modbus串行与modbus从站通信。手册。(partlow)有一本ASCII码通信手册(http://www.partlow.com/uploadedFiles/Downloads/1160%20ASCII%20Comms%20Manual.pdf),看起来与标准通信方法(http://en.wikipedia.org/wiki/Modbus)不同。许多现有的代码被设置为使用线圈的正常modbus寻址等等,这似乎(至少在我看来)与这些家伙不同。
那么,通过ruby或perl,我如何发送十六进制数据呢?我可能什么都做得很好,但是,如果我把"0DFA“写到一个串口...这样可以吗?或者我需要先将它转换成一个较低的层,或者以某种方式表示它?
我在这方面做了很多工作,可能把自己搞混了(让事情比他们更复杂),但是,我正在尝试与这个仪表建立通信,我可以看到TX活动指示灯闪烁,但没有RX,这意味着我的数据格式是错误的……
我主要从事这方面的工作(以及一些perl片段,试图找到一些有用的东西):http://www.messen-und-deuten.de/modbus.html
我通过终端服务器进行通信,该服务器接受modbusTCP (此脚本使用它),但我在将通信手册中的内容应用于上面的代码时遇到了问题,无法正确格式化数据包。
发布于 2010-06-30 15:39:08
你是在说原始数据吗?有几种方法,包括
print HANDLE "\x{OD}\x{FA}";
printf HANDLE "%c%c", 0x0D, 0xFA;
print HANDLE "\015\372"; # octal notation
print HANDLE pack("C*", 0x0D, 0xFA);
syswrite HANDLE, "\x{OD}\x{FA}", 2;
发布于 2010-08-08 07:57:38
我建议您查看Ruby库,以帮助处理在RModBus语言内部通过TCP/IP形成数据包的一些错综复杂的问题。
你与之通信的设备总是有可能需要,或者相反,避免使用modicon符号。当我第一次尝试从PLC读取寄存器时,这是一个小问题。我发现Modbus的另一个“陷阱”是,一些寻址系统由于其实现中的奇特之处而偏移了一个。
https://stackoverflow.com/questions/3146364
复制相似问题