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

📄 novell.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
					case	0xb:
						OdsFlag=0;
						break;
					default:break;
                }
			 break;
	   default:
	    break;
      }
}
BOOL KWHPVFirst=TRUE,KWHDFirst=TRUE,ProtFirst=TRUE;
BOOL YCOverFirst=TRUE,YXChgFirst=TRUE;
BYTE ReadFinish=FALSE;

void ProHostGram (LPSTR ProBuf)//接收网络报文内容分析
{
    struct  date Date;
//	GRAMINF huge *gInf;
//  gInf = (GRAMINF huge *) (ProBuf + sizeof(GRAMHEAD));
    NETBUFHEAD _FAR *NetBufHead = (NETBUFHEAD _FAR *)ProBuf;
    int Len = int (NetBufHead->CmdLen);
    if ((Len + sizeof (NETBUFHEAD)) > DATAGRAM_LEN) return;
    NetCmd.SourceType = NetBufHead->SourceType;
    NetCmd.SourceName = NetBufHead->SourceName;
    NetCmd.DestType = NetBufHead->DestType;
    NetCmd.DestName = NetBufHead->DestName;
    NetCmd.CmdType = 0;
    ProBuf += sizeof (NETBUFHEAD);
    switch (NetBufHead->CmdCode)
      {
       case SST://sst
/*	        BYTE val;
            BYTE val1;
            struct date Today;
            struct time Time;
			val1=*(ProBuf+11);
			val1=(val1/16)*10+(val1%16);
			val=*(ProBuf+12);
			val=(val/16)*10+(val%16);
			Today.da_year=val1*100+val;
            val=* (ProBuf+14);
            Today.da_day= (val/16)*10+ (val%16);
            val=* (ProBuf+13);
            Today.da_mon= (val/16)*10+ (val%16);
            val=* (ProBuf+15);
            Time.ti_hour= (val/16)*10+ (val%16);
            val=* (ProBuf+16);
            Time.ti_min= (val/16)*10+ (val%16);
            val=* (ProBuf+17);
            Time.ti_sec= (val/16)*10+ (val%16);
            Time.ti_hund=0;
            setdate (&Today);
            settime (&Time);
            PostMessage (hMainWindow, WM_ADJUSTCLOCK, 0, 0L);*/
	    {
             for (int i=0; i<9; i++)
                  NetCmd.CmdContent[i] = *(ProBuf+i+11);
			 NetCmd.SubCmdType = TCZDSCMD;
             NetCmd.DataLen = 0;
             NetCmd.DataPt = 0;
             WriteACommand(COMMANDDB, RECCMDBUF, &NetCmd, NetCmdData);
            }
	    break;
       case   WAVE:   //xbfx
              {
             for (int i=0; i<9; i++)
				  NetCmd.CmdContent[i] = *(ProBuf+i);
             NetCmd.SubCmdType = 29;
             NetCmd.DataLen = 0;
             NetCmd.DataPt = 0;
             WriteACommand(COMMANDDB, RECCMDBUF, &NetCmd, NetCmdData);
              }
              break;
       case YK://yk
            {
/*
char ss[80];
wsprintf (ss,"%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x",
*(ProBuf),*(ProBuf+1),*(ProBuf+2),*(ProBuf+3),*(ProBuf+4),*(ProBuf+5),*(ProBuf+6),
*(ProBuf+7),*(ProBuf+8),*(ProBuf+9),*(ProBuf+10),*(ProBuf+11),*(ProBuf+12),
*(ProBuf+12),*(ProBuf+14),*(ProBuf+15),*(ProBuf+16),*(ProBuf+17),*(ProBuf+18));
MessageBox(0,ss,"",MB_OK);
break;

*/

             NetCmd.CmdContent[0] = *ProBuf;
             NetCmd.CmdContent[1] = *(ProBuf+1);
             NetCmd.CmdContent[2] = 0;
             NetCmd.CmdContent[3] = *(ProBuf+2);
			 NetCmd.CmdContent[4] = *(ProBuf+3);
             NetCmd.CmdContent[5] = *(ProBuf+4);
             NetCmd.SubCmdType = TCZYKCMD;
             NetCmd.DataLen = 0;
             NetCmd.DataPt = 0;
			 WriteACommand(COMMANDDB, RECCMDBUF, &NetCmd, NetCmdData);
            }
            break;
       case YT://yt
            {
             NetCmd.CmdContent[0] = *ProBuf;
             NetCmd.CmdContent[1] = *(ProBuf+1);
             NetCmd.CmdContent[2] = 0;
             NetCmd.CmdContent[3] = *(ProBuf+2);
             NetCmd.CmdContent[4] = *(ProBuf+3);
             NetCmd.CmdContent[5] = *(ProBuf+4);
             NetCmd.SubCmdType = TCZYTCMD;
             NetCmd.DataLen = 0;
             NetCmd.DataPt = 0;
             WriteACommand(COMMANDDB, RECCMDBUF, &NetCmd, NetCmdData);
            }
			break;
	   case	31://break;
			if (*(ProBuf+2)==47)
 				{
					for (int yctemp=0;yctemp<6;yctemp+=2)
                        {
						WORD ycvalue= (WORD)(*(ProBuf+5+yctemp+1)*(WORD)256)+*(ProBuf+5+yctemp);
						SetValue(YCDB,TotalStaNum-1,yctemp/2,ycvalue);
						}
				}
			break;
       default:break;
    }
}

