問題タブ [modbus-tcp]
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.
server - パブリック Modbus サーバー
私はTCPを介してModbusクライアントをプログラミングしてきましたが、最終的には完了したと思いますが、実際のシナリオでテストしたいので、ここに来ています:
¿ オンラインで入手できる Modbus サーバーはありますか? つまり、トラッシュ バイトのみをサーバーとして処理する場合でも、どの種類の Modbus サーバーでも問題ありません。
何か案は?
java - Modbus/TCP 経由でデバイスから保持レジスタを読み込もうとしているときに例外が発生しました
Modbus / TCPを使用して、デバイス(Weidmüller製のPowerMonitor)の保持レジスタから値を読み取ろうとしています。私はJavaと「jamod」と呼ばれるmodbusライブラリを使用しています。私のコード:
このコードをEclipseで(実際のIPを使用して)実行している間、コンソールでこれを取得します:
localhost で EasyModbusTCP Server Simulator を使用してこのプログラムを実行すると (上記のように)、問題はなく、保持レジスタに格納されている値を取得できます。それで、私は何を間違っていますか?どうすればいいのか本当にわかりません。私が尋ねる方法が大丈夫であることを願っています(私はここで非常に新しいです)。どうもありがとう!
java - ブール値ではない整数値をメモリ ワード 100 に書き込みます
私は jamod1.2 を使用しています。このコードを介してブール値を送信しようとしましたが、完全に機能します。
今、5を %mw100 に送信するなど、いくつかのレジスタに整数値を送信しようとしています! jamodライブラリを介してこれを行うにはどうすればよいですか、またはそれを行う簡単な方法があれば教えてください。
c# - 32 個の bool 値のコレクションを 32 ビット整数に変換します
だから私はC#が初めてで、検索しましたが、何を探しているのかわかりません。
ModBus インターフェイス ライブラリから 32 個の true/false ビットを保存した、inputs というブール変数があります。
これは、私の 32 個の true/false 値を説明する画像です。基本的に、入力に格納されている 32 個の true/false 値。それらを単一の 32 ビット整数に照合する必要があります。
私が知りたいのは、これらの 32 の値を単一の 32 ビット文字列 (0000 0000 0000 1000 1000 1000 1000 1000) に照合する方法です。これは明らかに 32 ビット整数であり、88888 の 10 進数が得られます。
そして、どのコマンドを使用すべきかわからないため、今は立ち往生しています。
python - 複数のサーバー pymodbus 接続の問題 Modbus TCP
pymodbus とラズベリー pi を使用して保持レジスタを読み取ろうとすると、問題が発生します。2 つのサーバー/スレーブを同時に接続できないようです (いずれか一方が機能しますが、一緒にすると、両方のデバイスからレジスタを読み取ることができません)。これらの接続の問題がエラー メッセージの原因になっているようです。たぶん、私がここで見逃している簡単なものがありますか?
私が受け取るエラーメッセージは次のとおりです。
これらを別々のスクリプトに分割して同時に実行すると、同じエラーが発生することがわかっています。
独立して、一度に 1 つずつ実行する場合と同様に、これらはエラーなしで正しく実行されます。
みんなの助けが大歓迎です!
javascript - JavaScript で 2 つの 16 ビット数値を結合して 1 つの 32 ビット数値 (float) に変換します。
工業用 modbus データを読み取る NodeJS サーバーベースのプロトタイプを構築する必要があります。
// eg transaction = [ 17007, -2621 ]
2 つのエントリを持つ配列を提供する 2つの連続した 16 ビット 10 進レジスタを読み取っています。// eg transaction = [ 17007, 0000 ]
この値は、電気周波数に変換する必要があります。約 = ~60.00 (hz) (少なくとも、与えられたデータが正しい場合は変換する必要があります)
配列内の 2 つのレジスタ値を結合し、データを 32 ビット浮動小数点数に変換する必要があることは承知していますが、方法は次のとおりです。
a) キャストせずにそれらを結合する
方法 b) それらを 32 ビット float に変換する方法
私はいくつかのタイプを使用する必要があると思います-1parseInt()
つtoString(10)
の提案は、使用してそれぞれを16進数にparseInt(num, 10).toString(16)
変換し、次にその結合された16進数を文字列または場合によっては浮動小数点数に変換することでしparseFloat()
たが、最初に2つの別々の部分を結合する方法です。
驚くべきことに、これに対する解決策は見つかりませんでした。
modbus - libmodbus ユニット ID の変更
libmodbusライブラリを使用して、Modbus インターフェイス (SMA) を備えたソーラー インバーターと通信しています。Modbus 仕様ドキュメントでは、特定のユニット ID を使用してデバイスのレジスタを読み取る必要があると指定されています。このデバイスは、modbus 用の TCP インターフェースを提供します。
libmodbus ライブラリのユニット ID を変更するコードが見つかりません。modbus_set_slave()関数ですか? または、ここで不足している別の機能がありますか?
java - Modbus 接続は 6 回の連続読み取り後に閉じられました
jamodライブラリを使用して Java で Modbus/TCP マスター アプリケーションを開発しています。スレーブ デバイスからの連続読み取り中に、接続が突然閉じられます。
私のコード:
6回目の読み取り中にスローされるエラー
このエラーの後、接続を復元できません。アプリケーション スレッドを終了し、アプリケーションを再起動する必要があります。私はいくつかの回避策を見つけました: 5 回目の読み取り後に追加Thread.sleep(500)
すると、この例外が削除されます。Thread.sleep(200)
各読み取りの後も同様に機能します。残念ながら、これらの回避策は、スレーブ デバイスから連続して読み取るという私の要求を満たすには十分ではありません。
何が起こっているのか、誰にも分かりませんか?