Modbus は、産業用電子デバイスの接続に広く使用されている通信プロトコルです。Link IoT Edge は、産業用電子デバイスの接続に役立つ Modbus ドライバーを提供しています。このトピックでは、Modbus ドライバーの概要と使用方法について説明します。
概要
Modbus は、アプリケーション層で広く使用されている通信プロトコルです。Alibaba Cloud は、デバイスを接続するための Modbus ドライバーを提供しています。Modbus ドライバーを使用すると、Modbus RTU および Modbus TCP プロトコルを使用するデバイスを接続できます。
Modbus ドライバーを Modbus デバイスに直接接続できます。次の図は、直接接続を示しています。
ゲートウェイを使用して Modbus ドライバーを Modbus デバイスに接続することもできます。次の図は、ゲートウェイベースの接続を示しています。
Modbus ドライバーは、入力ステータスの読み取り、入力レジスタの読み取り、コイルステータスの読み取りと書き込み、保持レジスタの読み取りと書き込みといった機能を提供します。
Link IoT Edge は、C 言語版と Python 版の Modbus ドライバーを提供しています。また、ゲートウェイの CPU アーキテクチャに基づいた、さまざまな C 言語版の Modbus ドライバーも提供しています。Link IoT Edge コンソールを使用して、Modbus ドライバーをゲートウェイにデプロイできます。コンソールから Modbus ドライバーのコードをダウンロードし、ビジネス要件に基づいてコードを修正することもできます。
このトピックでは、Modbus ドライバーの使用方法の例を示します。
前提条件
エッジインスタンスが作成され、ゲートウェイが Link IoT Edge に接続されていること。詳細については、「環境のセットアップ」をご参照ください。
ステップ 1:ドライバーの割り当て
Link IoT Edge コンソールにログインします。
左側のナビゲーションウィンドウで、[エッジインスタンス] をクリックします。[エッジインスタンス] ページで、使用するエッジインスタンスを見つけ、[操作] 列の [表示] をクリックします。
[インスタンス詳細] ページで、[デバイス & ドライバー] タブをクリックし、[すべてのドライバー] の横にある
+アイコンをクリックします。[ドライバーの割り当て] パネルで、ドロップダウンリストから [公式ドライバー] を選択します。ゲートウェイの CPU アーキテクチャに基づいて使用する Modbus ドライバーを見つけ、[操作] 列の [割り当て] をクリックします。その後、[閉じる] をクリックします。
説明C 言語版の Modbus ドライバーは、Link IoT Edge V1.8.4 以降でのみ使用できます。
Python 版の Modbus ドライバーは、Link IoT Edge Pro Edition でのみ使用できます。

ステップ 2:ドライバーの構成
[デバイス & ドライバー] タブで、割り当てられた Modbus ドライバーをクリックし、[デバイス] の横にある [ドライバー設定] をクリックします。
[ドライバー設定] パネルで、[チャンネル追加] をクリックします。
チャンネルはゲートウェイを物理デバイスに接続します。

