📄 xinjzhf.cpp
字号:
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 TransYc(WORD wrp,int Station)
{
DWORD YcValue;
WORD crc;
int yctemp;
BYTE FAR *txb = lpChP->SendBuff;
*(txb+wrp)=STATIONNO[lpChP->StaNo];
*(txb+(wrp+1)%txbuflen)=0x11;
WORD YcNum=GetRcdNum(YCDB,Station)/3;
*(txb+(wrp+2)%txbuflen)=YcNum*2;
for (int i=0;i<YcNum;i++)
{
YcValue=GetValue(YCDB, Station,i);
yctemp=YcValue&0x7fff;
if (YcValue&0x8000) yctemp=(YcValue*(-1))|0x8000;
YcValue=yctemp;
*(txb+(wrp+3+i*2)%txbuflen)=LOBYTE (YcValue);
*(txb+(wrp+4+i*2)%txbuflen)=HIBYTE (YcValue);
}
crc=crc16(wrp,YcNum*2+3,lpChP->SendBuff,txbuflen);
*(txb+(wrp+3+YcNum*2)%txbuflen)=LOBYTE (crc);
*(txb+(wrp+4+YcNum*2)%txbuflen)=HIBYTE (crc);
wrp=(wrp+5+YcNum*2)%txbuflen;
return wrp;
}
WORD TransYx(WORD wrp,int Station)
{
char yxv[16];
WORD crc,yxw;
BYTE FAR *txb = lpChP->SendBuff;
*(txb+wrp)=STATIONNO[lpChP->StaNo];
*(txb+(wrp+1)%txbuflen)=0x15;
WORD YxNum=GetRcdNum(YXDB,Station)/3;
*(txb+(wrp+2)%txbuflen)=((YxNum+15)/16)*2;
for (int i=0;i<(YxNum+15)/16;i++)
{
yxw = 0;
GetBatchValue(YXDB, Station, 16*i, 16, (char huge *)yxv);
for (int ii=0; ii<16; ii++)
{
yxw >>= 1;
if (yxv[ii] & bit0) yxw |= bit15;
}
*(txb+(wrp+3+i*2)%txbuflen)=LOBYTE(yxw);
*(txb+(wrp+4+i*2)%txbuflen)=HIBYTE(yxw);
}
crc=crc16(wrp,((YxNum+15)/16)*2+3,lpChP->SendBuff,txbuflen);
*(txb+(wrp+3+((YxNum+15)/16)*2)%txbuflen)=LOBYTE (crc);
*(txb+(wrp+4+((YxNum+15)/16)*2)%txbuflen)=HIBYTE (crc);
wrp=(wrp+5+2*YxNum/16)%txbuflen;
return wrp;
}
WORD TransKwh(WORD wrp,int Station)
{
BYTE FAR *txb = lpChP->SendBuff;
return wrp;
}
WORD CRC(WORD wrp)
{
WORD ax,bx,temp;
int i;
BYTE cx;
BYTE FAR *txb = lpChP->SendBuff;
cx=*(txb+(wrp+2)%txbuflen)+1;
bx=(BYTE)*(txb+wrp);
ax=(WORD)*(txb+(wrp+1)%txbuflen);
i=3;
CRCLOOP1:
bx<<=1;
ax^=(WORD)XJCRCDATA[bx];
if (cx==1) goto CRCLOOP2;
bx=ax&0xff;
ax>>=8;
temp=(BYTE)*(txb+(wrp+i)%txbuflen);
ax=temp<<8;
i++;
cx--;
if (cx!=0) goto CRCLOOP1;
CRCLOOP2:
bx=ax&0xff;
ax>>=8;
bx<<=1;
ax^=(WORD)XJCRCDATA[bx];
bx=ax&0xff;
ax>>8;
bx<<=1;
ax^=(WORD)XJCRCDATA[bx];
return ax;
}
/*
WORD crc16(WORD wrp, int count,char FAR * base,WORD Mode)
{
//printf ("\n%x %x %x %x %x %x %x %x %x",*(base+(wrp+0)%Mode),*(base+(wrp+1)%Mode),*(base+(wrp+2)%Mode),
//*(base+(wrp+3)%Mode),*(base+(wrp+4)%Mode),*(base+(wrp+5)%Mode),*(base+(wrp+6)%Mode),*(base+(wrp+7)%Mode),*(base+(wrp+8)%Mode));
WORD ax,bx,temp;
int i;
BYTE cx;
cx=(BYTE)*(base+(wrp+2)%Mode)+1;
bx=(BYTE)*(base+wrp);
ax=(BYTE)*(base+(wrp+2)%Mode)*256+(BYTE)*(base+(wrp+2)%Mode);
i=2;
CRCLOOP1:
bx<<=1;
ax^=((BYTE)XJCRCDATA[bx+1]*256+(BYTE)XJCRCDATA[bx]);
if (cx==1) goto CRCLOOP2;
bx=ax&0xff;
ax>>=8;
temp=(BYTE)*(base+(wrp+i)%Mode);
ax=temp<<8;
i++;
if (cx--!=0) goto CRCLOOP1;
CRCLOOP2:
bx=ax&0xff;
ax>>=8;
bx<<=1;
ax^=((BYTE)XJCRCDATA[bx+1]*256+(BYTE)XJCRCDATA[bx]);
bx=ax&0xff;
ax>>8;
bx<<=1;
ax^=((BYTE)XJCRCDATA[bx+1]*256+(BYTE)XJCRCDATA[bx]);
return (ax);
}
*/
/*
UINT CommProc::crc16(BYTE *ptr, int count)
{
UINT crc, i;
crc=0;
while( --count >=0) {
crc = (crc^(((int)*ptr++)<<8));
for(i=0; i<8; ++i)
if(crc & 0x8000)
crc = ((crc<<1)^0x1021);
else
crc = crc << 1;
}
return (crc&0xffff);
}
*/
/*
WORD crc16(WORD rp, int count,char FAR * base,WORD Mode)
{
//printf ("\n%x %x %x %x %x %x %x %x %x %d",*(base+(rp)%rxbuflen),*(base+(rp+1)%rxbuflen),*(base+(rp+2)%rxbuflen),
//*(base+(rp+3)%rxbuflen),*(base+(rp+4)%rxbuflen),*(base+(rp+5)%rxbuflen),*(base+(rp+6)%rxbuflen),*(base+(rp+7)%rxbuflen),*(base+(rp+8)%rxbuflen),Mode);
UINT crc, i,temp;
crc=0;
while( --count >=0)
{
temp=(BYTE)*(base+(rp)%Mode)+(BYTE)(*base+(rp+1)%Mode)*256;
// crc = (crc^(((int)*(base+(rp++)%Mode))<<8));
crc = (crc^(temp<<8));
rp++;
for(i=0; i<8; ++i)
if(crc & 0x8000)
crc = ((crc<<1)^0x1021);
else
crc = crc << 1;
}
return (crc&0xffff);
}
*/
WORD ProcRec(WORD rp,char FAR * base,WORD len,WORD RtuNo)
{
int yctemp;
WORD YcNum=GetRcdNum(YCDB,RtuNo)/3;
if ((BYTE)*(base+(rp+1)%rxbuflen)==0x11)
{
DWORD YcValue;
for (BYTE i=0;i<len/2;i++)
{
YcValue=(BYTE)*(base+(rp+i*2+4)%rxbuflen)*256+(BYTE)*(base+(rp+i*2+3)%rxbuflen);
yctemp=YcValue;
if (YcValue&0x8000) yctemp=(yctemp*(-1))|0x8000;
YcValue=yctemp;
SetValue (YCDB,RtuNo,i+YcNum,YcValue);
}
}
else if ((BYTE)*(base+(rp+1)%rxbuflen)==0x15)
{
BYTE YxValue;
for (BYTE i=0;i<len;i++)
{
YxValue=(BYTE)*(base+(rp+i+3)%rxbuflen);
SetYx(RtuNo,i,YxValue);
}
}
return (len+4);
}
void SetYx(WORD RtuNo,BYTE YxNo,BYTE YxValue)
{
WORD yxv;
WORD YxNum=GetRcdNum(YXDB,RtuNo)/3;
for (int i=0;i<8;i++)
{
yxv=YxValue&1;
SetValue(YXDB,RtuNo,YxNo*8+YxNum+i,yxv);
YxValue>>=1;
}
}
/*
05,11,04,47,00,48,00,85,35
05,15,02,01,00,68,5c
04,11,04,46,00,48,00,84,c9
*/
/*
WORD crc16(WORD rp, int count,BYTE FAR * base,WORD Mode)
{
WORD k,j;
k=0;
for (j=0;j<count;j++)
{
k=(k<<8)^crccode1[(k>>8)^*(base+(rp+j)%Mode)];
}
return (k^0xffff);
}
*/
UINT crc16(WORD rp, BYTE count,BYTE FAR * base,WORD Mode) //selprot
{
UINT crc, i,temp;
crc=0;
if (count>200) return 0;
while( count-- >0)
{
if (count>200) return 0;
crc = (crc^*(base+(rp++)%Mode));
for(i=0; i<8; ++i)
if(crc & 1)
crc = ((crc>>1)^0xa001);
else
crc = crc >> 1;
}
return (crc&0xffff);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -