CANPort.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  1. //// CANPort.cpp: implementation of the CCANPort class.
  2. ////
  3. ////////////////////////////////////////////////////////////////////////
  4. //
  5. #include "stdafx.h"
  6. //#include "resource.h"
  7. //#include "CANPort.h"
  8. ////#include "wddr.h"
  9. ////#include "log.h"
  10. ////#include "WDDR.h"
  11. //#ifdef _DEBUG
  12. //#undef THIS_FILE
  13. //static char THIS_FILE[]=__FILE__;
  14. //#define new DEBUG_NEW
  15. //#endif
  16. //
  17. ////#include "Table.h"
  18. ////#include "Aqmodule.h"
  19. ////#include ".\Generator\GeneratorD100.h"
  20. //#include "Usbcan\SimulateCan.h"
  21. ////#include "ReplaceYaoTai.h"
  22. //
  23. ////CTable* CCANPort::m_pTable = NULL;
  24. ////CReplaceYaoTai* CCANPort::m_pReplaceYaoTai = NULL;
  25. ////////////////////////////////////////////////////////////////////////
  26. //// Construction/Destruction
  27. ////////////////////////////////////////////////////////////////////////
  28. //
  29. //
  30. //
  31. ////-----------------------------------------------------
  32. ////参数:
  33. ////chr:要转换的字符
  34. ////cint:储存转换过来的数据
  35. ////函数功能:字符转换为数据
  36. ////-----------------------------------------------------
  37. //int chartoint(unsigned char chr, unsigned char* cint)//CCANPort::
  38. //{
  39. // unsigned char cTmp;
  40. // cTmp = chr - 48; //0-9
  41. // if (cTmp >= 0 && cTmp <= 9)
  42. // {
  43. // *cint = cTmp;
  44. // return 0;
  45. // }
  46. // cTmp = chr - 65;//A-F
  47. // if (cTmp >= 0 && cTmp <= 5)
  48. // {
  49. // *cint = (cTmp + 10);
  50. // return 0;
  51. // }
  52. // cTmp = chr - 97;//a-f
  53. // if (cTmp >= 0 && cTmp <= 5)
  54. // {
  55. // *cint = (cTmp + 10);
  56. // return 0;
  57. // }
  58. // return 1;
  59. //}
  60. //
  61. // //-----------------------------------------------------
  62. ////参数:
  63. ////str:要转换的字符串
  64. ////data:储存转换过来的数据串
  65. ////len:数据长度
  66. ////函数功能:字符串转换为数据串
  67. ////-----------------------------------------------------
  68. //int strtodata(unsigned char* str, unsigned char* data, int len, int flag)//CCANPort::
  69. //{
  70. // unsigned char cTmp = 0;
  71. // int i = 0;
  72. // for (int j = 0; j < len; j++)
  73. // {
  74. // if (chartoint(str[i++], &cTmp))
  75. // return 1;
  76. // data[j] = cTmp;
  77. // if (chartoint(str[i++], &cTmp))
  78. // return 1;
  79. // data[j] = (data[j] << 4) + cTmp;
  80. // if (flag == 1)
  81. // i++;
  82. // }
  83. // return 0;
  84. //}
  85. //
  86. //
  87. //
  88. //CCANPort::CCANPort()
  89. //{
  90. //// m_devtype = VCI_USBCAN1;
  91. // //device index
  92. // m_devind = 0;
  93. // //can number
  94. // m_cannum = 0;
  95. // //about thread
  96. // m_bCANThreadActive = FALSE;
  97. // m_Thread = NULL;
  98. // //can start flag
  99. // m_bCanStart = FALSE;
  100. // //2007.10.30-所有和CAN相连接的接口
  101. // //m_p50RF_RAD = NULL;
  102. // //m_pGeneratorD100 =NULL;
  103. // //m_pInfChestBrd = NULL;
  104. // m_hCANWindowHandle = NULL;
  105. //
  106. // m_nAngleDirection = 0;
  107. //
  108. // int m_nCANType = 0;
  109. // switch(m_nCANType)
  110. // {
  111. // case 0:
  112. // m_pCANEx = new CZLG;
  113. // break;
  114. // case 1:
  115. // m_pCANEx = new CPC;
  116. // break;
  117. // case 2:
  118. // m_pCANEx = new CJY;
  119. // case 9:
  120. // m_pCANEx = new CSimulateCan;
  121. // break;
  122. // }
  123. //}
  124. //
  125. //CCANPort::~CCANPort()
  126. //{
  127. //
  128. // if(m_Thread != NULL)
  129. // {
  130. // //DWORD dwSuspendCount;
  131. // //do{
  132. // // dwSuspendCount = m_Thread->ResumeThread();
  133. // //}while((dwSuspendCount != 0) && (dwSuspendCount != 0xffffffff) );
  134. //
  135. // //if (m_bCANThreadActive)//当前状态可能是活动也可能是不活动的
  136. // // m_bCANThreadActive = FALSE;
  137. //
  138. // //WaitForSingleObject(m_Thread->m_hThread,INFINITE);
  139. // //delete m_Thread;
  140. //
  141. // if (m_bCANThreadActive)
  142. // m_bCANThreadActive = FALSE;
  143. // }
  144. //
  145. //
  146. //
  147. // CAN_Close();
  148. // if(m_pCANEx)
  149. // {
  150. // delete m_pCANEx;
  151. // m_pCANEx = NULL;
  152. // }
  153. //}
  154. //
  155. ///*
  156. //*正常返回0,否则为1;
  157. //*/
  158. //BOOL CCANPort::CAN_Open(/*int DeviceType,*/DWORD DeviceInd, int Reserved)
  159. //{
  160. //// m_devtype = DeviceType;
  161. // m_devind = DeviceInd;
  162. // INT nFlag = 0;
  163. //// while(VCI_OpenDevice(m_devtype,m_devind,Reserved) != STATUS_OK)
  164. // if (!m_pCANEx->LoadDLL())
  165. // {
  166. // return FALSE;
  167. // }
  168. // while(m_pCANEx->OpenDevice(m_devind)!= STATUS_OK)
  169. // {
  170. // if(2 == nFlag++)
  171. // {
  172. // return FALSE;
  173. // }
  174. // Sleep(1000);
  175. // }
  176. // return TRUE;
  177. //}
  178. //
  179. //bool CCANPort::CAN_Start()
  180. //{
  181. // //if(VCI_StartCAN(m_devtype,m_devind,m_cannum)==1)
  182. // if(m_pCANEx->StartCAN(m_devind,m_cannum)==1)
  183. // {
  184. // m_bCanStart = TRUE;
  185. // return true;
  186. // }
  187. // else
  188. // {
  189. // return false;
  190. // }
  191. //
  192. //}
  193. //bool CCANPort::CAN_Reset()
  194. //{
  195. // //2007.11.19_此函数用来复位CAN
  196. // //if(VCI_ResetCAN(m_devtype,m_devind,m_cannum) == 1)
  197. // if(m_pCANEx->ResetCAN(m_devind,m_cannum)==1)
  198. // {
  199. // m_bCanStart = FALSE;
  200. // return true;
  201. // }
  202. // else
  203. // {
  204. // //VCI_CloseDevice(m_devtype,m_devind);
  205. // m_pCANEx->CloseDevice(m_devind);
  206. // m_bCanStart = FALSE;
  207. // return false;
  208. // }
  209. //
  210. //}
  211. //
  212. //void CCANPort::CAN_Close()
  213. //{
  214. // if(!m_bCanStart)
  215. // return;
  216. //
  217. // m_bCanStart = FALSE;
  218. //
  219. // Sleep(100);
  220. //
  221. // m_pCANEx->CloseDevice(m_devind);
  222. //}
  223. //
  224. //
  225. //BOOL CCANPort::CAN_Init(HWND hWnd, DWORD dwAccCode, DWORD dwAccMask, UCHAR ucFilter, UCHAR ucMode, UCHAR ucTiming0, UCHAR ucTiming1, int nCannum)
  226. //{
  227. // m_hCANWindowHandle = hWnd; //0
  228. // init_config.AccCode = dwAccCode; //0 验收码
  229. // init_config.AccMask = dwAccMask; //ffffffff 屏蔽码
  230. // init_config.Filter = ucFilter; //1 滤波方式:单滤/双滤0/1
  231. // init_config.Mode = ucMode; //0 模式:正常/只听,0/1
  232. // init_config.Timing0 = ucTiming0; //TIMING0 定时器1 timing0;
  233. // init_config.Timing1 = ucTiming1; //TIMING1
  234. // m_cannum = nCannum; //nCannum
  235. //
  236. // //初始化CAN
  237. // if (m_pCANEx->InitCAN(m_devind, m_cannum, &init_config) != STATUS_OK)
  238. // {
  239. // //VCI_CloseDevice(m_devtype,m_devind);
  240. // m_pCANEx->CloseDevice(m_devind);
  241. // return false;
  242. // }
  243. //
  244. // //开启接收线程
  245. //
  246. // DWORD m_HardwareStatusID;
  247. // m_Thread = CreateThread(0, 0, ReceiveThread, this, 0, (LPDWORD)m_HardwareStatusID);
  248. // if (m_Thread == NULL)
  249. // {
  250. // mLog::Fatal("Start HardwareStatus Thread Failed");
  251. // return false;
  252. // }
  253. //
  254. //
  255. //
  256. // //m_Thread = AfxBeginThread(ReceiveThread, this, THREAD_PRIORITY_BELOW_NORMAL/*THREAD_PRIORITY_NORMAL*/, 0, CREATE_SUSPENDED);
  257. // //m_Thread->m_bAutoDelete = FALSE;
  258. // //m_Thread->ResumeThread();
  259. //
  260. // return TRUE;
  261. //}
  262. //
  263. //
  264. //bool CCANPort::CAN_transmit(string strData, string strFrmID, BYTE RomoteFlag/*= 0*/, BYTE ExternFlag/*= 0*/, BYTE type/*=1*/)
  265. //{
  266. // VCI_CAN_OBJ frameinfo;
  267. // BYTE FrameID[4] = { 0,0,0,0 };
  268. // char szFrameID[9];
  269. // memset(szFrameID, '0', 9);
  270. // unsigned char Data[8];
  271. // char szData[25];
  272. // BYTE datalen = 0;
  273. //
  274. // //帧ID占4个字节,用16进制表示:0x21A09878,字符表示长度为8,----------------------here ,maybe not right.because as i know frameID =4.
  275. // if (strFrmID.length()>8)
  276. // {
  277. // return false;
  278. // }
  279. // //if (strFrmID.GetLength() > 8)
  280. // //{
  281. // // return false;
  282. // //}
  283. //
  284. // //发送数据,16进制表示,每个数无空格, 即:"01A1098070000000",最多16个数
  285. // //if (strData.GetLength() > 16)
  286. // if (strData.length() > 16)
  287. // {
  288. // return false;
  289. // }
  290. //
  291. // //发送帧类型:标准,扩展
  292. // if (ExternFlag == 0)//标准帧
  293. // {
  294. // if (strData.length() % 2 == 1)//。。。?
  295. // {
  296. // return false;
  297. // }
  298. // }
  299. // //copy 到低位
  300. // memcpy(&szFrameID[8 - strFrmID.length()], strFrmID.c_str(), strFrmID.length());
  301. //
  302. // strtodata((unsigned char*)szFrameID, FrameID, 4, 0);
  303. // //发送数据是16进制表示,每个数据之间有空格
  304. // datalen = (strData.length()) / 2;//实际个数
  305. //
  306. // strcpy(szData, strData.c_str());
  307. //
  308. // strtodata((unsigned char*)szData, Data, datalen, 0);
  309. //
  310. // frameinfo.DataLen = datalen;
  311. //
  312. // memcpy(&frameinfo.Data, Data, datalen);
  313. //
  314. // frameinfo.RemoteFlag = RomoteFlag;//数据帧/远程帧
  315. // frameinfo.ExternFlag = ExternFlag;
  316. //
  317. // frameinfo.TimeFlag = 0;
  318. // frameinfo.TimeStamp = 0;
  319. //
  320. // //帧类型约束帧ID的实际占有位数
  321. // if (frameinfo.ExternFlag == 1)
  322. // {
  323. // frameinfo.ID = ((DWORD)FrameID[0] << 24) + ((DWORD)FrameID[1] << 16) + ((DWORD)FrameID[2] << 8) +
  324. // ((DWORD)FrameID[3]);
  325. // }
  326. // else
  327. // {
  328. // frameinfo.ID = ((DWORD)FrameID[2] << 8) + ((DWORD)FrameID[3]);
  329. // }
  330. // frameinfo.SendType = type;//发送格式:单发。。
  331. //
  332. //
  333. // CCAN* p = m_pCANEx;
  334. // if (m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1) == 1)
  335. // {
  336. // return true;
  337. // }
  338. // else
  339. // {
  340. // Sleep(20);
  341. // if (m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1) == 1)
  342. // return true;
  343. // else
  344. // {
  345. // return false;
  346. // }
  347. // }
  348. //
  349. // return false;
  350. //}
  351. //
  352. //
  353. //DWORD CCANPort::ReceiveThread(void *param)
  354. //{
  355. // CCANPort* port = (CCANPort *)param;
  356. //
  357. // VCI_CAN_OBJ frameinfo[50];
  358. // VCI_ERR_INFO errinfo;
  359. // string strFrmID;
  360. // int nRecvDataLen = 1;
  361. //
  362. // string str;
  363. //
  364. // char recvbuf[10]{ 0,0,0,0,0,0,0,0,0,0 };
  365. //
  366. // port->m_bCANThreadActive = true;
  367. //
  368. // while(port->m_bCANThreadActive)
  369. // {
  370. // if (port == NULL) { return 0; }
  371. //
  372. // Sleep(4);
  373. // nRecvDataLen = port->m_pCANEx->Receive(port->m_devind, port->m_cannum, frameinfo, 50, 200);
  374. // if (nRecvDataLen == 0xffffffff)
  375. // {
  376. // port->m_pCANEx->ReadErrInfo(port->m_devind,port->m_cannum,&errinfo);
  377. // }
  378. // else
  379. // {
  380. //
  381. // //str.Format("frameinfo->ID=%X,frameinfo->DataLen=%d, [%02X,%02X,%02X,%02X,%02X,%02X,%02X,%02X]",
  382. // recvbuf[0] = frameinfo->ID;
  383. // recvbuf[1] = frameinfo->DataLen;
  384. // recvbuf[2] = frameinfo->Data[0];
  385. // recvbuf[3] = frameinfo->Data[1];
  386. // recvbuf[4] = frameinfo->Data[2];
  387. // recvbuf[5] = frameinfo->Data[3];
  388. // recvbuf[6] = frameinfo->Data[4];
  389. // recvbuf[7] = frameinfo->Data[5];
  390. // recvbuf[8] = frameinfo->Data[6];
  391. // recvbuf[9] = frameinfo->Data[7];
  392. // //port->m_pTableCtrl->m_pLog->WriteLog(str);
  393. // mLog::Info("CAN recv data:{$}\n", recvbuf);
  394. //
  395. //
  396. //
  397. //
  398. // if (frameinfo->ID == 0x405 && frameinfo->DataLen == 8)//立柱板节点
  399. // {
  400. //#pragma region ID405
  401. //
  402. // if (frameinfo->Data[1]==1)
  403. // {
  404. // mLog::Info("recv Column heart beat.");
  405. // }
  406. //
  407. // if (frameinfo->Data[1]==2)
  408. // {
  409. // //配置信息回复
  410. // int nPanelType = frameinfo->Data[2];//平板选择
  411. // int nAngle = frameinfo->Data[3];//C臂ML0位:角度
  412. // mLog::Info("recv : panel type:{$},C臂ML0位:角度={$}", nPanelType, nAngle);
  413. // //port->m_pTableCtrl->m_pLog->WriteLog(str);
  414. // }
  415. // if (frameinfo->Data[1]==3)
  416. // {
  417. // //曝光模式回复
  418. // int nExpMode = frameinfo->Data[2];
  419. // int nAECfield = frameinfo->Data[3];
  420. // int nAECDensity = frameinfo->Data[4];
  421. // mLog::Info("recv: exp mode:{$},AEC field={$},AEC density={$}", nExpMode, nAECfield, nAECDensity);
  422. // }
  423. // if (frameinfo->Data[1] == 4 && frameinfo->Data[2] == 0x61)
  424. // {
  425. // mLog::Info("recv ANRAN panel ready or not.");
  426. // }
  427. //
  428. // if (frameinfo->Data[2] == 0x10)
  429. // {
  430. // mLog::Info("recv panel ready status");
  431. // }
  432. // if (frameinfo->Data[2] == 0x20)
  433. // {
  434. // mLog::Info("recv gen ready status");
  435. // }
  436. // if (frameinfo->Data[2] == 0x30)
  437. // {
  438. // mLog::Info("recv exp start");
  439. // }
  440. // if (frameinfo->Data[2] == 0x40)
  441. // {
  442. // mLog::Info("recv exp finished");
  443. // }
  444. // if (frameinfo->Data[2] == 0x50)
  445. // {
  446. // mLog::Info("recv workflow finished.");
  447. // }
  448. //
  449. //
  450. //#if 0
  451. // int sid = (int)(frameinfo->Data[2] * 256 + frameinfo->Data[3]);
  452. // port->m_pTableCtrl->m_nSID = sid;
  453. // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_SID, sid, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC);
  454. // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_SID, sid, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE);
  455. //
  456. //
  457. // int _collimatorWsize = (int)(frameinfo->Data[4] * 256 + frameinfo->Data[5]);
  458. // int _collimatorHsize = (int)(frameinfo->Data[6] * 256 + frameinfo->Data[7]);
  459. //
  460. // port->m_pTableCtrl->m_nCollRealWSize = _collimatorWsize;
  461. // port->m_pTableCtrl->m_nCollRealHSize = _collimatorHsize;
  462. //
  463. // CString strlog;
  464. // strlog.Format("feedback collimator real size: id=0x7f0, height=%d mm,width=%d mm, sid=%d cm.", _collimatorHsize, _collimatorWsize, sid);
  465. // port->m_pTableCtrl->m_pLog->WriteLog(strlog, LOG_INFORMATION);
  466. //
  467. // int virtual_Wsize = 1;
  468. // int virtual_Hsize = 1;
  469. // if (port->m_pTableCtrl->m_nZoomMode == 0)//17*17
  470. // {
  471. //
  472. // virtual_Wsize = int(_collimatorWsize / port->m_pTableCtrl->m_fHcoefficient / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5);
  473. // virtual_Hsize = int(_collimatorHsize / port->m_pTableCtrl->m_fVcoefficient / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5);
  474. // }
  475. // else if (port->m_pTableCtrl->m_nZoomMode == 1)//9*9
  476. // {
  477. //
  478. // virtual_Wsize = int(_collimatorWsize / port->m_pTableCtrl->m_fHcoefficientZoom1 / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5);
  479. // virtual_Hsize = int(_collimatorHsize / port->m_pTableCtrl->m_fVcoefficientZoom1 / 10 / port->m_pTableCtrl->m_nFrontPartSID *port->m_pTableCtrl->m_nSID + 0.5);
  480. // }
  481. // strlog.Format("feedback collimator virtual size: id=0x7f0, height=%d cm,width=%d cm", virtual_Hsize, virtual_Wsize);
  482. // port->m_pTableCtrl->m_pLog->WriteLog(strlog, LOG_INFORMATION);
  483. //
  484. //
  485. //
  486. // if (port->m_pTableCtrl->m_pWnd != nullptr)
  487. // {
  488. // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, _collimatorWsize + _collimatorHsize * 100, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC);
  489. // port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, _collimatorWsize + _collimatorHsize * 100, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE);
  490. //
  491. // }
  492. // else
  493. // {
  494. // port->m_pTableCtrl->m_pLog->WriteLog("port->m_pTableCtrl->m_pWnd == nullptr", LOG_INFORMATION);
  495. // }
  496. //
  497. //
  498. //#endif // 0
  499. //#pragma endregion
  500. //
  501. // }
  502. // else if (frameinfo->ID == 0x425)//C臂控制板节点
  503. // {
  504. //#pragma region ID425
  505. //
  506. //
  507. //
  508. // if (frameinfo->Data[0]==0)
  509. // {
  510. // if (frameinfo->Data[1]==0x18)
  511. // {
  512. // mLog::Info("recv 双电位器错误 or not.Data[2]决定.");
  513. // }
  514. // if (frameinfo->Data[1]==0x06)
  515. // {
  516. // int nAngleSignal = frameinfo->Data[2];
  517. // int nAngleValue = frameinfo->Data[3];
  518. //
  519. // if (2 == nAngleSignal)//负
  520. // {
  521. // nAngleValue *= -1;
  522. // }
  523. // mLog::Info("recv C 臂旋转角度:{$}", nAngleValue);
  524. //
  525. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLL_ANGLE, nAngleValue, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC);
  526. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLL_ANGLE, nAngleValue, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE);
  527. //
  528. // }
  529. // }
  530. // if (frameinfo->Data[1]==1)
  531. // {
  532. // if (frameinfo->Data[1] == 1)
  533. // {
  534. // mLog::Info("recv C arm heart beat.");
  535. // }
  536. //
  537. // if (frameinfo->Data[1] == 2)
  538. // {
  539. // int nPrePressLimitValue = frameinfo->Data[2];
  540. // int nTotalPressLimitValue = frameinfo->Data[3];
  541. // mLog::Info("nPrePressLimitValue={$},nTotalPressLimitValue={$}", nPrePressLimitValue, nTotalPressLimitValue);
  542. //
  543. // }
  544. //
  545. // if (frameinfo->Data[1] == 3)
  546. // {
  547. // int nPressType = frameinfo->Data[2];
  548. // int nReleaseType = frameinfo->Data[3];
  549. // mLog::Info("recv:press type={$},release type={$}", nPressType,nReleaseType);
  550. //
  551. // }
  552. //
  553. // if (frameinfo->Data[1] == 4)
  554. // {
  555. // //振栅模式
  556. // int nGridType = frameinfo->Data[2];
  557. // mLog::Info("Grid Type={$}", nGridType);
  558. //
  559. // }
  560. //
  561. //
  562. // if (frameinfo->Data[1] == 5)
  563. // {
  564. // int nPressThickness = frameinfo->Data[2];
  565. // int nPressValue = frameinfo->Data[3];
  566. // mLog::Info("recv:nPressThickness={$},nPressValue={$}", nPressThickness, nPressValue);
  567. //
  568. // }
  569. //
  570. // if (frameinfo->Data[1] == 6)
  571. // {
  572. // int nCollLong = frameinfo->Data[2] * 256 + frameinfo->Data[3];
  573. // int nCollCross = frameinfo->Data[4] * 256 + frameinfo->Data[5];
  574. // mLog::Info("recv:nCollLong={$},nCollCross={$}", nCollLong, nCollCross);
  575. //
  576. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, nCollLong*100 + nCollCross, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC);
  577. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_COLLIMATOR, nCollLong*100 + nCollCross, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE);
  578. //
  579. // }
  580. //
  581. // if (frameinfo->Data[1] == 7)
  582. // {
  583. // int nFilter = frameinfo->Data[2];
  584. // //port->m_pTableCtrl->m_nFilterSet = nFilter;
  585. // mLog::Info("recv:Filter is {$},(1:Mo,2Rh)", nFilter);
  586. //
  587. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_FILTER, port->m_pTableCtrl->m_nFilterSet, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFOC);
  588. // //port->m_pTableCtrl->MSGControl(port->m_pTableCtrl->m_pWnd, ECOM_MSG_RFMC_PARAMOUT, ECOM_MECHCOMP_PA_FILTER, port->m_pTableCtrl->m_nFilterSet, ECOM_MSG_TYPE_SYNC_NO, ECOM_MSG_TARGETHANDLE_RFHARDWARE);
  589. //
  590. // }
  591. //
  592. // if (frameinfo->Data[1] == 12)
  593. // {
  594. // if (frameinfo->Data[2] == 0)
  595. // {
  596. // mLog::Info("recv 无错误");
  597. // }
  598. //
  599. // if (frameinfo->Data[2] == 1)
  600. // {
  601. // mLog::Info("recv:压迫其初始化未到位 ");
  602. // }
  603. //
  604. // if (frameinfo->Data[2] == 2)
  605. // {
  606. // mLog::Info("recv 压迫器上限位错误");
  607. // }
  608. //
  609. // if (frameinfo->Data[2] == 3)
  610. // {
  611. // mLog::Info("recv 过压错误");
  612. // }
  613. //
  614. // if (frameinfo->Data[2] == 4)
  615. // {
  616. // mLog::Info("recv 过流错误");
  617. // }
  618. //
  619. // if (frameinfo->Data[2] == 5)
  620. // {
  621. // mLog::Info("recv 自动释放未完成");
  622. // }
  623. //
  624. // if (frameinfo->Data[2] == 6)
  625. // {
  626. // mLog::Info("recv 限束器初始化成功");
  627. // }
  628. //
  629. // if (frameinfo->Data[2] == 7)
  630. // {
  631. // mLog::Info("recv 压迫释放完成");
  632. // }
  633. // }
  634. //
  635. // if (frameinfo->Data[1]==0x19)
  636. // {
  637. // int nPressBoardType = frameinfo->Data[2];
  638. // mLog::Info("recv:nPressBoardType={$}", nPressBoardType);
  639. // }
  640. //
  641. // }
  642. //
  643. //#pragma endregion
  644. // }
  645. // else if (frameinfo->ID == 0x485)//振动栅节点
  646. // {
  647. //#pragma region ID485
  648. //
  649. // //0x485 故障报文 4 3 故障状态:0.正确 ;1.初始化错误; 振栅板发送给图像
  650. // if (frameinfo->Data[0] ==4)
  651. // {
  652. // if (frameinfo->Data[1] == 3)
  653. // {
  654. // int nStatus = frameinfo->Data[2];
  655. // mLog::Info("recv:Grid Status={$}", nStatus);
  656. // }
  657. //
  658. // }
  659. //#pragma endregion
  660. //
  661. // }
  662. //
  663. // }
  664. // }
  665. // return 0;
  666. //}
  667. //
  668. //
  669. //#if 0
  670. //
  671. ////not use
  672. //
  673. //bool CCANPort::CAN_NoDelayTransmit(CString strData, CString strFrmID, byte RomoteFlag, byte ExternFlag, byte type)
  674. //{
  675. // VCI_CAN_OBJ frameinfo;
  676. // char szFrameID[9];
  677. // BYTE FrameID[4] = { 0,0,0,0 };
  678. // memset(szFrameID, '0', 9);
  679. // unsigned char Data[8];
  680. // char szData[25];
  681. // BYTE datalen = 0;
  682. // //帧ID占4个字节,用16进制表示:0x21A09878,字符表示长度为8,
  683. // if (strFrmID.GetLength() > 8)
  684. // {
  685. // return FALSE;
  686. // }
  687. // //发送数据,16进制表示,每个数无空格, 即:"01A1098070000000",最多16个数
  688. // if (strData.GetLength() > 16)
  689. // {
  690. // return FALSE;
  691. // }
  692. // //发送帧类型:标准,扩展
  693. // if (ExternFlag == 0)//标准帧
  694. // {
  695. // if (strData.GetLength() % 2 == 1)//。。。?
  696. // {
  697. // return false;
  698. // }
  699. // }
  700. // //copy 到低位
  701. // memcpy(&szFrameID[8 - strFrmID.GetLength()], (LPCTSTR)strFrmID, strFrmID.GetLength());
  702. // strtodata((unsigned char*)szFrameID, FrameID, 4, 0);
  703. // //发送数据是16进制表示,每个数据之间有空格
  704. // datalen = (strData.GetLength()) / 2;//实际个数
  705. // strcpy(szData, (LPCTSTR)strData);
  706. // strtodata((unsigned char*)szData, Data, datalen, 0);
  707. //
  708. // frameinfo.DataLen = datalen;
  709. // memcpy(&frameinfo.Data, Data, datalen);
  710. //
  711. // frameinfo.RemoteFlag = RomoteFlag;//数据帧/远程帧
  712. // frameinfo.ExternFlag = ExternFlag;
  713. //
  714. // frameinfo.TimeFlag = 0;
  715. // frameinfo.TimeStamp = 0;
  716. //
  717. // //帧类型约束帧ID的实际占有位数
  718. // if (frameinfo.ExternFlag == 1)
  719. // {
  720. // frameinfo.ID = ((DWORD)FrameID[0] << 24) + ((DWORD)FrameID[1] << 16) + ((DWORD)FrameID[2] << 8) +
  721. // ((DWORD)FrameID[3]);
  722. // }
  723. // else
  724. // {
  725. // frameinfo.ID = ((DWORD)FrameID[2] << 8) + ((DWORD)FrameID[3]);
  726. // }
  727. // frameinfo.SendType = type;//发送格式:单发。。
  728. //
  729. // //给文件内写数据!
  730. // //fprintf(m_p50RF_RAD->fp,strData+"\n");
  731. //
  732. // //if(1 == VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1))
  733. // if (1 == m_pCANEx->Transmit(m_devind, m_cannum, &frameinfo, 1))
  734. // return TRUE;
  735. // else
  736. // {
  737. // return FALSE;
  738. // }
  739. //}
  740. //
  741. //bool CCANPort::CAN_Read(bool& bRemoteFlag, bool& bExternFlag, CString strFrmID, CString& strData, CString& strTimeStamp)
  742. //{
  743. //
  744. // VCI_CAN_OBJ frameinfo[50];
  745. // VCI_ERR_INFO errinfo;
  746. // int len = 1;
  747. // int i = 0;
  748. // CString str, tmpstr;
  749. // strTimeStamp = "";
  750. //
  751. // len = m_pCANEx->Receive(m_devind, m_cannum, frameinfo, 50, 200);
  752. // if (len <= 0)
  753. // {
  754. // m_pCANEx->ReadErrInfo(m_devind, m_cannum, &errinfo);
  755. // return false;
  756. // }
  757. // else
  758. // {
  759. // for (i = 0; i < len; i++)
  760. // {
  761. // if (frameinfo[i].TimeFlag == 1)
  762. // strTimeStamp.Format("%08x ", frameinfo[i].TimeStamp);
  763. //
  764. // strFrmID.Format("%08x ", frameinfo[i].ID);
  765. //
  766. // bRemoteFlag = (frameinfo[i].RemoteFlag == 1);
  767. //
  768. // bExternFlag = (frameinfo[i].ExternFlag == 1);
  769. //
  770. // if (frameinfo[i].RemoteFlag == 0)
  771. // {
  772. // if (frameinfo[i].DataLen > 8)
  773. // frameinfo[i].DataLen = 8;
  774. // for (int j = 0; j < frameinfo[i].DataLen; j++)
  775. // {
  776. // tmpstr.Format("%02x ", frameinfo[i].Data[j]);
  777. // strData += tmpstr;
  778. // }
  779. // }
  780. // }
  781. //
  782. // }
  783. // return true;
  784. //
  785. //}
  786. //
  787. //void CCANPort::CAN_GetBordInfo(DWORD& DeviceType, DWORD& DeviceInd)
  788. //{
  789. //
  790. //}
  791. //#endif // 0