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