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

📄 n4f.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//遥控执行
WORD N4fYkExe(BYTE FAR *txb,WORD wrp)
{
    BYTE val;WORD vall,val1;
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0x1d;
	*(txb+(wrp+2)%txbuflen)=4;
	*(txb+(wrp+3)%txbuflen)=YKStartBoard|0x80;
	*(txb+(wrp+4)%txbuflen)=4;
	val=lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[3]-1;
	val1=0x01;
	vall = (val1<<val/8)*256+val1<<val%8;
	vall=vall<<2;
	 if (lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[3]==0x33) vall=vall|0x02;
	 else    vall=vall|0x01;
	*(txb+(wrp+5)%txbuflen)=LOBYTE (vall);
	*(txb+(wrp+6)%txbuflen)=HIBYTE (vall);
	WORD CRCDATA=MKCRC16(txb,wrp,4,txbuflen);
	*(txb+(wrp+6)%txbuflen)=LOBYTE(CRCDATA);
	*(txb+(wrp+7)%txbuflen)=HIBYTE(CRCDATA);
	return (wrp+8);
}
//遥控返校
void ProcYk(BYTE FAR *rxb,WORD rd)
{
    BYTE v,FJFLAG;
	WORD val=*(rxb+(rd+5)%rxbuflen)*256+*(rxb+(rd+4)%rxbuflen);
    FJFLAG=0x55;
	if (val==lpStaP->YKMESSAGE) FJFLAG=0xaa;	
    COMMAND cmdrcd;

 BYTE rp = (lpStaP->DownCmdRP-1) & 3;
 WORD rtuno = lpStaP->DownCmd[rp].Cmd[0]+lpStaP->DownCmd[rp].Cmd[1]*256;
 if ((lpStaP->DownCmd[rp].Cmd[0]==DCMDYK0) && (lpChP->StaNo == rtuno))
    {
     cmdrcd.CmdContent[0] = 0x44;  //遥控返校
     cmdrcd.CmdContent[1] = lpStaP->DownCmd[rp].Cmd[1];
     cmdrcd.CmdContent[2] = lpStaP->DownCmd[rp].Cmd[2];
	 cmdrcd.CmdContent[3] = *(rxb+(rd+3)%rxbuflen);
     cmdrcd.CmdContent[4] = *(rxb+(rd+4)%rxbuflen);
     cmdrcd.CmdContent[5] = *(rxb+(rd+1)%rxbuflen);
     cmdrcd.CmdContent[6] = FJFLAG;//0xAA;  //遥控返校错:0x55  遥控返校正确:0xAA
     cmdrcd.SubCmdType = TCZYKCMD;
     cmdrcd.DataLen = 0;
     cmdrcd.DataPt = 0;
     WriteACommand(COMMANDDB, SENDCMDBUF, &cmdrcd, NULL);
     lpStaP->DownCmd[rp].Cmd[0]=0;
    }


}
//分站发来电源合闸报文,主站必须对其重新初始化
void	ProcPowerOn(BYTE FAR *rxb,WORD rdp)
{
	lpStaP->RANDOM[0]=0;
}
//给RTU发复位命令
WORD ResetRtu(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=1;
	*(txb+(wrp+2)%txbuflen)=0;
	WORD CRC=MKCRC16(txb,wrp,0,txbuflen);
	*(txb+(wrp+3)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+4)%txbuflen)=HIBYTE(CRC);
	return (wrp+5);
}
//发送压缩因子
WORD YSYZSend(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=4;
	*(txb+(wrp+2)%txbuflen)=8;
	*(txb+(wrp+3)%txbuflen)=0;
	*(txb+(wrp+4)%txbuflen)=0;
	*(txb+(wrp+5)%txbuflen)=0;
	*(txb+(wrp+6)%txbuflen)=0;
	*(txb+(wrp+7)%txbuflen)=0;
	*(txb+(wrp+8)%txbuflen)=0;
	*(txb+(wrp+9)%txbuflen)=0;
	*(txb+(wrp+9)%txbuflen)=0;
	WORD CRC=MKCRC16(txb,wrp,8,txbuflen);
	*(txb+(wrp+10)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+11)%txbuflen)=HIBYTE(CRC);