//
void IPXRecProc (LPSTR ProBuf)
{
  static int FLastTxCount[FERTNODEMAXNUM];
  static int HLastTxCount[HOSTNODEMAXNUM];

  GRAMHEAD far *gHead = (GRAMHEAD far *)ProBuf;
  GRAMINF _FAR *gi=(GRAMINF _FAR *)(ProBuf+sizeof (GRAMHEAD));
//	if (gi->CmdCode==SOE && gHead->SourceType=='F') {
//	   char bbuf[60];
//	   sprintf (bbuf,"cmdcode=soe  fertstatus=%d  %c",gi->FertStatus, gHead->SourceType);
// 	}
	if (gHead->SourceType == 'F')
	   {
            if (!(gHead->SourceName>= 'A' && gHead->SourceName <= 'B')) return;
            if (FLastTxCount[GetNodeNo(gHead->SourceName)]==gHead->TxCount) return;
            FLastTxCount[GetNodeNo(gHead->SourceName)]=gHead->TxCount;
// shy 97.9.10
//        if (MainFertName == 'Z')
//            MainFertName = gHead->SourceName;
            FertNode[ GetNodeNo (gHead->SourceName) ].Use = TRUE;
            FertNode[ GetNodeNo (gHead->SourceName) ].ATBCount = 0; 
            ProFertGram (ProBuf);
           }
          else if (gHead->SourceType == 'H' && gHead->DestType == 'G')
                  {
	               if (HLastTxCount[GetNodeNo(gHead->SourceName)]==gHead->TxCount)
                       return;
//                   if (HostNode[ GetNodeNo (gHead->SourceName) ].Use == TRUE)
//                       HostNode[ GetNodeNo (gHead->SourceName) ].ATBCount = 0;
                   HLastTxCount[GetNodeNo(gHead->SourceName)]=gHead->TxCount;
                   ProHostGram (ProBuf);
                  }
}

//
void SendFlag ()
{
//    systateCount ++;

    FrameFlag[ ATB ]=1;
    if (!(FertNode[GetNodeNo (ThisNodeName)].Use))
    	FrameFlag[ REGISTER ] = 1;

    for (int i=0; i<FERTNODEMAXNUM; i++)
        {    
         if (FertNode[i].Use)
            {
             if (FertNode[i].ATBCount > 5)
	            {
                 DelFertNode ('A'+i);
                 FertNode[i].ATBCount=0;
                }
	           else FertNode[i].ATBCount++;
            }
       }

	if (ThisNodeName != MainFertName)
       {
    	if (!FertNode[GetNodeNo(MainFertName)].Use ||
	        (FertNode[GetNodeNo(MainFertName)].ATBCount>5))
	       {
	        MainFertName = ThisNodeName;
            PostMessage (hMainWindow, WM_NODESWITCH, (WORD)0, (LONG)0);
//	    systateCount = 0;
           }
       }

    if (ThisNodeName==MainFertName)
       {
        //此处应监视硬件上真正的主备状态,如果不在本机上,将其切换过来。

//        FrameFlag[ATB]=1;
       }
}


