CMS.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. #include "StdAfx.h"
  2. #include "CommProcess.h"
  3. #include ".\cms.h"
  4. CCMS::CCMS(
  5. char szPath[MAX_PATH], // 程序所在路径 ;
  6. char szIniName[MAX_PATH], // 配置文件名称;
  7. int nCommPort, // 串行端口;
  8. int nAddr, // 设备地址;
  9. int nRate, // 波特率 ;
  10. int nDataBit, // 数据位;
  11. int nStopBit, // 停止位;
  12. int nParity, // 校验位;
  13. int nInterval // 时间间隔;
  14. )
  15. {
  16. #if IS_USE_READMSG_CS
  17. InitializeCriticalSection( &m_csReadMsg ); //初始化一个临界资源对象;
  18. #endif
  19. MTVERIFY( m_hSemComm = CreateEvent( NULL, TRUE, TRUE, 0 ) ); //创建或打开一个命名的或无名的事件对象;
  20. for( int i = 0; i < MAX_ADDR; i++ )
  21. {
  22. memset(m_sz_01Msg[i], 0, sizeof(m_sz_01Msg[i]));
  23. //memset(m_sz_02Msg[i], 0, sizeof(m_sz_02Msg[i]));
  24. //memset(m_sz_03Msg[i], 0, sizeof(m_sz_03Msg[i]));
  25. //memset(m_sz_04Msg[i], 0, sizeof(m_sz_04Msg[i]));
  26. //memset(m_sz_06Msg[i], 0, sizeof(m_sz_06Msg[i]));
  27. m_devOnline[i] = TRUE;
  28. m_dwOnlineTick[i] = 0;
  29. }
  30. }
  31. CCMS::~CCMS()
  32. {
  33. #if IS_USE_READMSG_CS
  34. DeleteCriticalSection( &m_csReadMsg );
  35. #endif
  36. MTVERIFY( CloseHandle( m_hSemComm ) );
  37. CloseComm();
  38. }
  39. BOOL CCMS::CMSOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval)
  40. {
  41. BOOL bResult = FALSE;
  42. bResult = OpenComm( nCommPort, nAddr, nRate, nDataBit, nStopBit, nParity, nInterval );
  43. return bResult;
  44. }
  45. // 发送读取设备参数请求;
  46. int CCMS::SendReadRequest(
  47. char szPath[MAX_PATH], // 程序所在路径 ;
  48. char szIniName[MAX_PATH], // 配置文件名称 ;
  49. int nCommPort, // 串行端口;
  50. int nAddr, // 设备地址;
  51. char szCmd[MAX_CMD], // 请求命令;
  52. char szMsg[VAR_MSG], // 响应的值 ;
  53. int nReversed1, // 预留整形参数1接口
  54. int nReversed2, // 预留整形参数2接口
  55. int nReversed3, // 预留整形参数3接口
  56. int nReversed4, // 预留整形参数4接口
  57. int nReversed5, // 预留整形参数5接口
  58. float fReversed1, // 预留float参数1接口
  59. float fReversed2, // 预留float参数2接口
  60. float fReversed3, // 预留float参数3接口
  61. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  62. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  63. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  64. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  65. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  66. )
  67. {
  68. int nIndex = 0, nLen = 0;
  69. char IniSendCMD[MAX_CMD] = {0};
  70. char szType[TYPE_LENGTH] = {0};
  71. char szScreen[MAX_CMD] = {0};
  72. int StartBit = 0;
  73. int EndBit = 0;
  74. GetCMSIniInfo(szPath, szIniName, szCmd, IniSendCMD, szType, nIndex, nLen, StartBit, EndBit);
  75. CCommProcess *pComm = FindComm(nCommPort);
  76. if( pComm == NULL ) return -1;
  77. int nRet = -1;
  78. if( (strlen(m_sz_01Msg[nAddr - 1]) == 0 &&
  79. (strcmp(szCmd, "cmd-1") == 0 || strcmp(szCmd, "cmd-2") == 0 || strcmp(szCmd, "cmd-3") == 0 ||
  80. strcmp(szCmd, "cmd-4") == 0 || strcmp(szCmd, "cmd-6") == 0 || strcmp(szCmd, "cmd-5") == 0 ||
  81. strcmp(szCmd, "cmd-7") == 0 || strcmp(szCmd, "cmd-8") == 0 || strcmp(szCmd, "cmd-9") == 0 ||
  82. strcmp(szCmd, "cmd-10") == 0 || strcmp(szCmd, "cmd-11") == 0 || strcmp(szCmd, "cmd-12") == 0 ||
  83. strcmp(szCmd, "cmd-13") == 0 || strcmp(szCmd, "cmd-14") == 0 || strcmp(szCmd, "cmd-15") == 0 ||
  84. strcmp(szCmd, "cmd-16") == 0 || strcmp(szCmd, "cmd-17") == 0 || strcmp(szCmd, "cmd-18") == 0 ||
  85. strcmp(szCmd, "cmd-19") == 0 || strcmp(szCmd, "cmd-20") == 0 || strcmp(szCmd, "cmd-21") == 0 ||
  86. strcmp(szCmd, "cmd-22") == 0 || strcmp(szCmd, "cmd-23") == 0 || strcmp(szCmd, "cmd-24") == 0 ||
  87. strcmp(szCmd, "cmd-25") == 0 || strcmp(szCmd, "cmd-26") == 0 || strcmp(szCmd, "cmd-27") == 0 ||
  88. strcmp(szCmd, "cmd-28") == 0 || strcmp(szCmd, "cmd-29") == 0 || strcmp(szCmd, "cmd-30") == 0 ||
  89. strcmp(szCmd, "cmd-31") == 0 || strcmp(szCmd, "cmd-32") == 0 || strcmp(szCmd, "cmd-33") == 0 ||
  90. strcmp(szCmd, "cmd-34") == 0 || strcmp(szCmd, "cmd-35") == 0 || strcmp(szCmd, "cmd-36") == 0 ||
  91. strcmp(szCmd, "cmd-37") == 0 || strcmp(szCmd, "cmd-38") == 0 || strcmp(szCmd, "cmd-39") == 0 ||
  92. strcmp(szCmd, "cmd-40") == 0 || strcmp(szCmd, "cmd-41") == 0 || strcmp(szCmd, "cmd-42") == 0 ||
  93. strcmp(szCmd, "cmd-43") == 0 || strcmp(szCmd, "cmd-44") == 0 || strcmp(szCmd, "cmd-45") == 0 ||
  94. strcmp(szCmd, "cmd-46") == 0 || strcmp(szCmd, "cmd-47") == 0 || strcmp(szCmd, "cmd-48") == 0 ||
  95. strcmp(szCmd, "cmd-49") == 0 || strcmp(szCmd, "cmd-50") == 0 || strcmp(szCmd, "cmd-51") == 0 ||
  96. strcmp(szCmd, "cmd-52") == 0 || strcmp(szCmd, "cmd-53") == 0 || strcmp(szCmd, "cmd-54") == 0 ||
  97. strcmp(szCmd, "cmd-55") == 0 || strcmp(szCmd, "cmd-56") == 0 || strcmp(szCmd, "cmd-57") == 0 ||
  98. strcmp(szCmd, "cmd-58") == 0 || strcmp(szCmd, "cmd-59") == 0 || strcmp(szCmd, "cmd-60") == 0 ||
  99. strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 || strcmp(szCmd, "cmd-63") == 0 ||
  100. strcmp(szCmd, "cmd-64") == 0 || strcmp(szCmd, "cmd-65") == 0 || strcmp(szCmd, "cmd-66") == 0 ||
  101. strcmp(szCmd, "cmd-67") == 0 || strcmp(szCmd, "cmd-68") == 0 || strcmp(szCmd, "cmd-69") == 0 ||
  102. strcmp(szCmd, "cmd-60") == 0 || strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 ||
  103. strcmp(szCmd, "cmd-63") == 0 || strcmp(szCmd, "cmd-64") == 0 ))
  104. ||
  105. strcmp(szCmd, "cmd-1") == 0 ||
  106. strcmp(szCmd, "cmd-16") == 0 ||
  107. strcmp(szCmd, "cmd-42") == 0 )
  108. {
  109. nRet = GetDeviceParam(nAddr, pComm, IniSendCMD, szCmd, szMsg, nIndex, nLen, szType );
  110. if( nRet != 0 ) return nRet;
  111. }
  112. if( GetTickCount() - m_dwOnlineTick[nAddr - 1] > 60 *1000 && m_dwOnlineTick[nAddr - 1] > 0 )
  113. {
  114. m_devOnline[nAddr - 1] = FALSE;
  115. }
  116. else if( GetTickCount() - m_dwOnlineTick[nAddr - 1] < 60 *1000 && m_dwOnlineTick[nAddr - 1] > 0 )
  117. {
  118. m_devOnline[nAddr - 1] = TRUE;
  119. }
  120. if( m_devOnline[nAddr - 1] == FALSE )
  121. {
  122. return -1;
  123. }
  124. nRet = GetCMS_01VarMsg(nAddr, szCmd, szMsg, nIndex, nLen, szType, StartBit, EndBit);
  125. //LOG4C((LOG_NOTICE,"nRet = %d,cmd = %s,值 = %s",nRet,szCmd,szMsg));
  126. return nRet;
  127. }
  128. int CCMS::GetCMS_01VarMsg(
  129. int nAddr,
  130. char szCmd[MAX_CMD],
  131. char szMsg[VAR_MSG],
  132. int &nIndex,
  133. int &nLen,
  134. char szType[TYPE_LENGTH],
  135. int startBit,
  136. int endBit )
  137. {
  138. int nRet = 0;
  139. if( strcmp(szCmd, "cmd-1") == 0 || strcmp(szCmd, "cmd-2") == 0 || strcmp(szCmd, "cmd-3") == 0 ||
  140. strcmp(szCmd, "cmd-4") == 0 || strcmp(szCmd, "cmd-6") == 0 || strcmp(szCmd, "cmd-5") == 0 ||
  141. strcmp(szCmd, "cmd-7") == 0 || strcmp(szCmd, "cmd-8") == 0 || strcmp(szCmd, "cmd-9") == 0 ||
  142. strcmp(szCmd, "cmd-10") == 0 || strcmp(szCmd, "cmd-11") == 0 || strcmp(szCmd, "cmd-12") == 0 ||
  143. strcmp(szCmd, "cmd-13") == 0 || strcmp(szCmd, "cmd-14") == 0 || strcmp(szCmd, "cmd-15") == 0 ||
  144. strcmp(szCmd, "cmd-16") == 0 || strcmp(szCmd, "cmd-17") == 0 || strcmp(szCmd, "cmd-18") == 0 ||
  145. strcmp(szCmd, "cmd-19") == 0 || strcmp(szCmd, "cmd-20") == 0 || strcmp(szCmd, "cmd-21") == 0 ||
  146. strcmp(szCmd, "cmd-22") == 0 || strcmp(szCmd, "cmd-23") == 0 || strcmp(szCmd, "cmd-24") == 0 ||
  147. strcmp(szCmd, "cmd-25") == 0 || strcmp(szCmd, "cmd-26") == 0 || strcmp(szCmd, "cmd-27") == 0 ||
  148. strcmp(szCmd, "cmd-28") == 0 || strcmp(szCmd, "cmd-29") == 0 || strcmp(szCmd, "cmd-30") == 0 ||
  149. strcmp(szCmd, "cmd-31") == 0 || strcmp(szCmd, "cmd-32") == 0 || strcmp(szCmd, "cmd-33") == 0 ||
  150. strcmp(szCmd, "cmd-34") == 0 || strcmp(szCmd, "cmd-35") == 0 || strcmp(szCmd, "cmd-36") == 0 ||
  151. strcmp(szCmd, "cmd-37") == 0 || strcmp(szCmd, "cmd-38") == 0 || strcmp(szCmd, "cmd-39") == 0 ||
  152. strcmp(szCmd, "cmd-40") == 0 || strcmp(szCmd, "cmd-41") == 0 || strcmp(szCmd, "cmd-42") == 0 ||
  153. strcmp(szCmd, "cmd-43") == 0 || strcmp(szCmd, "cmd-44") == 0 || strcmp(szCmd, "cmd-45") == 0 ||
  154. strcmp(szCmd, "cmd-46") == 0 || strcmp(szCmd, "cmd-47") == 0 || strcmp(szCmd, "cmd-48") == 0 ||
  155. strcmp(szCmd, "cmd-49") == 0 || strcmp(szCmd, "cmd-50") == 0 || strcmp(szCmd, "cmd-51") == 0 ||
  156. strcmp(szCmd, "cmd-52") == 0 || strcmp(szCmd, "cmd-53") == 0 || strcmp(szCmd, "cmd-54") == 0 ||
  157. strcmp(szCmd, "cmd-55") == 0 || strcmp(szCmd, "cmd-56") == 0 || strcmp(szCmd, "cmd-57") == 0 ||
  158. strcmp(szCmd, "cmd-58") == 0 || strcmp(szCmd, "cmd-59") == 0 || strcmp(szCmd, "cmd-60") == 0 ||
  159. strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 || strcmp(szCmd, "cmd-63") == 0 ||
  160. strcmp(szCmd, "cmd-64") == 0 || strcmp(szCmd, "cmd-65") == 0 || strcmp(szCmd, "cmd-66") == 0 ||
  161. strcmp(szCmd, "cmd-67") == 0 || strcmp(szCmd, "cmd-68") == 0 || strcmp(szCmd, "cmd-69") == 0 ||
  162. strcmp(szCmd, "cmd-60") == 0 || strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 ||
  163. strcmp(szCmd, "cmd-63") == 0 || strcmp(szCmd, "cmd-64") == 0)
  164. {
  165. #if IS_USE_READMSG_CS
  166. EnterCriticalSection( &m_csReadMsg );
  167. #endif
  168. DataProcess(szType, m_sz_01Msg[nAddr - 1] + nIndex, szMsg, nLen, startBit, endBit);
  169. #if IS_USE_READMSG_CS
  170. LeaveCriticalSection(&m_csReadMsg);
  171. #endif
  172. nRet = 0;
  173. }
  174. return nRet;
  175. }
  176. int CCMS::GetDeviceParam(
  177. int nAddr,
  178. CCommProcess *pComm,
  179. char IniSendCMD[MAX_CMD],
  180. char szCmd[MAX_CMD],
  181. char szMsg[VAR_MSG],
  182. int &nIndex,
  183. int &nLen,
  184. char szType[TYPE_LENGTH])
  185. {
  186. int nRet = -1;
  187. nRet = RequestReadStatus(nAddr, szCmd, pComm, IniSendCMD);
  188. if( nRet != 0 )
  189. {
  190. return nRet;
  191. }
  192. nRet = ResponseReadStatus(nAddr, pComm, szCmd, szMsg, nIndex, nLen, szType);
  193. return nRet;
  194. }
  195. void CCMS::SetCMS_01VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer)
  196. {
  197. if( strcmp(szCmd, "cmd-1") == 0 || strcmp(szCmd, "cmd-2") == 0 || strcmp(szCmd, "cmd-3") == 0 ||
  198. strcmp(szCmd, "cmd-4") == 0 || strcmp(szCmd, "cmd-6") == 0 || strcmp(szCmd, "cmd-5") == 0 ||
  199. strcmp(szCmd, "cmd-7") == 0 || strcmp(szCmd, "cmd-8") == 0 || strcmp(szCmd, "cmd-9") == 0 ||
  200. strcmp(szCmd, "cmd-10") == 0 || strcmp(szCmd, "cmd-11") == 0 || strcmp(szCmd, "cmd-12") == 0 ||
  201. strcmp(szCmd, "cmd-13") == 0 || strcmp(szCmd, "cmd-14") == 0 || strcmp(szCmd, "cmd-15") == 0 ||
  202. strcmp(szCmd, "cmd-16") == 0 || strcmp(szCmd, "cmd-17") == 0 || strcmp(szCmd, "cmd-18") == 0 ||
  203. strcmp(szCmd, "cmd-19") == 0 || strcmp(szCmd, "cmd-20") == 0 || strcmp(szCmd, "cmd-21") == 0 ||
  204. strcmp(szCmd, "cmd-22") == 0 || strcmp(szCmd, "cmd-23") == 0 || strcmp(szCmd, "cmd-24") == 0 ||
  205. strcmp(szCmd, "cmd-25") == 0 || strcmp(szCmd, "cmd-26") == 0 || strcmp(szCmd, "cmd-27") == 0 ||
  206. strcmp(szCmd, "cmd-28") == 0 || strcmp(szCmd, "cmd-29") == 0 || strcmp(szCmd, "cmd-30") == 0 ||
  207. strcmp(szCmd, "cmd-31") == 0 || strcmp(szCmd, "cmd-32") == 0 || strcmp(szCmd, "cmd-33") == 0 ||
  208. strcmp(szCmd, "cmd-34") == 0 || strcmp(szCmd, "cmd-35") == 0 || strcmp(szCmd, "cmd-36") == 0 ||
  209. strcmp(szCmd, "cmd-37") == 0 || strcmp(szCmd, "cmd-38") == 0 || strcmp(szCmd, "cmd-39") == 0 ||
  210. strcmp(szCmd, "cmd-40") == 0 || strcmp(szCmd, "cmd-41") == 0 || strcmp(szCmd, "cmd-42") == 0 ||
  211. strcmp(szCmd, "cmd-43") == 0 || strcmp(szCmd, "cmd-44") == 0 || strcmp(szCmd, "cmd-45") == 0 ||
  212. strcmp(szCmd, "cmd-46") == 0 || strcmp(szCmd, "cmd-47") == 0 || strcmp(szCmd, "cmd-48") == 0 ||
  213. strcmp(szCmd, "cmd-49") == 0 || strcmp(szCmd, "cmd-50") == 0 || strcmp(szCmd, "cmd-51") == 0 ||
  214. strcmp(szCmd, "cmd-52") == 0 || strcmp(szCmd, "cmd-53") == 0 || strcmp(szCmd, "cmd-54") == 0 ||
  215. strcmp(szCmd, "cmd-55") == 0 || strcmp(szCmd, "cmd-56") == 0 || strcmp(szCmd, "cmd-57") == 0 ||
  216. strcmp(szCmd, "cmd-58") == 0 || strcmp(szCmd, "cmd-59") == 0 || strcmp(szCmd, "cmd-60") == 0 ||
  217. strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 || strcmp(szCmd, "cmd-63") == 0 ||
  218. strcmp(szCmd, "cmd-64") == 0 || strcmp(szCmd, "cmd-65") == 0 || strcmp(szCmd, "cmd-66") == 0 ||
  219. strcmp(szCmd, "cmd-67") == 0 || strcmp(szCmd, "cmd-68") == 0 || strcmp(szCmd, "cmd-69") == 0 ||
  220. strcmp(szCmd, "cmd-60") == 0 || strcmp(szCmd, "cmd-61") == 0 || strcmp(szCmd, "cmd-62") == 0 ||
  221. strcmp(szCmd, "cmd-63") == 0 || strcmp(szCmd, "cmd-64") == 0)
  222. {
  223. #if IS_USE_READMSG_CS
  224. EnterCriticalSection( &m_csReadMsg );
  225. #endif
  226. memcpy(m_sz_01Msg[nAddr - 1], pBuffer + 6, sizeof(m_sz_01Msg[nAddr - 1]));
  227. #if IS_USE_READMSG_CS
  228. LeaveCriticalSection(&m_csReadMsg);
  229. #endif
  230. }
  231. }
  232. int CCMS::GetCMSIniInfo(
  233. char szPath[MAX_PATH],
  234. char szIniName[MAX_PATH],
  235. char szCmd[MAX_CMD],
  236. char IniSendCMD[MAX_CMD],
  237. char szType[TYPE_LENGTH],
  238. int &nIndex,
  239. int &nLen,
  240. int &StaBit,
  241. int &EndBit
  242. )
  243. {
  244. char szFile[MAX_PATH + 1] = "";
  245. char szSendCmd[3] = {0};
  246. memset(szType, 0, TYPE_LENGTH);
  247. wsprintf(szFile, "%s\\config\\%s", szPath, szIniName);
  248. GetPrivateProfileString(szCmd, "SendCmd", "", szSendCmd, MAX_CMD, szFile);
  249. IniSendCMD[0] = atoi(szSendCmd);
  250. int s = atoi(szSendCmd);
  251. GetPrivateProfileString(szCmd, "Type", "", szType, TYPE_LENGTH, szFile);
  252. nIndex = GetPrivateProfileInt(szCmd, "Index", 0, szFile);
  253. nLen = GetPrivateProfileInt(szCmd, "Len", 0, szFile);
  254. StaBit = GetPrivateProfileInt(szCmd,"Sbit",0,szFile);
  255. EndBit = GetPrivateProfileInt(szCmd,"Ebit",0,szFile);
  256. return 0;
  257. }
  258. int CCMS::RequestReadStatus(
  259. int nAddr,
  260. char szCmd[MAX_CMD],
  261. CCommProcess *pComm,
  262. char IniSendCMD[MAX_CMD]
  263. )
  264. {
  265. int nRet = -1;
  266. #if DEBUG_CMS
  267. int iLen = sizeof(RequstCMD);
  268. char tmp[2] = {0};
  269. RequstCMD RequestPara;
  270. ZeroMemory(&RequestPara,iLen);
  271. RequestPara.Start[0] = 0xEA;
  272. RequestPara.Start[1] = 0x02;
  273. RequestPara.Start[2] = 0x02;
  274. RequestPara.Start[3] = 0xEA;
  275. RequestPara.nAddr = nAddr;
  276. RequestPara.CMS = GetCMSbyCMD(IniSendCMD[0]);
  277. tmp[0] = nAddr;
  278. tmp[1] = RequestPara.CMS;
  279. RequestPara.Check = GetEndCheck(tmp,2);
  280. //结束符
  281. RequestPara.End = 0x16;
  282. //LOG4C_HEX_DUMP((LOG_NOTICE, (char *)&RequestPara, sizeof(RequestPara)));
  283. if( WaitForSingleObject( m_hSemComm, 0 ) == WAIT_OBJECT_0 ) // 有信号才写串口
  284. {
  285. ResetEvent( m_hSemComm );
  286. int nResult = pComm->Write((BYTE *)&RequestPara, iLen);
  287. if( nResult == iLen )
  288. {
  289. }
  290. else
  291. {
  292. SetEvent( m_hSemComm );
  293. return EER_CODE_CMS_COM_WRITE_DATA;
  294. }
  295. }
  296. else
  297. {
  298. return ERR_CODE_CMS_COM_BUSY;
  299. }
  300. #endif
  301. return 0;
  302. }
  303. int CCMS::ResponseReadStatus(
  304. int nAddr,
  305. CCommProcess *pComm,
  306. char szCmd[MAX_CMD],
  307. char szMsg[VAR_MSG],
  308. int &nIndex,
  309. int &nLen,
  310. char szType[TYPE_LENGTH]
  311. )
  312. {
  313. #if DEBUG_CMS
  314. int nRecvLen = 0;
  315. char *pBuffer = new char[270];
  316. memset(pBuffer, 0, 270);
  317. nRecvLen = pComm->Read((BYTE *)pBuffer,270);
  318. if( nRecvLen <= 0)
  319. {
  320. SetEvent( m_hSemComm );
  321. if( pBuffer != NULL)
  322. {
  323. delete[] pBuffer;
  324. pBuffer = NULL;
  325. }
  326. return ERR_CODE_CMS_COM_READ_NO_DATA;
  327. }
  328. SetCMS_01VarMsg(nAddr, szCmd, pBuffer);
  329. m_dwOnlineTick[nAddr - 1] = GetTickCount();
  330. SetEvent( m_hSemComm );
  331. if( pBuffer != NULL)
  332. {
  333. delete[] pBuffer;
  334. pBuffer = NULL;
  335. }
  336. #else
  337. SimulationCommData(nAddr);
  338. #endif
  339. return 0;
  340. }
  341. int CCMS::GetheadCheck(char *buf)
  342. {
  343. int len = static_cast<int>(strlen(buf)),iSum = 0;
  344. for (int i = 0; i < len; i++)
  345. {
  346. iSum += buf[i];
  347. }
  348. return iSum;
  349. }
  350. int CCMS::GetCMSbyCMD(unsigned char CMD,BOOL b)
  351. {
  352. char CMS = 0;
  353. // CMS 前1位,后6位bit结合;
  354. if (b) // 请求;
  355. {
  356. CMS = 0x80 + CMD;
  357. }
  358. else // 返回;
  359. {
  360. CMS = CMD;
  361. }
  362. return CMS;
  363. }
  364. int CCMS::GetEndCheck(char *buf,int len)
  365. {
  366. int iSum = 0;
  367. for (int i = 0; i < len; i++)
  368. {
  369. iSum += buf[i];
  370. }
  371. // 再求低8位;
  372. iSum = iSum & 0x00FF;
  373. return iSum;
  374. }
  375. void CCMS:: DataProcess(char *szType, char *szMsg, char *szConvMsg, int len, int StaBit, int EndBit)
  376. {
  377. if ( strcmp(szType, "HEX1") == 0)
  378. {
  379. char sztmp1[3] = {0};
  380. char sztmp2[3] = {0};
  381. char sztmp[5] = {0};
  382. BYTE tmp[2] ={0};
  383. tmp[0] = szMsg[1];
  384. tmp[1] = szMsg[0];
  385. itoa(tmp[0],sztmp1,16);
  386. itoa(tmp[1],sztmp2,16);
  387. sprintf(sztmp,"%s%s",sztmp1,sztmp2);
  388. CString str;
  389. str.Format("%s",sztmp);
  390. if (str.GetLength() == 3)
  391. {
  392. str.Format("%d%s",0,sztmp);
  393. }
  394. else if (str.GetLength() == 2)
  395. {
  396. str.Format("%d%d%s",0,0,sztmp);
  397. }
  398. memcpy(sztmp,str.GetBuffer(),4);
  399. str.ReleaseBuffer();
  400. int iSum = AsciiToBYTE(sztmp[0])*4096 + AsciiToBYTE(sztmp[1])*256 + AsciiToBYTE(sztmp[2])*16 + AsciiToBYTE(sztmp[3]) ;
  401. sprintf(szConvMsg,"%d",iSum);
  402. }
  403. else if( strcmp(szType, "HEX2") == 0)
  404. {
  405. char sztmp1[3] = {0};
  406. char sztmp2[3] = {0};
  407. char sztmp[5] = {0};
  408. BYTE tmp[2] ={0};
  409. tmp[0] = szMsg[1];
  410. tmp[1] = szMsg[0];
  411. itoa(tmp[0],sztmp1,16);
  412. itoa(tmp[1],sztmp2,16);
  413. sprintf(sztmp,"%s%s",sztmp1,sztmp2);
  414. CString str;
  415. str.Format("%s",sztmp);
  416. if (str.GetLength() == 3)
  417. {
  418. str.Format("%d%s",0,sztmp);
  419. }
  420. else if (str.GetLength() == 2)
  421. {
  422. str.Format("%d%d%s",0,0,sztmp);
  423. }
  424. memcpy(sztmp,str.GetBuffer(),4);
  425. str.ReleaseBuffer();
  426. int iSum = AsciiToBYTE(sztmp[0])*4096 + AsciiToBYTE(sztmp[1])*256 + AsciiToBYTE(sztmp[2])*16 + AsciiToBYTE(sztmp[3]) ;
  427. iSum = iSum & 0x0FFF;
  428. if (tmp[0] >> 7)
  429. {
  430. sprintf(szConvMsg,"-%d",iSum);
  431. return;
  432. }
  433. sprintf(szConvMsg,"%d",iSum);
  434. }
  435. else if( strcmp(szType, "HEX3") == 0)
  436. {
  437. sprintf(szConvMsg,"%d",szMsg[0]);
  438. }
  439. else if ( strcmp(szType, "HEX4") == 0 )
  440. {
  441. //BYTE tmp = 0x04;
  442. BitDataProcess((BYTE)szMsg[0],szConvMsg,StaBit,EndBit);
  443. //BitDataProcess(tmp,szConvMsg,StaBit,EndBit);
  444. }
  445. }
  446. void CCMS::BitDataProcess(const BYTE bySour, char *szRecv,int &StaBit,int &EndBit)
  447. {
  448. int ByteBit = 0;
  449. int sum = bySour;
  450. #if 0
  451. switch(StaBit)
  452. {
  453. case 7:
  454. ByteBit = sum & 0x01;
  455. break;
  456. case 6:
  457. ByteBit = (sum & 0x02) / 0x02 ;
  458. break;
  459. case 5:
  460. ByteBit = (sum & 0x04) / 0x04 ;
  461. break;
  462. case 4:
  463. ByteBit = (sum & 0x08) / 0x08 ;
  464. break;
  465. case 3:
  466. ByteBit = (sum & 0x10) / 0x10 ;
  467. break;
  468. case 2:
  469. ByteBit = (sum & 0x20) / 0x20 ;
  470. break;
  471. case 1:
  472. ByteBit = (sum & 0x40) / 0x40 ;
  473. break;
  474. case 0:
  475. ByteBit = (sum & 0x80) / 0x80;
  476. break;
  477. }
  478. #else
  479. switch(StaBit)
  480. {
  481. case 0:
  482. ByteBit = sum & 0x01;
  483. break;
  484. case 1:
  485. ByteBit = (sum & 0x02) / 0x02 ;
  486. break;
  487. case 2:
  488. ByteBit = (sum & 0x04) / 0x04 ;
  489. break;
  490. case 3:
  491. ByteBit = (sum & 0x08) / 0x08 ;
  492. break;
  493. case 4:
  494. ByteBit = (sum & 0x10) / 0x10 ;
  495. break;
  496. case 5:
  497. ByteBit = (sum & 0x20) / 0x20 ;
  498. break;
  499. case 6:
  500. ByteBit = (sum & 0x40) / 0x40 ;
  501. break;
  502. case 7:
  503. ByteBit = (sum & 0x80) / 0x80;
  504. break;
  505. }
  506. #endif
  507. sprintf(szRecv,"%d",ByteBit);
  508. }
  509. void CCMS::SimulationCommData(int nAddr)
  510. {
  511. //char sztemp[1024] = {0};
  512. //sztemp[0] = 0xEA;
  513. //sztemp[1] = 0x03;
  514. //sztemp[2] = 0x03;
  515. //sztemp[3] = 0xEA;
  516. //sztemp[4] = 0x01;
  517. //sztemp[5] = 0x01;
  518. //sztemp[6] = 0xDB;
  519. //sztemp[7] = 0x00;
  520. //sztemp[8] = 0xDA;
  521. //sztemp[9] = 0x00;
  522. //sztemp[10] = 0xDE;
  523. //sztemp[11] = 0x00;
  524. //sztemp[12] = 0xDE;
  525. //sztemp[13] = 0x00;
  526. //sztemp[14] = 0xDE;
  527. //sztemp[15] = 0x00;
  528. //sztemp[16] = 0xDE;
  529. //sztemp[17] = 0x00;
  530. //sztemp[18] = 0xDC;
  531. //sztemp[19] = 0x00;
  532. //sztemp[20] = 0xDC;
  533. //sztemp[21] = 0x00;
  534. //sztemp[22] = 0xDF;
  535. //sztemp[23] = 0x00;
  536. //sztemp[24] = 0x11;
  537. //sztemp[25] = 0x00;
  538. //sztemp[26] = 0x0A;
  539. //sztemp[27] = 0x00;
  540. //sztemp[28] = 0x14;
  541. //sztemp[29] = 0x00;
  542. //sztemp[30] = 0xBE;
  543. //sztemp[31] = 0x0E;
  544. //sztemp[32] = 0xAC;
  545. //sztemp[33] = 0x08;
  546. //sztemp[34] = 0x58;
  547. //sztemp[35] = 0x11;
  548. //sztemp[36] = 0xA8;
  549. //sztemp[37] = 0x01;
  550. //sztemp[38] = 0xA7;
  551. //sztemp[39] = 0x01;
  552. //sztemp[40] = 0x10;
  553. //sztemp[41] = 0x00;//0x00
  554. //sztemp[42] = 0x04;
  555. //sztemp[43] = 0x00;
  556. //sztemp[44] = 0xF4;
  557. //sztemp[45] = 0x01;
  558. //sztemp[46] = 0x05;
  559. //sztemp[47] = 0x0A;
  560. //sztemp[48] = 0xA4;
  561. //sztemp[49] = 0x00;
  562. //sztemp[50] = 0x00;
  563. //sztemp[51] = 0x00;
  564. //sztemp[52] = 0x00;
  565. //sztemp[53] = 0x00;
  566. //sztemp[54] = 0x00;
  567. //sztemp[55] = 0x00;
  568. //sztemp[56] = 0x01;
  569. //sztemp[57] = 0x48;
  570. //sztemp[58] = 0x16;
  571. //memcpy(m_sz_01Msg[nAddr - 1], sztemp + 6, sizeof(m_sz_01Msg[nAddr - 1]));
  572. }