📄 novell.cpp
字号:
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 + -