//*********************************************************************
void TMainWindow::WMRXData (RTMessage)
{
    ProRcvData ();
	if (RecCmdFlag)   ProcRecCmd();//处理网上接收命令
    RecCmdFlag ^= 0xff;
}

//*********************************************************************
void TMainWindow::SendData (RTMessage)
{
if (NetFlag!=0)
{
	if (SendForRun++>10)
		{
			SendForRun=2000;
        }
    if (SendCmdFlag)  ProcSendCmd();
    SendCmdFlag ^= 0xff;
//    if (++TaskCnt>4)
       {
//        TaskCnt=0;
	TaskList %=5;
	   switch(TaskList)
          	{
	   		case	0:
				if (SendForRun>1000)  FrameFlag[YXDRF]=1;  
				break;
			case	1:
				if (SendForRun>1000)  FrameFlag[YCDRF]=1;
				break;
			case	2:
				if (SendForRun>1000)  FrameFlag[KWHDRF]=1;
				break;
			case	3:
				FrameFlag[SOE]=1;
            	break;
	   		case	4:
				FrameFlag[MODEM]=1;
				break;
			default:
                TaskList=0;
            	break;
			}

       }
	if (ThisNodeName != MainFertName)
       	{
            EVENT *evetemp;
		    WriteAEvent(0x200, evetemp);
        }

	if (NetSend.txfinishflag) ////发送完成标志jgx
	   {
//		if (NetTestFlag && NetTestCount<6) MessageBeep(0);//tzc
		for (int i=0; i<60; i++)
            {
             if (FrameFlag[i]!=0)
				{
                 	FrameFlag[i]=0;
                 	if (IPXMakeFrame(i,0)==TRUE) XmitDataGram(); //jgx 98.8
                } 
	    	}                                          
       }
//    else {NetSend.txfinishflag=1;MessageBox(0,"","",MB_OK);}
}
}

//  向网上发送命令(给后台机或广播)
void ProcSendCmd()
{

 if (ReadACommand(COMMANDDB, hRdSysCmd, SENDCMDBUF, &NetCmd, NetCmdData))
    {
     switch (NetCmd.SubCmdType)
       {
        case TCZDSCMD:   // 对时命令
             FrameFlag[SST]=1;
             break;
//        case TCZPABWCMD: // 平安报文
//             FrameFlag[ATB]=1;
//             break;
//        case TCZQZQHCMD: // 前置机切换命令
//             break;
//        case TCZZCCMD:   // 登录注册命令
//             FrameFlag[REGISTER]=1;
//             break;
        case TCZYKCMD:   // 遥控返校命令
			 FrameFlag[YK]=1;
             break;
        case TCZYTCMD:   // 遥调返校命令
             FrameFlag[YT]=1;
             break;
        case WAVE:
             FrameFlag[29]=1;
             break;
       }
    } 
}

