freemodbusで複数のクライアントをホストする 質問する

freemodbusで複数のクライアントをホストする 質問する

私は、TCP 経由の Modbus を介して PC と通信するマイクロコントローラを含むプロジェクトに取り組んでいます。私のプラットフォームは STM32F4 チップで、RTOS なしで C でプログラミングしています。いろいろ調べた結果、LwIP と Freemodbus を見つけ、どちらもうまく動作させることができました。残念ながら、現在、対処方法がわからないいくつかの問題に直面しています。

接続を確立した後、接続が切れると (イーサネット ケーブルを抜くことによって)、再接続できなくなります (もちろん、再度差し込んでも)。Freemodbus は 1 つのクライアントのみを許可し、最初のクライアントが登録されたままになります。接続しようとする新しいクライアントはすべて無視されます。特定のタイムアウト期間が経過するまで、最初のクライアントは切断されません。これは、私が知る限り、TCP/IP 標準です。

私の考えは...

  1. 複数のクライアントを処理する Modbus モジュールが必要です。通信が失われた後の新しいクライアント要求は受け入れられ、最初のクライアントはタイムアウトにより最終的にドロップされます。

    • これを処理するために Freemodbus をどのように変更すればよいでしょうか? 何か例はありますか? 自分でやってみようと調べてみましたが、かなり大きなプロジェクトであるようです。
    • 複数のクライアントを処理でき、高価すぎず、使いやすい、優れた Modbus パッケージはありますか? さまざまなオプションに関するスレッドをいくつか見ましたが、どれがまさに自分のニーズを満たしているかわかりません。自分で見つけるのに苦労しました。ほとんどのパッケージは TCP をサポートしておらず、サポートしているパッケージでも 1 つのクライアントしかサポートしていません。複数のクライアントをサポートするのは一般的に悪い考えでしょうか?
  2. PC からマイクロコントローラに接続する方法に何か問題があるのでしょうか?

    • PCが再接続を試みるたびにポートを変更するのはなぜですか? 以前と同じポートを使用していれば、これは問題になりません。
  3. 通信を停止したらすぐに Freemodbus からクライアントを削除する必要がありますか?

    • これは標準に反しているように見えますが、機能する可能性があります。

私は 1 に傾いています。特に、いずれにせよ複数の接続をサポートする必要があるためです。どんな助けでもいただければ幸いです。

ありがとう。

ベストアンサー1

Modbusクライアントの数に制限がある場合、新しい接続が到着したときに古い接続を切断することが、Modbus実装ガイドで実際に推奨されています(https://www.modbus.org/docs/Modbus_Messaging_Implementation_Guide_V1_0b.pdf

ただし、許可された接続数を超えた場合に備えてメカニズムを実装する必要があります。このような場合には、最も古い未使用の接続を閉じることをお勧めします。

独自の問題はありますが、すべては妥協です。

複数のクライアントのサポートについてですが、modbus/rs サーバーについて考えると、一度に 1 つのマスターしか持つことができません。シリアル ケーブルを TCP に置き換えると、1 つのクライアントのみをサポートするのが珍しくない理由がわかります (もちろん、プログラミングも簡単です)。ただし、面倒です。

何をしているかに応じて、modbus プロトコル全体は必要なく、必要な部分の実装は非常に簡単です。もちろん、すべてをサポートする必要がある場合は、状況は異なります。私は freemodbus や、セットアップに適したその他のライブラリを使用したことがないので、その点についてアドバイスすることはできません。

PC が毎回異なる TCP 送信元ポートを使用することについては、TCP はこのように動作するはずであり、ユーザー側に問題はありません。同じ送信元ポートを再利用すると、シーケンス番号が間違っているなど、役に立ちません。

クライアントのドロップについて。クライアントをドロップすることはできますが、ドロップしない方がよいでしょう。一部のクライアントは、modbus コマンドを送信し、接続が失敗したことに気付き、再接続しますが、コマンドを再発行しません。これはクライアントの問題かもしれませんが、可能であれば、それほど頻繁には発生しない方がよいでしょう。もちろん、バッテリー寿命などの要因によって計算が異なる場合があります。

おすすめ記事