問題タブ [modbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
667 参照

c# - マルチスレッドシリアルポート

シリアルポートでマルチスレッドしようとしています。Xシリアルポートがあるとしましょう。各ポートにはY個のデバイス(modbus)があり、各デバイスからデータを取り出しています。デバイスからデータを取り出すには、メッセージを送信して応答を待つ必要があります。アプリケーションを高速化したいので、マルチスレッドにしたいと思います。

1 つのシリアル ポートで複数のメッセージを送信して待機することはできますか?

よろしく
ダニエル

0 投票する
1 に答える
1093 参照

c++ - ベクトルを const uint16_t * タイプに変換

カスタム プロジェクトに libmodbus を使用したいと考えています。すべてが事前定義された静的値で正常に機能しますが、動的に事前定義された 4 番目のパラメーターで modbus_write_registers 関数を使用することはできませんconst uint16_t *'src'

実際には、取得した DB 値をそのような種類の型に変換する必要がありますが、方法がわかりません。

ヒントはありますか?

0 投票する
3 に答える
7316 参照

php - 毎秒データを表示し、毎分書き込む方法は?

私はPHPが初めてで、PHPModbusライブラリを使用してmodbusデバイスからデータを取得するPHPコードを書いています。毎秒データを表示し、毎分データを CSV ファイルに書き込むことができる必要があります。

  • header('Refresh:1') を使用して毎秒ページを更新しました。
  • パラメータに応じて float または int に変換する raw バイトとしてデータを取得します。
  • 次に、データを配列 'energymeter_param' に保存し、配列の内容を爆破して、60 秒ごとに CSV ファイル log.csv に書き込みたい文字列を取得します。
  • 私のコードを読むと、秒の値が 0 になるたびに file_put_contents() 関数を呼び出していることがわかります [if(date('s') == 0)]。
  • ただし、ページを更新しているときに、時間が HH:MM:59 から HH:MM:01 に直接スキップされることがあるため、その分のログ ファイルのデータが失われます。

どうすればこれを克服できますか?

0 投票する
1 に答える
947 参照

c# - ブラウザを使用して modbus コマンドを送信する

ModbusRTU を使用するハードウェアがいくつかあります。ModbusRTU の TCP/IP ゲートウェイを使用して、TCP/IP 経由で C# アプリケーションを使用してハードウェアを制御できるようになりました。これは機能します。

今、私は私のアンドロイド携帯電話でそれを制御したいと思います. はい、Android アプリを作成することはできますが、私にとっては問題ないはずですが、Web ブラウザーで修正できるように、自分にとってより特別なものにしたいと考えています。そうすれば、他のOSも問題ないはずなので、さらに柔軟になります。

Web ブラウザーを使用してハードウェアを制御したい場合、どこから調べればよいか興味があります。プログラミング言語、サーバー要件は何ですか。私は Web ブラウザ プログラミングの経験がほとんどありませんが、ぜひ習得したいと思っています。PHP / Ajax を使用して非常に単純なことを行いました。

参考までに、ModbusTCP パックは非常にシンプルです。私は自宅で一部のライトのオン/オフ/調光を制御し、一部の機器を有効にするだけです。

0 投票する
0 に答える
624 参照

java - TCP スレーブの応答

jamod ページの例では、WriteMultipleRegisters (fc16) 要求を受け入れて適切な応答を送信する TCP スレーブを作成しようとしています。コード:

このコードを使用すると、リクエストを取得できます (これらの 200 のレジスタに書き込みます) が、なぜ応答を送信しなかったのか疑問に思っています。

0 投票する
1 に答える
9190 参照

python - MODBUSスレーブとして機能するPythonコードを探しています

MODBUSスレーブとして機能する使いやすいPythonプログラムを知っている人はいますか? MODBUS マスターとの統合テストを行う必要があります。コードは、シリアルまたは TCP 用です。

TY、フレッド

0 投票する
1 に答える
2924 参照

c# - Modbus カスタム メッセージとサブ関数 (NModbus、TCP、サブ関数)

C# プロジェクトで NModbus を使用して、多数の I/O デバイスとの間で Modbus データを読み書きしています。プログラムで Modbus TCP/IP プロトコル (ModbusIpMaster など) を使用しています。

(Modbus ゲートウェイ経由で) デバイスとの通信に成功し、既定のメソッド (例: ReadHoldingRegisters、WriteCoils などの一般的な Modbus 関数) を使用して、デバイスからデータにアクセスし、デバイスに書き戻すことができます。現時点でできることは、一般的に使用される Modbus コード (1、2、3、4 など) を公開するデフォルトの NModbus メソッドだけです。

私には2つの問題があります:

1) I/O デバイスの設定と追加情報には、Modbus コード 70 (0x46) でアクセスできます。また、設定を読み書きするために使用する必要があるサブ機能があります

