📄 n4f.cpp
字号:
//遥控执行
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 + -