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 経由で 16 進データを送信するにはどうすればよいでしょうか。うまくいっているのかもしれませんが、シリアルポートに「0DFA」と書き込んでしまうと……大丈夫ですか?または、最初に下位レイヤーに変換する必要がありますか、それとも何らかの方法でそれを示す必要がありますか?

これに多くの作業を行っていて、自分自身が混乱している可能性があります (物事を実際よりも複雑にするため)。しかし、私はこのメーターで通信を確立しようとしています。TX アクティビティ ライトが点滅しているのに RX が表示されていません。私のデータ形式が間違っていることを意味します...

ほとんどこれに取り組んでいます(そして、いくつかのperlスニペットがあちこちにあり、機能するものを見つけようとしています): http://www.messen-und-deuten.de/modbus.html

modbusTCP(このスクリプトが使用する)を受け入れるターミナルサーバーを介して通信していますが、通信マニュアルの内容を上記のコードに適用して、パケットを正しくフォーマットするのに問題があります。

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 で見つけたもう 1 つの「落とし穴」は、一部のアドレス指定システムが、実装の奇抜さのために 1 つオフセットされていることです。

于 2010-08-07T23:57:38.320 に答える