📄 djk.c
字号:
unsigned int k;
sendstr[3]='O';
sendstr[4]=11;
sendstr[5]=station.stationno;
sendstr[6]=station.stationno>>8;
sendstr[7]=station.yardno;
sendstr[8]=train.nolo;
sendstr[9]=train.nomid;
sendstr[10]=train.nohi;
sendstr[11]=id;
sendstr[12]=0;
sendstr[13]=0xfa;
k=Crc_Check(sendstr,14);
sendstr[14]=k&0xff;
sendstr[15]=k>>8;
port_puts(sendstr,16,com1);
}
/*void Check_TrackJoin(void)
{
static unsigned char engage12g1=0;
int i;
if(train.forlight>=22 && train.forlight<=28)
i=train.forlight-16;
else if(13==train.forlight)
i=5;
else if(train.forlight>=148 && train.forlight<=154)
i=train.forlight-21;
else
i=0;
if((0==train.netstate || 1==train.netstate) && 0xaa==train.lightcolor)
{
if(0==IsSignalOpen(train.forlight) && 0==IsSignalOpen(i))
{
train.lightcolor=0x55;
G93_ShowInfor(11,0);
//G93_ShowInfor(8,train.forlight);
}
}
if(shouldjoin)
{
if(1==shouldjoin)
{
if(0!=IsSignalOpen(18) && (0==train.netstate || 3==train.netstate) && (0!=(train.error&G93ERROR) || 0x8a==train.g93trend))//v//D111
{
train.netstate=1;
G93_ShowInfor(2,0);
G93_ShowInfor(10,J100+60);
train.forlight=18;
train.lightcolor=0xaa;
}
}
if((station.tracks[3]&0x02)!=0 && 0==engage12g1 && (0==train.netstate || 3==train.netstate) && (0!=(train.error&G93ERROR) || 0x8a==train.g93trend))//v
{
train.netstate=1;
G93_ShowInfor(2,0);
G93_ShowInfor(10,J100);
train.forlight=18;
if(IsSignalOpen(18))//D111
{
train.lightcolor=0xaa;
}
}
}
engage12g1=(station.tracks[3]&0x02)>>1;
}*/
/*void DelaySend(int cmd)
{
static unsigned int dstimer=0;
static unsigned char dsing=0;
if(cmd)
{
dsing=1;
dstimer=timer;
}
else
{
if(dsing)
{
if(GetPass(dstimer,timer)>=10)
{
port_puts(sendstr,25,com1);
dsing=0;
}
}
}
}*/
/*void PrintStr(unsigned char *str,int len)
{
char outstr[200],ostr[10];
int i;
if(len>60)
return;
outstr[0]=0;
for(i=0;i<len;i++)
{
sprintf(ostr,"%d ",i+1);
if(ostr[1]==' ')
{
ostr[3]=0;
ostr[2]=' ';
ostr[1]=ostr[0];
ostr[0]='0';
}
strcat(outstr,ostr);
}
printf("%s\n",outstr);
outstr[0]=0;
for(i=0;i<len;i++)
{
sprintf(ostr,"%x ",str[i]);
if(ostr[1]==' ')
{
ostr[3]=0;
ostr[2]=' ';
ostr[1]=ostr[0];
ostr[0]='0';
}
strcat(outstr,ostr);
}
printf("%s\n\n",outstr);
}*/
int CheckJoinState(int cmd,int point)
{
int i;
static int track;
static int node;
static BASEROUTE joinbase;
switch(cmd)
{
case 1://过点式应答器时,设置初始入网位置
track=train.curtrack;
node=-1;
joinbase.start=0xa0;
joinbase.end=train.forlight;
if(0x0a==train.g93trend)
{
joinbase.length=station.entrances[point-1].updistance;
}
else
{
joinbase.length=station.entrances[point-1].downdistance;
}
if(joinbase.length<110)
joinbase.length=200;
GetJoinRoute(&track,&node,&joinbase,train.g93trend);
train.forlight=joinbase.end;
train.curtrack=track;
break;
case 2://每次受到广播信息,后重新查找自己的位置
i=GetJoinRoute(&track,&node,&joinbase,train.g93trend);
train.forlight=joinbase.end;
train.curtrack=track;
if(i)
{
G93_ShowInfor(10,0);
}
break;
case 3:
return(joinbase.length);
case 4:
track=0;
node=-1;
joinbase.start=0;
joinbase.end=0;
joinbase.length=0;
break;
default:
break;
}
return(0);
}
void FillStationData(unsigned char *data)
{
int i,j;
memcpy(station.signals,data+6,station.radiodatanum);
TransTkColor();
//port_puts(station.showsig,station.showsignum,com2);
}
void DelayJoin(int cmd)
{
static unsigned int DelayJoinTimer=0;
static unsigned int Delaying=0;
if(cmd)
{
Delaying=1;
DelayJoinTimer=timer;
}
else
{
if(Delaying)
{
if(GetPass(DelayJoinTimer,timer)>100)//100ms
{
Join_Net();
Delaying=0;
}
}
}
}
/*unsigned int AtCrc(unsigned char *data,int len)
{
unsigned char cdata[256];
cdata[0]='A';
cdata[1]='T';
cdata[2]='&';
memcpy(cdata+3,data,len);
return(Crc_Check(cdata,len+3));
}*/
void Wireless_Analyse(unsigned char *rcvstr)
{
static unsigned int slidetimer=0;
unsigned char haveslide;
unsigned int i,j,k;
int forlt,revlt;
int rtbeenchg;//进路变了吗1=y 0=n
int ltpre;//前一次收到的前方信号机
rtbeenchg=0;
j=rcvstr[1];
//printf("char=%c,len=%d,station=%x%x\n",rcvstr[0],rcvstr[1],rcvstr[3],rcvstr[2]);
//printf("char:%c",rcvstr[0]);
if('D'==rcvstr[0])
{
//printf("D\n");
k=rcvstr[4];
k<<=8;
k|=rcvstr[3];
//printf("station %d",station.stationno);
if(station.stationno!=k)
return;
if(rcvstr[8]!=train.nolo || rcvstr[9]!=train.nomid || rcvstr[10]!=train.nohi)
return;
if(0==train.netstate || 3==train.netstate)
{
return;
}
i=rcvstr[1];
j=rcvstr[13]&0x0f;//包序号
if(i<=14)
return;
k=i-14;
if(j==1 || joblist.recid>(MAXHOOKNUM*sizeof(HOOK)+31))
{
joblist.recid=0;
joblist.curpkg=0;
}
if((k+joblist.recid)>(MAXHOOKNUM*sizeof(HOOK)+31))
k=MAXHOOKNUM*sizeof(HOOK)+31-joblist.recid;
if(joblist.curpkg!=j)
{
//printf("recid=%d,k=%d\n",joblist.recid,k);
memcpy(((unsigned char*)(&joblist))+joblist.recid,rcvstr+14,k);
joblist.recid+=k;
joblist.curpkg=j;
if(j==(rcvstr[13]>>4))
{
joblist.curhook=0;
joblist.jobid=joblist.bakjobid;
joblist.hooknum=joblist.bakhooknum;
if(joblist.hooknum>MAXHOOKNUM)
joblist.hooknum=MAXHOOKNUM;
k=joblist.recid;
k=(k-31)/sizeof(HOOK);
if(joblist.hooknum>k)
joblist.hooknum=k;
//printf("Receive Ok! hooknum=%d,rec=%d\n",joblist.hooknum,joblist.recid);
}
}
Show_Io(0x10,300);
//train.curhook=1;
sendstr[3]='H';
sendstr[4]=13;
sendstr[5]=station.stationno;
sendstr[6]=station.stationno>>8;
sendstr[7]=station.yardno;
sendstr[8]=train.nolo;
sendstr[9]=train.nomid;
sendstr[10]=train.nohi;
sendstr[11]=train.id;
sendstr[12]=rcvstr[11];
sendstr[13]=rcvstr[12];
sendstr[14]=rcvstr[13]>>4;
sendstr[15]=rcvstr[13]&0x0f;
k=Crc_Check(sendstr,16);
sendstr[16]=k;
sendstr[17]=k>>8;
port_puts(sendstr,18,com1);
}
else if('L'==rcvstr[0])
{
k=rcvstr[3];
k<<=8;
k|=rcvstr[2];
//printf("station %d",station.stationno);
if(station.stationno!=k)
return;
Show_Io(0x10,20);
FillStationData(rcvstr);
Station_Timer=timer;
if(StationError)
{
SaveState(6);//dian tai hui 电台恢复 记录
}
StationError=0;
//port_puts(rcvstr+6,station.radiodatanum,com2);
CheckStation(3,0);
/*{
port_puts("broadcast:",10,com2);
port_puts(station.tracks+22,1,com2);
port_puts(",",1,com2);
port_puts(station.lctks+2,1,com2);
port_puts(" ",4,com2);
}*/
//port_puts("daoch:",6,com2);
//port_puts(station.daochas,10,com2);
//printf("rec!\n");
//PrintStr(&station,43);
/*if(1==train.netstate && SG_D4==train.forlight && TK_D4G==train.curtrack)
{
if(GetTrkEngage(TK_4BG))//过了D4吗?
train.forlight=SG_D8;
}*/
Check_ShouldJoin(2);
CacTrainLength(2);
if(1==train.netstate)
{
CheckJoinState(2,0);
//if(random(2))
if(rcvstr[5]&0x0f)
DelayJoin(1);
else
Join_Net();
}
#ifdef HAVEDAOCHA
if(2==train.netstate)
{
CheckOutDc(1);
}
#endif
//Check_TrackJoin();
//ShowInfor(1);
}
else if('J'==rcvstr[0])
{
k=rcvstr[3];
k<<=8;
k|=rcvstr[2];
//printf("station %d",station.stationno);
if(station.stationno!=k)
return;
if(rcvstr[5]!=train.nolo || rcvstr[6]!=train.nomid || rcvstr[7]!=train.nohi)
{
return;
}
Show_Io(0x10,100);
//CacTrainLength(2);
//port_puts(rcvstr,rcvstr[1]+2,com2);
//DebugError(0,rcvstr);
Route_Timer=timer;
SaveData(3,rcvstr+9);
if(3==train.netstate)
{
Quit_Net(train.id);
}
else
{
if(2!=train.netstate)
{
CheckJoinState(4,0);
train.netstate=2;
G93_ShowInfor(2,0xff);//进入调车监控状态
}
train.id=rcvstr[8];
haveslide=0;
if((rcvstr[21]&0x10)==0x10)
affirmdc=0;
if((rcvstr[21]&0x20)==0x20)
{
haveslide=0x50;//应答
slide=0x30;
slidetimer=timer;
Show_Io(6,400);
}
if(train.area!=(rcvstr[21]>>6))
{
train.area=rcvstr[21]>>6;
k=train.area&0x01;
if(train.area&0x02)//占用出集中区轨道?
{
if(k==1 && train.g93trend==0x0a)//上行
gooutstation=1;
else if(k==0 && train.g93trend==0x8a)//下行
gooutstation=1;
else
gooutstation=0;
if(gooutstation)
{
CacOutRevDis(1,0);
G93_ShowInfor(-1,0);
}
}
else
{
gooutstation=0;
}
}
forlt=rcvstr[20]&0xf0;
forlt<<=4;
forlt|=rcvstr[18];
revlt=rcvstr[20]&0x0f;
revlt<<=8;
revlt|=rcvstr[19];
if((rcvstr[14]>>6)==0x02)
train.signalstate=0x0a;
else
train.signalstate=0;
if(rcvstr[21]&0x08)
train.signalstate|=0xa0;
if(forlt)
{
if(DRCTSX==GetLightDrct(forlt))
{
k=train.signalstate>>4;
k|=train.signalstate<<4;
train.signalstate=k;
}
}
else if(revlt)
{
if(DRCTXX==GetLightDrct(revlt))
{
k=train.signalstate>>4;
k|=train.signalstate<<4;
train.signalstate=k;
}
}
GetForLight(&forlt,&revlt);
ltpre=train.forlight;
if(forlt!=train.forlight)
{
train.prelight=train.forlight;
train.forlight=forlt;
CacBackSigDis(2,0);
}
if(revlt!=train.revlight)
{
if(train.revlight!=0)
{
train.passrevdis=train.displacement;
if(-1==train.passrevdis)
train.passrevdis=-2;
}
train.revlight=revlt;
CacOutRevDis(4,0);
if(train.passrevlt!=train.forlight)//不是反向
G93_ShowInfor(12,2);//表示车列后方出清
train.passrevlt=revlt;
CacBackSigDis(3,0);
}
k=rcvstr[12];
k|=((unsigned int)rcvstr[13])<<8;
i=rcvstr[21]&0x03;
i<<=8;
i|=rcvstr[9];
if(0==i && 0xffff==k)
k=0;
if(k!=route1.id || train.curroute!=i)
rtbeenchg=1;
train.curroute=i;
//----------------------------------------------------debug Error!
//if(k==5147)//D10-d9
//{
// k=44;//s1-d9
// train.curroute=138;//d10-1g
//}
//----------------------------------------------------debug Error!
RouteChange(k,train.curroute,ltpre,train.forlight);
if(route1.id>0 && 0xffff!=route1.id && route1.start==train.forlight)
CacTrainLength(1);
train.jldelay=rcvstr[20];
JlDl_Timer=timer;
k=rcvstr[11];
k<<=8;
k|=rcvstr[10];
if(k!=train.fortrack)
{
train.limit=SPDLIMIT;
if(IsTrkGudao(k))
train.pretrack=k;
else if(train.fortrack!=0)
train.pretrack=train.fortrack;
train.fortrack=k;
//k=GetTrkLimit(train.fortrack)
}
train.curtrack=k;
k=rcvstr[14]&0x3f;
if((k!=joblist.curhook) || (k!=train.curhook))
{
//printf("k=%d\n",k);
if(0==k)
{
G2000_ShowJob(3);
joblist.jobid=0;
joblist.hooknum=0;
joblist.curhook=0;
train.curhook=0;
}
else if(0!=joblist.jobid)
{
train.curhook=k;
joblist.curhook=k;
G2000_ShowJob(1);
if(!(train.length>0 && train.length<80))
{
train.length=joblist.hooks[train.curhook-1].trainnum;
if(0xff==train.length)
train.length=18;
}
if(0xffff==route1.id && 0!=routepre.id && IsTrkGudao(routepre.base[0].tracks[routepre.base[0].tracknum-1]))
{
if(0!=joblist.jobid && train.curhook!=0 && train.curhook<=joblist.hooknum)
G93_ShowInfor(9,1);
}
train.limit=joblist.hooks[train.curhook-1].limit;
/*G93_ShowInfor(9,0);*/
}
else
{
train.curhook=0;
if(train.limit<SPDLIMIT)
train.limit=SPDLIMIT;
}
}
/*if(0x20==(rcvstr[i]&0x30))
k=0xaa;
else
k=0x55;
*/
if(IsSignalOpen(train.forlight))
k=0xaa;
else
k=0x55;
if(k!=train.lightcolor)
{
if(0xaa==k)
{
if(0==GetDrtSame())
;//train.lightcolor=0x55;
else
{
if(!rtbeenchg)//if(0==routepre.id)
G93_ShowInfor(11,0xff);
train.lightcolor=0xaa;
}
}
else
{
train.lightcolor=0x55;
//if(!(train.forlight==SG_D4 && GetTrkEngage(TK_4BG)))
{
if(!rtbeenchg)
G93_ShowInfor(11,0);
}
}
if(0x55==k)
{
//G93_ShowInfor(8,0);
}
else
{
/*if(train.curhook!=0 && 0!=joblist.id)
{
if((joblist.hooks[train.curhook-1].method&0x0c)!=0x08)
train.limit=15;
else if(train.limit<SPDLIMIT)
train.limit=SPDLIMIT;
}
else if(train.limit<SPDLIMIT)
{
train.limit=SPDLIMIT;
}
*/
}
}
k=rcvstr[17]&0x0f;
k<<=8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -