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

📄 novell.cpp

📁 这是一个在正实际应用当中运行的电力监控系统软件源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	     break;
        case YCDRF:
	     if (ThisNodeName != MainFertName) return FALSE;
	     {
			  WORD len=0, ycnum=0, yclen=0,ycstart=0;
              int i,j;

			  if (StationCnt==0)
                 {
                  if (++SendYcCnt<=2)
                     {
                      SendYcCnt+=2;
                      TaskList++;
					  return FALSE;
                     }
        		  SendYcCnt=0;
				 }
			  Txbuf += sizeof(GRAMINF);
              *Txbuf = LOBYTE(Freq);
              *(Txbuf+1) = HIBYTE(Freq);
              Txbuf += 2;
              len = 2;
              WORD ycv[256];
			  if ((syscfg->GetYcSelect()&0xf)==0) //遥测发送不带序号
			  {
			  while (StationCnt<(TotalStaNum-1))
                    {
					 ycnum = GetRcdNum(YCDB, StationCnt);
					 if ((lpStaParam+StationCnt)->DataToHost==0) ycnum=0;
                     if (ycnum>241) ycnum=241;
                     yclen=ycnum*2;
					 if ((len+yclen)<490)
                        {
                         len += (yclen+3);
                         *Txbuf = StationCnt;
                         *(Txbuf+1) = LOBYTE(yclen);
                         *(Txbuf+2) = HIBYTE(yclen);
                         Txbuf += 3;
                         GetBatchValue(YCDB, StationCnt, 0, ycnum, (void huge *)ycv);
                         for (j=0; j<ycnum; j++)
                             {
//                              ycv = (WORD)GetValue(YCDB, StationCnt, j);  
                              *(Txbuf+j*2) = LOBYTE(ycv[j]);
							  *(Txbuf+j*2+1) = HIBYTE(ycv[j]);
                             }
                         Txbuf += yclen;
						 StationCnt++;
                        }
					   else break;	 //>500
                    } //end while
              }
              else  //遥测发送带序号
              { 
			    while (StationCnt<(TotalStaNum-1))
                    {
                if (YCBREAK*YcNumscale>GetRcdNum(YCDB, StationCnt))
                    {
                        YCBREAK=0;StationCnt++;
                    }
					 ycnum = GetRcdNum(YCDB, StationCnt);
                     ycstart =YCBREAK*YcNumscale;
                     if ((lpStaParam+StationCnt)->DataToHost==0){ ycnum=0;YCBREAK=0;ycstart=0;}
                     if (ycnum!=0)
                     {
                     if (ycstart>ycnum) {StationCnt++;YCBREAK=0;return 0;}
                     if ((ycstart+YcNumscale) > ycnum) ycnum-=ycstart;
                     else ycnum=YcNumscale;
                     }
                     yclen=ycnum*2;
					 if ((len+yclen+2)<490)
                        {
                         len += (yclen+5);
                         *Txbuf = StationCnt;
                         *(Txbuf+1) = LOBYTE(ycstart);
                         *(Txbuf+2) = HIBYTE(ycstart);
                         *(Txbuf+3) = LOBYTE(yclen);
                         *(Txbuf+4) = HIBYTE(yclen);
                         Txbuf += 5;
                         GetBatchValue(YCDB, StationCnt, ycstart, ycnum, (void huge *)ycv);
                         for (j=0; j<ycnum; j++)
                             {
//                              ycv = (WORD)GetValue(YCDB, StationCnt, j);  
                              *(Txbuf+j*2) = LOBYTE(ycv[j]);
                              *(Txbuf+j*2+1) = HIBYTE(ycv[j]);
                             }
                         Txbuf += yclen;
                         if ((ycstart+ycnum)>=GetRcdNum(YCDB, StationCnt) || ycnum==0)
                            {
                      		    StationCnt++;YCBREAK=0;
                            }
                         else {YCBREAK++;}
                        }
					   else break;	 //>500
                    } //end while
                   }
              gInf->Length = len;
	      if (StationCnt >= (TotalStaNum-1))
                 { StationCnt=0;   TaskList++; }
	     }
         break;
	case KWHDRF:		
             if (ThisNodeName != MainFertName) return FALSE;
              {
	          WORD len=0, kwhnum=0, kwhlen=0,kwhstart=0;
              int i,j;
              if (StationCnt==0)
                 {
                  if (++SendKwhCnt<=8)
                     {
                      TaskList++;                      
                      return FALSE;
                     }
                  SendKwhCnt=0;
                 }
              Txbuf += sizeof(GRAMINF);
			  DWORD kwhv[128];
              if (syscfg->GetYcSelect()==0) //电度发送不带序号
              {
              while (StationCnt<(TotalStaNum-1))
                    { 
                     kwhnum = GetRcdNum(KWHDB, StationCnt); 
                     if ((lpStaParam+StationCnt)->DataToHost==0) kwhnum=0;
                     if (kwhnum>120) kwhnum=120;
                     kwhlen=kwhnum*4;
                     if ((len+kwhlen)<490)
                        {  
                         len += (kwhlen+3);
                         *Txbuf = StationCnt;
                         *(Txbuf+1) = LOBYTE(kwhlen);
                         *(Txbuf+2) = HIBYTE(kwhlen);
                         Txbuf += 3;
                         GetBatchValue(KWHDB, StationCnt, 0, kwhnum, (void huge *)kwhv);
                         for (j=0; j<kwhnum; j++)
                             {
//                              kwhv = GetValue(KWHDB, StationCnt, j);
                              *(Txbuf+j*4) = kwhv[j]%256l;
                              *(Txbuf+j*4+1) = (kwhv[j]>>8)%256l;
                              *(Txbuf+j*4+2) = (kwhv[j]>>16)%256l;
                              *(Txbuf+j*4+3) = (kwhv[j]>>24)%256l;
                             }
                         Txbuf += kwhlen;
                         StationCnt++;
                        }
                       else break;     //>500
                    } //end while
              }
              else  //电度发送带序号
              {
              while (StationCnt<(TotalStaNum-1))
                    {
              if (KWHBREAK*KwhNumScale>GetRcdNum(KWHDB, StationCnt))
                   {
                        KWHBREAK=0;StationCnt++;
                   }
                     kwhnum = GetRcdNum(KWHDB, StationCnt);
                     kwhstart=KWHBREAK*KwhNumScale;
                     if ((lpStaParam+StationCnt)->DataToHost==0) {kwhnum=0;KWHBREAK=0;kwhstart=0;}
                     if (kwhnum!=0)
                     {
                     if (kwhstart>kwhnum) {StationCnt++;KWHBREAK=0;break;}
                     if ((kwhstart+KwhNumScale) > kwhnum) {kwhnum-=kwhstart;}
                     else kwhnum=KwhNumScale;
                     }
                     kwhlen=kwhnum*4;
                     if ((len+kwhlen+2)<490)
                       {
                         len += (kwhlen+5);
                         *Txbuf = StationCnt;
                         *(Txbuf+1) = LOBYTE(kwhstart);
                         *(Txbuf+2) = HIBYTE(kwhstart);
                         *(Txbuf+3) = LOBYTE(kwhlen);
                         *(Txbuf+4) = HIBYTE(kwhlen);
                         Txbuf += 5;
                         GetBatchValue(KWHDB, StationCnt, kwhstart, kwhnum, (void huge *)kwhv);
                         for (j=0; j<kwhnum; j++)
                             {
//                              kwhv = GetValue(KWHDB, StationCnt, j);
                              *(Txbuf+j*4) = kwhv[j]%256l;
                              *(Txbuf+j*4+1) = (kwhv[j]>>8)%256l;
                              *(Txbuf+j*4+2) = (kwhv[j]>>16)%256l;
                              *(Txbuf+j*4+3) = (kwhv[j]>>24)%256l;
                             }
                         Txbuf += kwhlen;
                         if ((kwhstart+kwhnum) >= GetRcdNum(KWHDB, StationCnt) || kwhnum==0)
                            {
                                StationCnt++;KWHBREAK=0;
                            }
                         else {KWHBREAK++;}
                       }
                       else {break;}      //>500
                    } //end while
              }
              gInf->Length = len;
              if (StationCnt >= (TotalStaNum-1))
                   { StationCnt=0;   TaskList++;}
             }
             break;
        case SOE:
			 if (ThisNodeName != MainFertName)
				{
				 return FALSE;
                }
			             
             {         
              int i,j;
              Txbuf += sizeof(GRAMINF);
			  if (SendEventCnt==0)
				 {
                  eventnum = 0;
				  EVENT *eve = (EVENT *)SendBuf;
				  for (i=0; i<16; i++)
                      {
                       if (ReadAEvent(EVENTDB, hRdSysEvent, eve+eventnum))
                           eventnum++;
						 else break;
                      }
				 }
              if (eventnum)
                 {
                  gInf->FertStatus = EventPacketID;
				  gInf->Length = eventnum*sizeof(EVENT);
				  memmove(Txbuf, SendBuf, gInf->Length);
				  Txbuf+=gInf->Length;
				  SendEventCnt++;
				  if (SendEventCnt>2)
                     {
                      SendEventCnt=0;
                      eventnum = 0;
                      EventPacketID++;
                      TaskList++;
                     }
				 }
        		else { TaskList++; return FALSE; }
	     }
		 break;

	case YK:
	case YT:
			 gInf->Length = 7;//报文长度
             Txbuf += sizeof(GRAMINF);
		 if (NetCmd.CmdContent[0]==0x44)    //遥控返校jgx 前置机发后台
				{
				 *Txbuf = 0x44;
                 *(Txbuf+1) = NetCmd.CmdContent[1];
				 *(Txbuf+2) = NetCmd.CmdContent[3];//3//jgx
				 *(Txbuf+3) = NetCmd.CmdContent[4];//4//jgx
				 *(Txbuf+4) = NetCmd.CmdContent[5];//5//jgx
//				 *(Txbuf+5) = NetCmd.CmdContent[5];//jgx
				 *(Txbuf+6) = NetCmd.CmdContent[6];
				}
			 break;
    case     WAVE:   //xbfx
             Txbuf += sizeof(GRAMINF);
             gInf->Length=129;
             *Txbuf=6;
             Txbuf++;
             for (int ii=0;ii<128;ii++)
              *(Txbuf+ii) = NetCmd.XBFXDATA[ii];
             break;             
	case MODEM: //只进行了自我调试                
            TaskList++;
			WORD BuffLen;
			if (STATION>TotalStaNum) return FALSE;
            STATION++;STATION &=0x7;
			if (!OdsFlag || !lpStaParam || !lpChannelParam) return FALSE;
			BUFFERS=(lpStaParam+STATION)->CurrUsedCh;
			if (BUFFERS>32) return FALSE;
			if ((lpChannelParam+BUFFERS)->CHValidFlag==0) return FALSE;
			BuffLen=(lpChannelParam+BUFFERS)->RxBuffLen;
			if (BuffLen==0 || BuffLen%256 !=0) return FALSE;
//			if (((lpChannelParam+BUFFERS)->RxWriteP-(lpChannelParam+BUFFERS)->READTONETP+BuffLen)%BuffLen<20) return FALSE;
			BYTE FAR *rxb;
			switch (BufType)
				{
                	case	1:
						rxb=(lpChannelParam+BUFFERS)->RecBuff;
						break;
					case	2:
						rxb=(lpChannelParam+BUFFERS)->SendBuff;
						break;
                    default:
						rxb=(lpChannelParam+BUFFERS)->RecBuff;
						break;
				}
			Txbuf += sizeof(GRAMINF);
			WORD rp=(lpChannelParam+BUFFERS)->READTONETP;
//			*Txbuf=rp/256;*(Txbuf+1)=rp%256;
			WORD temp=((lpChannelParam+BUFFERS)->RxWriteP-(lpChannelParam+BUFFERS)->READTONETP+BuffLen)%BuffLen;
			gInf->Length=temp+7;
			*(Txbuf+0)=0x0a;*(Txbuf+1)=(lpStaParam+STATION)->STATIONNO;//STATION;
		    gettime (&tim);
			*(Txbuf+2)=tim.ti_sec;
			*(Txbuf+3)=BuffLen/256;
			*(Txbuf+4)=BuffLen%256;
			*(Txbuf+5)=STATION;
			*(Txbuf+6)=BUFFERS;

			Txbuf+=7;
			while (rp!=(lpChannelParam+BUFFERS)->RxWriteP)
                {
					*Txbuf=*(rxb+rp++);
                    Txbuf++;
                    rp%=256;    //BuffLen;
				}
			(lpChannelParam+BUFFERS)->READTONETP=(lpChannelParam+BUFFERS)->RxWriteP;
			break;
	default:
            RETFLAG=FALSE;
	     break;
    }
    return RETFLAG;//TRUE;
}