//  接收网上命令
void ProcRecCmd()
{
 while (ReadACommand(COMMANDDB, hRdSysCmd, RECCMDBUF, &NetCmd, NetCmdData))
       {
        if ((NetCmd.DestType=='F') || (NetCmd.DestType=='G'))
           {
            switch (NetCmd.SubCmdType)
              {
	           case TCZDSCMD:      //对时命令
                    SetTime();
                    break;
               case TCZYKCMD:      //遥控命令
                    NetToRtuYK();
                    break;
               case TCZYTCMD:      //遥调命令
                    NetToRtuYT();
                    break;
               case WAVE:
                    NetToxbfx();
                    break;  
              }
           }
       }
}
//---------------------------------------------------------------
BOOL NetToRtuYK ()
{
    WORD rtuno = NetCmd.CmdContent[2]*256+NetCmd.CmdContent[1];
    if (rtuno>=TotalStaNum) return FALSE;

    if (ThisNodeName == MainFertName)
       {
        BYTE wp = (lpStaParam+rtuno)->DownCmdWP;
        if (((wp+1)&3) != (lpStaParam+rtuno)->DownCmdRP)
           {             
            if (NetCmd.CmdContent[0]==0x11)
                (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK0;
             else if (NetCmd.CmdContent[0]==0x22)
                      (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK1;
             else if (NetCmd.CmdContent[0]==0x33)
                      (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK2;
            for (int i=1; i<6; i++)
		(lpStaParam+rtuno)->DownCmd[wp].Cmd[i] = NetCmd.CmdContent[i];
	    (lpStaParam+rtuno)->DownCmdWP = (wp+1)&3;
           }
       }  
    return TRUE;
}
BOOL NetToxbfx  ()
{
    WORD rtuno = NetCmd.CmdContent[2]*256+NetCmd.CmdContent[1];
    if (rtuno>=TotalStaNum) return FALSE;

    if (ThisNodeName == MainFertName)
       {
        BYTE wp = (lpStaParam+rtuno)->DownCmdWP;
        if (((wp+1)&3) != (lpStaParam+rtuno)->DownCmdRP)
           {             
                (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = 29;
            for (int i=1; i<6; i++)
		        (lpStaParam+rtuno)->DownCmd[wp].Cmd[i] = NetCmd.CmdContent[i];

	            (lpStaParam+rtuno)->DownCmdWP = (wp+1)&3;
           }
       }  
    return TRUE;
}
BOOL NetToRtuYT ()
{
    WORD rtuno = NetCmd.CmdContent[2]*256+NetCmd.CmdContent[1];
    if (rtuno>=TotalStaNum) return FALSE;

    if (ThisNodeName == MainFertName)
       {
        BYTE wp = (lpStaParam+rtuno)->DownCmdWP;
        if (((wp+1)&3) != (lpStaParam+rtuno)->DownCmdRP)
           {             
            if (NetCmd.CmdContent[0]==0x11)
                (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK0;
             else if (NetCmd.CmdContent[0]==0x22)
                      (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK1;
             else if (NetCmd.CmdContent[0]==0x33)
                      (lpStaParam+rtuno)->DownCmd[wp].Cmd[0] = DCMDYK2;
            for (int i=1; i<5; i++)
                (lpStaParam+rtuno)->DownCmd[wp].Cmd[i] = NetCmd.CmdContent[i];
            (lpStaParam+rtuno)->DownCmdWP = (wp+1)&3;
           }
       }
    return TRUE;
}


void SetTime()
{
  BYTE val, val1;
  struct date Today;
  struct time Time;

  val1 = NetCmd.CmdContent[0];
  val1 = (val1/16)*10+(val1%16);
  val = NetCmd.CmdContent[1];
  val = (val/16)*10+(val%16);
  Today.da_year = val1*100+val;
  val = NetCmd.CmdContent[2];
  Today.da_mon = (val/16)*10+(val%16);
  val = NetCmd.CmdContent[3];
  Today.da_day = (val/16)*10+(val%16);
  val = NetCmd.CmdContent[4];
  Time.ti_hour = (val/16)*10+(val%16);
  val = NetCmd.CmdContent[5];
  Time.ti_min = (val/16)*10+(val%16);
  val = NetCmd.CmdContent[6];
  Time.ti_sec= (val/16)*10+(val%16);
  Time.ti_hund=0;
  setdate (&Today);
  settime (&Time);
  PostMessage (hMainWindow, WM_ADJUSTCLOCK, 0, 0L);
}

⌨️ 快捷键说明

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