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

📄 simusas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
字号:
#include "simusas.h"static SYC sYCS[] = {	{80003,0,0xffff},	{80005,0,0xffff},	{100003,0,0xffff},	{100005,0,0xffff},	{20417,0,0xffff},		{20449,0,0xffff},	{20481,0,0xffff},	{20513,0,0xffff},	{90003,0,0xffff},	{90005,0,0xffff},	{80001,1,0xffff},	{30005,0,0xffff},	{120003,0,0xffff},	{90001,1,0xffff},	{110003,0,0xffff},		{110005,0,0xffff},	{10005,0,0xffff},	{10009,1,0xffff},	{70001,0,0xffff},	{70002,0,0xffff},		{70009,1,0xffff},	{70003,0,0xffff},	{50009,1,0xffff},	{50003,0,0xffff}	};static DWORD dwYXS[] = {	20005,10005,20009,20011,10011,10007,20007,10015,	20001,40002,10001,10003,20003,30002,60012,10013,10009};void CCXSerialNo::Init(){	m_pYCChar = sYCS;	m_pwYXSerialNo = dwYXS;	m_wYCNum = sizeof(sYCS)/sizeof(SYC);	m_wYXNum = sizeof(dwYXS)/sizeof(DWORD);}void CSimuSAS::SendCycleData(){	SYC* pYCS;	for (BYTE bbb=0; ;bbb++)	{		pYCS = m_CXSerialNo.GetYCS(bbb);		if (pYCS == NULL)		{			SendYX();			break;		}		else		{			CAnalog* pAnalog = m_pAllMgr->GetAnalog(pYCS->m_dwYCNo);			if (pAnalog)			{				float fValue = pAnalog->GetValue();				WORD wValue = FloatToWORD(fValue,pYCS->m_byPointBit);				if (wValue != pYCS->m_wValue)				{					CFrameNode fnS;					fnS.m_byCID = 1;					fnS.m_wSize = 4;					fnS.m_byDesAddr = bbb;					fnS.m_bySrcAddr = bbb;					pYCS->m_wValue = wValue;					WORDToBuf(wValue,fnS.m_pbyData);					m_DLService.RESP(&fnS);				}//				else SendYX();			}		}	}}void CSimuSAS::SendYX(){	CDigital* pDigital;	BYTE abyBuf[4];	DWORD dwValue = 0;	for (char b=0;b<32;b++)	{		WORD wYXX = m_CXSerialNo.GetYXNo(b);		if (wYXX != 0xffff)		{			pDigital = m_pAllMgr->GetDigital(wYXX);			if (pDigital)			{				if (pDigital->GetValue())				{					dwValue |= (1<<b);						}			}		}	}	abyBuf[0] = (BYTE)((dwValue & 0xff000000)>>24);	abyBuf[1] = (BYTE)((dwValue & 0x00ff0000)>>16);	abyBuf[2] = (BYTE)((dwValue & 0x0000ff00)>>8);	abyBuf[3] = (BYTE)(dwValue & 0x000000ff);	CFrameNode fnS;	fnS.m_byDesAddr = 0;	fnS.m_bySrcAddr = 0;	fnS.m_byCID = 0;	fnS.m_wSize = 4;	memcpy(fnS.m_pbyData,abyBuf,4);	m_DLService.RESP(&fnS);}/*void CSimuSAS::SetYC(DWORD dwYCNo){	BYTE byYCSerialNo = m_CXSerialNo.GetYCIndex(dwYCNo);	BYTE byPointBit = m_CXSerialNo.GetYCPointBit(dwYCNo);	if (byYCSerialNo != 0xff)	{		int Index=g_yck.GetIndex(wYCNo);		if(Index==-1) return;		CAnalog* pAnalog = g_pData->GetAnalog(Index);		if (pAnalog)		{			float fValue = pAnalog->GetValue();			CSimuFrame frameSimu;			BYTE abyBuf[4];			frameSimu.FloatToBuf(fValue,abyBuf,4,byPointBit);			frameSimu.SetupFrame(byYCSerialNo,1,abyBuf,4);			CMailNode mn;			mn.m_lSize = frameSimu.FrameToBuffer(mn.m_pBuf);			CMailQueue* pmqSend = m_mail.GetSendMailQueue();			pmqSend->AddMailTail(mn.m_pBuf,mn.m_lSize);		}	}}void CSimuSAS::SetYX(WORD wYXNo){	BYTE byYXSerialNo = m_CXSerialNo.GetYXIndex(wYXNo);	if (byYXSerialNo != 0xff)	{		BYTE byGroupNo = byYXSerialNo/32;		CDigital* pDigital;		BYTE abyBuf[4];		DWORD dwValue = 0;		WORD m_b=1;		for (char b=0;b<32;b++)		{			WORD wYXX = m_CXSerialNo.GetYXNo(byGroupNo*32+b);			if (wYXX != 0xffff)			{				BOOL bValue;				int Index=g_yxk.GetIndex(wYXX);				if(Index==-1)continue;				pDigital = g_pData->GetDigital(Index);				if (pDigital)				{					if (!(bValue = pDigital->GetValue()))					{						dwValue |= (1<<b);							}				}			}		}		abyBuf[0] = BYTE((dwValue & 0xff000000)>>24);		abyBuf[1] = BYTE((dwValue & 0x00ff0000)>>16);		abyBuf[2] = BYTE((dwValue & 0x0000ff00)>>8);		abyBuf[3] = BYTE(dwValue & 0x000000ff);		CSimuFrame frameSimu;		frameSimu.SetupFrame(byGroupNo,0,abyBuf,4);		CMailNode mn;		mn.m_lSize = frameSimu.FrameToBuffer(mn.m_pBuf);		CMailQueue* pmqSend = m_mail.GetSendMailQueue();		pmqSend->AddMailTail(mn.m_pBuf,mn.m_lSize);		}}*/void* CycleSend(void *pVoid){	pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,NULL);	pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,NULL);	CSimuSAS *pAS = (CSimuSAS *)pVoid;	do {		sleep(5);	} while (pAS->m_DLService.Status() != 0);		while (1) {		usleep(200000);		pAS->SendCycleData();	}}bool CSimuSAS::Init(){	bool bRet = false;	pthread_attr_t attr;	pthread_attr_init(&attr);	pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);	if (pthread_create(&m_hThreadSend,&attr,CycleSend,(void *)this) == 0)		bRet = true;	else	m_hThreadSend = 0;	pthread_attr_destroy(&attr);	return bRet;}CSimuSAS::CSimuSAS(CAllMgr* pAllMgr,CSerialPortDef* pChannel)	: CSAppService(pAllMgr,true)	, m_DLService(pChannel){	m_hThreadSend = 0;}CSimuSAS::~CSimuSAS(){	if (m_hThreadSend > 0)	{		cout << "CSimuSAS" << m_hThreadSend << endl;		pthread_cancel(m_hThreadSend);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -