⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 data86mas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 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 + -