要件に応じてパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
チャンネル名
チャンネルの名前。チャンネル名は、そのチャンネルが接続するゲートウェイ内で一意である必要があります。名前は 1~30 文字で、英字、数字、アンダースコア (_) を使用できます。
伝送モード
伝送モード。有効な値:RTU と TCP。
RTU を選択した場合は、次のパラメーターを設定する必要があります:
シリアルポート
シリアルポート。例:/dev/ttyUSB0 および /dev/ttyUSB1。値は 1~64 文字で、英字、数字、スラッシュ (/)、アンダースコア (_) を使用できます。
ボーレート
毎秒転送されるシンボルの数。ドロップダウンリストからオプションを選択します。
データビット
1 グループのデータに含まれるビット数。ドロップダウンリストからオプションを選択します。
パリティビット
パリティチェックの設定。有効な値:パリティチェックなし、奇数パリティチェック、偶数パリティチェック。
ストップビット
パッケージの最後のビット。ドロップダウンリストからオプションを選択します。
TCP を選択した場合は、次のパラメーターを設定する必要があります:
IP アドレス
Modbus デバイスの IP アドレス。ドット付き 10 進表記形式でアドレスを入力します。
ポート番号
Modbus デバイスのポート番号。1~65535 の範囲の整数を入力します。
任意。[デバイス] の右側で、[コンテナー設定] をクリックします。[コンテナー設定] ページで、次の表で説明されているパラメーターに基づいてドライバーのコンテナーを構成します。[保存] をクリックします。
説明コンテナーを構成できるのは、エッジインスタンスの [インスタンスタイプ] パラメーターが [Pro Edition] に設定されている場合のみです。
パラメーター
説明
ホストモード
コンテナーネットワークをホストネットワークから分離するかどうかを指定します。有効な値:
はい:コンテナーネットワークはホストネットワークと同じです。
いいえ:コンテナーネットワークはホストネットワークから分離されます。このオプションを選択した場合は、[ネットワークポートマッピング] パラメーターを設定する必要があります。
ネットワークポートマッピング
ホストネットワークポートとコンテナーネットワークポート間のマッピング。このパラメーターは、[ホストモード] パラメーターを [いいえ] に設定した場合にのみ使用できます。関数が実行されるネットワークは、ホストネットワークから分離されます。コンテナー内の関数のリスニングポートをホストネットワークポートにマッピングできます。これにより、さまざまなホスト上のクライアントプログラムが、関数によって提供されるサービスにアクセスできるようになります。最大 10 個のエントリを指定できます。
たとえば、
fc-http-server関数はホストコンテナーで実行され、ポート 80 を使用してサービスを提供します。他のホストのクライアントプログラムは、現在のホストのポート 80 にアクセスしてfc-http-server関数にアクセスすることはできません。他のホストのクライアントプログラムがfc-http-server関数にアクセスできるようにするには、関数が実行されるコンテナーのポート 80 を、ポート 8080 などのホストネットワークポートにマッピングする必要があります。その後、他のホストのクライアントプログラムは、ホストネットワーク上のIP アドレス:ポート 8080にアクセスし、fc-http-server関数によって提供されるサービスを使用できます。特権モード
特権モードを有効にするかどうかを指定します。コンテナーの root ユーザーは、一般ユーザーとしてのみホストサービスにアクセスできます。コンテナーでシステム時刻を変更したり、mount コマンドを実行したりする必要がある場合は、必要な root 権限が付与されている必要があります。このシナリオでは、コンテナーの特権モードを有効にする必要があります。
説明特権モードを有効にすると、コンテナー内のアプリケーションとプログラムにホストの root 権限が付与され、すべてのホストデバイスがコンテナーにマッピングされます。したがって、[デバイスマッピング] パラメーターを設定する必要はありません。
デバイスマッピング
デバイスマッピング。このパラメーターは、[特権モード] パラメーターを [いいえ] に設定した場合にのみ使用できます。デバイス管理システムが存在するネットワークは、ホストネットワークから分離されます。関数がシリアルポートなどのホストデバイスにアクセスできるようにするには、デバイスを関数が実行されるコンテナーにマッピングする必要があります。最大 10 個のエントリを指定できます。
ボリュームマッピング
ボリュームマッピング。ファイルシステムが存在するネットワークは、ホストネットワークから分離されます。関数がホストファイルにアクセスできるようにするには、ファイルを関数が実行されるコンテナーにマッピングする必要があります。最大 10 個のエントリを指定できます。
ステップ 3:サブデバイスの割り当て
[デバイス] セクションで、[サブデバイスの割り当て] をクリックします。[サブデバイスの割り当て] パネルで、サブデバイスをエッジインスタンスに割り当てます。
既存の Modbus デバイスを選択するか、サブデバイスを作成できます。サブデバイスを作成するには、次の手順に進みます。
説明既存の Modbus デバイスを選択する場合、そのデバイスが属するプロダクトは Modbus プロトコルを使用してゲートウェイに接続されている必要があります。詳細については、「プロダクトの作成」をご参照ください。
[サブデバイスの割り当て] パネルで、[サブデバイスの追加] をクリックします。

