diff --git a/Modbus_communication/Modbus_TCP/common.cpp b/Modbus_communication/Modbus_TCP/common.cpp index 68ad345..55c16d9 100644 --- a/Modbus_communication/Modbus_TCP/common.cpp +++ b/Modbus_communication/Modbus_TCP/common.cpp @@ -290,4 +290,44 @@ void Crate_MBAP(UINT8 *Message, int Function_code, unsigned int Operations_Numbe Message[4] = 0x00; Message[5] = Count_Write_date_number(Function_code, Operations_Number) + 0x06; Message[6] = DEVICE_ID; -} \ No newline at end of file +} + +/********************************************************************************************* +* 功能    : 字符串转UINT8类型 +* 描述   : 根据写入数量和功能码类型输入相应的数据 +* 输入 : *Message 消息帧存放的数组 Write_date 要转换的字符串 +* Message_len消息帧数组的起始位置 +* 输出 : Message_len 消息帧的长度 +*********************************************************************************************/ +int HexStringtoByte(UINT8 *Message, string Write_date, int Message_len) +{ + const char *b = Write_date.c_str(); + for (int i = 0; i + 3 < Write_date.length(); i = i + 3) + { + sscanf_s(b + i, "%02X", (int *)(Message + Message_len)); + Message_len++; + } + sscanf_s(b + Write_date.length() - 2, "%02X", (int *)(Message + Message_len)); + return ++Message_len; +} + +/********************************************************************************************* +* 功能    : 生成TCP模式下的消息帧 +* 描述   : 根据要写入的数据生成消息帧 +* 输入 : *Message 消息帧存放的数组 Write_date 写入数据的字符串 +* Function_code 功能码 Operations_Number 操作数量 Starting_address起始地址 +* 输出 : 消息帧的总长度 +*********************************************************************************************/ +int Crate_TCP_Message(UINT8 *Message, int Function_code, unsigned int Operations_Number, unsigned int Starting_address, string Write_date) +{ + + Crate_MBAP(Message, Function_code, Operations_Number); + Message[7] = Function_code;//功能码 + Message[8] = Starting_address >> 8;//起始地址H + Message[9] = Starting_address;//起始地址L + Message[10] = Operations_Number >> 8;//操作数量H + Message[11] = Operations_Number;//操作数量L + + return HexStringtoByte(Message, Write_date, 12); + +} diff --git a/Modbus_communication/Modbus_TCP/main.cpp b/Modbus_communication/Modbus_TCP/main.cpp index 828c3f5..0dba8b0 100644 --- a/Modbus_communication/Modbus_TCP/main.cpp +++ b/Modbus_communication/Modbus_TCP/main.cpp @@ -1,28 +1,14 @@ #include "main.h" -//#include + #define DEVICE_ID 0x10 -void test(UINT8 *Message) -{ - Message[7] = 0x10; -} int main() { - int Operations_Number = 4; UINT8 Message[260]; - Message[0] = 0x00; - Message[1] = 0x00; - Message[2] = 0x00; - Message[3] = 0x00; - - Message[4] = 0x00; - Message[5] = Operations_Number; - Message[6] = DEVICE_ID; - test(Message); - for (int i = 0; i < 8; i++) - { - printf("%02X ", Message[i]); - } + int Function_code = 0x10; + unsigned int Operations_Number = 5; + unsigned int Starting_address = 13; + string a = "1F 00 01 02 03 04 05 06 07 06"; getchar(); return 0;