📄 zfcdt92.cpp
字号:
return 6;
}
BYTE Pyx(WORD rdp)
{
BYTE FAR *rxb = lpChP->RecBuff;
int yxbOrd = *(rxb+rdp) - 0xF0+2;
int i, j;
BYTE flag = (lpStaP+lpChP->StaNo)->RotateFlag;
BYTE yxbv, yxtb, yxv[8];
for (i=0; i<4; i++)
{
yxbv = *(rxb+(rdp+i+1)%rxbuflen);
if (flag) yxbv = ByteRotate(yxbv);
for (j=0, yxtb=0x80; j<8; j++, yxtb>>=1)
{
yxv[j] = 0;
if (yxbv&yxtb) yxv[j]=1;
}
SetBatchValue(YXDB, lpChP->StaNo, yxbOrd*32+i*8, 8, (char huge *)yxv);
}
return 6;
}
BYTE Pkwh(WORD rdp)
{
BYTE FAR *rxb = lpChP->RecBuff;
int kwhOrd = *(rxb+rdp) - 0xA0;
DWORD kwhValue = (DWORD)*(rxb+(rdp+3)%rxbuflen)+(DWORD)*(rxb+(rdp+2)%rxbuflen)*256l
+ (DWORD)*(rxb+(rdp+1)%rxbuflen)*256l*256l;
SetValue(KWHDB, lpChP->StaNo, kwhOrd, kwhValue);
return 6;
}
BYTE Pyk(WORD rdp)
{
if ((lpChP->RxWriteP+rxbuflen - lpChP->RxReadP)%rxbuflen <18 ) return 0;
BYTE bchdata[6],i;
BYTE FAR *rxb = lpChP->RecBuff;
//tzc
for (i=0; i<6; i++) bchdata[i] = *(rxb+(rdp+6+i)%rxbuflen);
if (CDT_BCH(bchdata)!=bchdata[5]) return 12;
for (i=0; i<6; i++) bchdata[i] = *(rxb+(rdp+12+i)%rxbuflen);
if (CDT_BCH(bchdata)!=bchdata[5]) return 18;
BYTE FJFLAG=0xaa;
for (i=0;i<6;i++) if (*(rxb+(rdp+i)%rxbuflen)!=lpChP->yktemp[i]) {FJFLAG=0x55;break;}
//tzc
COMMAND cmdrcd;
// BYTE FAR *rxb = lpChP->RecBuff;
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+(rdp+3)%rxbuflen);
cmdrcd.CmdContent[4] = *(rxb+(rdp+4)%rxbuflen);
cmdrcd.CmdContent[5] = *(rxb+(rdp+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;
}
return 18;
}
BYTE Psj(WORD rdp)
{
if ((lpChP->RxWriteP+rxbuflen - lpChP->RxReadP)%rxbuflen <18 ) return 0;
COMMAND cmdrcd;
char bchdata[6],i;
BYTE FAR *rxb = lpChP->RecBuff;
BYTE rp = (lpStaP->DownCmdRP-1) & 3;
WORD rtuno = lpStaP->DownCmd[rp].Cmd[0]+lpStaP->DownCmd[rp].Cmd[1]*256;
//tzc
for (i=0; i<6; i++) bchdata[i] = *(rxb+(rdp+6+i)%rxbuflen);
if (CDT_BCH(bchdata)!=bchdata[5]) return 12;
for (i=0; i<6; i++) bchdata[i] = *(rxb+(rdp+12+i)%rxbuflen);
if (CDT_BCH(bchdata)!=bchdata[5]) return 18;
BYTE FJFLAG=0xaa;
for (i=0;i<6;i++) if (*(rxb+(rdp+i)%rxbuflen)!=lpChP->yktemp[i]) {FJFLAG=0x55;break;}
//tzc
if ((lpStaP->DownCmd[rp].Cmd[0]==DCMDSJ0) && (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+(rdp+3)%rxbuflen);
cmdrcd.CmdContent[4] = *(rxb+(rdp+4)%rxbuflen);
cmdrcd.CmdContent[5] = *(rxb+(rdp+1)%rxbuflen);
cmdrcd.CmdContent[6] = FJFLAG;//0xAA; //遥调返校错:0x55 遥调返校正确:0xAA
cmdrcd.SubCmdType = TCZYTCMD;
cmdrcd.DataLen = 0;
cmdrcd.DataPt = 0;
WriteACommand(COMMANDDB, SENDCMDBUF, &cmdrcd, NULL);
lpStaP->DownCmd[rp].Cmd[0]=0;
}
return 18;
}
BYTE Psoe(WORD rdp)
{
if ((lpChP->RxWriteP+rxbuflen - lpChP->RxReadP)%rxbuflen <36 ) return 0;
char bchdata[6];
BYTE FAR *rxb = lpChP->RecBuff;
BYTE ret;
WORD yxord;
DWORD yxattr;
if ((*(rxb+rdp%rxbuflen)==0x80) && (*(rxb+(rdp+6)%rxbuflen)==0x81))
{
for (int i=0; i<6; i++) bchdata[i] = *(rxb+(rdp+i+6)%rxbuflen);
if (CDT_BCH(bchdata)==bchdata[5])
{
yxord = *(rxb+(rdp+9)%rxbuflen) + (*(rxb+(rdp+10)%rxbuflen)&0xf)*256;
yxattr = GetAttr(YXDB, lpChP->StaNo, yxord);
if ((yxattr&YXCREATESOE) && (yxattr&RECRTUSOE))
{
EVENT evercd;
BYTE yxtype = GetType(YXDB, lpChP->StaNo, yxord);
if (yxtype==YXSWITCH) evercd.EventType = KGEVENT;
else if (yxtype==YXLINKER) evercd.EventType = DZEVENT;
else if (yxtype==YXPROTECT) evercd.EventType = BHEVENT;
evercd.Station = lpChP->StaNo;
evercd.Order = yxord;
evercd.Status = *(rxb+(rdp+10)%rxbuflen)&0x80;
if (evercd.Status) evercd.Status = 0xCC;
else evercd.Status = 0x33;
if (yxattr&YXXOR) evercd.Status ^= 0xff;
evercd.EventAttr &= ~SGFLAG;
if (GetTimerValue(RTUDB, evercd.Station))
{
if (evercd.Status==0x33)
{
if ((yxtype==YXSWITCH) || (yxtype==YXLINKER))
evercd.EventAttr |= SGFLAG;
}
else if (yxtype==YXPROTECT) evercd.EventAttr |= SGFLAG;
}
WriteAEvent(EVENTDB, &evercd);
}
ret=36;
}
else ret=12;
}
else ret=6;
return ret;
}
//-----------------------------------------------------------------------------
WORD iTime(WORD wrp)
{
struct date Date;
struct time Time;
BYTE bchdata[6]={0x71, 0x7a, 2, 1, 0, 0};
BYTE FAR *txb = lpChP->SendBuff;
bchdata[4] = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[1];
bchdata[5] = CDT_BCH(bchdata);
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
getdate (&Date);
gettime (&Time);
bchdata[0]=0xee;
bchdata[1]=50;
bchdata[2]=0;
bchdata[3]=Time.ti_sec;
bchdata[4]=Time.ti_min;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
bchdata[0]=0xef;
bchdata[1]=Time.ti_hour;
bchdata[2]=Date.da_day;
bchdata[3]=Date.da_mon;
bchdata[4]=Date.da_year%256;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
return wrp;
}
WORD msYk(WORD wrp)
{
BYTE bchdata[6]={0x71, 0x61, 3, 1, 0, 0};
BYTE FAR *txb = lpChP->SendBuff;
BYTE yktype = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[0];
if (yktype==DCMDYK0) bchdata[1] = 0x61;
else if (yktype==DCMDYK1) bchdata[1] = 0xc2;
else bchdata[1] = 0xb3;
bchdata[4] = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[1];
bchdata[5] = CDT_BCH(bchdata);
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
if (yktype==DCMDYK0)
{
bchdata[0] = 0xe0;
bchdata[1]=lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[5];
}
else if (yktype==DCMDYK1) { bchdata[0] = 0xe2; bchdata[1] = 0xaa; }
else { bchdata[0] = 0xe3; bchdata[1] = 0x55; }
bchdata[2]=lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[3];
bchdata[3]=bchdata[1];
bchdata[4]=bchdata[2];
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
//tzc
for (i=0; i<6; i++) lpChP->yktemp[i]=bchdata[i];
//tzc
return wrp;
}
WORD msSj(WORD wrp)
{
BYTE bchdata[6]={0x71, 0xf4, 3, 1, 0, 0};
BYTE FAR *txb = lpChP->SendBuff;
BYTE sjtype = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[0];
if (sjtype==DCMDSJ0) bchdata[1] = 0xf4;
else if (sjtype==DCMDSJ1) bchdata[1] = 0x85;
else bchdata[1] = 0x26;
bchdata[4] = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[1];
bchdata[5] = CDT_BCH(bchdata);
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
if (sjtype==DCMDSJ0)
{
bchdata[0] = 0xe4;
bchdata[1]=lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[5];
}
else if (sjtype==DCMDSJ1) { bchdata[0] = 0xe6; bchdata[1] = 0xaa; }
else { bchdata[0] = 0xe7; bchdata[1] = 0x55; }
bchdata[2]=lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[3];
bchdata[3]=bchdata[1];
bchdata[4]=bchdata[2];
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
//tzc
for (i=0; i<6; i++) lpChP->yktemp[i]=bchdata[i];
//tzc
return wrp;
}
WORD msGb(WORD wrp)
{
BYTE bchdata[6]={0x21, 0x9e, 0, 1, 0xff, 0};
BYTE FAR *txb = lpChP->SendBuff;
// bchdata[4] = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[1];
bchdata[5] = CDT_BCH(bchdata);
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
return wrp;
}
WORD msFg(WORD wrp)
{
BYTE bchdata[6]={0x31, 0x3d, 0, 1, 0, 0};
BYTE FAR *txb = lpChP->SendBuff;
bchdata[4] = lpStaP->DownCmd[lpStaP->DownCmdRP].Cmd[1];
bchdata[5] = CDT_BCH(bchdata);
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
return wrp;
}
WORD YcProc(BYTE FrameNum,WORD wrp,int Station)
{
DWORD YcValue;
int ycvalue;
WORD YcNum=GetRcdNum(YCDB, Station);
// if (YcNum>64) YcNum=64;
if (YcNum<=FrameNum*(WORD)32) FrameNum=0;//return wrp;
BYTE FAR *txb = lpChP->SendBuff;
BYTE bchdata[6]={0xeb, 0x90, 0xeb,0x90,0xeb,0x90};
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
bchdata[0]=0x71;bchdata[1]=0x61;bchdata[2]=0x20;bchdata[3]=0x88;bchdata[4]=0x22;
if (FrameNum==1) bchdata[1]=0xc2;
else if (FrameNum>1) bchdata[1]=0xb3;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (int ycnum=FrameNum*32;ycnum<(FrameNum+1)*32;ycnum++)
{
if (ycnum>YcNum) break;
bchdata[0]=ycnum/2;
YcValue=GetValue(YCDB, Station,ycnum);
if (YcValue&0x8000) {ycvalue=~(YcValue&0x7fff);ycvalue/=10;ycvalue&=0x7ff;ycvalue|=0x800;}
else ycvalue=YcValue/1;
bchdata[1]=ycvalue%256;
bchdata[2]=ycvalue/256;
YcValue=GetValue(YCDB, Station,++ycnum);
if (YcValue&0x8000) {ycvalue=~(YcValue&0x7fff);ycvalue/=10;ycvalue&=0x7ff;ycvalue|=0x800;}
else ycvalue=YcValue/1;
bchdata[3]=ycvalue%256;
bchdata[4]=ycvalue/256;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
}
return wrp;
}
WORD YxProc(WORD wrp,int Station)
{
char yxv[16];
WORD yxw;
DWORD YxValue;
WORD YxNum=GetRcdNum(YXDB, Station);
YxNum=128;
BYTE FAR *txb = lpChP->SendBuff;
BYTE bchdata[6]={0xeb, 0x90, 0xeb,0x90,0xeb,0x90};
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
bchdata[0]=0x71;bchdata[1]=0xf4;bchdata[2]=0x2;bchdata[3]=0x88;bchdata[4]=0x22;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
int p=0;
for (int yxnum=0;yxnum<YxNum/32;yxnum++)
{
bchdata[0]=0xf0+yxnum;
yxw = 0;
GetBatchValue(YXDB, Station, 16*p, 16, (char huge *)yxv);
for (i=0; i<16; i++)
{
yxw >>= 1;
if (yxv[i] & bit0) yxw |= bit15;
}
bchdata[1] = LOBYTE(yxw);
bchdata[2] = HIBYTE(yxw);
p=p+1;
yxw = 0;
GetBatchValue(YXDB, Station, 16*p, 16, (char huge *)yxv);
for (i=0; i<16; i++)
{
yxw >>= 1;
if (yxv[i] & bit0) yxw |= bit15;
}
bchdata[3] = LOBYTE(yxw);
bchdata[4] = HIBYTE(yxw);
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
p=p+1; //tomas 1998.12.27
}
return wrp;
}
WORD KwhProc(BYTE FrameNum,WORD wrp,int Station)
{
DWORD KwhValue;
WORD KwhNum=GetRcdNum(KWHDB, Station);
FrameNum&=1;
if (KwhNum<FrameNum*32) return wrp;
BYTE FAR *txb = lpChP->SendBuff;
BYTE bchdata[6]={0xeb, 0x90, 0xeb,0x90,0xeb,0x90};
for (int i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
bchdata[0]=0x71;bchdata[1]=0x85;bchdata[2]=0x10;bchdata[3]=0x88;bchdata[4]=0x22;
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
for (int kwhnum=FrameNum*32;kwhnum<=(FrameNum+1)*32;kwhnum++)
{
if (kwhnum>KwhNum) break;
bchdata[0]=kwhnum+0xa0;
KwhValue=GetValue(KWHDB,Station,kwhnum);
bchdata[1] = 0;KwhValue%256l;
bchdata[2] = (KwhValue/100000)*16+(KwhValue%100000/10000);
bchdata[3] = (KwhValue%10000/1000)*16+(KwhValue%1000/100);
bchdata[4] = (KwhValue%100/10)*16+(KwhValue%10);
bchdata[5] = CDT_BCH(bchdata);
for (i=0; i<6; i++) *(txb+(wrp+i)%txbuflen) = bchdata[i];
wrp = (wrp+6)%txbuflen;
}
return wrp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -