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

📄 xinjzhf.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
 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 + -