4 フィールドバス通信
4.2 MODBUS の機能
4.2.3 MODBUS 機能の説明
• 119
MODBUSの機能
120 •
MODBUSの機能
4.2.3.1 機能コード「FC1」(コイルの読み出し)
入出力ビットの状態(コイル)をスレーブ機器から読み出します。
要 求
要求メッセージでは、読み出すための参照番号(開始アドレス)とビット数を 指定します。
例:出力ビット0〜7を読み出す
バイト フィールド名 例 バイト0, 1 トランザクションID 0x0000 バイト2, 3 プロトコルID 0x0000 バイト4, 5 データ長 0x0006
バイト6 ユニットID 0x01(未使用)
バイト7 MODBUSの機能コード 0x01 バイト8, 9 参照番号 0x0000 バイト10, 11 ビット数 0x0008 応 答
対応ビットの現在値がデータフィールドに設定されます。2進の「1」がオン状 態に、そして「0」がオフ状態に対応します。第1データバイトのLSB(最下位 ビット)には要求の第1ビットが入ります。以後は昇順で続きます。入力の数 が8の倍数でない場合、最後のデータバイトの余ったビットには「0」が詰めら れます(打ち切り)。
バイト フィールド名 例 ...
バイト7 MODBUSの機能コード 0x01 バイト8 バイト数 0x01 バイト9 ビット値 0x12
バイト9内の入力ビット7〜0の状態は、バイト値で0x12(2進では0001 0010)
になっています。ここで「入力ビット7」はそのバイトのMSB(最上位ビッ ト)であり、「入力ビット0」はLSBです。したがって7〜0の状態はオフ、オ フ、オフ、オン、オフ、オフ、オン、オフです。
ビット: 0 0 0 1 0 0 1 0 コイル: 7 6 5 4 3 2 1 0 例外応答
バイト フィールド名 例 ...
バイト7 MODBUSの機能コード 0x81
バイト8 例外コード 0x01または0x02
• 121
MODBUSの機能
4.2.3.2 機能コード「FC2」(デジタル入力値の読み出し)
入力ビットをスレーブ機器から読み出します。
要 求
要求メッセージでは、読み出すための参照番号(開始アドレス)とビット数を 指定します。
例:入力ビット0〜7を読み出す
バイト フィールド名 例 バイト0, 1 トランザクションID 0x0000 バイト2, 3 プロトコルID 0x0000 バイト4, 5 データ長 0x0006
バイト6 ユニットID 0x01(未使用)
バイト7 MODBUSの機能コード 0x02 バイト8, 9 参照番号 0x0000 バイト10, 11 ビット数 0x0008 応 答
照会ビットの現在値がデータフィールドに設定されます。2進の「1」がオン状 態に、そして「0」がオフ状態に対応します。第1データバイトのLSB(最下位 ビット)には要求の第1ビットが入ります。以後は昇順で続きます。入力の数 が8の倍数でない場合、最後のデータバイトの余ったビットには「0」が詰めら れます(打ち切り)。
バイト フィールド名 例 ...
バイト7 MODBUSの機能コード 0x02 バイト8 バイト数 0x01 バイト9 ビット値 0x12
バイト9内の入力ビット7〜0の状態は、バイト値で0x12(2進では0001 0010)
になっています。ここで「入力ビット7」はそのバイトのMSB(最上位ビッ ト)であり、「入力ビット0」はLSBです。したがって7〜0の状態はオフ、オ フ、オフ、オン、オフ、オフ、オン、オフです。
ビット: 0 0 0 1 0 0 1 0 コイル: 7 6 5 4 3 2 1 0 例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x82
バイト 8 例外コード 0x01または0x02
122 •
MODBUSの機能
4.2.3.3 機能コード「FC3」(複数レジスタの読み出し)
複数の保持レジスタの内容をスレーブ機器からワード形式で読み出します。
要 求
要求メッセージでは、読み出すレジスタの参照番号(開始レジスタ)とワード 数(レジスタ個数)を指定します。要求の参照番号は「0」を基準とします。す なわち、最初のレジスタはアドレス0から始まります。
例:レジスタ0と1を読み出す
バイト フィールド名 例 バイト 0, 1 トランザクションID 0x0000 バイト 2, 3 プロトコルID 0x0000 バイト 4, 5 データ長 0x0006
バイト 6 ユニットID 0x01(未使用)
バイト 7 MODBUSの機能コード 0x03 バイト 8, 9 参照番号 0x0000 バイト 10, 11 ワード数 0x0002 応 答
応答のレジスタデータは、レジスタ1個につき2バイトを使用します。前半のバ イトに上位ビットが、後半のバイトに下位ビットが入ります。
バイト フィールド名 例 ...
バイト7 MODBUSの機能コード 0x03 バイト8 バイト数 0x04 バイト9, 10 レジスタ0の値 0x1234 バイト11, 12 レジスタ1の値 0x2345
レジスタ0の内容は0x1234、またレジスタ1の内容は0x2345になっています。
例外応答
バイト フィールド名 例 ...
バイト7 MODBUSの機能コード 0x83
バイト8 例外コード 0x01または0x02
• 123
MODBUSの機能
4.2.3.4 機能コード「FC4」(入力レジスタの読み出し)
入力レジスタの内容をスレーブ機器からワード形式で読み出します。
要 求
要求メッセージでは、読み出すレジスタの参照番号(開始レジスタ)とワード 数(レジスタ個数)を指定します。要求の参照番号は「0」を基準とします。す なわち、最初のレジスタはアドレス0から始まります。
例:レジスタ0と1を読み出す
バイト フィールド名 例 バイト0, 1 トランザクションID 0x0000 バイト2, 3 プロトコルID 0x0000 バイト4, 5 データ長 0x0006
バイト6 ユニットID 0x01(未使用)
バイト7 MODBUSの機能コード 0x04 バイト8, 9 参照番号 0x0000 バイト10, 11 ワード数 0x0002 応 答
応答のレジスタデータは、レジスタ1個につき2バイトを使用します。前半のバ イトに上位ビットが、後半のバイトに下位ビットが入ります。
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x04 バイト 8 バイト数 0x04 バイト 9, 10 レジスタ0の値 0x1234 バイト 11, 12 レジスタ1の値 0x2345
レジスタ0の内容は0x1234、またレジスタ1の内容は0x2345になっています。
例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x84
バイト 8 例外コード 0x01または0x02
124 •
MODBUSの機能
4.2.3.5 機能コード「FC5」(コイルの書き込み)
単一の出力ビットをスレーブ機器に書き込みます。
要 求
要求メッセージでは、書き込む出力ビットの参照番号(出力アドレス)を指定 します。要求の参照番号は「0」を基準とします。すなわち、最初のコイルはア ドレス0から始まります。
例:第2出力ビット(アドレス1)をオンにする バイト フィールド名 例 バイト 0, 1 トランザクションID 0x0000 バイト 2, 3 プロトコルID 0x0000 バイト 4, 5 データ長 0x0006
バイト 6 ユニットID 0x01(未使用)
バイト 7 MODBUSの機能コード 0x05 バイト 8, 9 参照番号 0x0001 バイト 10 オン/オフ 0xFF
バイト 11 0x00
応 答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x05 バイト 8, 9 参照番号 0x0001 バイト 10 値 0xFF
バイト 11 0x00
例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x85
バイト 8 例外コード 0x01、0x02、または0x03
• 125
MODBUSの機能
4.2.3.6 機能コード「FC6」(1つのレジスタの書き込み)
単一の出力レジスタ値をワード形式でスレーブ機器に書き込みます。
要 求
要求メッセージでは、書き込む最初の出力ワードの参照番号(レジスタアドレ ス)を指定します。書き込む値は「Register Value(レジスタ値)」のフィール ドで指定します。要求の参照番号は「0」を基準とします。すなわち、最初のレ ジスタはアドレス0から始まります。
例:第2出力レジスタに0x1234の値を書き込む バイト フィールド名 例 バイト 0, 1 トランザクションID 0x0000 バイト 2, 3 プロトコルID 0x0000 バイト 4, 5 データ長 0x0006
バイト 6 ユニットID 0x01(未使用)
バイト 7 MODBUSの機能コード 0x06 バイト 8, 9 参照番号 0x0001 バイト 10, 11 レジスタ値 0x1234 応 答
正常な応答は要求と同じになります。
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x06 バイト 8, 9 参照番号 0x0001 バイト 10, 11 レジスタ値 0x1234 例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x85
バイト 8 例外コード 0x01または0x02
126 •
MODBUSの機能
4.2.3.7 機能コード「FC11」(通信イベントカウンタの取得)
スレーブ機器の通信イベントカウンタからステータスワードとイベントカウン タを返します。現在カウント値をメッセージの前後で読み出すことにより、マ スタはメッセージがスレーブによって正常に処理されたかどうか知ることがで きます。
新しい処理が問題なく行われたらカウンタが更新されます。例外の応答、ポー リングコマンド、またはカウンタの問い合わせがあった場合、この更新処理は 行われません。
要 求
バイト フィールド名 例 バイト 0, 1 トランザクションID 0x0000 バイト 2, 3 プロトコルID 0x0000 バイト 4, 5 データ長 0x0002
バイト 6 ユニットID 0x01(未使用)
バイト 7 MODBUSの機能コード 0x0B 応 答
応答にはステータスワードとイベントカウンタが2バイトずつ入っています。
ステータスワードにはゼロしか入りません。
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x0B バイト 8, 9 ステータス 0x0000 バイト 10, 11 イベントカウンタ値 0x0003
イベントカウンタはイベントが3回(0x0003)発生したことを示しています。
例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x85
バイト 8 例外コード 0x01または 0x02
• 127
MODBUSの機能
4.2.3.8 機能コード「FC15」(複数コイルの設定)
スレーブ機器の連続する出力ビットを1または0に設定します。最大256ビット まで設定できます。
要 求
要求メッセージでは、参照番号(ビット列の最初のコイル)、ビット数(書き 込むビットの数)、および出力データを指定します。出力コイルは「0」を基準 とします。すなわち、最初の出力位置は「0」です。
以下の例ではアドレス0から16ビットを設定します。要求には、0xA5F0(2進
では1010 0101 1111 0000)の値をもつ2バイトが入っています。
最初のデータバイトには、ビット7〜0に対応する0xA5の値が入ります。ただ しビット0がLSBです。また次のバイトには、ビット15〜8に対応する0xF0の 値が入ります。ただしビット8がLSBです。
バイト フィールド名 例 バイト 0, 1 トランザクションID 0x0000 バイト 2, 3 プロトコルID 0x0000 バイト 4, 5 データ長 0x0009
バイト 6 ユニットID 0x01(未使用)
バイト 7 MODBUSの機能コード 0x0F バイト 8, 9 参照番号 0x0000 バイト 10, 11 ビット数 0x0010 バイト 12 バイト数 0x02 バイト 13 データバイト1 0xA5 バイト 14 データバイト2 0xF0 応 答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x0F バイト 8, 9 参照番号 0x0000 バイト 10, 11 ビット数 0x0010 例外応答
バイト フィールド名 例 ...
バイト 7 MODBUSの機能コード 0x8F
バイト 8 例外コード 0x01または0x02