📄 pmacmas.cpp
字号:
m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData;}void CPMACMas::ExpPMAC503Data(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; YXData* pYXData = new YXData [6];//2+2 WORD w1=0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; if (w == 10 ) { //DWord pData[w1++].m_fValue = CHDW2(pbyTemp); w++; } else if (w == 13) { //S1-S4 WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<4; b++,wA<<=1) { pYXData[b].m_wDevNo = wDevNo; pYXData[b].m_wDevPtNo = b + 1; pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff; } } else if (w == 14) { //R1-R2 WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<2; b++,wA<<=1) { pYXData[b+4].m_wDevNo = wDevNo; pYXData[b+4].m_wDevPtNo = b + 1 + 4; pYXData[b+4].m_bValue = (wStatus & wA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<2+2;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 6); } else //WORD { pData[w1++].m_fValue = CW(pbyTemp); } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,w1-1); delete [] pData; delete [] pYXData;}void CPMACMas::ExpPMAC503EData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; YXData* pYXData = new YXData [10];//1+8+1 WORD w1=0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; if (w == 17) { WORD wStatus = CW(pbyTemp); WORD wA = 1; pYXData[0].m_wDevNo = wDevNo; pYXData[0].m_wDevPtNo = 1; pYXData[0].m_bValue = (wStatus & wA)?0xff00:0xff; } else if (w == 18) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=1; b<9; b++,wA<<=1) { pYXData[b].m_wDevNo = wDevNo; pYXData[b].m_wDevPtNo = b + 1 ; pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff; } } else if (w == 19) { WORD wStatus = CW(pbyTemp); WORD wA = 1; pYXData[9].m_wDevNo = wDevNo; pYXData[9].m_wDevPtNo = 10; pYXData[9].m_bValue = (wStatus & wA)?0xff00:0xff; } else pData[w1++].m_fValue = CW(pbyTemp); #ifdef _DEBUG for (WORD wwx=0;wwx<10;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 10); } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w; #endif m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData;} void CPMACMas::ExpFJTWKYData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; YXData* pYXData = new YXData [8]; WORD w1=0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w1 + 1; if (w==1) //遥信 { WORD wStatus = CW(pbyTemp); for (BYTE b=0; b<8; b++) { pYXData[b].m_wDevNo = wDevNo; pYXData[b].m_wDevPtNo = b + 1; pYXData[b].m_bValue = ((wStatus >> b) & 1)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<8;wwx++) pYXData[wwx].m_bValue = (wwx&1)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 8); } else //WORD { pData[w1++].m_fValue = CW(pbyTemp); } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData;}void CPMACMas::ExpZGDWKYData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; WORD w1=0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w1 + 100; pData[w1++].m_fValue = CW(pbyTemp); } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,w1); delete [] pData;}void CPMACMas::Exp9900NData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; YXData* pYXData = new YXData [16];//8+6 WORD w1 =0; for (WORD w =1; w<=wSize/2; w++) { if (w<=6)//short { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; WORD www = CW(pbyTemp); short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if (w==7)//yx1 { WORD wStatus = CW(pbyTemp); #ifdef _DEBUGUC if (wStatus) cout << wStatus <<endl; #endif WORD wA = 1; for (BYTE b=0; b<6; b++,wA<<=1) { pYXData[b].m_wDevNo = wDevNo; pYXData[b].m_wDevPtNo = b + 1; pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff; } } else if (w==8)//yx2 { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<6; b++,wA<<=1) { pYXData[6+b].m_wDevNo = wDevNo; pYXData[6+b].m_wDevPtNo = b + 1+8; pYXData[6+b].m_bValue = (wStatus & wA)?0xff00:0xff; }#ifdef _DEBUG for (WORD wwx=0;wwx<12;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;#endif m_pAllMgr->YX(pYXData, 12); } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w; #endif m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData;}void CPMACMas::Exp9900EData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [50]; YXData* pYXData = new YXData [8];//4+4 WORD w1 =0; WORD wFlag = 0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w1+1; if (w == 30) //符号寄存器 { wFlag = CW(pbyTemp); } else if ((w >= 31) && (w <= 44)) //电度数据 { WORD wLow = CW(pbyTemp); WORD wHigh = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 1000 + wLow; w++; } else if ((w >= 45) && (w <= 52)) //遥信数据 { WORD wStatus = CW(pbyTemp); pYXData[w - 45].m_wDevNo = wDevNo; pYXData[w - 45].m_wDevPtNo = w - 45 + 1; pYXData[w - 45].m_bValue = bool(wStatus & 1)?0xff00:0xff; if (w == 52) m_pAllMgr->YX(pYXData, 8); } else //WORD { pData[w1++].m_fValue = CW(pbyTemp); } } // 处理符号寄存器 for (int i = 0; i < 16; i++) { int iFlag = ((wFlag >> i) & 1) ? -1 : 1; if (i < 12) //功率及功率因数符号处理 { pData[12 + i].m_fValue *= iFlag; } else if (i == 14) //总有功电度数据符号处理 { pData[31].m_fValue *= iFlag; } else if (i == 15) //总无功电度数据符号处理 { pData[34].m_fValue *= iFlag; } } m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData;}void CPMACMas::Get720Event(BYTE byAddr,BYTE bySOESum){ CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x3; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(1202,pbyTemp); SW(4*((bySOESum<10)?bySOESum:10),pbyTemp); m_DLService.SetEchoLen(5+4*((bySOESum<10)?bySOESum:10)*2); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond Exp720EventData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize);}void CPMACMas::Exp720EventData(BYTE byAddr,BYTE* pbyData,WORD wSize){}void CPMACMas::Exp9900EventData(BYTE byAddr,BYTE* pbyData,WORD wSize){}void CPMACMas::GetJBK3000YX(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x3; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(0x2000,pbyTemp); SW(4,pbyTemp); m_DLService.SetEchoLen(5+4*2);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 3) ExpJBK3000YX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpJBK3000YC(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; //lost the CountNum wSize -=1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; WORD w1=0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; pData[w1++].m_fValue = CW(pbyTemp); } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,w1); delete [] pData;}void CPMACMas::ExpJBK3000YX(BYTE byAddr,BYTE* pbyData,WORD wSize){ if (wSize >=3) { BYTE* pbyTemp = pbyData + 1; wSize -=1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YXData* pYXData = new YXData [wSize*8];//8+6 for (WORD w =0; w<wSize/2; w++) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<16; b++,wA<<=1) { pYXData[w*16+b].m_wDevNo = wDevNo; pYXData[w*16+b].m_wDevPtNo = b + 1; pYXData[w*16+b].m_bValue = bool(wStatus & wA)?0xff00:0xff; } m_pAllMgr->YX(pYXData,wSize*8); } delete [] pYXData; }}void CPMACMas::GetREF542plusYX(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(0,pbyTemp); SW(8,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::GetREF542plusYX1(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(50,pbyTemp); SW(2,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX1(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); WORD w1=0; BYTE b=0; YXData* pYXData = new YXData [8];//8+6 BYTE byStatus = *pbyTemp; BYTE byA = 1; for (BYTE b=0; b<2; b++,byA<<=1) { pYXData[w1].m_wDevNo = wDevNo; pYXData[w1].m_wDevPtNo = b+9; pYXData[w1++].m_bValue = (byStatus & byA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<1;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 2); delete [] pYXData;}void CPMACMas::GetREF542plusYX2(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(56,pbyTemp); SW(1,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX2(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); WORD w1=0; BYTE b=0; YXData* pYXData = new YXData [8];//8+6 BYTE byStatus = *pbyTemp; BYTE byA = 1; for (BYTE b=0; b<1; b++,byA<<=1) { pYXData[w1].m_wDevNo = wDevNo; pYXData[w1].m_wDevPtNo = b+11; pYXData[w1++].m_bValue = (byStatus & byA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<1;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 1); delete [] pYXData;}void CPMACMas::GetREF542plusYX3(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(59,pbyTemp); SW(2,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF542plusYX3(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); WORD w1=0; BYTE b=0; YXData* pYXData = new YXData [8];//8+6 BYTE byStatus = *pbyTemp; BYTE byA = 1; for (BYTE b=0; b<2; b++,byA<<=1) { pYXData[w1].m_wDevNo = wDevNo; pYXData[w1].m_wDevPtNo = b+12; pYXData[w1++].m_bValue = (byStatus & byA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<1;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 2); delete [] pYXData;}void CPMACMas::GetREF543plusYX(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(0,pbyTemp); SW(8,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::GetREF543plusYX1(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); BYTE* pbyTemp = FNSend.m_pbyData; SW(49,pbyTemp); SW(3,pbyTemp); m_DLService.SetEchoLen(6+1);//(8+7)/8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 2) ExpREF542plusYX1(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); } pthread_mutex_unlock(&m_mutex);}void CPMACMas::ExpREF543plusYX1(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); WORD w1=0; BYTE b=0; YXData* pYXData = new YXData [8];//8+6 BYTE byStatus = *pbyTemp; BYTE byA = 1; for (BYTE b=0; b<3; b++,byA<<=1) { pYXData[w1].m_wDevNo = wDevNo; pYXData[w1].m_wDevPtNo = b+9; pYXData[w1++].m_bValue = (byStatus & byA)?0xff00:0xff;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -