Modbus over TCP を介して PC と通信するマイクロコントローラーを含むプロジェクトに取り組んでいます。私のプラットフォームは STM32F4 チップで、RTOS なしで C でプログラミングしています。私は周りを見回して、LwIP と Freemodbus を見つけ、両方を動作させることにかなり成功しました。残念ながら、私は現在、対処方法がわからないいくつかの問題に直面しています。
接続を確立した後、(イーサネット ケーブルのプラグを抜くことによって) 接続を失うと、再接続できなくなることに気付きました (もちろん、プラグを再び差し込むと)。Freemodbus は 1 つのクライアントのみを許可し、まだ最初のクライアントが登録されています。接続を試みる新しいクライアントはすべて無視されます。私が知る限り、TCP / IP標準である特定のタイムアウト期間が経過するまで、最初のクライアントはドロップされません。
私の考えは...
複数のクライアントを処理する Modbus モジュールが必要です。通信が失われた後の新しいクライアント要求は受け入れられ、最初のクライアントはタイムアウトにより最終的にドロップされます。
- これを処理するために Freemodbus を変更するにはどうすればよいですか? そこに例はありますか?私は自分でそれを行うことを検討しましたが、それはまともなサイズのプロジェクトのようです.
- 複数のクライアントを処理し、高すぎず、使いやすい優れた Modbus パッケージはありますか? さまざまなオプションについていくつかのスレッドを見てきましたが、それらのどれもが私が必要とするものを正確に満たしているかどうかはわかりません. 自分で探すのに苦労しました。ほとんどは TCP をサポートしておらず、1 つのクライアントのみをサポートするものもあります。複数のクライアントをサポートすることは一般的に悪い考えですか?
PC からマイクロコントローラへの接続方法に問題がありますか?
- PC が再接続を試みるたびにポートを変更するのはなぜですか? 以前使用していたものと同じポートを保持していれば、これは問題にはなりません
通信を停止したらすぐに Freemodbus からクライアントを削除する必要がありますか?
- これは標準に反しているように見えますが、うまくいくかもしれません。
私は 1 に傾いています。特に、最終的には複数の接続をサポートする必要があるためです。どんな助けでも大歓迎です。
ありがとう。