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