Browse Source

完成TCP_Message生成模块

Modbus_TCP
zcn1123 4 years ago
parent
commit
d4c77b908f
2 changed files with 46 additions and 20 deletions
  1. +41
    -1
      Modbus_communication/Modbus_TCP/common.cpp
  2. +5
    -19
      Modbus_communication/Modbus_TCP/main.cpp

+ 41
- 1
Modbus_communication/Modbus_TCP/common.cpp View File

@@ -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;
}
}

/*********************************************************************************************
* 功能    : 字符串转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);
}

+ 5
- 19
Modbus_communication/Modbus_TCP/main.cpp View File

@@ -1,28 +1,14 @@
#include "main.h"
//#include <stdlib.h>
#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;

||||||
x
 
000:0
Loading…
Cancel
Save