📄 ja05mas.cpp
字号:
#include "ja05mas.h"void* thrdQueryJA(void* pVoid){ CJA05Mal *pAS = (CJA05Mal *)pVoid; while (1) { pAS->Query(); } return 0;}CJA05Mal::~CJA05Mal(){ if (m_hThread > 0) { cout << "JA05" << m_hThread << endl; pthread_cancel(m_hThread); }}bool CJA05Mal::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,thrdQueryJA,(void *)this) == 0) bRet = true; pthread_attr_destroy(&attr); return bRet;}void CJA05Mal::Query(){ ReadYX(); sleep(1); ReadYC(); sleep(1);}void CJA05Mal::ReadYC(){ CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x80; FNSend.m_byDesAddr = m_subdevmgr.GetAddrFrmNo(0); FNSend.SetSize(1); FNSend.m_pbyData[0] = 0x30; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1) { if ((FNRecv.m_wSize >= 5) && (FNRecv.m_pbyData[0] == 0x30)) { 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 wValue = *pwOrigValue++; pData[w].m_fValue = ((float) ((((wValue & 0xff00)>>8) *100)+ (wValue & 0xff)))/((w<2)?10:100) ; } 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) { m_wBreakCount++; YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff00; m_pAllMgr->YX(&d, 1); } else if (m_wBreakCount< 5) m_wBreakCount++; }}void CJA05Mal::ReadYX(){ CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x80; FNSend.m_byDesAddr = m_subdevmgr.GetAddrFrmNo(0); FNSend.SetSize(1); FNSend.m_pbyData[0] = 0x7; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1) { if ((FNRecv.m_wSize >= 2) && (FNRecv.m_pbyData[0] == 7)) { BYTE* pbyTemp = FNRecv.m_pbyData+1; YXData* pYXData = new YXData [12]; 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; pYXData[b+8*by].m_wDevPtNo = b+8*by + 1; pYXData[b+8*by].m_bValue = bool(byValue & byA)?0xff00:0xff; if ((by==1) && (b==3)) break; /* 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, 12); 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) { m_wBreakCount++; YXData d; d.m_wDevNo = wDevNo; d.m_wDevPtNo = 199; d.m_bValue = 0xff00; m_pAllMgr->YX(&d, 1); } else m_wBreakCount++; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -