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

📄 n4f.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
    else if (func<0x86)  //子站时钟
     { Add = 6;     }
    else if (func<0x8a)  //总加遥测
     { Add = 6;     }
    else if (func<0x8b)  //频率
     { Add = 6;     }
    else if (func<0x8d)  //
     { Add = 6;     }
    else if (func<0x93)  //水位
     { Add = 6;     }
    else if (func<0xa0)  //
     { Add = 6;     }
    else if (func<0xe0)  //电度
     { Add = Pkwh(rdp);     }
    else if (func<0xe2)  //遥控
     { Add = Pyk(rdp);     }
    else if (func<0xe6)  //升降
     { Add = Psj(rdp);     }
    else if (func<0xec)  //备用
     { Add = 6;     }
    else if (func<0xed)  //子站状态
     { Add = 6;     }
    else if (func<0xf0)  //备用
     { Add = 6;     }
    else                //遥信
     { Add = Pyx(rdp);      }
  return(Add); 
}

BYTE Pyc(WORD rdp)
{
 BYTE FAR *rxb = lpChP->RecBuff;
 int ycOrd = (*(rxb+rdp%rxbuflen))*2;
 int ycValue = (*(rxb+(rdp+2)%rxbuflen)&0xf)*256 + (*(rxb+(rdp+1)%rxbuflen));
 if (*(rxb+(rdp+2)%rxbuflen)&8) ycValue=~ycValue&0x8fff;
 SetValue(YCDB, lpChP->StaNo, ycOrd, ycValue);
 ycOrd++;
 ycValue = (*(rxb+(rdp+4)%rxbuflen)&0xf)*256 + (*(rxb+(rdp+3)%rxbuflen));
 if (*(rxb+(rdp+4)%rxbuflen)&8) ycValue=~ycValue&0x8fff;
 SetValue(YCDB, lpChP->StaNo, ycOrd, ycValue);
 return 6;
}
BYTE Pyx(WORD rdp)
{
 BYTE FAR *rxb = lpChP->RecBuff;
 int yxbOrd = *(rxb+rdp) - 0xF0;
 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+4)%rxbuflen)+(DWORD)*(rxb+(rdp+3)%rxbuflen)*256l
                 + (DWORD)*(rxb+(rdp+2)%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 <12 ) 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.EventType =1;
             evercd.Station = lpChP->StaNo;
             evercd.Order = yxord;
			 evercd.Hour=(BYTE)*(rxb+(rdp+7)%rxbuflen);
			 evercd.Min=(BYTE)*(rxb+(rdp+4)%rxbuflen);
			 evercd.Sec=(BYTE)*(rxb+(rdp+3)%rxbuflen);
			 evercd.Ms=*(rxb+(rdp+2)%rxbuflen)*256+*(rxb+(rdp+1)%rxbuflen);
			 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.EventType|=0x80;//evercd.EventAttr |= SGFLAG;
					}
                   else if (yxtype==YXPROTECT) evercd.EventType|=0x80;//evercd.EventAttr |= SGFLAG;
                }
			  evercd.data[0]=evercd.Status;

			  if (
				   ((lpStaP+lpChP->StaNo)->Soe[0].ORDER!=yxord)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].TIME!=evercd.Hour)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].MINUTE!=evercd.Min)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].SECOND!=evercd.Sec)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].MSH!=evercd.Ms/100)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].MSL!=evercd.Ms%100)||
				   ((lpStaP+lpChP->StaNo)->Soe[0].STATUS!=evercd.Status)
				  )


				{
				   (lpStaP+lpChP->StaNo)->Soe[0].ORDER=yxord;
				   (lpStaP+lpChP->StaNo)->Soe[0].TIME=evercd.Hour;
				   (lpStaP+lpChP->StaNo)->Soe[0].MINUTE=evercd.Min;
				   (lpStaP+lpChP->StaNo)->Soe[0].SECOND=evercd.Sec;
				   (lpStaP+lpChP->StaNo)->Soe[0].MSH=evercd.Ms/100;
				   (lpStaP+lpChP->StaNo)->Soe[0].MSL=evercd.Ms%100;
				   (lpStaP+lpChP->StaNo)->Soe[0].STATUS=evercd.Status;
		
					 WriteAEvent(EVENTDB, &evercd);
				}
			}
         ret=12;
        }
	   else ret=6;
	}
   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 PollingTx(WORD wrp,BYTE Poll)
{
	BYTE FAR *txb = lpChP->SendBuff;
	WORD wrptemp;
	if (lpStaP->RANDOM[0]!=0xff)		//!=ff,初始化,=ff进入正常
		{
			YcNums=GetRcdNum(YCDB,lpStaP->STATIONNO);
			switch (lpStaP->RANDOM[0]&0x1f)
				{
					case	0:
						wrp=ResetRtu(txb,wrp);	//1
						break;
					case	1:
						wrp=PowerOk(txb,wrp);	//12
                        break;
					case	2:
						wrp=FreqSend(txb,wrp);	//11
                        break;
					case	3:
						wrp=YSYZSend(txb,wrp);	//4
                        break;
					case	4:
						wrp=LBXSSend(txb,wrp);	//19
                        break;
					case	5:
						wrp=SendYxType(txb,wrp);
                        break;
					case	6:
						if (YcNums>0)
						wrp=SendYcType(txb,wrp,YC0);
                        break;
					case	7:
						if (YcNums>16)
						wrp=SendYcType(txb,wrp,YC1);
                        break;
					case	8:
						if (YcNums>32)
						wrp=SendYcType(txb,wrp,YC2);
						break;
					case	9:
						if (YcNums>48)
						wrp=SendYcType(txb,wrp,YC3);
                        break;
					case	10:
						if (YcNums>64)
						wrp=SendYcType(txb,wrp,YC4);
						break;
					case	11:
						if (YcNums>80)
						wrp=SendYcType(txb,wrp,YC5);
                        break;
					case	12:
						if (YcNums>96)
						wrp=SendYcType(txb,wrp,YC6);
                        break;

⌨️ 快捷键说明

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