return (wrp+12);
}
//发送扫描频率
WORD FreqSend(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0x11;
	*(txb+(wrp+2)%txbuflen)=8;
	*(txb+(wrp+3)%txbuflen)=SCAN_FREQUENCE_0;
	*(txb+(wrp+4)%txbuflen)=SCAN_FREQUENCE_1;
	*(txb+(wrp+5)%txbuflen)=SCAN_FREQUENCE_2;
	*(txb+(wrp+6)%txbuflen)=SCAN_FREQUENCE_3;
	*(txb+(wrp+7)%txbuflen)=SCAN_FREQUENCE_4;
	*(txb+(wrp+8)%txbuflen)=SCAN_FREQUENCE_5;
	*(txb+(wrp+9)%txbuflen)=SCAN_FREQUENCE_6;
	*(txb+(wrp+10)%txbuflen)=SCAN_FREQUENCE_7;
	WORD CRC=MKCRC16(txb,wrp,8,txbuflen);
	*(txb+(wrp+11)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+12)%txbuflen)=HIBYTE(CRC);

return (wrp+13);

}
//发送滤波系数
WORD LBXSSend(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0x19;
	*(txb+(wrp+2)%txbuflen)=8;
	*(txb+(wrp+3)%txbuflen)=FILTER_COEFFICIENT_0;
	*(txb+(wrp+4)%txbuflen)=FILTER_COEFFICIENT_1;
	*(txb+(wrp+5)%txbuflen)=FILTER_COEFFICIENT_2;
	*(txb+(wrp+6)%txbuflen)=FILTER_COEFFICIENT_3;
	*(txb+(wrp+7)%txbuflen)=FILTER_COEFFICIENT_4;
	*(txb+(wrp+8)%txbuflen)=FILTER_COEFFICIENT_5;
	*(txb+(wrp+9)%txbuflen)=FILTER_COEFFICIENT_6;
	*(txb+(wrp+10)%txbuflen)=FILTER_COEFFICIENT_7;
	WORD CRC=MKCRC16(txb,wrp,8,txbuflen);
	*(txb+(wrp+11)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+12)%txbuflen)=HIBYTE(CRC);

return (wrp+13);
}
//发送YC类型
WORD SendYcType(BYTE FAR *txb,WORD wrp,BYTE YCTYPE)
{
    int Len,Temp;
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=3;
	 switch (YCTYPE)
         {
           	case YC0:
                if(YcNums>=16)
         	        Len=16*3;          
                else
		            Len=YcNums*3;          
		        	Temp=YCStartBoard;
		   		break;
           	case YC1:
	  	   		if(YcNums>=32)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-16)*3;          
					Temp=YCStartBoard+2;
				break;
           	case YC2:
			  	if(YcNums>=48)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-32)*3;          
					Temp=YCStartBoard+4;
				break;
          	case YC3:
	  	  		if(YcNums>=64)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-48)*3;          
					Temp=YCStartBoard+6;
				break;
	  		case YC4:
                if(YcNums>=80)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-64)*3;          
					Temp=YCStartBoard+8;
				break;
           	case YC5:
	  			if(YcNums>=96)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-80)*3;          
					Temp=YCStartBoard+10;
				break;
           	case YC6:
		  		if(YcNums>=112)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-96)*3;          
					Temp=YCStartBoard+12;
				break;
	   		case YC7:
	  			if(YcNums>=128)
         	   		Len=16*3;          
                else
		   			Len=(YcNums-112)*3;          
					Temp=YCStartBoard+14;
				break;
	   		default:
				return wrp;
		 }
	*(txb+(wrp+1)%txbuflen)=Len;
	 int i=0;
     for (int x=0;x<2;x++)
		{	
	 		for (int j=0;j<8;j++)
	    		{
					*(txb+(wrp+3+i)%txbuflen) = (Temp<<3)+j;
             		if (YCTYPE==YC0)
                		{
							*(txb+(wrp+4+i)%txbuflen) = Yc0Category|YcModuleType;
		 					*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_0;
                		}
	     			if (YCTYPE==YC1)
                 		{
				   			*(txb+(wrp+4+i)%txbuflen)= Yc1Category|YcModuleType;
		  					*(txb+(wrp+5+i)%txbuflen)= REDACTION_FACTOR_1 ;
                		}
	     			if (YCTYPE==YC2)
						{
							*(txb+(wrp+4+i)%txbuflen) = Yc2Category|YcModuleType;
		  					*(txb+(wrp+5+i)%txbuflen)= REDACTION_FACTOR_2 ;
                		}
	     			if (YCTYPE==YC3)
						{
		 					*(txb+(wrp+4+i)%txbuflen) = Yc3Category|YcModuleType;
		 					*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_3;
						}
	     			if (YCTYPE==YC4)
                		{
							*(txb+(wrp+4+i)%txbuflen) = Yc4Category|YcModuleType;
							*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_4 ;
                		}
					if (YCTYPE==YC5)
                		{
							*(txb+(wrp+4+i)%txbuflen) = Yc5Category|YcModuleType;
							*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_5 ;
                		}
					if (YCTYPE==YC6)
                		{
							*(txb+(wrp+4+i)%txbuflen) = Yc6Category|YcModuleType;
							*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_6 ;
                		}
					if (YCTYPE==YC7)
                		{
							*(txb+(wrp+4+i)%txbuflen) = Yc7Category|YcModuleType;
							*(txb+(wrp+5+i)%txbuflen) = REDACTION_FACTOR_7 ;
                		}
		 			i+=3;
             		if (i>=Len) break;
	    		}
         if (i>=Len)     break;
	 Temp++;
	}
