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

📄 netbios.cpp

📁 这是一个变电站的监控程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	else
		return;
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=CHANNELPARA;
	pHead->DestType='F';
	pHead->DestId=mainfertid;
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;;
//	pHead->FertStatus=9;

	pHead->Length=22;
	*(Buf++)=chno;
	*(Buf++)=Channels[chno].Flag;//Flag
	*(Buf++)=Channels[chno].SorA;//SorA
	*(Buf++)=Channels[chno].Baud;//Baud
	*(Buf++)=Channels[chno].EndBit;//
	*(Buf++)=Channels[chno].ParityBit;
	*(Buf++)=Channels[chno].CheckBit;
	*(Buf++)=Channels[chno].DataBit;
	*(Buf++)=Channels[chno].Protocol;
	*(Buf++)=Channels[chno].ChRtuNum;
	*((WORD*)Buf) = Channels[chno].SynWord;
	Buf += 2;
//	*((WORD*)Buf) =Channels[chno].BasePort;
//	Buf += 2;

	for (int i=0;i<8;i++)
		*(Buf+i)=Channels[chno].ChRtuNo[i];
/*	wp=(WORD *)(p+6);
	*((WORD *)(Buf+6))=*wp;//BasePort
	*(Buf+8)=*(p+8);//EndBit
	*(Buf+9)=*(p+9);//ParityBit
	*(Buf+10)=*(p+10);//CheckBit
	*(Buf+11)=*(p+11);//DataBit
	*(Buf+12)=*(p+12);//ChRtuNo[0]
	*(Buf+13)=*(p+13);//ChRtuNum*/

	XmitDataGram ();
}


//发送平安报文
void NetProcess::MakeATBFrame()
{
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=ATB;
	pHead->DestType='G';
	pHead->DestId=mainfertid;
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
	CREGISTER  *cRegister = (CREGISTER far *)Buf;
	cRegister->NodeId=ThisNodeId;
	cRegister->NodeNo=ThisNodeId-'A';
	cRegister->NodeType='F';
	cRegister->NodeState='N';

	pHead->Length=sizeof(CREGISTER);
//	if (sockflag1)
//		TcpXmitDataGram (0);
//	if (sockflag2)
//		TcpXmitDataGram (1);
	XmitDataGram();

}
//发送登录信息
void NetProcess::MakeRegisterFrame()
{
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=REGISTER;
	pHead->DestType='G';
	pHead->DestId=mainhostid;     
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;;
//	pHead->FertStatus=9;
	CREGISTER  *cRegister = (CREGISTER *)Buf;
	cRegister->NodeId=ThisNodeId;
	cRegister->NodeNo=ThisNodeId-'A';
	cRegister->NodeType='F';
	cRegister->NodeState='N';

	pHead->Length=sizeof(CREGISTER);
//	if (sockflag1)
//		TcpXmitDataGram (0);
//	if (sockflag2)
//		TcpXmitDataGram (1);
	XmitDataGram ();

}

//发送所有事项
void NetProcess::MakeEventFrame()
{
	while(Events.EventSendNum != Events.EventNum) 
	{
		if (mainfertid==ThisNodeId) 
		{
			char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
			class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
			pHead->CmdCode=SOE;
			pHead->DestType='H';
			pHead->DestId='A';
			pHead->SourceType='F';
			pHead->SourceId=ThisNodeId;
			pHead->SourceNo=ThisNodeId-'A';
			pHead->TxCount=TxCounts++;
		//	pHead->FertStatus=9;
			memcpy(Buf,&(Events.EventBuf[Events.EventSendNum].cause),sizeof(FERTEVENT));
			pHead->Length=sizeof(FERTEVENT);
			for (int i=0;i<3;i++)
			{
				XmitDataGram ();
				Sleep(10);
			}
			if (++Events.EventSendNum>=MAX_EVENT_NUM)
				Events.EventSendNum=0;
		}else Events.EventSendNum = Events.EventNum ;
		
	}
}

//发送通道状态
void NetProcess::MakeChannelFrame()
{
//	int Len=0,j=0;
	BYTE RtuNo = 0;
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	char * TempBuf;
	TempBuf=Buf;
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->DestType='F';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
//	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
	pHead->CmdCode=COMMSTATE;

	//Modify by lqs on 2000.12.21 10:20
	//针对单个Rtu组织UDP报文进行发送
	for (int i=0;i<SystemCount.RtuNum;i++)
	{
//	    if (!Rtus[i].Flag) continue;
			Buf=TempBuf;
		    *(long*)Buf = ProgramStartTime;
	        Buf += 4;
	    	RtuNo = (BYTE)i;
			*(Buf++) = RtuNo;
			*(Buf++) = (BYTE)((Rtus[RtuNo].bFault)?0:1);
			*(DWORD*)Buf = Rtus[RtuNo].FaultTime;
			Buf += 4;
			*(DWORD*)Buf=Rtus[RtuNo].RecFrameSum;
			Buf += 4;
			*(DWORD*)Buf = Rtus[RtuNo].ErrFrameSum;
			Buf += 4;
			for(int k=0;k<25;k++)
			{
				*(float*)Buf = Rtus[RtuNo].ErrRate[k];
			    Buf += 4;
			}
	        pHead->Length = 118;
			pHead->TxCount=TxCounts++;
	        if (mainfertid==ThisNodeId) 
			{
		        XmitDataGram ();
				Sleep(10); 
			}
	}
	//Modify by lqs on 2000.12.21 10:20

//	pHead->Length = Len * 14 + 4;
//	if (mainfertid==ThisNodeId) {
//		XmitDataGram ();
}