たとえば、Func 07 (0x46)、Sub func 6 (0x06) を使用して、モジュールの通信設定を設定できます。この例では、設定 (ボーレートなど) を運ぶ 7 バイトの情報が送信されます。

NModbus には、この「カスタム」関数コード (70) に対する特定のメソッドがありません。したがって、私が理解していることから、NModbus の CustomMessage 機能を使用する必要があります。CustomMessage を実行してみましたが、一般的な Modbus 関数コード (1 または 2 など) を使用すると、NModbus のデフォルト メソッドを使用した場合と同じ結果が得られます (つまり、CustomMessage はこれまでのところ機能しています)。

一般的なもの以外の関数コード (例: 1、2、3...) を試すと、あらゆる種類の例外が発生します。さらに、メッセージでサブ関数を送信する方法がわかりません!

関数コードの直後にサブ関数を追加すると (たとえば、70 の後に 06 が続く)、データが送信されると、例外が発生します。この分野の専門家からの助けが本当に必要です。

より明白な例外を次に示します。

" タイプ 'Modbus.SlaveException' の例外がスローされました。機能コード: 198 例外コード: 3 - クエリ データ フィールドに含まれる値は、サーバー (またはスレーブ) の許容値ではありません。これは、暗示された長さが正しくないなど、複雑な要求の残りの部分 MODBUS プロトコルはその重要性を認識していないため、レジスタに保存するために送信されたデータ項目がアプリケーション プログラムの予想外の値を持っていることを特に意味するものではありません特定のレジスタの特定の値の。」

2) 2 番目の問題は、Modbus メッセージを変換する機能を持つモジュールの COM1 に接続された RS-232 デバイスを制御するために、Modbus を介して ASCII RS-232メッセージを送信することです。つまり、Modbus ゲートウェイと通信して ASCII データをその COM1 に送信し、COM1 がデータを RS-232 に変換してから RS-232 デバイスと通信することを計画しています。変換はゲートウェイの内部で行われることを意図しているため、私が知る必要があるのは、地球上でこれらの長さが異なるこれらのメッセージをどのように送信できるかだけです。それがどのように可能で、どこから始めればよいかわかりません。

0 投票する
1 に答える
1078 参照

embedded - 私はModbus通信に少し慣れていないため、「無料のmodbus」のマスター側でどの機能を使用するかを理解するのに苦労しています

私は Modbus 通信に少し慣れていないので、「Free Modbus」ライブラリについて読み始めました。これで、Modbus 通信のスレーブ側を実装するためにそれを使用する方法を理解しましたが、マスター側でライブラリを使用する方法を見つけることができないようです。たとえば、スレーブ 19 のディスクリート入力番号 3 を読み取るためにマスター側で呼び出す関数は何ですか?

助けてくれてありがとう。

ところで、私は C で書いており、MSP430 マイクロコントローラー用にプログラミングしています。

0 投票する
1 に答える
2178 参照

java - modbus4jmodbusRTUマスターおよびスレーブ通信機能

突然、seroUtils.jarファイルとmodbus4J.jarファイルをダウンロードしてnetbeansに含めました。だから私にデータをスレーブに送信し、rs232ケーブルを介してスレーブからデータを受信するいくつかの方法を提案してください。私のプログラムでは、シリアルパラメータを設定しました。しかし、スレーブデバイスからデータを送信してコマンドを受信する方法がわかりません。

modbus4jでのシリアルプログラミングの方法やチュートリアルを教えてください。

前もって感謝します

0 投票する
3 に答える
2276 参照

mfc - Visual C++ での MSComm 経由の Modbus 入力

私はModbusプロトコルにまったく慣れていません。私のセットアップは、異なるアドレスを持つ 3 つのデバイスで構成されています。それらはすべて RS232 経由で COM1 に接続されています。Modbus Poll を使用して入力データを確認しましたが、正常に動作しています。私が今やりたいことは、vc++ (MFC) アプリケーションで保持レジスタを読み取ることです。シリアル通信には、MSComm クラスを使用します。少しコードを書きましたが、入力がまったく得られません。

現時点での私のコード:

今m_Inputを出したいのですが、ちょっと変わっていません。SetCommID を設定するときに警告 (Property is read-only) も表示されますが、これは重要ではないと思います。

現時点で私は本当に無知なので、誰かが私を案内してもらえますか。

よろしく

EDIT:通信例によると、デバイスをファイルのように扱おうとしました。

read length failed エラーが発生します。strASCII は通常は分離されていません。現在は概要を把握しやすいようになっています。Modbus Pollで通信を確認しました。私の出力は正しいですが、データを取得していないようです。

編集:わかりました。ご助力ありがとうございます。間違ったチェックサムを入れていました。