NX8MM-35でModbus RTUのサンプルを実行

本記事では、Yocto環境のNX8MM-35上でlibmodbusを使用し、Modbus RTUのサンプルを実行する方法を説明します。NX8MM-35に搭載された2つのRS485ポートを使用し、同一のSBC上で1台をModbusサーバー、もう1台をModbusクライアントとして設定して、Modbus機能を利用します。


Modbusの主な特長:

  1. マスター・スレーブ(クライアント・サーバー)アーキテクチャ: マスター(クライアント)デバイスが通信を開始し、スレーブ(サーバー)デバイスが応答します。
  2. シンプルでオープンなプロトコル: 実装が容易で、産業用システムで広く採用されています。
  3. 複数の通信モード:
    • Modbus RTU(Remote Terminal Unit):シリアル通信(RS-232、RS-485)を介してバイナリ形式のデータを使用します。
    • Modbus ASCII: シリアル通信で、人間が読み取りやすいASCII文字を使用します。
    • Modbus TCP/IP: イーサネット上で動作し、より高速で柔軟なネットワーク通信を可能にします。

Modbusの主な用途:

  1. 産業用機器の監視および制御
  2. SCADA(監視制御およびデータ収集)システム
  3. 電力量計、温度センサー、その他のフィールドデバイス

必要なツール:

  1. i.MX series products like NX8MM-35 / PN8M-090T / EBOX-IMX8MM
    • In this tips, we use NX8MM-35 as an example.
  2. libmodbusを含むYocto Linux 4.0サンプルイメージ: Image / Guide
    • デフォルトのレシピを使用する場合は、独自のイメージをビルドする前に、local.confの「IMAGE_INSTALL」に「libmodbus-dev」を追加してください。
  3. Modbusテストツールのサンプルコードファイル: Download link
  4. 2つのRS485ポートを接続したテスト治具付きNX8MM-35
NX8MM-35でModbus RTUのサンプルを実行

1. Boot up the board and compile the modbus test tool

まずボードを起動し、Modbusテストツールのサンプルコードが保存されたUSBメモリを接続して、ターミナルを開く。

    1. USBメモリにアクセスし、以下のコマンドを入力

    $ gcc modbus_test_v2.c -o modbus_test_v2 -lmodbus

    NX8MM-35でModbus RTUのサンプルを実行

    2. コンパイルしたアプリケーションを指定したディレクトリに移動し、そのディレクトリにアクセス(ここでは「modbustest」というディレクトリを作成)

    $ mv modbus_test_v2 /modbustest

    $ cd /modbustest

    NX8MM-35でModbus RTUのサンプルを実行

    以下のコマンドを使用して、機能の説明を確認

    $ /.modbus_test_v2

    Usage: ./modbus_test_v2 [-s|-c] [-r gpio_index] serial_port

    -s : server

    -c : client

    -r : rts-gpios : dm446c rts-gpios numbers: ttymxc0=128, ttymxc3=9

    NX8MM-35のCOM1(ttymxc0/GPIO128)およびCOM4(ttymxc3/GPIO9)をRS-485通信に使用し、2つのポート間でポイントツーポイントのModbus RTU通信テストを実施します。
    (J39をショートして、COMポートをRS-485モードに切り替えてください。)

    NX8MM-35でModbus RTUのサンプルを実行

    2. NX8MM-35でModbus RTUテストを開始

    1. Open another terminal and input command below to set COM4 to server mode:

    ./modbus_test_v2 -s -r 9 /dev/ttymxc3

    NX8MM-35でModbus RTUのサンプルを実行

    2. 既存のターミナルを使用してCOM1をクライアントモードに設定し、サーバー(COM4)に信号を送信

    ./modbus_test_v2 -c -r 128 /dev/ttymxc0

    NX8MM-35でModbus RTUのサンプルを実行

    上記のコマンドを実行すると、サーバー(COM4)がクライアント(COM1)からのModbus RTU信号を正常に受信し、テストが完了します。

    NX8MM-35でModbus RTUのサンプルを実行

    NX8MM-35-42CMEBG2-TF

    Main Features of NX8MM-35:

    • i.MX 8M Mini クアッドコア ARM Cortex-A53、最大1.6/1.8GHz
    • メモリ:最大4GB LPDDR4
    • ストレージ:最大64GB eMMC
    • ディスプレイ:LVDS/HDMIインターフェース
    • カメラ:MIPI-CSIインターフェース
    • 接続性:GLAN×2、USB×4、COM×4、I²C、SPI、GPIO、タッチ、SIMカードホルダー付きMini PCIe、HDオーディオ
    • 動作温度:-20~+70℃/-40~+80℃(オプション)

    詳細情報およびサンプルのご依頼については、以下までお問い合わせください。 info@icop.com.twお近くの ICOP支店にお電話いただくか、 世界公式代理店.

    お買い物カゴ
    上部へスクロール