//发送所有遥测量
void NetProcess::MakeYcFrame()
{
	int Len=0;
	int SendLength=512-sizeof(GRAMHEAD);
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=YCDRF;
	pHead->DestType='G';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=(char)(ThisNodeId-'A');
	pHead->TxCount=TxCounts++;

	while((YcSendRtuNo<SystemCount.RtuNum))
	{
		if (YcSendRtuNo == ZFRtuNo) 
		{
			YcSendRtuNo++;
			continue;
		}
		if ((Rtus[YcSendRtuNo].Flag & 1) && (Rtus[YcSendRtuNo].YcNum)) 
		{	//use flag
			if ((Len+2+1+2+2*Rtus[YcSendRtuNo].YcNum)<SendLength) 
			{
				Len+=2+1+2+2*Rtus[YcSendRtuNo].YcNum;
				*((WORD *)Buf) = (WORD)(Rtus[YcSendRtuNo].Freq[0] * 100);//FREQ 频率
				Buf+=2;
				*Buf++=YcSendRtuNo;

				*((WORD *)Buf)=2*Rtus[YcSendRtuNo].YcNum;
				Buf+=2;
				for (int i=0;i<Rtus[YcSendRtuNo].YcNum;i++)
				{
					*((WORD *)Buf)=(WORD)Rtus[YcSendRtuNo].YcValue[i];
					Buf+=2;
				}
				if (++YcSendRtuNo>=SystemCount.RtuNum)
				{
					YcSendRtuNo=0;
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) 
					{
						XmitDataGram ();
					}
					return;
				}
			}
			else 
			{
				if (++YcSendRtuNo>=SystemCount.RtuNum)
				{
					YcSendRtuNo=0;
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) 
					{
						XmitDataGram ();
					}
				}
				continue;
			}
		}						
		else 
		{
			if (++YcSendRtuNo>=SystemCount.RtuNum) 
			{
				YcSendRtuNo=0;
				if (Len>2) 
				{
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) 
					{
						XmitDataGram ();
					}
				}
				return;
			}
		}
	}
}

