diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp index aa50521..1641fc8 100644 --- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp +++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.cpp @@ -5,7 +5,7 @@ char read_buf[MAX_NUMBER]; bitset Coil_date; //0-9999 UINT16 Register[MAX_Address]; // 0-9999 unsigned int Response_Message_Len; -unsigned int RTU_Enable = 0; +unsigned int RTU_Enable = 1; /********************************************************************************************* * 功能     :  初始化线圈和寄存器 diff --git a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h index 0915441..dc08f61 100644 --- a/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h +++ b/Modbus_communication/Modbus_RTU_Salve/RTU_Salve.h @@ -7,5 +7,7 @@ #define MAX_NUMBER 256 int Modbus_RTU_Salve(void); +bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWORD Read_len); +void Init_Coil_Register(void); #endif \ No newline at end of file diff --git a/Modbus_communication/Modbus_communication.sln b/Modbus_communication/Modbus_communication.sln index 6775702..56fb18e 100644 --- a/Modbus_communication/Modbus_communication.sln +++ b/Modbus_communication/Modbus_communication.sln @@ -9,6 +9,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Modbus_TCP", "Modbus_TCP\Mo EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TCP_Master_test", "TCP_Master_test\TCP_Master_test.vcxproj", "{677F6F19-D890-4DE8-9EFD-08FE0E154AD0}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RTU_Salve_test", "RTU_Salve_test\RTU_Salve_test.vcxproj", "{4443732F-F883-4E71-ACDD-E5E777C63728}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -27,6 +29,10 @@ Global {677F6F19-D890-4DE8-9EFD-08FE0E154AD0}.Debug|Win32.Build.0 = Debug|Win32 {677F6F19-D890-4DE8-9EFD-08FE0E154AD0}.Release|Win32.ActiveCfg = Release|Win32 {677F6F19-D890-4DE8-9EFD-08FE0E154AD0}.Release|Win32.Build.0 = Release|Win32 + {4443732F-F883-4E71-ACDD-E5E777C63728}.Debug|Win32.ActiveCfg = Debug|Win32 + {4443732F-F883-4E71-ACDD-E5E777C63728}.Debug|Win32.Build.0 = Debug|Win32 + {4443732F-F883-4E71-ACDD-E5E777C63728}.Release|Win32.ActiveCfg = Release|Win32 + {4443732F-F883-4E71-ACDD-E5E777C63728}.Release|Win32.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Modbus_communication/RTU_Salve_test/3.ini b/Modbus_communication/RTU_Salve_test/3.ini new file mode 100644 index 0000000..ace39c5 --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/3.ini @@ -0,0 +1,164 @@ +[Example] +Number = 37 + +[Example1] +Input1 = "09 01 00 00 00 01 FC 82" +Output = "09 01 01 01 92 28" + +[Example2] +Input1 = "09 01 00 00 00 0A BD 45" +Output = "09 01 02 FF 03 59 CC" + +[Example3] +Input1 = "09 01 00 00 00 C8 3C D4" +Output = "09 01 19 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D6 40" + +[Example4] +Input1 = "09 01 00 00 07 D0 3E EE" +Output = "09 01 FA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 8D BF" + +[Example5] +Input1 = "09 01 00 00 07 D1 FF 2E" +Output = "09 81 03 81 93" + +[Example6] +Input1 = "09 01 00 00 00 00 3D 42" +Output = "09 81 03 81 93" + +[Example7] +Input1 = "09 01 00 00 00 01 00 82 41" +Output = "09 81 03 81 93" + +[Example8] +Input1 = "09 01 00 00 00 01 11 11" +Output = "" + +[Example9] +Input1 = "08 01 00 00 00 01 FD 53" +Output = "" + +[Example10] +Input1 = "09 01 27 06 00 14 D7 F8" +Output = "09 81 02 40 53" + + + +[Example11] +Input1 = "09 03 00 00 00 01 85 42" +Output = "09 03 02 FF FF 58 35" + +[Example12] +Input1 = "09 03 00 00 00 64 45 69" +Output = "09 03 C8 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ED 8C" + +[Example13] +Input1 = "09 03 00 00 00 7B 04 A1" +Output = "09 03 F6 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 34 54" + +[Example14] +Input1 = "09 03 00 00 00 7D 84 A3" +Output = "09 03 FA FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 70 F8" + +[Example15] +Input1 = "09 03 00 00 00 00 44 82" +Output = "09 83 03 80 F3" + +[Example16] +Input1 = "09 03 00 00 00 7E C4 A2" +Output = "09 83 03 80 F3" + +[Example17] +Input1 = "09 03 00 00 00 01 00 83 A3" +Output = "09 83 03 80 F3" + + +[Example18] +Input1 = "09 03 00 00 00 01 11 11" +Output = "" + +[Example19] +Input1 = "08 03 00 00 00 01 84 93" +Output = "" + +[Example20] +Input1 = "09 03 27 06 00 14 AE 38" +Output = "09 83 02 41 33" + + + + + + + +[Example21] +Input1 = "09 0F 00 00 00 01 01 01 EE F1" +Output = "09 0F 00 00 00 01 95 43" + +[Example22] +Input1 = "09 0F 00 00 07 B0 F6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B8 78" +Output = "09 0F 00 00 07 B0 57 07" + +[Example23] +Input1 = "09 0F 00 00 00 00 54 83" +Output = "09 8F 03 85 F3" + +[Example24] +Input1 = "09 0F 00 00 00 01 01 01 00 71 4C" +Output = "09 8F 03 85 F3" + +[Example25] +Input1 = "09 0F 00 00 07 B1 F6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 DB" +Output = "09 8F 03 85 F3" + +[Example26] +Input1 = "09 0F 00 00 00 01 01 01 11 F1" +Output = "" + +[Example27] +Input1 = "08 0F 00 00 00 01 01 01 2F 3D" +Output = "" + +[Example28] +Input1 = "09 0F 27 06 00 14 03 02 FF FF 54 11" +Output = "09 8F 02 44 33" + + + + + + +[Example29] +Input1 = "09 10 00 00 00 01 02 00 00 C1 90" +Output = "09 10 00 00 00 01 00 81" + +[Example30] +Input1 = "09 10 00 00 00 02 04 00 00 00 00 D9 CF" +Output = "09 10 00 00 00 02 40 80" + +[Example31] +Input1 = "09 10 00 00 00 7B F6 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CE 42" +Output = "09 10 00 00 00 7B 81 62" + +[Example32] +Input1 = "09 10 00 00 00 00 C1 41" +Output = "09 90 03 8D C3" + +[Example33] +Input1 = "09 10 00 00 00 01 02 00 00 00 51 90" +Output = "09 90 03 8D C3" + +[Example34] +Input1 = "09 10 00 00 00 01 02 01 01 11 11" +Output = "" + +[Example35] +Input1 = "08 10 00 00 00 01 02 01 01 0C 50" +Output = "" + +[Example36] +Input1 = "09 10 27 0F 00 02 04 00 00 00 00 26 7E" +Output = "09 90 02 4C 03" + +[Example37] +Input1 = "09 10 27 06 00 14 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D9 BB" +Output = "09 90 02 4C 03" \ No newline at end of file diff --git a/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj b/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj new file mode 100644 index 0000000..96e355a --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj @@ -0,0 +1,81 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + + {4443732F-F883-4E71-ACDD-E5E777C63728} + RTU_Salve_test + + + + Application + true + v120 + MultiByte + + + Application + false + v120 + true + MultiByte + + + + + + + + + + + + + + + Level3 + Disabled + true + _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + + + true + + + + + Level3 + MaxSpeed + true + true + true + + + true + true + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj.filters b/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj.filters new file mode 100644 index 0000000..38f311e --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/RTU_Salve_test.vcxproj.filters @@ -0,0 +1,42 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + 源文件 + + + 源文件 + + + 源文件 + + + + + 头文件 + + + 头文件 + + + 头文件 + + + \ No newline at end of file diff --git a/Modbus_communication/RTU_Salve_test/RTU_Test_Code.cpp b/Modbus_communication/RTU_Salve_test/RTU_Test_Code.cpp new file mode 100644 index 0000000..a35caad --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/RTU_Test_Code.cpp @@ -0,0 +1,106 @@ +#include "RTU_Test_Code.h" + +/********************************************************************************************* +* Function Test 1: Parsing Request Message +*********************************************************************************************/ +void Parsing_Request_Message_Test(void) +{ + char buf[LEN]; + CString name = "Example"; + char s[10] = ""; + int Input1; + int j = 0; + int number = GetPrivateProfileInt(name, "Number", 0, TESTPATH3); + for (int i = 1; i < number + 1; i++) + { + memset(buf, 0, sizeof(buf)); + memset(s, 0, sizeof(s)); + _itoa_s(i, s, 10); + CString name1 = name + s; + Input1 = GetPrivateProfileString(name1, "Input1", "", buf, LEN, TESTPATH3); + + UINT8 Requst_Message[300]; + UINT8 Response_Message[300]; + string Act_Message = buf; + const char *b = Act_Message.c_str(); + unsigned int Act_len = 0; + for (unsigned int i = 0; i + 3 < Act_Message.length(); i = i + 3) + { + sscanf_s(b + i, "%02X", (int *)(Requst_Message + Act_len)); + Act_len++; + } + sscanf_s(b + Act_Message.length() - 2, "%02X", (int *)(Requst_Message + Act_len)); + //bool Create_Response_Message(UINT8 *Requst_Message, UINT8 *Response_Message, DWORD Read_len) + bool a = Create_Response_Message(Requst_Message, Response_Message, Act_len+1); + j++; + printf("%d---%d\n", j, a); + } +} + +/********************************************************************************************* +* Function Test 2: Create Response Message +*********************************************************************************************/ +void Create_Response_Message_Test(void) +{ + char buf[LEN]; + char buf1[LEN]; + CString name = "Example"; + char s[10] = ""; + int Input1, Input2; + int number = GetPrivateProfileInt(name, "Number", 0, TESTPATH3); + Init_Coil_Register(); + for (int i = 1; i < number + 1; i++) + { + memset(buf, 0, sizeof(buf)); + memset(buf1, 0, sizeof(buf1)); + memset(s, 0, sizeof(s)); + _itoa_s(i, s, 10); + CString name1 = name + s; + Input1 = GetPrivateProfileString(name1, "Input1", "", buf, LEN, TESTPATH3); + Input2 = GetPrivateProfileString(name1, "Output", "", buf1, LEN, TESTPATH3); + + UINT8 Request_Message[300]; + memset(Request_Message, 0, 300); + string Act_Message = buf; + const char *b = Act_Message.c_str(); + unsigned int Act_len = 0; + for (unsigned int i = 0; i + 3 < Act_Message.length(); i = i + 3) + { + sscanf_s(b + i, "%02X", (int *)(Request_Message + Act_len)); + Act_len++; + } + sscanf_s(b + Act_Message.length() - 2, "%02X", (int *)(Request_Message + Act_len)); + + + UINT8 Act_Response_Message[300]; + memset(Act_Response_Message, 0, 300); + unsigned int Act_len1 = 0; + if (Input2 != 0) + { + string Act_Message1 = buf1; + const char *a = Act_Message1.c_str(); + for (unsigned int i = 0; i + 3 < Act_Message1.length(); i = i + 3) + { + sscanf_s(a + i, "%02X", (int *)(Act_Response_Message + Act_len1)); + Act_len1++; + } + sscanf_s(a + Act_Message1.length() - 2, "%02X", (int *)(Act_Response_Message + Act_len1)); + } + + UINT8 Response_Message[300]; + memset(Response_Message, 0, 300); + Create_Response_Message(Request_Message, Response_Message, Act_len + 1); + printf("%d\n",i); + for (unsigned int j = 0; j < Act_len1 + 1; j++) + { + printf("%02X ", Act_Response_Message[j]); + } + printf("\n"); + for (unsigned int m = 0; m < Act_len1 + 1; m++) + { + printf("%02X ", Response_Message[m]); + } + printf("\n"); + printf("\n"); + } +} \ No newline at end of file diff --git a/Modbus_communication/RTU_Salve_test/RTU_Test_Code.h b/Modbus_communication/RTU_Salve_test/RTU_Test_Code.h new file mode 100644 index 0000000..b67eed6 --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/RTU_Test_Code.h @@ -0,0 +1,14 @@ +#ifndef __RTU_TEST_CODE_H +#define __RTU_TEST_CODE_H + +#include "../Modbus_RTU_Salve/RTU_Salve.h" +#include +#include + +#define TESTPATH3 "./3.ini" +#define LEN 65535 + +void Parsing_Request_Message_Test(void); +void Create_Response_Message_Test(void); + +#endif diff --git a/Modbus_communication/RTU_Salve_test/RTU_test.cpp b/Modbus_communication/RTU_Salve_test/RTU_test.cpp new file mode 100644 index 0000000..fcfc575 --- /dev/null +++ b/Modbus_communication/RTU_Salve_test/RTU_test.cpp @@ -0,0 +1,9 @@ +#include "RTU_Test_Code.h" + +int main() +{ + Parsing_Request_Message_Test(); + Create_Response_Message_Test(); + getchar(); + return 0; +} \ No newline at end of file