[デバイスの追加] ダイアログボックスで、[プロダクトの作成] をクリックし、新しい Modbus デバイスが属するプロダクトを作成します。

[プロダクトの作成] ダイアログボックスで、要件に応じてパラメーターを設定し、[OK] をクリックします。
表 1. パラメーターの説明
パラメーター
説明
プロダクト名
プロダクトの名前。プロダクト名は、現在の Alibaba Cloud アカウント内で一意である必要があります。名前は 4~30 文字で、英字、数字、アンダースコア (_)、ハイフン (-)、アットマーク (@)、括弧 () を使用できます。
ゲートウェイ接続プロトコル
通信プロトコル。このパラメーターを Modbus に設定する必要があります。
認証方式
認証方式。ご利用のデバイスに適した認証方式を選択します。詳細については、「デバイスの認証」をご参照ください。
プロダクトの説明
プロダクトの説明。このパラメーターは任意です。
[デバイスの追加] ダイアログボックスで、[プロダクト] パラメーターは、作成したプロダクトの名前に自動的に設定されます。[設定] をクリックし、プロダクトの機能を定義します。
説明Modbus デバッグツールを使用して Modbus プロダクトを構成できます。詳細については、「Modbus デバッグツール」をご参照ください。デバッグツールを使用する前に、まずデバイスを作成し、そのデバイスをエッジインスタンスに割り当てる必要があります。

[設定] をクリックすると、IoT Platform コンソールの [プロダクト詳細] ページの [機能の定義] タブに移動します。[ドラフトの編集] をクリックします。[ドラフトの編集] ページで、[カスタム機能の追加] をクリックします。

[カスタム機能の追加] ダイアログボックスで、要件に応じてパラメーターを設定し、プロパティを定義します。詳細については、「TSL 機能の追加」をご参照ください。
このステップでは、[拡張情報の追加] をクリックします。[拡張情報の追加] ダイアログボックスで、次の図に示すように、要件に応じてパラメーターを設定して拡張情報を追加します。構成が完了すると、プロパティ情報は指定されたレジスタに転送されます。Modbus ドライバーは、指定されたプロパティに基づいてデバイスにデータをリクエストし、受信した Modbus データを Thing Specification Language (TSL) データに変換します。

次の表は、拡張情報に関するパラメーターを説明しています。詳細については、「TSL 機能の追加」トピックの「拡張情報」パラメーターの説明をご参照ください。
パラメーター
説明
操作タイプ
機能コードによって示される操作タイプ。
説明操作タイプの説明
コイルステータス:読み取り操作を実行するには、0x01 機能コードのみを使用できます。一度に 1 つのコイルに書き込み操作を実行する場合は、0x05 機能コードを使用できます。一度に複数のコイルに書き込み操作を実行する場合は、0x0F 機能コードを使用できます。
保持レジスタ:読み取り操作を実行するには、0x03 機能コードのみを使用できます。一度に 1 つのレジスタに書き込み操作を実行する場合は、0x06 機能コードを使用できます。一度に複数のレジスタに書き込み操作を実行する場合は、0x10 機能コードを使用できます。
0x06 機能コードを使用して書き込み操作を実行する場合、[元のデータの型] パラメーターは int16 または uint16 にのみ設定できます。他のデータの型を選択すると、プロパティデータが報告されるときにエラーが発生します。
0x10 機能コードを使用して書き込み操作を実行する場合、[元のデータの型] パラメーターのすべての値が使用可能です。
離散入力:読み取り操作を実行するには、0x02 機能コードのみを使用できます。書き込み操作はサポートされていません。
入力レジスタ:読み取り操作を実行するには、0x04 機能コードのみを使用できます。書き込み操作はサポートされていません。
Modbus プロトコルの仕様については、GB/T 19582.1-2008、GB/T 19582.2-2008、および GB/T 19582.3-2008 をご参照ください。
レジスタアドレス
レジスタの IP アドレス。
0xで始まる 16 進数の IP アドレスを入力する必要があります。デバイスのプロパティに基づいてレジスタの IP アドレスを指定する必要があります。たとえば、デバイスの温度が IP アドレスの 1 で示されている場合、このパラメーターを 0x1 に設定できます。
元のデータの型
生データのデータの型。たとえば、温度のデータの型は浮動小数点です。
値の範囲
ズーム係数に基づいて生データを処理した後に得られる値の範囲。値の範囲外のデータは破棄されます。
レジスタ内の上位バイトと下位バイトを交換
レジスタ内の 16 ビットデータの上位 8 ビットと下位 8 ビットを交換するかどうかを指定します。この例では、このパラメーターを true に設定します。
レジスタビットシーケンスの交換
元の 32 ビットデータのビットを交換するかどうかを指定します。この例では、このパラメーターを false に設定します。
ズーム係数
ズーム係数。たとえば、収集された値が 100 で実際の値が 10 の場合、このパラメーターを 0.1 に設定します。収集された値が 100 で実際の値が 1000 の場合、このパラメーターを 10 に設定します。
データレポート
データを報告するトリガー。有効な値:
指定時刻:指定時刻を選択すると、ステップ 9 のサブデバイスの [データ収集間隔 (ms)] パラメーターで指定された収集間隔でデータが収集および報告されます。
変更を報告:収集されたデータが変更された場合にレポートがトリガーされます。
[インスタンス詳細] ページに戻り、Modbus デバイスを作成します。