//发送所有电度量
void NetProcess::MakeKwhFrame()
{
	int Len=0;
	int SendLength=512-sizeof(GRAMHEAD);
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=KWHDRF;
	pHead->DestType='G';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
//	*((WORD *)Buf)=Freq;	//周波
	while(KwhSendRtuNo<SystemCount.RtuNum) 
	{
		if (KwhSendRtuNo == ZFRtuNo) 
		{
			KwhSendRtuNo++;
			continue;
		}
		if ((Rtus[KwhSendRtuNo].Flag & 1) && (Rtus[KwhSendRtuNo].KwhNum)) {	//use flag
			if ((Len+1+2+4*Rtus[KwhSendRtuNo].KwhNum)<SendLength) {
				Len+=1+2+4*Rtus[KwhSendRtuNo].KwhNum;
				*Buf++=KwhSendRtuNo;
				*((WORD *)Buf)=4*Rtus[KwhSendRtuNo].KwhNum;
				Buf+=2;
				for (int i=0;i<Rtus[KwhSendRtuNo].KwhNum;i++) {
					*((DWORD *)Buf)=Rtus[KwhSendRtuNo].KwhValue[i];
					Buf+=4;
				}	
				if (++KwhSendRtuNo>=SystemCount.RtuNum) {
					KwhSendRtuNo=0;
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);

					}
					return;
		
				}
			}
			else {
				pHead->Length=Len;
				if (mainfertid==ThisNodeId) {
					XmitDataGram ();
//					if (sockflag1)
//						TcpXmitDataGram (0);
//					if (sockflag2)
//						TcpXmitDataGram (1);
				}
				return;
			}

		}						
		else {
			if (++KwhSendRtuNo>=SystemCount.RtuNum) {
				KwhSendRtuNo=0;
				if (Len>2) {
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);
					}
				}
				return;
			}
		}
	}
}
//发送所有遥信量
void NetProcess::MakeYxFrame()
{
	int Len=0;
	int SendLength=512-sizeof(GRAMHEAD);
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=YXDRF;
	pHead->DestType='G';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
//	YxwSendRtuNo=0;
	while(YxwSendRtuNo<SystemCount.RtuNum) 
	{
		if (YxwSendRtuNo == ZFRtuNo) 
		{
			YxwSendRtuNo++;
			continue;
		}
		WORD YxNum=Rtus[YxwSendRtuNo].YxNum;
		if ((Rtus[YxwSendRtuNo].Flag & 1) && YxNum)// && (Rtus[YxwSendRtuNo].RecFullYx==1)) //use flag
		{
			WORD YxwNum=(Rtus[YxwSendRtuNo].YxNum + 15)/16; //? (Rtus[YxwSendRtuNo].YxNum-1)/16+1 : 0;
			if ((Len+1+2+2*YxwNum)<SendLength)
			{
				Len+=1+2+2*YxwNum;
				*Buf++=YxwSendRtuNo;
				*((WORD *)Buf)=2*YxwNum;
				Buf+=2;

				for (int i=0;i<YxwNum*2;i++) Buf[i]=0;
				for (i=0;i<YxNum;i++)
					if(Rtus[YxwSendRtuNo].YxValue[i]) Buf[(int)i/8] += 1<<(i%8);
				Buf += YxwNum*2;
				if (++YxwSendRtuNo>=SystemCount.RtuNum) {
					YxwSendRtuNo=0;
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);
					}
					return;
				}
			}
			else {
				pHead->Length=Len;
				if (mainfertid==ThisNodeId) {
					XmitDataGram ();
//					if (sockflag1)
//						TcpXmitDataGram (0);
//					if (sockflag2)
//						TcpXmitDataGram (1);
				}
				return;
			}

		}						
		else {
			if (++YxwSendRtuNo>=SystemCount.RtuNum) {
				YxwSendRtuNo=0;
				if (Len>2) {
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);
					}
				}
				return;
			}

		}
	}
}
//发送所有水位
void NetProcess::MakeWaterFrame()
{
	int Len=0;
	int SendLength=512-sizeof(GRAMHEAD);
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=WTRDRF;
	pHead->DestType='G';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
	while(WaterSendRtuNo<SystemCount.RtuNum)
	{
		if (WaterSendRtuNo == ZFRtuNo)
		{
			WaterSendRtuNo++;
			continue;
		}
		if ((Rtus[WaterSendRtuNo].Flag & 1) && (Rtus[WaterSendRtuNo].WaterNum)) {	//use flag
			if ((Len+1+2+4*Rtus[WaterSendRtuNo].WaterNum)<SendLength) {
				Len+=1+2+4*Rtus[WaterSendRtuNo].WaterNum;
				*Buf++=WaterSendRtuNo;
				*((WORD *)Buf)=2*Rtus[WaterSendRtuNo].WaterNum;
				Buf+=2;
				for (int i=0;i<Rtus[WaterSendRtuNo].WaterNum;i++) {
					*((float *)Buf)=Rtus[WaterSendRtuNo].Water[i];
					Buf+=4;
				}
				if (++WaterSendRtuNo>=SystemCount.RtuNum) {
					WaterSendRtuNo=0;
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);
					}
					return;
				}
			}
			else {
				pHead->Length=Len;
				if (mainfertid==ThisNodeId) {
					XmitDataGram ();
//					if (sockflag1)
//						TcpXmitDataGram (0);
//					if (sockflag2)
//						TcpXmitDataGram (1);
				}
				return;
			}

		}						
		else {
			if (++WaterSendRtuNo>=SystemCount.RtuNum) {
				WaterSendRtuNo=0;
				if (Len>2) {
					pHead->Length=Len;
					if (mainfertid==ThisNodeId) {
						XmitDataGram ();
//						if (sockflag1)
//							TcpXmitDataGram (0);
//						if (sockflag2)
//							TcpXmitDataGram (1);
					}
				}
				return;
			}
		}
	}
}
//发送所有频率
void NetProcess::MakeFreqFrame()
{
	int Len=0;
	float *FreqBuf;
	int SendLength=512-sizeof(GRAMHEAD);
	char * Buf=NetSend.TXBUF_addr+sizeof(GRAMHEAD);
	class GRAMHEAD *pHead=(class GRAMHEAD *)NetSend.TXBUF_addr;	
	pHead->CmdCode=FRQDRF;
	pHead->DestType='G';
	pHead->DestId='A';
	pHead->SourceType='F';
	pHead->SourceId=ThisNodeId;
	pHead->SourceNo=ThisNodeId-'A';
	pHead->TxCount=TxCounts++;
//	pHead->FertStatus=9;
	while(FreqSendRtuNo<SystemCount.RtuNum) 
	{
		if (FreqSendRtuNo == ZFRtuNo)
		{
			FreqSendRtuNo++;
			continue;
		}
		if ((Rtus[FreqSendRtuNo].Flag & 1) && (Rtus[FreqSendRtuNo].FreqNum)) {	//use flag
			if ((Len+1+2+4*Rtus[FreqSendRtuNo].FreqNum)<SendLength) {
				Len+=1+2+sizeof(float)*Rtus[FreqSendRtuNo].FreqNum;
				*Buf++=FreqSendRtuNo;
				*((WORD *)Buf)=sizeof(float)*Rtus[FreqSendRtuNo].FreqNum;
				Buf+=2;
				FreqBuf = (float*)Buf;

⌨️ 快捷键说明

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