Head.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #if !defined(_INCLUDE_HEAD_H)
  2. #define _INCLUDE_HEAD_H
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. #include <afxtempl.h>
  7. // Modbus Ascii 设备Dll错误代码定义
  8. enum __ERRO_CODE_MODBUS_ASC
  9. {
  10. ERR_CODE_MODBUS_TCP_NET_FAULT =20401 , // Modbus TCP设备通信故障
  11. ERR_CODE_MODBUS_TCP_NET_BUSY , // Modbus TCP设备通信忙
  12. ERR_CODE_MODBUS_TCP_NET_READ_NO_DATA , // Modbus TCP设备没有读到数据
  13. ERR_CODE_MODBUS_TCP_NET_READ_LEN_OVER , // Modbus TCP设备读到数据长度超时限制
  14. ERR_CODE_MODBUS_TCP_NET_LRC_LOST , // Modbus TCP设备lrc校验失败
  15. EER_CODE_MODBUS_TCP_NET_WRITE_DATA , // Modbus TCP设备写错误
  16. EER_CODE_MODBUS_TCP_NET_REGNUM , // Modbus TCP设备寄存器数
  17. };
  18. //错误应答代码
  19. enum __ERR_CODE_RES
  20. {
  21. ERR_CODE_TCP_REGADDR = 0x0081, //寄存器地址错误(无效的寄存器地址)
  22. ERR_CODE_TCP_INVALIDFUNCODE = 0x0082, //无效的功能码
  23. ERR_CODE_TCP_REGNOREAD = 0x0083, //寄存器不可读
  24. ERR_CODE_TCP_REGNOWRITE = 0x0084, //寄存器不可写
  25. };
  26. #pragma pack(push) //保存对齐状态
  27. #pragma pack(1) //设定为4字节对齐
  28. typedef struct tagPORTPARAM
  29. {
  30. BYTE PortNo; //Com端口
  31. DWORD BaudRate; //波特率
  32. BYTE ByteSize; /* Number of bits/byte, 4-8 */
  33. BYTE Parity; /* 校验位 0-4=None,Odd,Even,Mark,Space */
  34. BYTE StopBits; /* 结束位 0,1,2 = 1, 1.5, 2 */
  35. BYTE StartAddr; //起止地址
  36. int Interval; //间隔时间
  37. tagPORTPARAM()
  38. {
  39. PortNo=3;
  40. BaudRate=CBR_9600;
  41. ByteSize=8;
  42. Parity=NOPARITY;
  43. StopBits=ONESTOPBIT;
  44. StartAddr=1;
  45. Interval=1000;
  46. }
  47. }PORTPARAM,*PPORTPARAM;
  48. //协议头:
  49. typedef struct __HEADER
  50. {
  51. WORD TranProcessID; // 事务处理标识 2字节
  52. WORD ProtocolID; // 协议标识 2字节(0标识MODBUS协议)
  53. WORD ByteNum; // 后面字节数 2字节
  54. BYTE EquipAddr; // 单元标识,即从设备地址 1字节,内容为0-0xff
  55. BYTE FuncCode; // 功能码 1字节,内容为3
  56. }HEADER, *PHEADER;
  57. //读从设备寄存器数据
  58. typedef struct __REQUESTPARAM
  59. {
  60. HEADER Header; // 协议头
  61. WORD StartAddr; // 起始寄存器地址
  62. WORD RegNum; // 寄存器个数
  63. }REQUESTPARAM, *pREQUESTPARAM;
  64. //从站应答,操作正常时报文
  65. typedef struct __RESPONSE_STRUCT
  66. {
  67. HEADER Header; //协议头
  68. BYTE DataLen; //数据长度
  69. BYTE StrRtnMsg[80]; //数据
  70. //int iVarlid;
  71. int nReadResult; //读数据结果
  72. }RESPONSE_STRUCT, *PRESPONSE_STRUCT;
  73. //从站应答, 操作异常时报文
  74. typedef struct __FAILRESPONSE
  75. {
  76. HEADER Header;
  77. BYTE DataLen; // 数据长度 1字节,内容为2,高字节在前
  78. WORD ErrorCode; // 错误代码 0x0081 寄存器地址错误(无效的寄存器地址)
  79. // 0x0082 无效的功能码
  80. // 0x0083 寄存器不可读
  81. // 0x0084 寄存器不可写
  82. }FAILRESPONSE, *PFAILRESPONSE;
  83. //写从设备寄存器数据
  84. typedef struct __REQUESTWRPARAM
  85. {
  86. HEADER Header;
  87. WORD StartAddr; //起止地址
  88. WORD RegNum; //寄存器个数
  89. BYTE DataLen; //数据长度
  90. WORD RegValue; //数据,寄存器个数×2字节,每个数据高字节在前
  91. int nWriteResult; //读数据结果
  92. }REQUESTWRPARAM, *pREQUESTWRPARAM;
  93. typedef struct __WRITESUCCESSRESPONSE
  94. {
  95. HEADER Header;
  96. WORD StartAddr; //寄存器起始地址
  97. WORD RegNum; //寄存器个数
  98. }WRITESUCCESSRESPONSE, *PWRITESUCCESSRESPONSE;
  99. //设置的通讯协议基本参数
  100. typedef struct __SETBASEPARAM
  101. {
  102. int nAddr;//地址码
  103. int nStartAddr;//起始地址
  104. int nRegNum;//读取的寄存器个数
  105. BYTE FuncCode;//功能码
  106. }SETBASEPARAM, *pSETBASEPARAM;
  107. #pragma pack(pop)//恢复对齐状态
  108. #define IS_USE_EVENT 0
  109. #endif //!defined(_INCLUDE_HEAD_H)