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

📄 sepam2000mas.cpp

📁 一个通讯管理机的源代码。比较好用。推荐
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	bool bRet = false;	pthread_mutex_lock(&m_mutex);		BYTE byAddr = m_subdevmgr.GetAddrFrmDevNo(wDevNo);		CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x10;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(wSize*4+7);	WORD* pData = (WORD *)FNSend.m_pbyData;		pData[0] = CW(0xd100); //0x2100	pData[1] = CW(wSize*2+1);	BYTE *pbyTemp = (BYTE *)&pData[2];	*pbyTemp++ = (wSize*2+1)*2;	WORD *pw = (WORD *)pbyTemp;	*pw++ = CW(wFuncCode);	DWORD* pdw = (DWORD *)pw;	DWORD *pdwV = (DWORD *)pFixVal;	for (WORD w=0; w<wSize; w++)		*pdw++ = CDW(*pdwV++);	m_DLService.SetEchoLen(8);	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond	{		if (FNRecv.m_byCID == 0x10)		{//			FNSend.m_byCID = 0x3;//			pData[0] = CW(0xd000);//			pData[1] = CW(wSize*2+1);//			m_DLService.SetEchoLen(5+2*(wSize*2+1));//			if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond//			{//				if (FNRecv.m_byCID == 0x3)//				{					bRet = true;//				}//			}		}	}		pthread_mutex_unlock(&m_mutex);	return bRet;	/*	cmd_echo ce = ce_eFail;	m_bIsNormal = FALSE;	CModbusFrame framePFV,frameEcho;	BYTE byAddr = m_subdevmgr.GetAddr(byNo);	BYTE* pData1 = new BYTE[wSize*4+7];	Sleep(200);	WORD* pData = (WORD *)pData1;	pData[0] = CW(0xd100); //0x2100	pData[1] = CW(wSize*2+1);	BYTE *pbyTemp = (BYTE *)&pData[2];	*pbyTemp++ = (wSize*2+1)*2;	WORD *pw = (WORD *)pbyTemp;	*pw++ = CW(wFuncCode);	DWORD* pdw = (DWORD *)pw;	DWORD *pdwV = (DWORD *)pFixVal;	for (WORD w=0; w<wSize; w++)		*pdw++ = CDW(*pdwV++);	framePFV.SetupFrame(byAddr,0x10,pData1,wSize*4+7);	m_frmEcho.m_wXLen = 8;	BYTE* pbyData;	WORD wFrameSize = framePFV.FrameToBuffer(pbyData);	CMailQueue* pmqSend = m_mail.GetSendMailQueue();	CMailQueue* pmqRecv = m_mail.GetRecvMailQueue();	pmqSend->AddMailTail(pbyData,wFrameSize);	delete pbyData;	CMailNode mnTemp;	pmqRecv->GetHeadNode(mnTemp);	if ((mnTemp.m_lSize == 1) && (mnTemp.m_pBuf[0] == 0x0e))		ce = ce_eTimeout;	else	{		if (frameEcho.BufferToFrame(mnTemp.m_pBuf,WORD(mnTemp.m_lSize)))		{			if (frameEcho.GetCID() == 0x10)			{//				Sleep(2000);	BYTE* pData2 = new BYTE[4];	pData = (WORD *)pData2;	pData[0] = CW(0xd000); //0x2000;	pData[1] = CW(wSize*2+1);	CModbusFrame frameGFV;	frameGFV.SetupFrame(byAddr,0x3,pData2,4);	wFrameSize = frameGFV.FrameToBuffer(pbyData);	m_frmEcho.m_wXLen = 5+2*(wSize*2+1);	pmqSend->AddMailTail(pbyData,wFrameSize);	delete pbyData;	CMailNode mnTemp1;	pmqRecv->GetHeadNode(mnTemp1);//				m_bySendOrder = byAddr;//			CMailNode mn;//			ACK(byAddr,mn);//			pmqSend->AddMailTail(mn.m_pBuf,mn.m_lSize);				ce = ce_eOK;			}		}	}	m_bIsNormal = TRUE;	return ce;	*/}void CSepam2000Mas::GetYX1(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	WORD* pData = (WORD *)FNSend.m_pbyData;	pData[0] = CW(0x0C8F);	pData[1] = CW(0x5);	m_DLService.SetEchoLen(5+5*2);	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr );	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond	{		ExpYXData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize,0);		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = false;			m_b199[wDevNo] = false;			m_pAllMgr->YX(&d, 1);		}		m_wBreakCount[byAddr] = 0;	}	else	{		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = true;			m_b199[wDevNo] = true;			m_pAllMgr->YX(&d, 1);		}		else m_wBreakCount[byAddr]++;	}				YXData d1;	d1.m_wDevNo = wDevNo;	d1.m_wDevPtNo = 190;	d1.m_bValue = m_b9[wDevNo] | m_b10[wDevNo] | m_b15[wDevNo] | m_b17[wDevNo] | m_b199[wDevNo]  ;	m_pAllMgr->YX(&d1, 1);			pthread_mutex_unlock(&m_mutex);/*			m_byFrameType = 1;	CModbusFrame frame;	BYTE byAddr = m_subdevmgr.GetAddr(byNo);	if (byAddr == 0xff) return;	BYTE* b = new BYTE[4];	WORD* pData = (WORD *)b;	pData[0] = CW(0x0C8F);	pData[1] = CW(5);	m_frmEcho.m_wXLen = 5+5*2;	frame.SetupFrame(byAddr,0x3,b,4);	mn.m_lSize = frame.FrameToBuffer(mn.m_pBuf);	*/}void CSepam2000Mas::GetYX2(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	WORD* pData = (WORD *)FNSend.m_pbyData;	pData[0] = CW(0x0C10);	pData[1] = CW(0x4);	m_DLService.SetEchoLen(5+4*2);	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr );	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond	{		ExpYXData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize,1);		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = false;			m_b199[wDevNo] = false;			m_pAllMgr->YX(&d, 1);		}		m_wBreakCount[byAddr] = 0;	}	else	{		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = true;			m_b199[wDevNo] = true;			m_pAllMgr->YX(&d, 1);		}		else m_wBreakCount[byAddr]++;	}	pthread_mutex_unlock(&m_mutex);	/*			m_byFrameType = 2;	CModbusFrame frame;	BYTE byAddr = m_subdevmgr.GetAddr(byNo);	if (byAddr == 0xff) return;	BYTE* b = new BYTE[4];	WORD* pData = (WORD *)b;	pData[0] = CW(0x0C10);	pData[1] = CW(4);	m_frmEcho.m_wXLen = 5+4*2;	frame.SetupFrame(byAddr,0x3,b,4);	mn.m_lSize = frame.FrameToBuffer(mn.m_pBuf);*/}void CSepam2000Mas::GetYC(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	WORD* pData = (WORD *)FNSend.m_pbyData;	pData[0] = CW(0xfa00);	pData[1] = CW(16);	m_DLService.SetEchoLen(5+16*2);	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr );	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond	{		ExpYCData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize);		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = false;			m_b199[wDevNo] = false;			m_pAllMgr->YX(&d, 1);		}		m_wBreakCount[byAddr] = 0;	}	else	{		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = true;			m_b199[wDevNo] = true;			m_pAllMgr->YX(&d, 1);		}		else m_wBreakCount[byAddr]++;	}	pthread_mutex_unlock(&m_mutex);/*	m_byFrameType = 0;	CModbusFrame frame;	BYTE byAddr = m_subdevmgr.GetAddr(byNo);	if (byAddr == 0xff) return;	BYTE* b = new BYTE[4];	WORD* pData = (WORD *)b;	pData[0] = CW(0xfa00);	pData[1] = CW(16);	m_frmEcho.m_wXLen = 5+16*2;	frame.SetupFrame(byAddr,0x3,b,4);	mn.m_lSize = frame.FrameToBuffer(mn.m_pBuf);	*/}void CSepam2000Mas::GetEvent(BYTE byAddr){	pthread_mutex_lock(&m_mutex);	CFrameNode FNSend,FNRecv;	FNSend.m_byCID = 0x3;	FNSend.m_byDesAddr = byAddr;	FNSend.SetSize(4);	WORD* pData = (WORD *)FNSend.m_pbyData;	pData[0] = CW(0x40);	pData[1] = CW(0x21);	m_DLService.SetEchoLen(5+0x21*2);	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(FNSend.m_byDesAddr );	if (m_DLService.REQ(1,&FNSend,FNRecv,0,true) == 1)//Send - Respond	{		ExpEventData(byAddr,FNRecv.m_pbyData,FNRecv.m_wSize);		//确定并清除		BYTE byExchanged = FNRecv.m_pbyData[1];		BYTE byCount = FNRecv.m_pbyData[2];		if (byCount > 0)		{			usleep(100000);			CFrameNode FNSend1,FNRecv1;			FNSend1.m_byCID = 0x6; //			FNSend1.m_byDesAddr = byAddr;			FNSend1.SetSize(4);			pData = (WORD *)FNSend1.m_pbyData;			pData[0] = CW(0x40);			pData[1] = byExchanged;			m_DLService.SetEchoLen(8);			if (m_DLService.REQ(1,&FNSend1,FNRecv1,0,true) == 1)//Send - Respond			{			}		}		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = false;			m_b199[wDevNo] = false;			m_pAllMgr->YX(&d, 1);		}		m_wBreakCount[byAddr] = 0;	}	else	{		if (m_wBreakCount[byAddr] > 5)		{			YXData d;			d.m_wDevNo = wDevNo;			d.m_wDevPtNo = 199;			d.m_bValue = true;			m_b199[wDevNo] = true;			m_pAllMgr->YX(&d, 1);		}		else m_wBreakCount[byAddr]++;	}	pthread_mutex_unlock(&m_mutex);	}void CSepam2000Mas::ExpYCData(BYTE byAddr,BYTE* pbyData,BYTE bySize){	BYTE* pbyTemp = pbyData + 1;		WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr);	YCData* pData = new YCData [bySize/2];//	short* pshOrigValue = (short *)pbyData;	WORD* pwOrigValue = (WORD *)pbyTemp;	for (WORD w=0; w<bySize/2; w++)	{		pData[w].m_wDevNo = wDevNo;		pData[w].m_wDevPtNo = w+1;		float ffValue = CW(*pwOrigValue++);		if ((w == 10) || (w == 11) || (w == 12) || (w == 13) || (w == 14))			ffValue -= 0x8000;		pData[w].m_fValue = ffValue;	}	m_pAllMgr->YC(pData,(WORD)bySize/2);	delete pData;/*		WORD wSize = (bySize/2) * (sizeof(float) + sizeof(WORD));	WORD wSendSize = 0;	BYTE* pData = new BYTE [wSize];	WORD* pwOrigValue = (WORD *)pbyTemp;	WORD* pwYCNo = (WORD *)pData;	float* pfValue;	for (WORD w=0; w<bySize/2; w++)	{		*pwYCNo = w+1;		pfValue = (float *)(pwYCNo+1);		float ffValue = CW(*pwOrigValue++);		if ((w == 10) || (w == 11) || (w == 12) || (w == 13) || (w == 14))			ffValue -= 0x8000;		*pfValue++ = ffValue;		pwYCNo = (WORD *)pfValue;		wSendSize += 6;	}	MailYC(m_subdevmgr.GetDeviceNo(byNo),pData, wSendSize);	delete pData;	*/}void CSepam2000Mas::ExpYXData(BYTE byAddr,BYTE* pbyData,BYTE bySize,BYTE byOrder){	if ((pbyData == NULL) || (bySize < 2)) return;	BYTE* pbyTemp = pbyData+1;	WORD* pw = (WORD *)pbyTemp;	for (BYTE b=0; b<bySize/2;b++)		*pw++ = CW(*pw);/*	WORD wSize = bySize*8*(sizeof(WORD)+sizeof(BYTE));	WORD wSendSize = 0;	BYTE* pData = new BYTE [wSize];	WORD* pwDTemp = (WORD *)pData;	BYTE* pbyDTemp;	for (WORD w=0; w<bySize-1; w++)	{		BYTE byA = 1;		BYTE byValue = *pbyTemp++;		for (BYTE b=0; b<8; b++,byA<<=1)		{			*pwDTemp++ = b+8*w + 1 + ((m_byFrameType == 2) ? 80 : 0);			pbyDTemp = (BYTE *)pwDTemp;			*pbyDTemp++ = BYTE((byValue&byA)?1:0);			pwDTemp = (WORD *)pbyDTemp;			wSendSize += 3;		}	}	MailYX(m_subdevmgr.GetDeviceNo(byNo),pData, wSendSize);	delete pData;*/	YXData* pYXData = new YXData [(bySize-1)*8];	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr);	for (BYTE by=0; by<(bySize-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 + ((byOrder == 1) ? 80 : 0);			pYXData[b+8*by].m_bValue = bool(byValue & byA);			if (ptno == 9) m_b9[wDevNo] = pYXData[b+8*by].m_bValue;			if (ptno == 10) m_b10[wDevNo] = pYXData[b+8*by].m_bValue;			if (ptno == 15) m_b15[wDevNo] = pYXData[b+8*by].m_bValue;			if (ptno == 17) m_b17[wDevNo] = pYXData[b+8*by].m_bValue;		}	}		m_pAllMgr->YX(pYXData, (bySize-1)*8);			delete [] pYXData;}void CSepam2000Mas::ExpEventData(BYTE byAddr,BYTE* pbyData,BYTE bySize){//	ASSERT(bySize == 67);	BYTE byEventCount;	m_byExchanged = pbyData[1];	byEventCount = pbyData[2];	WORD* pw = (WORD *)&pbyData[3];//	if (byEventCount > 0)//	{//		m_bIsAck = TRUE;//	}	WORD wDevNo = m_subdevmgr.GetDevNoFrmAddr(byAddr);	for (BYTE b=0; b<byEventCount; b++)	{		struct tm gt;//		CString ss;//		SYSTEMTIME st;		gt.tm_year = CW(*(pw + 4 + 8*b));		if (gt.tm_year<50) gt.tm_year += 100;		gt.tm_mon = ((CW(*(pw + 5 + 8*b)) & 0xff00) >> 8) - 1;		gt.tm_mday = CW(*(pw + 5 + 8*b)) & 0xff;		gt.tm_hour = (CW(*(pw + 6 + 8*b)) & 0xff00) >> 8;		gt.tm_min = CW(*(pw + 6 + 8*b)) & 0xff;		gt.tm_sec = CW(*(pw + 7 + 8*b)) /1000;		CTimeVal tvg(&gt,(CW(*(pw + 7 + 8*b)) % 1000)*1000);		WORD wEventAddr = CW(*(pw + 1 + 8*b));//		BYTE byDeviceNo = m_subdevmgr.GetDeviceNo(byNo);		if (wEventAddr < 0xc8f0)			wEventAddr = wEventAddr - 0xc100 + 80;		else wEventAddr -= 0xc8f0;		//		cout <<	gt.tm_year<<"/"<<gt.tm_mon<<"/"<<gt.tm_mday<<"  "<<gt.tm_hour<<":"<<gt.tm_min<<":"<<gt.tm_sec<<"."<< CW(*(pw + 7 + 8*b)) % 1000<< "/" <<wEventAddr<<endl;		if ((wEventAddr != 39) && (wEventAddr != 18))		{		SOEData aSOEData;		aSOEData.m_ctv = tvg;		aSOEData.m_bValue = (*(pw + 3 + 8*b) == 0) ?false:true;		aSOEData.m_wDevNo = wDevNo;		aSOEData.m_wDevPtNo = wEventAddr+1;		SendSOEData(&aSOEData,1);		}/*		int nYXNo = byDeviceNo*10000 +wEventAddr+1;		int nNo = g_yxk.GetIndex(nYXNo);		if(nNo==-1) continue;		int kk=g_yxk[nNo]->m_HintKind;		CString strYXName = g_yxk[nNo]->m_YXName;		CString	s1,s2;		if(kk<0)		{ 			s1 = L"出现";			s2 = L"消失"; 		}		else if(kk<g_OnArray.GetSize())		{			s1 = (LPCTSTR)g_OnArray[kk];			s2 = (LPCTSTR)g_OffArray[kk];		}		ss.Format("%d/%02d/%02d %02d:%02d:%02d.%03d [%s]%s"			,st.wYear,st.wMonth,st.wDay,st.wHour,st.wMinute,st.wSecond,st.wMilliseconds,LPCTSTR(m_subdevmgr.GetName(byNo)),LPCTSTR(strYXName));		ss += (*(pw + 3 + 8*b) == 0) ? s2 : s1;		MailSOE(m_subdevmgr.GetDeviceNo(byNo),(BYTE *)LPCTSTR(ss),ss.GetLength()+1);	*/	}}

⌨️ 快捷键说明

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