1

我正在尝试通过 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(此脚本使用),但我无法将 comm 手册中的内容应用于上面的代码,以正确格式化数据包。

4

2 回答 2

3

你说的是原始数据吗?有几种方法,包括

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-06-30T07:39:08.020 回答
0

我建议您查看RModBus库,以帮助处理 Ruby 语言内部通过 TCP/IP 形成数据包的一些复杂问题。

您正在与之通信的设备总是可能需要或相反地避免使用 modicon 表示法。当我第一次尝试从 PLC 读取寄存器时,这有点小问题。我在 Modbus 中发现的另一个“陷阱”是一些寻址系统由于其实现的怪异而被偏移了一个。

于 2010-08-07T23:57:38.320 回答