📄 cdtmas.cpp
字号:
#include "cdtmas.h"#include "msystem.h"#include "taas.h"#include "math.h"void* CDTMaster(void *pVoid)//Period and Cycle for PRM=1; Wait IND for PRM=0{ CCDTMAS *pAS = (CCDTMAS *)pVoid; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); while (1) { CFrameNode FNRecv; if (pAS->m_DLService.IND(FNRecv) > 0) //有指示; pAS->ExplainCDTData(&FNRecv); }}////////////////////////////////////////////////////////////////////CCDTMAS::CCDTMAS(CAllMgr* pAllMgr,BYTE byMaxReportTimes,CSerialPortDef* pChannel) : CMAppService(pAllMgr,pChannel->m_wChannelNo) , m_DLService(pChannel){ m_tmRectify.GetCurrentTime(); m_tmRectify += CTimeValSpan(0,0,-2,0); m_hThread = 0;}CCDTMAS::~CCDTMAS(){ if (m_hThread > 0) { cout << "CDTM" << m_hThread << endl; pthread_cancel(m_hThread); }}bool CCDTMAS::YK(WORD wDevNo,BYTE byRoute,bool bIsOn){ bool bRet = false; CFrameNode FNSend; CFrameNode FNRecv; pthread_mutex_lock(&m_mutex); if (Select(wDevNo,byRoute,bIsOn,FNSend) > 0) { if (m_DLService.REQ(0,&FNSend,FNRecv,0,true) == 0) {//Send - No Respond if ((FNRecv.m_byCID == 0x6) && (FNRecv.m_wSize == 0)) { CFrameNode FNSend1; CFrameNode FNRecv1; if (Operate(wDevNo,byRoute,bIsOn,FNSend1) > 0) { if (m_DLService.REQ(1,&FNSend1,FNRecv1,0,true) == 1) { if ((FNRecv1.m_byCID == 0x6) && (FNRecv1.m_wSize == 0)) bRet = true; } } } } } pthread_mutex_unlock(&m_mutex); return bRet;}bool CCDTMAS::Init(){ bool bRet = false; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); if (pthread_create(&m_hThread,&attr,CDTMaster,(void *)this) == 0) bRet = true; pthread_attr_destroy(&attr); return bRet;}void CCDTMAS::Run(){ while (m_DLService.Status() != 0) usleep(10000); CFrameNode FNSend; CFrameNode FNRecv;// int nEcho = GetPeriod(FNSend); pthread_mutex_lock(&m_mutex); //nEcho=0:Send no reply;=1:Send - Respond;=-1:No send;// if ((nEcho!=-1) && (m_DLService.REQ((BYTE) nEcho,&FNSend,FNRecv,(BYTE) 0,true) == 1)) {// ExplainRESP(&FNRecv); } pthread_mutex_unlock(&m_mutex);}void CCDTMAS::ExplainCDTData(CFrameNode* pFNRecv){ BYTE* pbyData = pFNRecv->m_pbyData; WORD wSize = pFNRecv->m_wSize; if (pbyData && wSize) { BYTE byAddr = pFNRecv->m_bySrcAddr; switch (pFNRecv->m_byCID) { case 0x61: ExpMYCData(byAddr,pbyData,wSize); case 0xc2: ExpSYCData(byAddr,pbyData,wSize); case 0xb3: ExpYCData(byAddr,pbyData,wSize); break; case 0xf4: ExpYXData(byAddr,pbyData,wSize); break; case 0x26:// ExpSOEData(byAddr,pbyData,wSize); break; case 0x85:// ExpDDData(byAddr,pbyData,wSize); break; default: break; } }}void CCDTMAS::ExpYCData(BYTE byAddr,BYTE* pbyData,WORD wSize){// assert(wSize%6 == 0);/* ****add by lisjemg for psm-E10 *****/ WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); BYTE byType = m_subdevmgr.GetTypeFrmAddr(byAddr); WORD w1=0; WORD w2=0; YCData* pData = new YCData [wSize/6]; if(byType==dt_ePSME10) { BYTE* pbyTemp = pbyData; for (WORD www=0; www<wSize/6; www++,pbyTemp+=6) { if (pbyTemp[0] <=0x7f) //YC { switch (pbyTemp[0]) { case 0x01: w2=1*2-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x02: w2=2*2-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x03: w2=2*3-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x04: w2=2*4-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x05: w2=2*5-1; pData[w1].m_wDevPtNo = w2; pData[w1].m_wDevNo = wDevNo; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x06: w2=2*6-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x07: w2=2*7-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x08: w2=2*8-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x09: w2=2*9-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x0A: w2=2*10-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x0B: w2=2*11-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x0C: w2=2*12-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x0D: w2=2*13-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x0E: w2=2*14-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x0F: w2=2*15-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x10: w2=2*16-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x11: w2=2*17-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x12: w2=2*18-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x13: w2=2*19-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x14: w2=2*20-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x15: w2=2*21-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x16: w2=2*22-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; case 0x17: w2=2*23-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+1+12; // pData[w1++].m_fValue = CW(pbyTemp[2]);//可能有问题这里 break; case 0x18: w2=2*24-1; pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w2+12; // pData[w1++].m_fValue = CW(pbyTemp[1]);//可能有问题这里 break; default: break; } } else if (pbyTemp[0] ==0x80)// || (pbyTemp[0] == 0x81)) //SOE { if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x81)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] ==0x84)// || (pbyTemp[0] == 0x85)) //Time Ret { if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x85)) { www++; pbyTemp+=6; } } else if ((pbyTemp[0] >=0x86) && (pbyTemp[0] <=0x89)) //ZJ YC { } else if (pbyTemp[0] == 0x8a) //f 频率 { } else if ((pbyTemp[0] >=0x8d) && (pbyTemp[0] <=0x92)) //Water 水位 { } else if ((pbyTemp[0] >=0xa0) && (pbyTemp[0] <=0xdf)) //DD { } else if (pbyTemp[0] >=0xe1) //YK ret //有疑问 { while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] >=0xe5) //YT ret { while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] == 0xec) //子站状态 { } else if ((pbyTemp[0] >=0xf0) && (pbyTemp[0] <=0xff)) //YX { } else //按YC处理 { } } }/* BYTE* pbyTemp = pbyData; for (WORD www=0; www<wSize/6; www++,pbyTemp+=6) { if (pbyTemp[0] <=0x7f) //YC { } else if (pbyTemp[0] ==0x80)// || (pbyTemp[0] == 0x81)) //SOE { if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x81)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] ==0x84)// || (pbyTemp[0] == 0x85)) //Time Ret { if (((www+1) < (wSize/6)) && (pbyTemp[6] == 0x85)) { www++; pbyTemp+=6; } } else if ((pbyTemp[0] >=0x86) && (pbyTemp[0] <=0x89)) //ZJ YC { } else if (pbyTemp[0] == 0x8a) //f 频率 { } else if ((pbyTemp[0] >=0x8d) && (pbyTemp[0] <=0x92)) //Water 水位 { } else if ((pbyTemp[0] >=0xa0) && (pbyTemp[0] <=0xdf)) //DD { } else if (pbyTemp[0] >=0xe1) //YK ret //有疑问 { while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] >=0xe5) //YT ret { while (((www+1) < (wSize/6)) && (pbyTemp[6] == 0xe1)) { www++; pbyTemp+=6; } } else if (pbyTemp[0] == 0xec) //子站状态 { } else if ((pbyTemp[0] >=0xf0) && (pbyTemp[0] <=0xff)) //YX { } else //按YC处理 { } } */ // m_pAllMgr->YC(pData,w1);// delete [] pData;}/*****this funtion add by lisheng *****/void CCDTMAS::ExpSYCData(BYTE byAddr,BYTE* pbyData,WORD wSize){ WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); BYTE byType = m_subdevmgr.GetTypeFrmAddr(byAddr); WORD w1=0; WORD w2=0; YCData* pData = new YCData [wSize/6]; if(byType==dt_ePSME10)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -