Chapter 1序文
Modbusは、産業現場で使用される世界初の真のバスプロトコルです。Modbus通信は、産業用ネットワーク通信で広く使用され、便利で、誰もが歓迎しています。
1.1·執筆の理由
Modbus通信プロトコルは、当社の製品やプロジェクトで何度も使用されています。毎回、ユーザー自身の開発やオンライン検索の要件を満たすソースコードです。しかし、アプリケーションは毎回異なり、毎回多くの反復作業が必要です。アプリケーションソフトウェアなどのプロトコルステーションの緊密な統合は、コードを少し混乱させます。そのため、毎回書くのではなく、後続のプロジェクトで再利用できる、より一般的なプロトコルスタックを開発したいと考えていました。プロジェクト開発の機会を利用して、独自のModbusプロトコルスタックを開発してください。
1.2著作権の表示
このソフトウェアはもともと私たち自身のために開発されましたが、現在はGitHubでオープンソースです。そのため、個人的な学習や商用アプリケーションに制限なく、誰でも複製、配布、使用できます。適用方法や変更は歓迎されますが、使用中に発生した問題については責任を負いません。
ソフトウェアのソースコードとその説明はGitHubから無料でダウンロードできます。ダウンロード先:https//github.com/foxclever/Modbus
1.3記録の更新。
以前のバージョンでは、シリアルリンクベースのModbus RTUとイーサネットベースのModbus TCPを実装していました。今回のリリースでは、シリアルリンクベースのModbus ASCII方式が追加されました。以前のバージョンで知られていた問題を修正した。
ソフトウェア設計および本書の更新記録は以下の通りです。
| バージョン別バージョン | 更新ノート | 著者は | 日付は |
| V1.0.0 | 5章からなる初版、主要なAPI機能を紹介 | ムーナン | May 8,2015について |
| V1.1.0 | 第6章と第7章を追加。 | ムーナン | December 23,2016 |
| V1.1.5 | 第3章、第4章、第5章の主に。を修正 | ムーナン | Feb 20,2018について |
| V2.0.0 | ASCII関連コンテンツの追加と既知の問題の修正 | ムーナン | September 18,2018 |
| V2.1.0 | RTUおよびASCIIマルチマスター操作のクラスサイズが追加され、TCPクライアントのマルチネットワークセグメント操作の内容が追加されました。 | ムーナン | Apr 29,2019について |
第2章PDU関数
Application Data Unitでは、Modbusデータ通信の基本的なメッセージフォーマットを扱います。これらは一般的で、現在のバージョンでは0 1、0 2、0 3、0 4、0 5、0 6、15、16関数コードのみをサポートしています。
4.1.1関数コード列挙
/* Modbusの動作コードを定義し、0 1、0 2、0 3、0 4、0 5、0 6、15、16機能コードをサポート */
typedef enum {
ReadCoilStatus= 0 x 01/* 読み取りコイルステータス複数の出力ビットを読み取る状態 */
ReadInputStatus=0x02/* 読み取り入力ビットステータス複数の入力ビットを読み取るステータス */
ReadHoldingRegister=0x03/* ホールドレジスタをリードする複数のホールドレジスタの値をリードする */
ReadInputRegister= 0x04/* 入力レジスタを読み込むの入力レジスタの数値を読み込む */
WriteSingleCoil=0x05/* 単一コイルを強制する単一出力ビットの状態を強制する */
WriteSingleRegister= 0x06/* 単一レジスタをプリフェットする1つのレジスタの数値をする */
WriteMultipleCoil=0x 0F/* 複数のコイルを強制する複数の出力ビットの状態を強制する */
WriteMultipleRegister= 0 x 10 /* 複数のレジスタをプリロードする(複数のレジスタの値を設定する)*/
}FunctionCode;
4.1.2 Modbus状態列挙
/* 命令検出エラーを受信した場合のエラーコードを定義する */
typedef enum{
MB_OK=0x00,
InvalidFunctionCode= 0x01//不正な機能コード
IllegalDataAddress= 0x02//不正なデータアドレス
IllegalDataValues= 0 x 03//不正なデータ値または範囲
OperationFail=0x04
}ModbusStatus;
4.1.3ステーション情報構造
/* スレーブ(サーバ)にアクセスするための情報を渡すために定義 */
typedef struct{
uint8_t unitID;
FunctionCode functionCode;
uint16_t startingAddress;
uint16_t quantity;
}ObjAccessInfo;
ステーション番号、ファンクションコード、開始アドレス、数量など、ステーション(サーバ)からのアクセスを渡すために使用されるさまざまな情報を定義します。
4.1.4アクセススレーブ局
/* RTUマスタ(TCPクライアント)として、RTUスレーブ(TCPサーバ)オブジェクトを読み書きするコマンドを生成する */
uint16_t GenerateReadWriteCommand(ObjAccessInfo objInfo,bool *statusList,uint16_t *registerList,uint8_t commandBytes[]);
パラメータ:ObjAccessInfo objInfo、アクセスするスレーブオブジェクト
bool *statusListは、次の書き込みが必要な状態量オブジェクトデータのリストです。
uint16_t *registerListは、次に書き込む必要のあるレジスタ量オブジェクトのデータのリストです。
uint8_t commandBytes[]、生成されたアクセスコマンド
戻り値:生成されるアクセスコマンドの长さバイト単位。
4.1.5読み取った戻りデータ关数を解析する
/* マスター(クライアント)がサーバから読み取ったデータを解析する */
void TransformClientReceivedData(uint8_t * receivedMessage,uint16_t quantity,bool *statusList,uint16_t *registerLister);
パラメータ:uint 8_t * receivedMessage受信したメッセージ
uint 16_t quantity、読み込まれたオブジェクトの数
bool *statusList:解析された読み込んだ状態オブジェクトのデータのリスト
uint16_t *registerLister、読み出されたレジスタオブジェクトのデータのリスト
戻り値:なしなし。
4.1.6ステーションから読み取りデータコマンドを生成する応答メッセージ関数
/* プライマリ·リード·アクセスの応答を生成し、0 x 0 1、0 x 0 2、0 x 0 3、0 x 0 4機能コードを含み、対応する情報の長さを返します */
uint16_t GenerateMasterAccessRespond(uint8_t *receivedMesasage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes);
パラメータ:uint 8_t *receivedMesasage、受信したメインアクションの読み取りメッセージ
bool *statusList:スレーブ状態オブジェクトデータを読み込むリスト
uint16_t *registerList、スレーブ·レジスタ·オブジェクト·データのフェッチのリスト
uint 8_t *respondBytes,生成されたスレーブ応答メッセージ
戻り値:応答メッセージの長さ(バイト単位)
4.1.7機能コード検査機能
/* 関数コードが正しいことを確認 */
ModbusStatus CheckFunctionCode(FunctionCode fc);
パラメータ:FunctionCode fc、関数コード、列挙で定義
戻り値:列挙によって定義されるModbus動作状態
4.1.8 TCPクライアントコマンド关数の生成
//読み書きサーバーオブジェクトを生成するコマンド
uint16_t SyntheticReadWriteTCPServerCommand(ObjAccessInfo objInfo,bool *statusList,uint16_t *registerList,uint8_t *commandBytes);
パラメータ:ObjAccessInfo objInfo、TCPサーバ·アクセス情報オブジェクト
bool *statusList:サーバ状態量オブジェクト·データ·リストを書き込む
uint16_t *registerList、サーバレジスタ量オブジェクトデータのリストを書き込む
uint 8_t *commandBytes、生成されたコマンドメッセージ
戻り値:コマンドの长さ(バイト単位)
4.1.9 TCPサーバ応答关数の生成
/* サーバーへの応答を合成する */
uint16_t SyntheticServerAccessRespond(uint8_t *receivedMesasage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes);
パラメータ:uint 8_t *receivedMesasage、受信したクライアントコマンドメッセージ
bool *statusList:TCPサーバの状態量オブジェクトデータのリストを読み込む
uint16_t *registerList:TCPサーバのレジスタ量を読み取るオブジェクトデータのリスト
uint 8_t *respondBytes:クライアントコマンドに応答して生成されるレスポンスメッセージ。
戻り値:レスポンス·メッセージの長さ(バイト単位)
4.1.10 CRCチェック。
/* CRCで受信した情報が正しいことを確認 */
bool CheckRTUMessageIntegrity (uint8_t *message,uint8_t length);
パラメータ:uint 8_t *message、検証対象のデータメッセージ
uint 8_t length,教示付きのデータメッセージの長さ(バイト単位)
戻り値:検証パスのステータス信号を返す
4.1.11 RTUスレーブ局のマスターコマンド関数を生成する
/* スレーブデータオブジェクトの読み書きコマンドを生成し、コマンド長は2つのチェックバイトを含む */
uint16_t SyntheticReadWriteSlaveCommand(ObjAccessInfo slaveInfo,bool *statusList,uint16_t *registerList,uint8_t *commandBytes);
パラメータ:ObjAccessInfo slaveInfo、構造体で定義されたステーションから情報オブジェクトにアクセスする
bool *statusList:スレーブ状態データのリストを書き込む
uint 16_t *registerList、スレーブレジスタ量データのリストを書き込む
uint 8_t *commandBytes、生成されたアクセスコマンドメッセージ
戻り値:アクセスコマンドの长さ(バイト単位)
4.1.12,スレーブ応答メッセージを生成する関数
/* スレーブからの応答を生成する */
uint16_t SyntheticSlaveAccessRespond(uint8_t *receivedMesasage,bool *statusList,uint16_t *registerList,uint8_t *respondBytes);
パラメータ:uint8_t *receivedMesasage,
bool *statusList,
uint16_t *registerList,
uint8_t *respondBytes,
戻り値:生成された応答メッセージの长さ(バイト単位)
4.1.13、LRC検証チェック関数
/* ASCIIデータが正しいかどうかを判断する */
bool CheckASCIIMessageIntegrity(uint8_t *usMsg, uint16_t usLength)
パラメータ:uint8_t *usMsg、検証対象メッセージのリスト、16進データ
uint16_t usLength:検証するメッセージのリストの長さ
戻り値:正しい場合は“true”、そうでない場合は“false”を返します。
4.1.14 ASCIIメッセージを16進数に変換する
/* 受信したASCIIメッセージを16進数に変換する */
bool CovertAsciiMessageToHex(uint8_t *aMsg, uint8_t *hMsg, uint16_t aLen);
パラメータ:uint8_t *aMsg、ASCIIコード情報
uint8_t *hMsg、変換された16進情報
uint 16_t aLen、ASCIIコード情報の長さ
戻り値:変換が正しいかどうかは“true”、そうでない場合は“false”を返します。
4.1.15 ASCIIスレーブを読み書きするコマンド関数を生成する
/* スレーブの読み書きコマンドを生成し、マスターに適用され、チェックと開始終端文字を含む */
uint16_t SyntheticReadWriteAsciiSlaveCommand(ObjAccessInfo slaveInfo, bool *statusList, uint16_t *registerList, uint8_t *commandBytes)
パラメータ:ObjAccessInfo slaveInfo、構造体で定義されたステーションから情報オブジェクトにアクセスする
bool *statusList:スレーブ状態データのリストを書き込む
uint 16_t *registerList、スレーブレジスタ量データのリストを書き込む
uint 8_t *commandBytes、生成されたアクセスコマンドメッセージ
戻り値:アクセスコマンドの长さ(バイト単位)
4.1.16マスターコマンドに応答するASCIIスレーブを生成する関数
/* プライマリ局への応答を生成し、スレーブ局に適用する */
uint16_t SyntheticAsciiSlaveAccessRespond(uint8_t *receivedMessage, bool *statusList, uint16_t *registerList, uint8_t *respondBytes)
パラメータ:uint 8_t *receivedMesasage、マスターメッセージを受信
bool *statusList:マスターコマンドが読み込む状態値のリスト。
uint 16_t *registerList:マスターコマンドが読み込むレジスタサイズのリスト。
uint 8_t *respondBytes,生成された応答メッセージ
戻り値:生成された応答メッセージの长さ(バイト単位)
第3章カプセル化関数の適用
アプリケーションレベルのカプセル化については、RTUマスターアプリケーション、RTUスレーブステーションアプリケーション、TCPクライアントアプリケーション、TCPサーバアプリケーションの4つのカテゴリのみをカプセル化します。
4.2.1 RTUマスターオブジェクトとスレーブオブジェクト
/* アクセスされるRTUスレーブオブジェクトタイプを定義 */
typedef struct AccessedRTUSlaveType{
uint8_t stationAddress;//ステーションアドレス
uint 8_t cmdOrder;//コマンドリスト内の現在のコマンドの位置
uint 16_tコマンド番号;//コマンドリスト内のコマンドの総数
uint8_t *pReadCommand [8];//コマンド一覧
uint8_t *pLastCommand;//最後に送信されたコマンド
uint 32_t flagPresetCoil;//プリセットコイル制御フラグ
uint 32_t flagPresetReg;//プレセットレジスタ制御フラグ
}RTUAccessedSlaveType;
/* ローカルRTUマスターオブジェクトタイプを定義する */
typedef struct LocalRTUMasterType{
uint 32_t flagWriteSlave[8];//ステーションのアドレスに対応するステーション制御フラグビットを最大256ステーションまで書き込みます。
uint 16_t slaveNumber;//スレーブリスト内のスレーブの数
uint 16_t readOrder;//スレーブリスト内の現在のスレーブの位置
RTUAccessedSlaveType *pSlave;//ステーションリストから
UpdateCoilStatusType pUpdateCoilStatus;//コイル量関数の更新
UpdateInputStatusType pUpdateInputStatus;//入力ステータスの更新関数
UpdateHoldingRegisterType pUpdateHoldingRegister;//保持レジスタの量を更新する関数
UpdateInputResgisterType pUpdateInputResgister;//入力レジスタの量を更新する関数
}RTULocalMasterType;
4.2.2 RTUマスターオブジェクト初期化関数
/* RTUマスターオブジェクトの初期化 */
void InitializeRTUMasterObject(RTULocalMasterType *master,uint16_t slaveNumber,RTUAccessedSlaveType *pSlave,UpdateCoilStatusType pUpdateCoilStatus,UpdateInputStatusType pUpdateInputStatus,UpdateHoldingRegisterType pUpdateHoldingRegister,UpdateInputResgisterType pUpdateInputResgister);
パラメータ:RTULocalMasterType *master、ローカルマスターオブジェクト
uint 16_t slaveNumber、スレーブの数
RTUAccessedSlaveType *pSlave,ステーション一覧から
UpdateCoilStatusType pUpdateCoilStatus、コイル量関数ポインタの更新
UpdateInputStatusType pUpdateInputStatus、更新ステータス量関数ポインタ
UpdateHoldingRegisterType pUpdateHoldingRegister、更新保持レジスタ量関数ポインタ
UpdateInputResgisterType pUpdateInputResgister、入力レジスタ量関数ポインタの更新
戻り値:戻り値なし
4.2.3 RTUマスターアクセススレーブコマンド関数の生成
/* サーバーにアクセスするコマンドを生成する */
uint16_t CreateAccessSlaveCommand(ObjAccessInfo objInfo,void *dataList,uint8_t *commandBytes);
パラメータ:ObjAccessInfo objInfo:構造体で定義されたサイトから情報オブジェクトにアクセスする
void *dataListは、ステーションオブジェクトからのデータのリストを書き込む
uint 8_t *commandBytes、生成されたコマンドメッセージ
戻り値:生成されたアクセスコマンドの长さ(バイト単位)
4.2.4 RTUマスターはスレーブの応答関数を解析する
/* 受信したサーバーの応答を解析する */
void ParsingSlaveRespondMessage(uint8_t *recievedMessage,uint8_t *command);
パラメータ:uint8_t *recievedMessage、受信したメッセージ
uint 8_t *commandは、スレーブに送信されたコマンドのリストです。
戻り値:なしなし。
4.2.5 RTUマスターはスレーブメッセージコマンドマッチング機能を解析します。
/* リターンメッセージを受信すると、コマンドリスト内のコマンドを送信するリターンメッセージであるかどうかを判断する */
int FindCommandForRecievedMessage(uint8_t *recievedMessage,uint8_t (*commandList)[8],uint16_t commandNumber);
パラメータ:uint8_t *recievedMessage、受信したスレーブから返されたメッセージ
uint8_t *commandList [8]、プライマリ·ステーションが発行するコマンドのリスト
uint16_t commandNumber、格納されるコマンドの個数
戻り値:一致するコマンドの位置を返し、一致しない場合は'-1'を返します。
この機能は、RTUマスターステーションでのみ使用され、アクセスされるデータ量が大きく頻繁に、または複数のスレーブステーションにアクセスする場合に使用され、正しいデータ解析を容易にします。
4.2.6 RTUスレーブ局はマスターアクセスコマンド関数を解析する
/* 受信したメッセージを解析し、コールバック関数を介して合成された返信メッセージとメッセージのバイト長を返します */
uint16_t ParsingMasterAccessCommand(uint8_t *receivedMesasage,uint8_t *respondBytes,uint16_t rxLength);
パラメータ:uint 8_t *receivedMesasage、受信したマスターメッセージ情報
uint 8_t *respondBytes:応答メッセージを生成する
uint16_t rxLength,受信したメッセージの長さ
戻り値:生成される応答の长さバイト単位
4.2.7 TCPクライアントオブジェクトとTCPサーバオブジェクト
/* アクセスされるTCPサーバオブジェクトのタイプを定義する */
typedef struct AccessedTCPServerType{
union {
uint32_t ipNumber;
uint8_t ipSegment[4];
}ipAddress;//サーバのIPアドレス
uint32_t flagPresetServer;//サーバ要求フラグの書き込み
WritedCoilListHeadNode pWritedCoilHeadNode;//書き込み可能なコイル量の一覧
WritedRegisterListHeadNode pWritedRegisterHeadNode;//書き込み可能な保持レジスタのリスト
struct AccessedTCPServerType *pNextNode;//次のTCPサーバノード
}TCPAccessedServerType;
/* サーバーリストヘッダタイプを定義する */
typedef struct ServerListHeadType {
TCPAccessedServerType *pServerNode;//サーバーノードポインタ
uint 32_t serverNumber;//サーバの数
}ServerListHeadNode;
/* ローカルTCPクライアントオブジェクト型を定義する */
typedef struct LocalTCPClientType{
uint 32_t transaction;//トランザクション識別子
uint 16_t cmdNumber;//サーバコマンドの数を読み込む
uint 16_t cmdOrder;//スレーブリスト内の現在のスレーブの位置
uint8_t *pReadCommand [12];//コマンドの一覧を読む
ServerListHeadNode ServerHeadNode;//サーバーオブジェクトのリストのヘッダー
UpdateCoilStatusType pUpdateCoilStatus;//コイル量関数の更新
UpdateInputStatusType pUpdateInputStatus;//入力ステータスの更新関数
UpdateHoldingRegisterType pUpdateHoldingRegister;//保持レジスタの量を更新する関数
UpdateInputResgisterType pUpdateInputResgister;//入力レジスタの量を更新する関数
}TCPLocalClientType;
4.2.8 TCPクライアントオブジェクト初期化関数
/* TCPクライアントオブジェクトの初期化 */
void InitializeTCPClientObject(TCPLocalClientType *client,uint16_t cmdNumber,uint8_t (*pReadCommand)[12],UpdateCoilStatusType pUpdateCoilStatus,UpdateInputStatusType pUpdateInputStatus,UpdateHoldingRegisterType pUpdateHoldingRegister,UpdateInputResgisterType pUpdateInputResgister);
パラメータ:TCPType *、クライアントオブジェクト
uint 16_t cmdNumber、読み取りコマンドの数
uint8_t *pReadCommand [12]、読み取りコマンドの一覧
UpdateCoilStatusType pUpdateCoilStatus、コイル量関数ポインタの更新
UpdateInputStatusType pUpdateInputStatus、更新ステータス量関数ポインタ
UpdateHoldingRegisterType pUpdateHoldingRegister、更新保持レジスタ関数ポインタ
UpdateInputResgisterType pUpdateInputResgister、入力レジスタ量関数ポインタの更新
戻り値:戻り値なし
4.2.9、TCPクライアント·アクセス·サーバ·コマンド関数の生成
/* サーバーにアクセスするコマンドを生成する */
uint16_t CreateAccessServerCommand(ObjAccessInfo objInfo,void *dataList,uint8_t *commandBytes);
パラメータ:ObjAccessInfo ObjInfo、サーバー情報オブジェクトへのアクセス
void *dataList:サーバーオブジェクトのデータのリスト
uint 8_t *commandBytes、生成されたアクセスサーバコマンドメッセージ
戻り値:アクセスコマンドの长さ(バイト単位)
4.2.10 TCPクライアントはサーバから情報を返す関数を解析する
/* 受信したサーバ情報を解析する */
void ParsingServerRespondMessage(uint8_t *recievedMessage);
パラメータ:uint8_t *recievedMessage:受信したサーバ応答情報
戻り値:なしなし。
4.2.11 TCPサーバはクライアントコマンド关数を解析する
/* 受信した情報を解析し、応答コマンドの長さを返す */
uint16_t ParsingClientAccessCommand(uint8_t *receivedMessage,uint8_t *respondBytes);
パラメータ:uint8_t *receivedMessage、受信したクライアントアクセスコマンド
uint8_t *respondBytes、生成されたサーバ応答情報
戻り値:生成された応答メッセージの长さ(バイト単位)
4.2.12 ASCIIマスターオブジェクトとスレーブオブジェクト
/* アクセスされるASCIIスレーブオブジェクト型を定義 */
typedef struct AccessedASCIISlaveType{
uint8_t stationAddress;//ステーションアドレス
uint 8_t cmdOrder;//コマンドリスト内の現在のコマンドの位置
uint 16_tコマンド番号;//コマンドリスト内のコマンドの総数
uint8_t *pReadCommand [17];//コマンドの一覧
uint8_t *pLastCommand;//最後に送信されたコマンド
uint 32_t flagPresetCoil;//プリセットコイル制御フラグ
uint 32_t flagPresetReg;//プレセットレジスタ制御フラグ
}AsciiAccessedSlaveType;
/* ローカルASCIIマスターオブジェクトタイプを定義する */
typedef struct LocalASCIIMasterType{
uint 32_t flagWriteSlave[8];//ステーションのアドレスに対応するステーション制御フラグビットを最大256ステーションまで書き込みます。
uint 16_t slaveNumber;//スレーブリスト内のスレーブの数
uint 16_t readOrder;//スレーブリスト内の現在のスレーブの位置
AsciiAccessedSlaveType *pSlave;//駅一覧から
UpdateCoilStatusType pUpdateCoilStatus;//コイル量関数の更新
UpdateInputStatusType pUpdateInputStatus;//入力ステータスの更新関数
UpdateHoldingRegisterType pUpdateHoldingRegister;//保持レジスタの量を更新する関数
UpdateInputResgisterType pUpdateInputResgister;//入力レジスタの量を更新する関数
}AsciiLocalMasterType;
4.2.13 ASCIIマスターオブジェクト初期化関数
/* RTUマスターオブジェクトの初期化 */
void InitializeASCIIMasterObject(AsciiLocalMasterType *master,uint16_t slaveNumber,AsciiAccessedSlaveType *pSlave,UpdateCoilStatusType pUpdateCoilStatus,UpdateInputStatusType pUpdateInputStatus,UpdateHoldingRegisterType pUpdateHoldingRegister,UpdateInputResgisterType pUpdateInputResgister);
パラメータ:AsciiLocalMasterType *master、ASCIIマスターオブジェクト
uint 16_t slaveNumber、スレーブの数
AsciiAccessedSlaveType *pSlave,駅一覧から
UpdateCoilStatusType pUpdateCoilStatus、更新コイル量コールバック関数
UpdateInputStatusType pUpdateInputStatus、更新ステータス量コールバック関数
UpdateHoldingRegisterType pUpdateHoldingRegister、更新保持レジスタ量コールバック関数
UpdateInputResgisterType pUpdateInputResgister、入力レジスタ量の更新コールバック関数
戻り値:戻り値なし
4.2.14 ASCIIスレーブにアクセスするコマンドを生成する
/* ASCIIスレーブにアクセスするコマンドを生成する */
uint16_t CreateAccessAsciiSlaveCommand(ObjAccessInfo objInfo,void *dataList,uint8_t *commandBytes);
パラメータ:ObjAccessInfo objInfo:構造体で定義されたサイトから情報オブジェクトにアクセスする
void *dataListは、ステーションオブジェクトからのデータのリストを書き込む
uint 8_t *commandBytes、生成されたコマンドメッセージ
戻り値:生成されたアクセスコマンドの长さ(バイト単位)
4.2.15 ASCIIマスターはスレーブの応答関数を解析します。
/* 受信したサーバ情報を解析する */
void ParsingAsciiSlaveRespondMessage(uint8_t *recievedMessage, uint8_t *command,uint16_t rxLength);
パラメータ:uint8_t *recievedMessage、受信したメッセージ
uint 8_t *commandは、スレーブに送信されたコマンドのリストです。
uint16_t rxLength、受信したメッセージの長さ
戻り値:なしなし。
4.2.16 ASCI Iマスターは、メッセージを返すコマンドマッチング関数を解決します。
/* リターンメッセージを受信すると、コマンドリスト内のコマンドを送信するリターンメッセージであるかどうかを判断する */
int FindAsciiCommandForRecievedMessage(uint8_t *recievedMessage,uint8_t (*commandList)[17],uint16_t commandNumber);
パラメータ:uint8_t *recievedMessage、受信したスレーブから返されたメッセージ
uint8_t *commandList [17]、プライマリ·ステーションが発行するコマンドのリスト
uint16_t commandNumber、格納されるコマンドの個数
戻り値:一致するコマンドの位置を返し、一致しない場合は'-1'を返します。
この機能は、RTUマスターステーションでのみ使用され、アクセスされるデータ量が大きく頻繁に、または複数のスレーブステーションにアクセスする場合に使用され、正しいデータ解析を容易にします。
4.2.17 ASCI Iスレーブ解析マスターアクセスコマンド関数
/* 受信したメッセージを解析し、コールバック関数を介して合成された返信メッセージとメッセージのバイト長を返します */
uint16_t ParsingAsciiMasterAccessCommand(uint8_t *receivedMessage, uint8_t *respondBytes, uint16_t rxLength, uint8_t StationAddress);
パラメータ:uint 8_t *receivedMesasage、受信したマスターメッセージ情報
uint 8_t *respondBytes:応答メッセージを生成する
uint16_t rxLength,受信したメッセージの長さ
戻り値:生成される応答の长さバイト単位
第4章データ処理機能
特定のアプリケーションには、データの処理も含まれ、異なるアプリケーションデータ構造と処理方法は非常に異なるため、データ処理のためのいくつかのコールバック関数(弱い関数__weakキーワードの実際の使用)を定義します。
4.3.1コイルの量を取得する関数
/* 読み取りたいコインの量を取得する */
__weak void GetCoilStatus(uint16_t startAddress,uint16_t quantity,bool *statusList)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t startAddress:読み込むオブジェクトの開始アドレス
uint 16_t quantity、読み込むオブジェクトの数
bool *statusList取得したコイル量のデータ値のリスト
戻り値:なしなし。
4.3.2入力状態値を取得する関数
/* 読み込みたいInputStatusの値を取得する */
__weak void GetInputStatus(uint16_t startAddress,uint16_t quantity,bool *statusValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t startAddress:読み込むオブジェクトの開始アドレス
uint 16_t quantity、読み込むオブジェクトの数
bool *statusValue:入力状態量のデータ値のリストを取得します。
戻り値:なしなし。
4.3.3レジスタ値を保持する関数を取得する
/* 読み込みたい保持レジスタの値を取得する */
__weak void GetHoldingRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t startAddress:読み込む保持レジスタオブジェクトの開始アドレス
uint 16_t quantity、読み出す保持レジスタの数
uint16_t *registerValue、保持レジスタの取得値
戻り値:なしなし。
4.3.4入力レジスタ値を取得する関数
/* 読み込みたい入力レジスタの値を取得する */
__weak void GetInputRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint 16_t startAddress:読み込む入力レジスタの開始アドレス
uint 16_t quantity、読み込む入力レジスタの数
uint 16_t *registerValue、入力レジスタの値を取得します。
戻り値:なしなし。
4.3.5単一コイルの値関数を設定する
/* 個々のコイルの値を設定する */
__weak void SetSingleCoil(uint16_t coilAddress,bool coilValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t coilAddress:必要な初期設定値のコイルアドレス
bool coilValue、初期設定値
戻り値:なしなし。
4.3.6単一のレジスタ値を設定する関数
/* 個々のレジスタの値を設定する */
__weak void SetSingleRegister(uint16_t registerAddress,uint16_t registerValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t registerAddress:プリセットされた保持レジスタのアドレス
uint 16_t registerValue、プリセットされたホールドレジスタの値
戻り値:なしなし。
4.3.7、複数のコイル値を設定する関数
/* 複数のコイルの値を設定する */
__weak void SetMultipleCoil(uint16_t startAddress,uint16_t quantity,bool *statusValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint16_t startAddress:プリセットする複数のコイルの開始アドレス
uint16_t quantity:予測するコイルの数
bool *statusValue:予測するコイル値のリスト
戻り値:なしなし。
4.3.8複数のレジスタ値を設定する関数
/* 複数のレジスタの値を設定する */
__weak void SetMultipleRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
{
//Modbus TCP Server/RTU Slaveアプリケーションに実装する必要がある場合
}
パラメータ:uint 16_t startAddress:プリセットされた複数のホールドレジスタの開始アドレス
uint 16_t quantity:プリセットする保持レジスタの数
uint 16_t *registerValue:予測保持レジスタ値のリスト
戻り値:なしなし。
4.3.9ステーションから取得したコイル量の値を更新する関数
/* 読み戻されたコイルの状態を更新 */
__weak void UpdateCoilStatus(uint16_t startAddress,uint16_t quantity,bool *stateValue)
{
//クライアント(マスター)アプリケーションで実装
}
パラメータ:uint16_t startAddress、値を読み取るコイルオブジェクトの開始アドレス
uint16_t quantity、読み取られたコイルの数
bool *stateValue、読み込まれたコイルアドレスのリスト
戻り値:なしなし。
このプログラムはデフォルトのハンドラであり、各マスターオブジェクトは個別に更新関数を定義でき、定義されていない場合はこの関数を呼び出すことができます。
4.3.10ステーションから取得した入力状態値を更新する関数
/* 読み戻された入力ステータス値を更新 */
__weak void UpdateInputStatus(uint16_t startAddress,uint16_t quantity,bool *stateValue)
{
//クライアント(マスター)アプリケーションで実装
}
パラメータ:uint16_t startAddress:読み込まれた入力状態オブジェクトの開始アドレス
uint 16_t quantity、読み込まれた入力状態オブジェクトの数
bool *stateValue、読み込まれた入力状態オブジェクトの値
戻り値:なしなし。
このプログラムはデフォルトのハンドラであり、各マスターオブジェクトは個別に更新関数を定義でき、定義されていない場合はこの関数を呼び出すことができます。
4.3.11スレーブステーション保持レジスタ値を更新する关数
/* 読み戻された保持レジスタを更新する */
__weak void UpdateHoldingRegister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
{
//クライアント(マスター)アプリケーションで実装
}
パラメータ:uint16_t startAddress,読み出された保持レジスタオブジェクトの開始アドレス
uint16_t quantity,読み取られた保持レジスタオブジェクトのデータ
uint16_t *registerValue、読み取られた保持レジスタオブジェクト値のリスト
戻り値:なしなし。
このプログラムはデフォルトのハンドラであり、各マスターオブジェクトは個別に更新関数を定義でき、定義されていない場合はこの関数を呼び出すことができます。
4.3.12スレーブ更新入力レジスタ値関数
/* 読み返された入力レジスタを更新 */
__weak void UpdateInputResgister(uint16_t startAddress,uint16_t quantity,uint16_t *registerValue)
{
//クライアント(マスター)アプリケーションで実装
}
パラメータ:uint16_t startAddress:読み込まれた入力レジスタオブジェクトの開始アドレス
uint 16_t quantity、読み込まれた入力レジスタオブジェクトの数
uint 16_t *registerValue、読み込まれた入力レジスタの値のリスト
戻り値:なしなし。
このプログラムはデフォルトのハンドラであり、各マスターオブジェクトは個別に更新関数を定義でき、定義されていない場合はこの関数を呼び出すことができます。
第5章いくつかの関連事項
Modbusプロトコルスタックの開発全体については、すでに明確に述べたので、開発に直接関係のないものについて説明します。
まず、なぜこのプロトコルスタックを開発したのかについて質問します。私たちの意図は、毎回この部分を書き直すのではなく、継続的な改善と再利用の目的で製品を開発できるようにすることです。もちろん、後になって、自分たちだけでなく、使いたい人なら誰でも使えるように公開できると感じました。ソースコードのURLは、https//github.com/foxclever/Modbusです。
第二に、Modbusプロトコルには3つの文書がある。当社のプロトコルスタックは、さまざまな種類のオブジェクトデータを読み書きする機能を含む、国家規格に従って開発された標準プロトコルであり、一般的な産業アプリケーションでは十分です。3つの標準文書。
GB/T 1958 2.1 -2008 Modbusプロトコルに基づく産業オートメーションネットワーク仕様-パート1:Modbusアプリケーションプロトコル
GB/T 1958 2.2 -2008 Modbusプロトコルに基づく産業オートメーションネットワーク仕様-パート1:シリアルリンク上のModbusプロトコル実装ガイド
GB/T 1958 2.3 -2008 Modbusプロトコルベースの産業オートメーションネットワーク仕様-パート1:TCP/IP上のModbusプロトコル実装のガイド
最後に、このスタックを使用することは歓迎されますが、使用の最終結果については責任を負いません。もちろん、欠点が見つかった場合は、改善を継続できるように、発見した問題点をお知らせください。
このソフトウェアに注目していただきありがとうございます。必要な人はGitHubでダウンロードできます。改善の提案を歓迎します。興味のある人は私たちの公開番号をフォローできます。
| Modbusプロトコルスタック統合インスタンスのパラメータリスト | ||||||||
| ステーションアドレス1、ボーレート115200、データビット8、ストップビット1、検証なし | ||||||||
| シリアル番号。 | データ型 | 変数名 | パラメータ名 | アドレス:address | 読取りおよび書込みプロパティ | 値の範囲 | デフォルト値 | 説明する。 |
| 1 | uint32_t | beatTime | ハートビート検出 | 40001 | 読み取り専用 | 毎秒1回増加し、システムが正常に動作しているかどうかを監視 | ||
| 2 | float | mbAI1 | シミュレーション試験量 | 40003 | 読み取り専用 | mbAO1*3 | ||
| 3 | float | mbAO1 | シミュレーション試験量 | 40005 | 読み取りと書き込み | 0~100.0 | 1.101 | |
| 4 | uint16_t | mbAI2 | シミュレーション試験量 | 40007 | 読み取り専用 | mbAO2*2 | ||
| 5 | uint16_t | mbAO2 | シミュレーション試験量 | 40008 | 読み取りと書き込み | 0~100 | 1 | 駅の変数 |
| 1 | float | mbSalve1AI1 | 目標スレーブ1のシミュレーション量入力パラメータ1 | 40009 | 読み取り専用 | ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve1AI2 | 目標スレーブ局1のシミュレーション入力パラメータ2 | 40011 | 読み取り専用 | ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve1AI3 | 目標スレーブ局1のシミュレーション量入力パラメータ3 | 40013 | 読み取り専用 | 0ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve1AO1 | 目標スレーブ局1のシミュレーション量出力パラメータ1 | 40014 | 読み取りと書き込み | 101 | ターゲットスレーブステーション1シミュレーションパラメータ | |
| 7 | uint16_t | mbSalve1AO2 | 目標スレーブ局1のシミュレーション量出力パラメータ2 | 40015 | 読み取りと書き込み | 102 | ターゲットスレーブステーション1シミュレーションパラメータ | |
| 8 | uint16_t | mbSalve1AO3 | 目標スレーブ局1のシミュレーション量出力パラメータ3 | 40016 | 読み取りと書き込み | 103 | ターゲットスレーブステーション1シミュレーションパラメータ | |
| 1 | float | mbSalve2AI1 | ターゲットスレーブ2のシミュレーション入力パラメータ1 | 40017 | 読み取り専用 | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 2 | uint32_t | mbSalve2AI2 | ターゲットスレーブ2のシミュレーション入力パラメータ2 | 40019 | 読み取り専用 | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 5 | uint16_t | mbSalve2AI3 | 目標スレーブ局2のシミュレーション量入力パラメータ3 | 40021 | 読み取り専用 | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve2AO1 | 目標スレーブ局2のシミュレーション量出力パラメータ1 | 40022 | 読み取りと書き込み | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 7 | uint16_t | mbSalve2AO2 | 目標スレーブ局2のシミュレーション量出力パラメータ2 | 40023 | 読み取りと書き込み | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve2AO3 | 目標スレーブ局2のシミュレーション量出力パラメータ3 | 40024 | 読み取りと書き込み | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 1 | float | mbSalve3AI1 | 目標スレーブ3のシミュレーション入力パラメータ1 | 40025 | 読み取り専用 | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve3AI2 | 目標スレーブ3のシミュレーション入力パラメータ2 | 40027 | 読み取り専用 | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve3AI3 | 目標スレーブ3のシミュレーション量入力パラメータ3 | 40029 | 読み取り専用 | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve3AO1 | 目標スレーブ3のシミュレーション量出力パラメータ1 | 40030 | 読み取りと書き込み | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 7 | uint16_t | mbSalve3AO2 | 目標スレーブ3のシミュレーション量出力パラメータ2 | 40031 | 読み取りと書き込み | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve3AO3 | 目的スレーブ3のシミュレーション量出力パラメータ3 | 40032 | 読み取りと書き込み | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 1 | float | mbSalve4AI1 | 目標スレーブステーション4のシミュレーション入力パラメータ1 | 40033 | 読み取り専用 | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve4AI2 | 目標スレーブステーション4のシミュレーション入力パラメータ2 | 40035 | 読み取り専用 | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve4AI3 | 目標スレーブステーション4のシミュレーション量入力パラメータ3 | 40037 | 読み取り専用 | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve4AO1 | 目標スレーブステーション4のシミュレーション量出力パラメータ1 | 40038 | 読み取りと書き込み | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 7 | uint16_t | mbSalve4AO2 | 目標スレーブステーション4のシミュレーション量出力パラメータ2 | 40039 | 読み取りと書き込み | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve4AO3 | 目標スレーブステーション4のシミュレーション量出力パラメータ3 | 40040 | 読み取りと書き込み | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 1 | bool | mbDI1 | 数値数量入力パラメータ1 | 1 | 読み取り専用 | 数値パラメータの数 | ||
| 2 | bool | mbDI2 | 数値数量入力パラメータ2 | 2 | 読み取り専用 | 数値パラメータの数 | ||
| 3 | bool | mbDI3 | 数値入力パラメータ3 | 3 | 読み取り専用 | 数値パラメータの数 | ||
| 4 | bool | mbDI4 | 数値入力パラメータ4 | 4 | 読み取り専用 | 数値パラメータの数 | ||
| 5 | bool | mbDO1 | デジタル出力パラメータ1 | 5 | 読み取りと書き込み | 数値パラメータの数 | ||
| 6 | bool | mbDO2 | デジタル出力パラメータ2 | 6 | 読み取りと書き込み | 数値パラメータの数 | ||
| 7 | bool | mbDO3 | デジタル出力パラメータ3 | 7 | 読み取りと書き込み | 数値パラメータの数 | ||
| 8 | bool | mbDO4 | デジタル出力パラメータ4 | 8 | 読み取りと書き込み | 数値パラメータの数 | ||
| 1 | bool | mbSalve1DI1 | ターゲットスレーブステーション1のデジタル量入力パラメータ1 | 9 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 2 | bool | mbSalve1DI2 | ターゲットスレーブステーション1のデジタル量入力パラメータ2 | 10 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 3 | bool | mbSalve1DI3 | ターゲットスレーブステーション1のデジタル量入力パラメータ3 | 11 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 4 | bool | mbSalve1DI4 | ターゲットスレーブステーション1のデジタル量入力パラメータ4 | 12 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 5 | bool | mbSalve1DO1 | ターゲットスレーブ1のデジタル量出力パラメータ1 | 13 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 6 | bool | mbSalve1DO2 | ターゲットスレーブ局1のデジタル量出力パラメータ2 | 14 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 7 | bool | mbSalve1DO3 | ターゲットスレーブ局1のデジタル量出力パラメータ3 | 15 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 8 | bool | mbSalve1DO4 | ターゲットスレーブ局1のデジタル量出力パラメータ4 | 16 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 1 | bool | mbSalve2DI1 | ターゲットスレーブ2のデジタル量入力パラメータ1 | 17 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 2 | bool | mbSalve2DI2 | ターゲットスレーブステーション2のデジタル量入力パラメータ2 | 18 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 3 | bool | mbSalve2DI3 | ターゲットスレーブステーション2のデジタル量入力パラメータ3 | 19 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 4 | bool | mbSalve2DI4 | ターゲットスレーブステーション2のデジタル量入力パラメータ4 | 20 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 5 | bool | mbSalve2DO1 | ターゲットスレーブ2のデジタル量出力パラメータ1 | 21 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 6 | bool | mbSalve2DO2 | ターゲットスレーブ2のデジタル量出力パラメータ2 | 22 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 7 | bool | mbSalve2DO3 | ターゲットスレーブ2のデジタル量出力パラメータ3 | 23 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 8 | bool | mbSalve2DO4 | ターゲットスレーブ2のデジタル量出力パラメータ4 | 24 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 1 | bool | mbSalve3DI1 | ターゲットスレーブステーション3のデジタル量入力パラメータ1 | 25 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 2 | bool | mbSalve3DI2 | ターゲットスレーブステーション3のデジタル量入力パラメータ2 | 26 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 3 | bool | mbSalve3DI3 | ターゲットスレーブステーション3の数字量入力パラメータ3 | 27 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 4 | bool | mbSalve3DI4 | ターゲットスレーブステーション3のデジタル量入力パラメータ4 | 28 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 5 | bool | mbSalve3DO1 | ターゲットスレーブ3のデジタル量出力パラメータ1 | 29 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 6 | bool | mbSalve3DO2 | ターゲットスレーブ3のデジタル量出力パラメータ2 | 30 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 7 | bool | mbSalve3DO3 | ターゲットスレーブ3のデジタル量出力パラメータ3 | 31 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 8 | bool | mbSalve3DO4 | ターゲットスレーブ3のデジタル量出力パラメータ4 | 32 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 1 | bool | mbSalve4DI1 | ターゲットスレーブステーション4のデジタル量入力パラメータ1 | 33 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 2 | bool | mbSalve4DI2 | ターゲットスレーブステーション4のデジタル量入力パラメータ2 | 34 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 3 | bool | mbSalve4DI3 | ターゲットスレーブステーション4のデジタル量入力パラメータ3 | 35 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 4 | bool | mbSalve4DI4 | ターゲットスレーブステーション4のデジタル量入力パラメータ4 | 36 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 5 | bool | mbSalve4DO1 | ターゲットスレーブステーション4のデジタル量出力パラメータ1 | 37 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 6 | bool | mbSalve4DO2 | ターゲットスレーブステーション4のデジタル量出力パラメータ2 | 38 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 7 | bool | mbSalve4DO3 | ターゲットスレーブステーション4のデジタル量出力パラメータ3 | 39 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 8 | bool | mbSalve4DO4 | ターゲットスレーブステーション4のデジタル量出力パラメータ4 | 40 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| ターゲット·スレーブ1パラメータリスト | ||||||||
| ステーションアドレス:1、ボーレート:96 00、データビット:8、ストップビット:1、検証なし | ||||||||
| シリアル番号。 | データ型 | 変数名 | パラメータ名 | アドレス:address | 読取りおよび書込みプロパティ | 値の範囲 | デフォルト値 | 説明する。 |
| 1 | float | mbSalve1AI1 | 目標スレーブ1のシミュレーション量入力パラメータ1 | 40001 | 読み取り専用 | ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve1AI2 | 目標スレーブ局1のシミュレーション入力パラメータ2 | 40003 | 読み取り専用 | ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve1AI3 | 目標スレーブ局1のシミュレーション量入力パラメータ3 | 40005 | 読み取り専用 | 0ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve1AO1 | 目標スレーブ局1のシミュレーション量出力パラメータ1 | 40006 | 読み取りと書き込み | ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 7 | uint16_t | mbSalve1AO2 | 目標スレーブ局1のシミュレーション量出力パラメータ2 | 40007 | 読み取りと書き込み | 0ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve1AO3 | 目標スレーブ局1のシミュレーション量出力パラメータ3 | 40008 | 読み取りと書き込み | 0ターゲットスレーブステーション1シミュレーションパラメータ | ||
| 1 | bool | mbSalve1DI1 | ターゲットスレーブステーション1のデジタル量入力パラメータ1 | 1 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 2 | bool | mbSalve1DI2 | ターゲットスレーブステーション1のデジタル量入力パラメータ2 | 2 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 3 | bool | mbSalve1DI3 | ターゲットスレーブステーション1のデジタル量入力パラメータ3 | 3 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 4 | bool | mbSalve1DI4 | ターゲットスレーブステーション1のデジタル量入力パラメータ4 | 4 | 読み取り専用 | ターゲット·スレーブ1数値パラメータ | ||
| 5 | bool | mbSalve1DO1 | ターゲットスレーブ1のデジタル量出力パラメータ1 | 5 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 6 | bool | mbSalve1DO2 | ターゲットスレーブ局1のデジタル量出力パラメータ2 | 6 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 7 | bool | mbSalve1DO3 | ターゲットスレーブ局1のデジタル量出力パラメータ3 | 7 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| 8 | bool | mbSalve1DO4 | ターゲットスレーブ局1のデジタル量出力パラメータ4 | 8 | 読み取りと書き込み | ターゲット·スレーブ1数値パラメータ | ||
| ターゲット·スレーブ2パラメータリスト | ||||||||
| ステーションアドレス:2、ボーレート:96 00、データビット:8、ストップビット:1、検証なし | ||||||||
| シリアル番号。 | データ型 | 変数名 | パラメータ名 | アドレス:address | 読取りおよび書込みプロパティ | 値の範囲 | デフォルト値 | 説明する。 |
| 1 | float | mbSalve2AI1 | ターゲットスレーブ2のシミュレーション入力パラメータ1 | 40001 | 読み取り専用 | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 2 | uint32_t | mbSalve2AI2 | ターゲットスレーブ2のシミュレーション入力パラメータ2 | 40003 | 読み取り専用 | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 5 | uint16_t | mbSalve2AI3 | 目標スレーブ局2のシミュレーション量入力パラメータ3 | 40005 | 読み取り専用 | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve2AO1 | 目標スレーブ局2のシミュレーション量出力パラメータ1 | 40006 | 読み取りと書き込み | ターゲットスレーブ2シミュレーション·パラメータ | ||
| 7 | uint16_t | mbSalve2AO2 | 目標スレーブ局2のシミュレーション量出力パラメータ2 | 40007 | 読み取りと書き込み | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve2AO3 | 目標スレーブ局2のシミュレーション量出力パラメータ3 | 40008 | 読み取りと書き込み | 0ターゲットスレーブステーション2シミュレーションパラメータ | ||
| 1 | bool | mbSalve2DI1 | ターゲットスレーブ2のデジタル量入力パラメータ1 | 1 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 2 | bool | mbSalve2DI2 | ターゲットスレーブステーション2のデジタル量入力パラメータ2 | 2 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 3 | bool | mbSalve2DI3 | ターゲットスレーブステーション2のデジタル量入力パラメータ3 | 3 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 4 | bool | mbSalve2DI4 | ターゲットスレーブステーション2のデジタル量入力パラメータ4 | 4 | 読み取り専用 | ターゲットスレーブ2数値パラメータ | ||
| 5 | bool | mbSalve2DO1 | ターゲットスレーブ2のデジタル量出力パラメータ1 | 5 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 6 | bool | mbSalve2DO2 | ターゲットスレーブ2のデジタル量出力パラメータ2 | 6 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 7 | bool | mbSalve2DO3 | ターゲットスレーブ2のデジタル量出力パラメータ3 | 7 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| 8 | bool | mbSalve2DO4 | ターゲットスレーブ2のデジタル量出力パラメータ4 | 8 | 読み取りと書き込み | ターゲットスレーブ2数値パラメータ | ||
| ターゲット·スレーブ1パラメータリスト | ||||||||
| ステーションアドレス:3、ボーレート:96 00、データビット:8、ストップビット:1、検証なし | ||||||||
| シリアル番号。 | データ型 | 変数名 | パラメータ名 | アドレス:address | 読取りおよび書込みプロパティ | 値の範囲 | デフォルト値 | 説明する。 |
| 1 | float | mbSalve3AI1 | 目標スレーブ3のシミュレーション入力パラメータ1 | 40001 | 読み取り専用 | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve3AI2 | 目標スレーブ3のシミュレーション入力パラメータ2 | 40003 | 読み取り専用 | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve3AI3 | 目標スレーブ3のシミュレーション量入力パラメータ3 | 40005 | 読み取り専用 | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve3AO1 | 目標スレーブ3のシミュレーション量出力パラメータ1 | 40006 | 読み取りと書き込み | ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 7 | uint16_t | mbSalve3AO2 | 目標スレーブ3のシミュレーション量出力パラメータ2 | 40007 | 読み取りと書き込み | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve3AO3 | 目的スレーブ3のシミュレーション量出力パラメータ3 | 40008 | 読み取りと書き込み | 0ターゲットスレーブステーション3シミュレーションパラメータ | ||
| 1 | bool | mbSalve3DI1 | ターゲットスレーブステーション3のデジタル量入力パラメータ1 | 1 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 2 | bool | mbSalve3DI2 | ターゲットスレーブステーション3のデジタル量入力パラメータ2 | 2 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 3 | bool | mbSalve3DI3 | ターゲットスレーブステーション3の数字量入力パラメータ3 | 3 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 4 | bool | mbSalve3DI4 | ターゲットスレーブステーション3のデジタル量入力パラメータ4 | 4 | 読み取り専用 | ターゲットスレーブ3数値パラメータ | ||
| 5 | bool | mbSalve3DO1 | ターゲットスレーブ3のデジタル量出力パラメータ1 | 5 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 6 | bool | mbSalve3DO2 | ターゲットスレーブ3のデジタル量出力パラメータ2 | 6 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 7 | bool | mbSalve3DO3 | ターゲットスレーブ3のデジタル量出力パラメータ3 | 7 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| 8 | bool | mbSalve3DO4 | ターゲットスレーブ3のデジタル量出力パラメータ4 | 8 | 読み取りと書き込み | ターゲットスレーブ3数値パラメータ | ||
| ターゲット·スレーブ1パラメータリスト | ||||||||
| ステーションアドレス:4、ボーレート:96 00、データビット:8、ストップビット:1、検証なし | ||||||||
| シリアル番号。 | データ型 | 変数名 | パラメータ名 | アドレス:address | 読取りおよび書込みプロパティ | 値の範囲 | デフォルト値 | 説明する。 |
| 1 | float | mbSalve4AI1 | 目標スレーブステーション4のシミュレーション入力パラメータ1 | 40001 | 読み取り専用 | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 2 | uint32_t | mbSalve4AI2 | 目標スレーブステーション4のシミュレーション入力パラメータ2 | 40003 | 読み取り専用 | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 5 | uint16_t | mbSalve4AI3 | 目標スレーブステーション4のシミュレーション量入力パラメータ3 | 40005 | 読み取り専用 | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 6 | uint16_t | mbSalve4AO1 | 目標スレーブステーション4のシミュレーション量出力パラメータ1 | 40006 | 読み取りと書き込み | ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 7 | uint16_t | mbSalve4AO2 | 目標スレーブステーション4のシミュレーション量出力パラメータ2 | 40007 | 読み取りと書き込み | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 8 | uint16_t | mbSalve4AO3 | 目標スレーブステーション4のシミュレーション量出力パラメータ3 | 40008 | 読み取りと書き込み | 0ターゲットスレーブステーション4シミュレーションパラメータ | ||
| 1 | bool | mbSalve4DI1 | ターゲットスレーブステーション4のデジタル量入力パラメータ1 | 1 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 2 | bool | mbSalve4DI2 | ターゲットスレーブステーション4のデジタル量入力パラメータ2 | 2 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 3 | bool | mbSalve4DI3 | ターゲットスレーブステーション4のデジタル量入力パラメータ3 | 3 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 4 | bool | mbSalve4DI4 | ターゲットスレーブステーション4のデジタル量入力パラメータ4 | 4 | 読み取り専用 | ターゲットスレーブ4数値パラメータ | ||
| 5 | bool | mbSalve4DO1 | ターゲットスレーブステーション4のデジタル量出力パラメータ1 | 5 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 6 | bool | mbSalve4DO2 | ターゲットスレーブステーション4のデジタル量出力パラメータ2 | 6 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 7 | bool | mbSalve4DO3 | ターゲットスレーブステーション4のデジタル量出力パラメータ3 | 7 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
| 8 | bool | mbSalve4DO4 | ターゲットスレーブステーション4のデジタル量出力パラメータ4 | 8 | 読み取りと書き込み | ターゲットスレーブ4数値パラメータ | ||
发表回复