Eine Header-Datei ist eine Textdatei, die eine Deklaration oder Definition enthält und normalerweise verwendet wird, um externe Codes in ein Programm einzuführen. In C und C + + enthalten Headerdateien in der Regel Informationen wie Funktionen, Variablen, Konstantendeklarationen, Typdefinitionen und Makro-Definitions. Die Hauptaufgabe von Header-Dateien besteht darin, Schnittstellen und Deklarationen bereitzustellen, sodass die Quellcode-Dateien auf Funktionen, Variablen und Konstanten in anderen Modulen oder Bibliotheken zugreifen können und gleichzeitig die Modularisierung und Organisation des Codes erleichtern.
Dieser Code ist eine Header-Datei für Modbus-Einheitstests, die mehrere Konstanten und Konfigurationen enthält, die während des Tests bequem zu verwenden sind. Lassen Sie mich erklären:
/* 版权信息 */
#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; // 线圈地址
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 }; // 输入状态
const uint16_t UT_REGISTERS_ADDRESS = 0x160; // 寄存器地址
const uint16_t UT_REGISTERS_NB = 0x3; // 寄存器数量
const uint16_t UT_REGISTERS_NB_MAX = 0x20; // 最大寄存器数量
const uint16_t UT_REGISTERS_TAB[] = { 0x022B, 0x0001, 0x0064 }; // 寄存器值
// 特殊地址,用于单元测试中触发异常和特殊行为
const uint16_t UT_REGISTERS_ADDRESS_SPECIAL = 0x170; // 特殊寄存器地址
const uint16_t UT_REGISTERS_ADDRESS_INVALID_TID_OR_SLAVE = 0x171; // 无效TID或从设备地址
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; // 输入寄存器地址
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_ */Diese Header-Datei enthält hauptsächlich Folgendes:
- Konstantendefinition:
SERVER_ID和INVALID_SERVER_IDdefiniert die normalen und illegalen Server-IDs.- Modbus-Adresse und Anzahl-Definition:
- definiert die Spule-Adresse, die Anzahl der Spule, den Datensatz des Spule-Zustands, die Eingabspule-Adresse, die Anzahl der Eingabspule, den Datensatz des Eingabspule-Zustands, die Register-Adresse, die Anzahl der Register, die maximale Anzahl der Registers, den Registerwert usw.
- Spezielle Adress-Definition:
- Die Register-Adresse, die bei Einheitstests Ausnahmen und spezielle Verhaltensweisen auslöst, wie z. B. ungültige TIDs oder Slave-Adressen, Schlaf-Adressen usw.
- Anzahl spezieller Registers:
- Die Anzahl spezieller Registers, die für den Fehlerantwortstest verwendet werden.
- Floating-Comma - Test-Wert - Definition:
- Ein Floating-Comma - Test-Wert wird definiert
- Größenübertragung Array-Definition:
- Eine Array-Definition in verschiedenen Formaten für Zugriffstests von Gleitkommazahlen im Modbus-Protokoll.
Diese Definitionen erleichtern und systematischen die Durchführung von Modbus-Einheitstests.
Antwort veröffentlichen