CommunProc.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. #ifndef COMMUNPROC_H
  2. #define COMMUNPROC_H
  3. #include "stdafx.h"
  4. //#include "ControlCAN.h"
  5. #ifdef _WIN64
  6. #include "include\64\ControlCAN.h"
  7. #else
  8. #include "include\32\ControlCAN.h"
  9. #endif
  10. #include "DataStructure.h"
  11. #include "WnLog.h"
  12. #define DATABUFFSIZE 512 //接收缓冲区尺寸
  13. #define MAX_IDNUM 10 //最大节点组 (从某节点收 又要发给该节点),
  14. //////////////////////////////////////////////////////////////////////////
  15. //ER状态
  16. #define ERStatus 401 //ER错误状态
  17. //EL状态
  18. #define ELStatus 402 //EL错误状态
  19. //ST状态
  20. #define ComSuccess 0 //ST000通讯成功
  21. #define IntoCheck 1 //ST001进入自检
  22. #define HandStausCheck 100 //ST100手闸状态检测
  23. #define SoftPowerCheck 101 //ST101软上电检测
  24. #define MainPowerCheck 102 //ST102主回路上电检测
  25. #define LoadCheck 103 //ST103负载检测
  26. #define RotatingCheck 104 //ST103旋转阳极回路检测
  27. #define SmallFocusCheck 105 //ST105小焦点灯丝回路检测
  28. #define BigFocusCheck 106 //ST106大焦点灯丝回路检测
  29. #define Standby 200 //待机
  30. #define HandOne 201
  31. #define Perspective 205 //进入耐压测试
  32. #define ManualCalibration 301
  33. #define Exping 500 //曝光中
  34. #define MACOUNT_R10 21
  35. #define MSCOUNT_R10 41
  36. #define MXCOUNT_R10 41
  37. #define MACOUNT_R20 41
  38. #define MSCOUNT_R20 81
  39. #define MXCOUNT_R20 81
  40. static int MATABLE_R10[]={100, 125, 160, 200, 250, 320, 400, 500,
  41. 630, 800, 1000, 1250, 1600, 2000, 2500, 3200,
  42. 4000, 5000, 6300, /*7000,*/8000, 10000}; //MA10倍
  43. //static int FLMTABLE[]={50, 63, 80, 100, 125 ,160 ,200 ,250 , 320, 400, 500, 630, 800, 1000}; //透视MA100倍
  44. static int FLMTABLE[]={5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
  45. 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
  46. 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
  47. 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
  48. 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
  49. 101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,
  50. 121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,
  51. 141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,
  52. 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,
  53. 181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,
  54. 210,220,230,240,250,260,270,280,290,300,310,320,330,340,350,360,370,380,390,400}; //透视MA10倍
  55. static int MSTABLE_R10[]={100, 125, 160, 200, 250, 320,
  56. 400, 500, 630, 800, 1000, 1250,
  57. 1600, 2000, 2500, 3200, 4000, 5000,
  58. 6300, 8000, 10000, 12500, 16000, 20000,
  59. 25000, 32000, 40000, 50000, 63000, 80000,
  60. 100000,125000,160000,200000,250000,320000,
  61. 400000,500000,630000,800000,1000000}; //MS100倍
  62. static int MXTABLE_R10[]={100, 125, 160, 200, 250, 320, 400,
  63. 500, 630, 800, 1000, 1250, 1600, 2000,
  64. 2500, 3200, 4000, 5000, 6300, 8000, 10000,
  65. 12500, 16000, 20000, 25000, 32000, 40000, 50000,
  66. 63000, 80000, 100000,125000,160000,200000,250000,
  67. 320000,400000,500000,630000,/*700000,*/800000,1000000};//MX1000倍
  68. static int MATABLE_R20[]={
  69. 100, 110, 125, 140, 160, 180, 200, 220, 250, 280,
  70. 320, 360, 400, 450, 500, 560, 630, 710, 800, 900,
  71. 1000,1100,1250,1400,1600,1800,2000, 2200,2500,2800,
  72. 3200,3600,4000,4500,5000,5600,6300,7100,8000,9000,
  73. 10000}; //MA10倍
  74. static int MSTABLE_R20[]={
  75. 100, 110, 120, 140, 160, 180, 200, 220, 250, 280,
  76. 320, 360, 400, 450, 500, 560, 630, 710, 800, 900,
  77. 1000, 1100, 1200, 1400, 1600, 1800, 2000, 2200, 2500, 2800,
  78. 3200, 3600, 4000, 4500, 5000, 5600, 6300, 7100, 8000, 9000,
  79. 10000,11000,12500,14000,16000,18000,20000,22000,25000,
  80. 28000,32000,36000,40000,45000,50000,56000,63000,71000,80000,
  81. 90000,100000,110000,120000,140000,160000,180000,200000,220000,250000,
  82. 280000,320000,360000,400000,450000,500000,560000,630000,710000,
  83. 800000,900000,1000000}; //MS100倍
  84. static int MXTABLE_R20[]={
  85. 100, 110, 120, 140, 160, 180, 200,
  86. 220, 250, 280, 320, 360, 400, 450,
  87. 500, 560, 630, 710, 800, 900, 1000,
  88. 1100, 1200, 1400, 1600, 1800, 2000, 2200,
  89. 2500, 2800, 3200, 3600, 4000, 4500, 5000,
  90. 5600, 6300, 7100, 8000, 9000, 10000, 11000,
  91. 12000, 14000, 16000, 18000, 20000, 22000, 25000,
  92. 28000, 32000, 36000, 40000, 45000, 50000, 56000,
  93. 63000, 71000, 80000, 90000, 100000, 110000, 125000,
  94. 140000, 160000, 180000, 200000, 220000, 250000, 280000,
  95. 320000, 360000, 400000, 450000, 500000, 560000, 630000,
  96. 710000, 800000, 900000, 1000000};//MX1000倍
  97. static int FNTABLE[]={-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8};
  98. typedef struct _HVDATA
  99. {
  100. int iCanData;
  101. }HVDATA;
  102. typedef struct _CANDATA
  103. {
  104. int iCanConnect; //设备是否连接成功
  105. int iDeviceType; //设备类型
  106. int iDeviceIndex; //设备索引
  107. int iBaudRate; //设备波特率
  108. VCI_INIT_CONFIG stInitConfig; //初始化配置参数结构 用于接收 包含每个Can的一些初始化信息
  109. VCI_CAN_OBJ frameinfo; // 包含can的一些 错误信息
  110. // VCI_INIT_CONFIG stInitConfigTx; //初始化配置参数结构 用于发送
  111. int iCANIndex ; //第几个can通道
  112. VCI_CAN_STATUS vcs; //can状态
  113. int iRXCanIDNum; //接收节点ID的数目;
  114. int iTXCanIDNum; //发送节点ID的数目;
  115. }CANDATA;
  116. typedef struct _COMCANFLAG
  117. {
  118. BOOL blReBagFlag[100]; //发送时清,收到应答时置FLASE 数据包接收成功标示
  119. unsigned char ucReBagIdGroup[100]; //组别标示
  120. unsigned char ucAnswerFlag[100]; //0无异常 1超大 2 过小
  121. int iHvConnect;
  122. }COMCANFLAG; //通信标示
  123. typedef struct _RXPROCESS //帧接收状态标号
  124. {
  125. BYTE byCommandRxFlag; //是否已经有命令被收到
  126. BYTE byDataRxFlag; //是否已经有数据被收到
  127. BYTE ucDataBagRxOK; //帧接收完毕
  128. }RXPROCESS;
  129. typedef struct _CAN_ID
  130. {
  131. UINT uiRID; //节点收
  132. UINT uiTID; //节点发
  133. BYTE ucIDGroupNumber;
  134. unsigned char ucRXbuf[DATABUFFSIZE]; // 本节点所收到的帧的缓冲区
  135. unsigned char ucTXbuf[DATABUFFSIZE]; //本节点需要发送的数据的缓冲区
  136. //UINT uiTxHead;
  137. UINT uiRxHead; //接收缓冲区 环形结构的 填充位置
  138. UINT uiRxTail; //接收缓冲区 环形结构的 读取位置
  139. //UINT uiTxTail;
  140. BYTE byRxCommandTemp[5]; //帧解析之 命令缓存
  141. BYTE byRxDataTemp[20]; //帧解析之 数据缓存
  142. RXPROCESS stProcessRx; //帧接收状态标号
  143. }CAN_ID;
  144. typedef struct
  145. {
  146. uint8_t id;
  147. uint16_t len;
  148. uint16_t Point;
  149. uint8_t crc;
  150. uint8_t status;
  151. uint8_t ask;
  152. }stPacketBuf;
  153. class _declspec(dllexport) CProtocolParser : public CObject
  154. {
  155. public:
  156. CProtocolParser();
  157. ~CProtocolParser();
  158. public:
  159. int iWorkStatus;
  160. CString strERTmp; //只记录一次错误
  161. CString strELTmp;
  162. bool bIsR20; //是否R20 ,默认R10(false)
  163. VCI_CAN_OBJ stCanTxIformation[100], stCanRxIformation[100]; //CAN数据帧接收,发送的缓冲结构 //can端口相关信息
  164. HVDATA stHvData[100];
  165. int KVValueArray[220];
  166. int MAValueArray[220];
  167. int KViii;
  168. int MAjjj;
  169. int MACOUNT;
  170. int MSCOUNT;
  171. int MXCOUNT;
  172. int MATABLE[MACOUNT_R20]; //默认用最大值来做tmp数组
  173. int MSTABLE[MSCOUNT_R20];
  174. int MXTABLE[MXCOUNT_R20];
  175. COMCANFLAG stComCanFlag;//成功标示
  176. BOOL bSendCmding; //是否正在发送RR或者RF
  177. HWND m_hWnd;
  178. CWinThread* m_ReadThread;
  179. int iDataNumber;
  180. static BYTE bDataLen[CMDCOUNT]; //命令对应的数据长度
  181. static BYTE CmdChar[CMDCOUNT][5];
  182. CAN_ID stCanID[MAX_IDNUM]; //节点通信相关的结构 目前默认最高可以有十个收发节点可以定义
  183. CANDATA stCaninfoData; //can总线的一些初始数据
  184. bool LogEnable,ErrLogEnable; //是否启用日志,默认不启用
  185. VCI_CAN_OBJ tCanTxIfo;
  186. unsigned char RxBufData[8];
  187. stPacketBuf tPacketBuf;
  188. stPacketBuf tPacketRxBuf;
  189. uint8_t ucPacketRecvBuf[8];
  190. uint8_t ucPackBuf[512];
  191. uint8_t ucPackAckFlg;
  192. public:
  193. int GetMA(int index);
  194. int GetMAIndex(int nMA);
  195. int GetFLM(int index);
  196. int GetFLMIndex(int nMA);
  197. int GetMS(int index);
  198. int GetMSIndex(int nMS);
  199. int GetMX(int index);
  200. int GetMXIndex(int nMX);
  201. int GetFN(int index);
  202. int GetFNIndex(int nFN);
  203. int GetFOValue();
  204. BOOL CanBusInit(void);
  205. unsigned char GetByteToRxBuf( CAN_ID *stP) ;//从buf中获取一个字节
  206. void ProcessComunicationGen(CAN_ID *stP); //帧处理
  207. void ClearKVMAArray(int iValue);
  208. UINT CharToInt(BYTE *byP,BYTE len);
  209. char* UintToChar(UINT IntValue,int iLen,char *cDataValue);
  210. void WriteSendLog(unsigned long ulLEN, BYTE cCMD1,int iZHENSISE,LOG_LEVEL LogLevel=NORMAL_LOG); //写发送日志
  211. void WriteReceiveLog(BYTE byDATALEN,BYTE byRXDATA[8], BYTE byRXDATA1[6]); //写接收日志
  212. // SendCommand函数中的iCmdFlag是为写日志
  213. BOOL SendCommand(BYTE cCmd1,char *cCmd2,int Cmd2Size,char *CmdData,int nDataSize,BYTE ucIDGroup); //发送命令和数据给别的节点
  214. //发送命令并返回数据 命令1 命令2 命令2长度 数据字符串 数据长度 节点ID组号
  215. int GetCpuCommandData(BYTE cCmd1,char *cCmd2,int Cmd2Size,char *CmdData,int nDataSize,BYTE ucIDGroup);
  216. //发送命令不返回数据 命令1 命令2 命令2长度 数据字符串 数据长度 节点ID组号
  217. void GetCpuCommandDataA(BYTE cCmd1,char *cCmd2,int Cmd2Size,char *CmdData,int nDataSize,BYTE ucIDGroup);
  218. int GetSomeCommandData(BYTE cCmd1,BYTE ucIDGroup);
  219. void CProtocolParser :: CmdDataHandle(BYTE Cmd, BYTE *RxData, BYTE DataLen,BYTE IdGrup );
  220. BOOL CanCommuInit();
  221. BOOL OpenCanDriver();
  222. BOOL CloseCanDriver();
  223. BOOL ResetCanDriver();
  224. BOOL ClearCanBuffer();
  225. unsigned char GetCanStatus();
  226. BOOL StartCanDriver();
  227. BOOL StartReadThread();
  228. BOOL StopReadThread();
  229. BOOL ResumeReadThread();
  230. void WriteLogFile(CString str,LOG_LEVEL LogLevel=NORMAL_LOG);
  231. void SetR10R20(bool R20); //false-R10 true-R20
  232. bool bSendHeader(uint8_t ucPacketId,uint16_t usLend);
  233. bool bSendEnder(uint8_t CRC);
  234. bool bSendAsker(uint8_t id,uint8_t ok);
  235. bool bSendvalue(uint8_t *aupValue,uint8_t len);
  236. bool bSendPacket(uint8_t ucPacketId,uint8_t *aupValue,uint16_t usLen);
  237. bool bSendPacketValue(uint8_t ucPacketId,uint8_t *aupValue,uint16_t usLen);
  238. void vRecvMainBoardUncode(uint8_t ucPacketRecvBuf[8]);
  239. void vPacketUncode();
  240. private:
  241. int n5MinPrompt;
  242. static UINT ReceiveThread(void *param);
  243. CString LogFilePath;
  244. CFile m_file;
  245. void InitCmdData();
  246. void ClearLogs(CString logFilePath, int numberOfKeptFiles);
  247. void CloseLogFile();
  248. void SetLogHead(CString& path);
  249. //增加错误日志
  250. CFile m_ErrorFile;
  251. CString ErrLogFilePath;
  252. void WriteErrorLog(CString str);
  253. BOOL CreateErrorLogFile();
  254. void CloseErrorLogFile();
  255. void SetTimeHead(CString& date);
  256. };
  257. #endif