産業用Modbus TCPサーバの実装:C言語とlibmodbusを使用した実践的なチュートリアル

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

産業用Modbus TCPサーバの実装:C言語とlibmodbusを使用した実践的なチュートリアル

産業オートメーションの分野では、Modbusプロトコルはそのシンプルさと幅広いサポートからデバイス間通信によく使用されています。この記事では、C言語とlibmodbusライブラリを使用して、デバイス間の効率的な通信を可能にするフル機能のModbus TCPサーバを作成する方法を説明します。

完全なコード:

1. Modbusサーバの初期化

まず、Modbus TCPサーバインスタンスを作成します。使用する。modbus_new_tcpポイントの初期化modbus_t型へのポインタ。この関数の引数はサーバのIPアドレスとポート番号です。この例では、サーバーはローカルアドレス127.0.0.1のポート1502をリッスンするように構成されています。

ctx = modbus_new_tcp("127.0.0.1", 1502);

2. Modbusマッピングの設定

Modbusマッピングは、サーバがデータ(コイル、ディスクリート入力、ホールドレジスタ、入力レジスタなど)を保存する方法です。使用する。modbus_mapping_newこれらのデータ領域の割り当てと初期化:

mb_mapping = modbus_mapping_new(MODBUS_MAX_READ_BITS, 0, MODBUS_MAX_READ_REGISTERS, 0);

マッピングの作成に失敗すると、サーバーはエラー·メッセージを出力して終了します。

3.接続のリスニング

使用する。modbus_tcp_listenネットワーク接続をリッスンする関数で、ソケット記述子を返します。サーバが処理できる接続の最大数NB_CONNECTIONマクロの定義:

server_socket = modbus_tcp_listen(ctx, NB_CONNECTION);

4. SIGINT信号の処理

サーバーを適切にシャットダウンしてリソースを解放するには、signalSIGINTシグナル(通常はCtrl+Cで発生)をキャプチャし、に関連付ける関数。close_sigint機能:より:

signal(SIGINT, close_sigint);

close_sigint関数はソケットを閉じ、Modbusコンテキストとマッピングを解放し、プログラムを終了します。

5.メイン·サイクル

サーバは無限ループで動作します。selectソケット上のアクティビティをリッスンする機能。もし、selectアクティビティが検出されると、サーバーは新しい接続要求か、接続が確立されたデータ要求かをチェックします。

if master_s == server_s {
    新しい接続要求の処理
(エルゼ)
    //接続されたクライアントからデータを処理する
}

新しい接続の場合、サーバーは接続を受け入れ、新しいソケットをlistenコレクションに追加します。データ要求の場合、サーバはmodbus_receiveデータを受け取り、利用するmodbus_reply応答を送る。

6.パフォーマンス評価

サーバの性能を評価するために、転送データレートの計算がコードに組み込まれています。サーバは、所与の時間内に正常に処理されたビットbitsとレジスタregistersの数をカウントし、ポイント/秒とKiB/秒の転送速度を求めます。

rate = (n_loop * nb_points) * G_MSEC_PER_SEC / (end - start);
printf("* %d points/s\n", rate);

これらのパフォーマンス指標は、サーバの設定やネットワーク構成を最適化する際に役立ちます。

結論:結論

C言語とlibmodbusライブラリを使用すると、複数のクライアント接続をサポートするだけでなく、パフォーマンスに関するリアルタイムデータを提供するModbus TCPサーバを効率的に実装できます。これにより、産業用アプリケーションのデバイス通信に強力で柔軟なソリューションが得られます。

この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注