📄 data86mas.cpp
字号:
#include "msystem.h"#include "data86mas.h"void* DATA86Master(void *pVoid)//Period and Cycle for PRM=1; Wait IND for PRM=0{ CDATA86Mas *pAS = (CDATA86Mas *)pVoid; pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL); sleep(2); while (1) { pAS->Query();// usleep(180000); }}CDATA86Mas::~CDATA86Mas(){ if (m_hThread > 0) { cout << "CDATA86Mas" << m_hThread << endl; pthread_cancel(m_hThread); }}bool CDATA86Mas::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,DATA86Master,(void *)this) == 0) bRet = true; pthread_attr_destroy(&attr); return bRet;}void CDATA86Mas::Query(){ while (!m_subdevmgr.HasOn()) sleep(1);// while ((m_subdevmgr.GetNum() != 8) && (m_subdevmgr.GetNum() != 9)) sleep(1);/* CTimeVal tmCurrent; CTimeValSpan tvs; if (tmCurrent > m_tmRectify) tvs = tmCurrent - m_tmRectify; else tvs = m_tmRectify - tmCurrent;// CTimeValSpan tvs = tmCurrent - m_tmRectify; if (m_bFirst || (tvs.GetMinute() >= 1)) { m_bFirst = false; SyncClock(); m_tmRectify = tmCurrent; } else*/ { if((m_bySendOrder++>=1) || (m_bySendNo == 0xff)) { m_bySendOrder = 0; m_bySendNo = m_subdevmgr.GetNextNo(m_bySendNo); } BYTE byAddr = m_subdevmgr.GetAddrFrmNo(m_bySendNo); if (byAddr == 0xff) return; switch(m_bySendOrder) { case 0: GetData(byAddr); break; default: break; } } usleep(m_dwIntervalMS * 1000);}//void CDATA86Mas::SyncClock(/*BYTE byAddr,BYTE byType*/)/*{ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x10; FNSend.m_byDesAddr =0;//byAddr; //广播地址 FNSend.SetSize(9); WORD *pwTemp = (WORD *)FNSend.m_pbyData; *pwTemp++ = CW(1200); *pwTemp++ = CW(2); BYTE* pby = (BYTE * ) pwTemp; *pby++ = 4; CTimeVal tv; DWORD *pdwTemp = (DWORD *)pby; *pdwTemp = CHDW(tv.Get_sec()+8*3600); m_DLService.REQ(0,&FNSend,FNRecv,0,false);//Send - No Respond pthread_mutex_unlock(&m_mutex);}*/bool CDATA86Mas::YK(WORD wDevNo,BYTE byRoute,bool bIsOn){ bool bRet = false;/* pthread_mutex_lock(&m_mutex); BYTE byAddr = m_subdevmgr.GetAddrFrmDevNo(wDevNo); if (byAddr != 0xff) { BYTE byRoadNo = byRoute - 1; CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x5; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4); WORD* pData = (WORD *)FNSend.m_pbyData; pData[0] = CW(byRoadNo); //select pData[1] = bIsOn ? CW(0xff00) : 0; m_DLService.SetEchoLen(8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { if (FNRecv.m_byCID == 0x5) bRet = true; } } pthread_mutex_unlock(&m_mutex);*/ return bRet;}void CDATA86Mas::GetData(BYTE byAddr){ pthread_mutex_lock(&m_mutex); CFrameNode FNSend,FNRecv; FNSend.m_byCID = 0x4; FNSend.m_byDesAddr = byAddr; FNSend.SetSize(4);// WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); WORD* pData = (WORD *)FNSend.m_pbyData; pData[0] = CW(5000); pData[1] = CW(8); m_DLService.SetEchoLen(5+2*8); if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond { ExpData(FNRecv.m_bySrcAddr,FNRecv.m_pbyData,FNRecv.m_wSize); if (m_wBreakCount[FNRecv.m_bySrcAddr] > 0) { YXData d; d.m_wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNRecv.m_bySrcAddr); d.m_wDevPtNo = 199; d.m_bValue = 0xff; m_pAllMgr->YX(&d, 1); } m_wBreakCount[FNRecv.m_bySrcAddr] =0; } else { if (m_wBreakCount[byAddr] >= 5) { YXData d; d.m_wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); d.m_wDevPtNo = 199; d.m_bValue = 0xff00; m_pAllMgr->YX(&d, 1); m_wBreakCount[byAddr] = 0; } else m_wBreakCount[byAddr]++; } pthread_mutex_unlock(&m_mutex);}void CDATA86Mas::ExpData(BYTE byAddr,BYTE* pbyData,BYTE bySize){ BYTE* pbyTemp = pbyData + 1; WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr); YCData* pData = new YCData [bySize/2]; WORD* pw = (WORD *)pbyTemp; WORD w =0; for (; w<bySize/2; w++,pw++) { pData[w].m_wDevNo = wDevNo; pData[w].m_wDevPtNo = w+1; WORD www = CW(*pw); short* pInt = (short *)&www; float ffValue = *pInt; pData[w].m_fValue = ffValue; } m_pAllMgr->YC(pData,w); delete [] pData;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -