libmodbusを使用したModbus TCPサーバの迅速な展開

無料無料技术资料

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

libmodbusを使用したModbus TCPサーバの迅速な展開

現代の産業通信では、Modbusプロトコルはそのシンプルさと実装の容易さから広く使用されている。この記事では、libmodbusライブラリを使用してTCPベースのModbusサーバを作成する方法を具体的な例で詳しく説明します。このサーバは、クライアントからのModbusリクエストを処理し、それらのリクエストに応答することができます。

完全なコード(中国語):

1. Modbus TCPサーバの初期化

まず、libmodbusライブラリを導入し、Modbus TCPサーバを初期化します。この例では、サーバはローカルアドレスにバインドされます。127.0.0.1ポートと港。1502。呼び出しによってmodbus_new_tcp関数として、ポイントを作成します。modbus_tその後のすべての操作のコンテキストとして機能する構造体へのポインタ:

ctx = modbus_new_tcp("127.0.0.1", 1502);

2. Modbusデータモデルのマッピング

次に、サーバーが使用するModbusデータマップを定義する必要があります。このステップは通過する。modbus_mapping_newこの関数は、異なるタイプのModbusデータ(ビット、入力ビット、ホールドレジスタ、入力レジスタ)のメモリを割り当てて初期化することで行われます。

mb_mapping = modbus_mapping_new(500, 500, 500, 500);
if (mb_mapping == NULL) {
    fprintf(stderr, "Failed to allocate the mapping: %s\n", modbus_strerror(errno));
    modbus_free(ctx);
    return -1;
}

3.クライアント接続のリスニングと受け入れ

データマッピングの準備ができたら、サーバーはクライアントからの接続要求をリッスンし始めることができます。使用する。modbus_tcp_listen関数はリスニングを開始し、使用するmodbus_tcp_acceptアクセスを処理するクライアント接続:

s = modbus_tcp_listen(ctx, 1);
modbus_tcp_accept(ctx, &s);

4.リクエストの受信と対応

サーバのメインループは、クライアントリクエストの待機、受信、処理、応答の送信を含みます。これは継続的な呼び出しmodbus_receiveリクエストを受信して使用する関数modbus_reply応答を送信する機能:

for (;;) {
    rc = modbus_receive(ctx, query);
    if (rc > 0) {
        modbus_reply(ctx, query, rc, mb_mapping);
    } else if (rc == -1) {
        break;
    }
}

5.リソースのクリーンアップとシャットダウン

サーバーがタスクを完了すると(通常はエラーまたはクライアントが接続を閉じて)、割り当てられたすべてのリソースを解放し、接続を優雅に閉じる必要があります。

printf("Quit the loop: %s\n", modbus_strerror(errno));
if (s != -1) {
    close(s);
}
modbus_mapping_free(mb_mapping);
modbus_close(ctx);
modbus_free(ctx);

上記の手順では、libmodbusを使用して完全に機能するModbus TCPサーバを作成する方法を示しました。このサーバは、単一または複数のビットとレジスタの読み書きを含む標準的なModbus関数コードを処理できます。この例は、教育や試験目的だけでなく、実際のアプリケーションでの基礎としても使用できます。

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

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

エンジニア会員

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

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

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

发表回复

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