void ProFertGram (LPSTR ProBuf)
{
	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 ATB://atb
			CREGISTER huge *cRegister = (CREGISTER *) (ProBuf + sizeof(GRAMHEAD) + sizeof(GRAMINF));
            if (cRegister->NodeType != 'F') break;
	        if (!((cRegister->NodeName == 'A') || (cRegister->NodeName == 'B'))) break;
    	    int no = cRegister->NodeName-'A';
	        FertNode[no].Use = TRUE;
	        FertNode[no].ATBCount = 0;
    	    if ((MainFertName=='B') && (cRegister->NodeName=='A'))
               {
                MainFertName = 'A';
                FertNode[0].NodeState = 'M';
                FertNode[1].NodeState = 'B';
                PostMessage (hMainWindow, WM_NODESWITCH, (WORD)0, (LONG)0);
               }

//            systateCount = 0;

/*            if (GetMainFertName () == ThisNodeName) {
				CREGISTER huge *cRegister = (CREGISTER *) (ProBuf + sizeof(GRAMHEAD) + sizeof(GRAMINF));
                if (cRegister->NodeType != 'F') break;
                if (!((cRegister->NodeName == 'A') || (cRegister->NodeName == 'B'))) break;
                int no = cRegister->NodeName-'A';
				FertNode[no].Use = TRUE;
                FertNode[no].ATBCount = 0;
				MainFertName = * (ProBuf+16);
                BYTE nn=MainFertName-'A';
				FertNode[nn].NodeState='M';
				FertNode[(nn+1)%2].NodeState='B';
			}*/
            break;
       case CANCEL:
    	    {
			 CREGISTER huge *cRegister = (CREGISTER huge *) (ProBuf + sizeof(GRAMHEAD) + sizeof(GRAMINF));
             if (!(cRegister->NodeType == 'F')) break;
             if (!((cRegister->NodeName == 'A') || (cRegister->NodeName == 'B'))) break;
             DelFertNode (cRegister->NodeName);
            }
            break;
       case REGISTER://register
            {
			 CREGISTER huge *cRegister = (CREGISTER huge *) (ProBuf + sizeof(GRAMHEAD) + sizeof(GRAMINF));
             if (!(cRegister->NodeType == 'F')) break;
             if (!((cRegister->NodeName == 'A') || (cRegister->NodeName == 'B'))) break;
             AddFertNode (cRegister->NodeName);
    	    }
            break;   
       case SST://sst
//tzc
	    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;
			if (Today.da_day<32 && Time.ti_hour <24 && Time.ti_min <60 && Time.ti_sec<60
				&& Today.da_mon<13)
            {
	           	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 MODEM:
			switch (*(ProBuf+12))
				{
					case	0xa:
						if (OdsFlag==0)
							{
								OdsFlag=1;
								STATION=*(ProBuf+10);
								//BufType=*(ProBuf+11);
                            }
						break;

⌨️ 快捷键说明

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