WORD CRC=MKCRC16(txb,wrp,Len,txbuflen);
*(txb+(wrp+Len+3)%txbuflen) =LOBYTE(CRC);
*(txb+(wrp+Len+4)%txbuflen) =HIBYTE(CRC);
return (wrp+Len+5);
}
//发送YX类型
WORD SendYxType(BYTE FAR *txb,WORD wrp)
{
    int val,Len;
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=1;
	 val=1;
     Len=val*3*8;   
	*(txb+(wrp+2)%txbuflen)=Len;
     int Temp=YXStartBoard;
     int i=0;
     for(int x=0;x<val;x++)
     {
        for (int j=0;j<8;j++)
	 {
	   *(txb+(wrp+i+3)%txbuflen) = (Temp<<3)+j;
	   *(txb+(wrp+i+4)%txbuflen) = YxCategory|YxModuleType;
	   *(txb+(wrp+i+5)%txbuflen) = REDACTION_FACTOR_3;
	   i+=3;
	 }
       Temp++;
     }
	 WORD CRC=MKCRC16(txb,wrp,Len,txbuflen);

	*(txb+(wrp+Len+3)%txbuflen) =LOBYTE(CRC);
	*(txb+(wrp+Len+4)%txbuflen) =HIBYTE(CRC);


return (wrp+Len+5);
}
//发送同步信号
WORD TBSend(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=4;
	*(txb+(wrp+2)%txbuflen)=0;
	WORD CRC=MKCRC16(txb,wrp,0,txbuflen);
	*(txb+(wrp+3)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+4)%txbuflen)=HIBYTE(CRC);
	struct date Date;
 	struct time Time;
	gettime (&Time);
	lpStaP->HOUR=Time.ti_hour;
	lpStaP->MIN=Time.ti_min;
	lpStaP->SEC=Time.ti_sec;
    TBFlag[lpChP->StaNo]=0;
	return (wrp+5);
}
//发送对钟命令
WORD N4fSetTime(BYTE FAR *txb,WORD wrp)
{
 	struct date Date;
 	struct time Time;
	getdate (&Date);
 	gettime (&Time);
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0xc;
	*(txb+(wrp+2)%txbuflen)=6;
	*(txb+(wrp+3)%txbuflen)=Time.ti_sec;
	*(txb+(wrp+4)%txbuflen)=Time.ti_min;
	*(txb+(wrp+5)%txbuflen)=Time.ti_hour;
	*(txb+(wrp+6)%txbuflen)=Date.da_day;
	*(txb+(wrp+7)%txbuflen)=Date.da_mon;
	*(txb+(wrp+8)%txbuflen)=Date.da_year%100;
	WORD CRC=MKCRC16(txb,wrp,6,txbuflen);
	*(txb+(wrp+9)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+10)%txbuflen)=HIBYTE(CRC);
	return (wrp+11);
}

