📄 jddymas.cpp
字号:
#include "jddymas.h"void* thrdQuery(void* pVoid){ CJDDYMal *pAS = (CJDDYMal *)pVoid; while (1) { pAS->Query(); } return 0;}CJDDYMal::~CJDDYMal(){ if (m_hThread > 0) { cout << "JDDY" << m_hThread << endl; pthread_cancel(m_hThread); }}bool CJDDYMal::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,thrdQuery,(void *)this) == 0) bRet = true; pthread_attr_destroy(&attr); return bRet;}void CJDDYMal::Query(){// WORD wAddr;// for (wAddr=0;wAddr<10;wAddr++)// {/* WORD wLen = 24; if (wAddr == 1) wLen = 48; else if (wAddr == 2) wLen = 16; else if (wAddr == 3) wLen = 8; else if (wAddr == 4) wLen = 32;*/ ReadYX(0,24); sleep(1); ReadYX(2,16); sleep(1);// }// for (wAddr=0;wAddr<9;wAddr++)// {/* WORD wLen; if (wAddr == 0) wLen = 8; else if (wAddr == 1) wLen = 7; else if (wAddr == 2) wLen = 3; else if (wAddr == 3) wLen = 9; else if (wAddr == 4) wLen = 14; else if (wAddr == 5) wLen = 3; else if (wAddr == 6) wLen = 64; else if (wAddr == 7) wLen = 2; else if (wAddr == 8) wLen = 6;*/ ReadYC(0,8); sleep(1);// }}bool CJDDYMal::ReadYC(WORD wAddr,WORD wLen){ bool bRet = false; CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x4; FNSend.m_byDesAddr = m_subdevmgr.GetAddrFrmNo(0); if (FNSend.m_byDesAddr == 0xff) return false; FNSend.SetSize(4); WORD *wTemp = (WORD *)FNSend.m_pbyData; *wTemp++ = CW(wAddr); *wTemp++ = CW(wLen); m_DLService.SetEchoLen(5+wLen*2); WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1) { YCData* pData = new YCData [FNRecv.m_wSize/2]; WORD* pwOrigValue = (WORD *)(FNRecv.m_pbyData+1); for (WORD w=0; w<FNRecv.m_wSize/2; w++) { pData[w].m_wDevNo = wDevNo; pData[w].m_wDevPtNo = w + 1 ; WORD w1 = CW(*pwOrigValue++); short* psh = (short *)&w1; pData[w].m_fValue = *psh; } m_pAllMgr->YC(pData,FNRecv.m_wSize/2); delete pData; if (m_wBreakCount > 0) { YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff; m_pAllMgr->YX(&d, 1); } m_wBreakCount = 0; } else { if (m_wBreakCount >= 5) { YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff00; m_pAllMgr->YX(&d, 1); m_wBreakCount = 0; } else m_wBreakCount++; } return bRet;}bool CJDDYMal::ReadYX(WORD wAddr,WORD wLen){ bool bRet = false; CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x2; FNSend.m_byDesAddr = m_subdevmgr.GetAddrFrmNo(0); if (FNSend.m_byDesAddr == 0xff) return false; FNSend.SetSize(4); WORD *wTemp = (WORD *)FNSend.m_pbyData; *wTemp++ = CW(wAddr); *wTemp = CW(wLen); m_DLService.SetEchoLen(5+wLen/8); WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr ); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1) { if (FNRecv.m_wSize >= 2) { BYTE* pbyTemp = FNRecv.m_pbyData+1; // WORD* pw = (WORD *)pbyTemp; // for (BYTE b=0; b<FNRecv.m_wSize/2;b++) // *pw++ = CW(*pw); YXData* pYXData = new YXData [(FNRecv.m_wSize-1)*8]; for (BYTE by=0; by<(FNRecv.m_wSize-1); by++) { BYTE byA = 1; BYTE byValue = *pbyTemp++; for (BYTE b=0; b<8; b++,byA<<=1) { pYXData[b+8*by].m_wDevNo = wDevNo; WORD ptno = pYXData[b+8*by].m_wDevPtNo = b+8*by + 1 + ((wAddr == 2) ?24 : 0); pYXData[b+8*by].m_bValue = bool(byValue & byA) ? 0xff00: 0xff; if ((ptno >= 1) && (ptno <=8)) m_b[ptno-1] = pYXData[b+8*by].m_bValue; else if (ptno == 21) m_b[8] = pYXData[b+8*by].m_bValue; else if (ptno == 22) m_b[9] = pYXData[b+8*by].m_bValue; else if (ptno == 26) m_b[10] = pYXData[b+8*by].m_bValue; } } m_pAllMgr->YX(pYXData, (FNRecv.m_wSize-1)*8); delete [] pYXData; } if (m_wBreakCount > 0) { YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff; m_pAllMgr->YX(&d, 1); } m_wBreakCount = 0; } else { if (m_wBreakCount >= 5) { YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff00; m_pAllMgr->YX(&d, 1); m_wBreakCount = 0; } else m_wBreakCount++; } YXData d[4]; d[0].m_wDevNo = wDevNo; d[0].m_wDevPtNo = 190; d[0].m_bValue = (m_b[0] | m_b[1] | m_b[2] | m_b[3])?0xff00:0xff; d[1].m_wDevNo = wDevNo; d[1].m_wDevPtNo = 191; d[1].m_bValue = (m_b[4] | m_b[5])?0xff00:0xff; d[2].m_wDevNo = wDevNo; d[2].m_wDevPtNo = 192; d[2].m_bValue = (m_b[6] | m_b[7])?0xff00:0xff; d[3].m_wDevNo = wDevNo; d[3].m_wDevPtNo = 193; d[3].m_bValue = (m_b[8] | m_b[9] | m_b[10])?0xff00:0xff; m_pAllMgr->YX(d, 4); return bRet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -