Head.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 =40001 , // 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. }RESPONSE_STRUCT, *PRESPONSE_STRUCT;
  72. //从站应答, 操作异常时报文
  73. typedef struct __FAILRESPONSE
  74. {
  75. HEADER Header;
  76. BYTE DataLen; // 数据长度 1字节,内容为2,高字节在前
  77. WORD ErrorCode; // 错误代码 0x0081 寄存器地址错误(无效的寄存器地址)
  78. // 0x0082 无效的功能码
  79. // 0x0083 寄存器不可读
  80. // 0x0084 寄存器不可写
  81. }FAILRESPONSE, *PFAILRESPONSE;
  82. typedef struct __REQUESTWRPARAM
  83. {
  84. HEADER Header;
  85. WORD StartAddr; //起止地址
  86. WORD RegNum; //寄存器个数
  87. BYTE DataLen; //数据长度
  88. WORD RegValue; //数据,寄存器个数×2字节,每个数据高字节在前
  89. }REQUESTWRPARAM, *pREQUESTWRPARAM;
  90. typedef struct __WRITESUCCESSRESPONSE
  91. {
  92. HEADER Header;
  93. WORD StartAddr; //寄存器起始地址
  94. WORD RegNum; //寄存器个数
  95. }WRITESUCCESSRESPONSE, *PWRITESUCCESSRESPONSE;
  96. //设置的通讯协议基本参数
  97. typedef struct __SETBASEPARAM
  98. {
  99. int nAddr;//地址码
  100. int nStartAddr;//起始地址
  101. int nRegNum;//读取的寄存器个数
  102. BYTE FuncCode;//功能码
  103. }SETBASEPARAM, *pSETBASEPARAM;
  104. #pragma pack(pop)//恢复对齐状态
  105. #endif //!defined(_INCLUDE_HEAD_H)