//发送电源合闸报文
WORD PowerOk(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0x12;
	*(txb+(wrp+2)%txbuflen)=0;
	WORD CRC=MKCRC16(txb,wrp,0,txbuflen);
	*(txb+(wrp+3)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+4)%txbuflen)=HIBYTE(CRC);
	return (wrp+5);
}
//
WORD GXType(BYTE FAR *txb,WORD wrp)
{
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0xb;
	*(txb+(wrp+2)%txbuflen)=1;
	*(txb+(wrp+3)%txbuflen)=0xff;
	WORD CRC=MKCRC16(txb,wrp,0,txbuflen);
	*(txb+(wrp+4)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+5)%txbuflen)=HIBYTE(CRC);
	return (wrp+6);
}
void ProcCallEvent(BYTE FAR *rxb,WORD rdp)
{


}
void ProcCallData(BYTE FAR *rxb,WORD rdp)
{


}
WORD CallKwhData(BYTE FAR *txb,WORD wrp)
{
	BYTE Len;
    WORD CRC;
	*(txb+wrp)=lpStaP->STATIONNO;
	*(txb+(wrp+1)%txbuflen)=0xd;
	*(txb+(wrp+2)%txbuflen)=KWHStartBoard|0x80;
	*(txb+(wrp+3)%txbuflen)=0x20;
	if (lpStaP->KwhDealFlag==0)
		lpStaP->KwhDealFlag=1;
	if (lpStaP->KwhDealFlag==1)
		{
			Len=8;
			*(txb+(wrp+2)%txbuflen)=Len;
			*(txb+(wrp+5)%txbuflen)=0x10;
			*(txb+(wrp+6)%txbuflen)=0x40;
			lpStaP->KwhDealFlag=2;
		}
	else if (lpStaP->KwhDealFlag==2)
    	{
			Len=8;
			*(txb+(wrp+2)%txbuflen)=Len;
			*(txb+(wrp+5)%txbuflen)=0x0;
			*(txb+(wrp+6)%txbuflen)=0x4;
			*(txb+(wrp+7)%txbuflen)=KWHStartBoard;
			*(txb+(wrp+8)%txbuflen)=0xff;
			*(txb+(wrp+9)%txbuflen)=KWHStartBoard+1;
			*(txb+(wrp+10)%txbuflen)=0xff;
			lpStaP->KwhDealFlag=4;
        }
	else if (lpStaP->KwhDealFlag==4)
    	{
			Len=8;
			*(txb+(wrp+2)%txbuflen)=Len;
			*(txb+(wrp+5)%txbuflen)=0x0;
			*(txb+(wrp+6)%txbuflen)=0x8;
			*(txb+(wrp+7)%txbuflen)=KWHStartBoard;
			*(txb+(wrp+8)%txbuflen)=0xff;
			*(txb+(wrp+9)%txbuflen)=KWHStartBoard+1;
			*(txb+(wrp+10)%txbuflen)=0xff;
			lpStaP->KwhDealFlag=8;
        }
	else if (lpStaP->KwhDealFlag==8)
    	{
            Len=4;
			*(txb+(wrp+2)%txbuflen)=Len;
			*(txb+(wrp+5)%txbuflen)=0x10;
			*(txb+(wrp+6)%txbuflen)=0x20;
			lpStaP->KwhDealFlag=0;
			lpStaP->KwhCount=0;
            lpStaP->Poll++;
        }
	CRC=MKCRC16(txb,wrp,Len,txbuflen);
	*(txb+(wrp+Len+3)%txbuflen)=LOBYTE(CRC);
	*(txb+(wrp+Len+4)%txbuflen)=HIBYTE(CRC);
	wrp+=Len+5;
    return wrp;
}

⌨️ 快捷键说明

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