libmodbus库用于Modbusユニット测试的头文件

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

libmodbus库用于Modbusユニット测试的头文件

头文件(Header file)是一种包含声明或定义的文本記事件,通常用于在程序中引入外部代码。在C和C++中,头文件通常包含了函数、变量、常量的声明、タイプ定义以及宏定义等信息。头文件的主要作用是提供接口和声明,使得源代码文件可以アクセス到其他モジュール或库中的函数、变量和常量,同时也有利于代码的モジュール化和组织。

这段代码是一个用于Modbusユニット测试的头文件,其中包含了多个常量和設定,方便在测试过程で使用する。。让我来解释一下:

/* 版权信息 */
#ifndef _UNIT_TEST_H_
#define _UNIT_TEST_H_

/* 由configure.ac定义的常量 */
#define HAVE_INTTYPES_H @HAVE_INTTYPES_H@
#define HAVE_STDINT_H @HAVE_STDINT_H@

// もし定义了HAVE_INTTYPES_H,包含inttypes.h库
#ifdef HAVE_INTTYPES_H
#include <inttypes.h>
#endif
// もし定义了HAVE_STDINT_H,根据编译器决定包含的stdint.h库
#ifdef HAVE_STDINT_H
# ifndef _MSC_VER
# include <stdint.h>
# else
# include "stdint.h"
# endif
#endif

#define SERVER_ID         17  // 正常的サーバー·サーバーID
#define INVALID_SERVER_ID 18  // 非法的サーバー·サーバーID,用于触发エラー処理

// Modbusアドレス和数量定义
const uint16_t UT_BITS_ADDRESS = 0x130;  // Coil address
const uint16_t UT_BITS_NB = 0x25;        // コイルの数
const uint8_t UT_BITS_TAB[] = { 0xCD, 0x6B, 0xB2, 0x0E, 0x1B };  // 预设的コイルの状態

const uint16_t UT_INPUT_BITS_ADDRESS = 0x1C4;  // 入力コイルアドレス
const uint16_t UT_INPUT_BITS_NB = 0x16;        // 入力コイルの数
const uint8_t UT_INPUT_BITS_TAB[] = { 0xAC, 0xDB, 0x35 };  // input state

const uint16_t UT_REGISTERS_ADDRESS = 0x160;  // register address
const uint16_t UT_REGISTERS_NB = 0x3;         // number of registers
const uint16_t UT_REGISTERS_NB_MAX = 0x20;    // 最大レジスタの数
const uint16_t UT_REGISTERS_TAB[] = { 0x022B, 0x0001, 0x0064 };  // register value

// special address,用于ユニット测试中触发異常和特殊行为
const uint16_t UT_REGISTERS_ADDRESS_SPECIAL = 0x170;               // 特殊レジスター·アドレス
const uint16_t UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE = 0x171;  // InvalidTID或从デバイスアドレス
const uint16_t UT_REGISTERS_ADDRESS_SLEEP_500_MS = 0x172;          // 500毫秒睡眠アドレス
const uint16_t UT_REGISTERS_ADDRESS_BYTE_SLEEP_5_MS = 0x173;       // 5毫秒バイト睡眠アドレス

// 特殊的レジスタの数,用于エラーレスポンス测试
const uint16_t UT_REGISTERS_NB_SPECIAL = 0x2;  // 特殊レジスタの数

const uint16_t UT_INPUT_REGISTERS_ADDRESS = 0x108;  // Enter register address
const uint16_t UT_INPUT_REGISTERS_NB = 0x1;         // 入力レジスタ。数量
const uint16_t UT_INPUT_REGISTERS_TAB[] = { 0x000A };  // 入力レジスタ。值

const float UT_REAL = 123456.00;  // 浮動小数点数测试值

// 大小の変換配列,用于浮動小数点数在Modbusプロトコル中的存取测试
const uint8_t UT_IREAL_ABCD_SET[] = {0x47, 0xF1, 0x20, 0x00};   // ABCD格式設定
const uint16_t UT_IREAL_ABCD_GET[] = {0x47F1, 0x2000};          // ABCD格式取得
const uint8_t UT_IREAL_DCBA_SET[] = {0x00, 0x20, 0xF1, 0x47};   // DCBA格式設定
const uint16_t UT_IREAL_DCBA_GET[] = {0x0020, 0xF147};          // DCBA格式取得
const uint8_t UT_IREAL_BADC_SET[] = {0xF1, 0x47, 0x00, 0x20};   // BADC格式設定
const uint16_t UT_IREAL_BADC_GET[] = {0xF147, 0x0020};          // BADC格式取得
const uint8_t UT_IREAL_CDAB_SET[] = {0x20, 0x00, 0x47, 0xF1};   // CDAB格式設定
const uint16_t UT_IREAL_CDAB_GET[] = {0x2000, 0x47F1};          // CDAB格式取得

#endif /* _UNIT_TEST_H_ */

这个头文件主要包含了以下内容:

  • 常量定义
  • SERVER_IDINVALID_SERVER_ID 分别定义了正常和非法的サーバー·サーバーID。
  • Modbusアドレス和数量定义
  • 定义了コイルアドレス、コイルの数、コイルの状態データ集、入力コイルアドレス、入力コイルの数、入力ステータスデータ集、register address、number of registers、最大レジスタの数、レジスタの値等。
  • 特殊アドレス定义
  • 用于ユニット测试中触发異常和特殊行为的レジスター·アドレス,如无效TID或从デバイスアドレス、睡眠アドレス等。
  • 特殊的レジスタの数定义
  • 用于エラーレスポンス测试的特殊レジスタの数。
  • 浮動小数点数测试值定义
  • 定义了一个浮動小数点数测试值。
  • 大小の変換配列定义
  • 用于浮動小数点数在Modbusプロトコル中的存取测试的不同格式配列定义。

这些定义使得在进行Modbusプロトコル相关的ユニット测试时更加方便和系统化。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.