作成した Modbus デバイスをエッジインスタンスに割り当てます。
[デバイス & ドライバー] タブで、割り当てられた Modbus デバイスを見つけ、[操作] 列の [デバイス設定] をクリックします。[デバイス設定] ダイアログボックスで、要件に応じてパラメーターを設定し、Modbus デバイスを Modbus ドライバーに接続します。

表 2. パラメーターの説明
パラメーター
説明
関連チャンネル
デバイスを Modbus ドライバーに接続するチャンネル。この例では、「ドライバーの構成」のステップ 2 で作成したチャンネルを選択します。
デバイスステーション番号
Modbus デバイスのステーション番号。各チャンネルで一意です。
データ収集間隔 (ms)
データが収集される間隔。Modbus は半二重伝送の通信プロトコルです。ゲートウェイはリクエストを送信してデバイスからデータを収集します。したがって、データ収集間隔を指定する必要があります。単位:ミリ秒。
説明各プロパティのデータを収集するのに 60 ミリ秒が必要な場合、すべてのプロパティのデータを収集するのに必要な合計時間は、次の数式に基づいて計算されます:
合計所要時間 = 各プロパティのデータ収集に必要な時間 (60 ms) × チャンネルのプロパティ数チャンネルが 10 台の Modbus デバイスに接続し、各デバイスに 10 個のプロパティがある場合、合計所要時間は 6,000 ms になります:60 ms × 10 × 10 = 6,000 ms。データが期待どおりに報告されるようにするには、データ収集間隔を 6,000 ms 以上に設定する必要があります。
ステップ 4:エッジインスタンスのデプロイ
任意。エッジインスタンスをデプロイする前に、デバッグツールを使用して、ゲートウェイが Modbus デバイスに期待どおりに接続されているかどうかを確認できます。また、Modbus デバイスが属するプロダクトの TSL モデルが正しく構成されているかどうかも確認できます。詳細については、「Modbus デバッグツール」をご参照ください。
[インスタンス詳細] ページで、右上隅の [デプロイ] をクリックしてエッジインスタンスをデプロイします。
よくある質問
Modbus ドライバーは、デバイスディメンションまたはプロパティディメンションに基づいてクラウドにデータを送信しますか?
Modbus ドライバーは、各データ収集サイクルでデバイスディメンションに基づいてデータを収集し、クラウドに送信します。たとえば、Modbus デバイスに 100 個のプロパティがあり、データ収集間隔が 5 秒の場合、Modbus ドライバーは 5 秒ごとにデバイスに関する 1 つのメッセージをクラウドに送信します。