📄 pmacmas.cpp
字号:
#endif pthread_mutex_unlock(&m_mutex);}bool CPMACMas::ReadCoil(BYTE byAddr,WORD wSRegAddr,BYTE byCount){ bool bRet = false; CFrameNode fnSend,fnRecv; fnSend.m_byCID = 0x1; fnSend.m_byDesAddr = byAddr; fnSend.SetSize(4); BYTE* pbyTemp = fnSend.m_pbyData; SW(wSRegAddr,pbyTemp); SW(byCount,pbyTemp); m_DLService.SetEchoLen(5 + (byCount+7)/8); if (m_DLService.REQ(1,&fnSend,fnRecv,1,true) == 1) { if (fnRecv.m_byCID == 1) { BYTE byByteCount = fnRecv.m_pbyData[0]; if (byByteCount == (byCount+7)/8) { WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(fnRecv.m_bySrcAddr); YXData* pYXData = new YXData [byCount];//8+6 BYTE* pbyTemp = fnRecv.m_pbyData+1; for (BYTE by=0; by<byByteCount; pbyTemp++,by++) { BYTE byA = 1; for (BYTE a=0;(a<8) && ((a+by*8) < byCount);a++,byA<<=1) { pYXData[a+by*8].m_wDevNo = wDevNo; pYXData[a+by*8].m_wDevPtNo = a + by*8 + 1; pYXData[a+by*8].m_bValue = ((*pbyTemp & byA)==0)?0xff00:0xff; } } m_pAllMgr->YX(pYXData, byCount); delete [] pYXData; } bRet = true; } } return bRet;}void CPMACMas::ExpWGKYC(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; for (WORD w =0; w<wSize/2; w++) { pData[w].m_wDevNo = wDevNo; pData[w].m_wDevPtNo = w+1; pData[w].m_fValue = CW(pbyTemp) ; } m_pAllMgr->YC(pData,wSize/2); delete [] pData;}void CPMACMas::Get9900Event(BYTE byAddr){}void CPMACMas::Exp720Data(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 [32];//8+6 WORD w1 =0; for (WORD w =1; w<=wSize/2; w++) { if(m_bySendOrder==0) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; if ((w<=14) || (w == 43))//word { pData[w1++].m_fValue = CW(pbyTemp); } else if ((w<=20) || ((w >= 23) && (w<= 28))) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if ((w==21) || (w==29))//long { DWORD dwww = CHDW(pbyTemp) ; int* pInt = (int *)&dwww; pData[w1++].m_fValue = *pInt; w++; } else if ((w>=31) && (w<=38))//DWORD { pData[w1++].m_fValue = CHDW(pbyTemp) ; w++; } else if ((w>=39) && (w<=42)) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if (w == 44) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<8; 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 == 45) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<16; b++,wA<<=1) { pYXData[b+8].m_wDevNo = wDevNo; pYXData[b+8].m_wDevPtNo = b + 1 + 16; pYXData[b+8].m_bValue = (wStatus & wA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<16+8;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 16+8); } else if ((w>=47) && (w<=58)) //DWORD { pData[w1++].m_fValue = CHDW(pbyTemp); w++; } else pbyTemp += 2; } else { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w+58+(m_bySendOrder-1)*16; pData[w1++].m_fValue = CW(pbyTemp); } } #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::Exp100ENData(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 [32];//8+6 WORD w1 =0; for (WORD w =1; w<=wSize/2; w++) { pData[w1].m_wDevNo = wDevNo; pData[w1].m_wDevPtNo = w; if ((w<=14) || (w == 43))//word { pData[w1++].m_fValue = CW(pbyTemp); } else if ((w<=20) || ((w >= 23) && (w<= 28))) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if ((w==21) || (w==29))//long { DWORD dwww = CHDW(pbyTemp) ; int* pInt = (int *)&dwww; pData[w1++].m_fValue = *pInt; w++; } else if ((w>=31) && (w<=38))//DWORD { pData[w1++].m_fValue = CHDW(pbyTemp) ; w++; } else if ((w>=39) && (w<=42)) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if (w == 44) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<8; 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 == 45) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<16; b++,wA<<=1) { pYXData[b+8].m_wDevNo = wDevNo; pYXData[b+8].m_wDevPtNo = b + 1 + 16; pYXData[b+8].m_bValue = (wStatus & wA)?0xff00:0xff; }#ifdef _DEBUG for (WORD wwx=0;wwx<16+8;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff;#endif m_pAllMgr->YX(pYXData, 16+8); } else if ((w>=47) && (w<=58)) //DWORD { pData[w1++].m_fValue = CHDW(pbyTemp); w++; } else pbyTemp += 2; }#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::Exp600BData(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 [4];//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==7) || (w==9))//long { DWORD dwww = CHDW(pbyTemp) ; int* pInt = (int *)&dwww; double ffValue = *pInt; pData[w1++].m_fValue = ffValue; w++; } else if ((w>=22) && (w<=33))//DWORD { pData[w1++].m_fValue = CHDW(pbyTemp); w++; } else if ((w>=11) && (w<=20))//short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if (w == 34) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<2; 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 == 35) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<2; b++,wA<<=1) { pYXData[b+2].m_wDevNo = wDevNo; pYXData[b+2].m_wDevPtNo = b + 1 + 2; pYXData[b+2].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, 2+2); } 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::ExpPDM800Data(BYTE byAddr,BYTE* pbyData,WORD wSize){ //瞬时值 BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [wSize/2]; for (WORD w =0; w<wSize/2; w++) { pData[w].m_wDevNo = wDevNo; pData[w].m_wDevPtNo = w+1; pData[w].m_fValue = CW(pbyTemp) ; } m_pAllMgr->YC(pData,wSize/2); delete [] pData;}void CPMACMas::ExpPDM803AData(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+3 WORD w1=0; for ( WORD w=1;w<=(wSize)/2; w++) { pData[w1].m_wDevNo = wDevNo; if(w<=29)//DWORD { pData[w1].m_wDevPtNo = w; pData[w1++].m_fValue = CW(pbyTemp); } else if(w==30) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<11; b++,wA<<=1) { pYXData[b].m_wDevNo = wDevNo; pYXData[b].m_wDevPtNo = b + 1; pYXData[b].m_bValue = (wStatus & wA)?0xff00:0xff; } #ifdef _DEBUG for (WORD wwx=0;wwx<11;wwx++) pYXData[wwx].m_bValue = (wwx%2)?0xff00:0xff; #endif m_pAllMgr->YX(pYXData, 8+3); } else if((w>31)&&(w<36)) { pData[w1].m_wDevPtNo = w1+1; WORD wHigh = CW(pbyTemp); WORD wLow = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 10000 + wLow; w++; } else if(w==31) { CW(pbyTemp); } } m_pAllMgr->YC(pData,w1); delete [] pData; delete [] pYXData; }void CPMACMas::ExpDDEFData(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; //lost the CountNum 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+1; if(w<=6) { WORD wHigh = CW(pbyTemp); WORD wLow = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 65535 + wLow; w++; } else if((w>=13)&&(w<=18)) { WORD wHigh = CW(pbyTemp); WORD wLow = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 65535 + wLow; w++; } else if ((w==19) || (w==24) || (w==26)) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if((w>=27)&&(w<=30)) { WORD wHigh = CW(pbyTemp); WORD wLow = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 65535 + wLow; w++; } else if((w>=33)&&(w<=34))//else //long { WORD wHigh = CW(pbyTemp); WORD wLow = CW(pbyTemp); pData[w1++].m_fValue = wHigh * 65535 + wLow; w++; } else { CW(pbyTemp) ; } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,12); delete [] pData;}void CPMACMas::ExpDDEF1Data(BYTE byAddr,BYTE* pbyData,WORD wSize){ BYTE* pbyTemp = pbyData + 1; //lost the CountNum 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+1; if(w<=6) { DWORD dwTemp = CDW(pbyTemp) ; pData[w1++].m_fValue = *((long *)&dwTemp); w++; } else if((w>=13)&&(w<=18)) { DWORD dwTemp = CDW(pbyTemp) ; pData[w1++].m_fValue = *((long *)&dwTemp); w++; } else if ((w==19) || (w==24) || (w==26)) //short { WORD www = CW(pbyTemp) ; short* pSht = (short *)&www; pData[w1++].m_fValue = *pSht; } else if((w>=27)&&(w<=30))//else //long { DWORD dwTemp = CDW(pbyTemp) ; pData[w1++].m_fValue = *((long *)&dwTemp); w++; } else if((w>=33)&&(w<=34))//else //long { DWORD dwTemp = CDW(pbyTemp) ; pData[w1++].m_fValue = *((long *)&dwTemp); w++; } else { CW(pbyTemp) ; } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif m_pAllMgr->YC(pData,12); delete [] pData;}void CPMACMas::Exp600AData(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 [3];//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<7)//WORD { pData[w1++].m_fValue = CW(pbyTemp); } else if ( (w>8) && (w<13) )//DWORD { pData[w1++].m_fValue = CHDW(pbyTemp); w++; } else if (w == 7) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<2; 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) { WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<1; b++,wA<<=1) { pYXData[b+2].m_wDevNo = wDevNo; pYXData[b+2].m_wDevPtNo = b + 1 + 2; pYXData[b+2].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, 2+1); } 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::ExpPMAC303Data(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 [32];//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 == 1) { //303,S1-S16 WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<16; 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 == 2) { //303,S17-S32 WORD wStatus = CW(pbyTemp); WORD wA = 1; for (BYTE b=0; b<16; b++,wA<<=1) { pYXData[b+16].m_wDevNo = wDevNo; pYXData[b+16].m_wDevPtNo = b + 1 + 16; pYXData[b+16].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, 32); } else //WORD { pData[w1++].m_fValue = CW(pbyTemp); } } #ifdef _DEBUG for (WORD w=0;w<w1;w++) pData[w].m_fValue = w*10000; #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -