📄 djk.c
字号:
PrePoint=k;
Stop_Timer=timer;
StopSame=1;
Show_Io(0x13,300);
}
Point_Timer=timer;
if(train.error&DSERROR)
SaveState(8);//应答器恢复记录事件,,有过点信息
train.error&=~DSERROR;
}
}
}
port_clear(com4);
Com4_State=0;
Com4_Timer=timer;
}
}
else
{
i=GetPass(Com4_Timer,timer);
if(i>=30000)
{
port_clear(com4);
Com4_State=0;
Com4_Timer=timer;
if(!(train.error&DSERROR))
SaveState(7);////应答器故障记录事件,亚个就没有数据
train.error|=DSERROR;
}
}
j=GetPass(Point_Timer,timer);
if(j>10000)//
{
if(!(train.error&DSERROR))
SaveState(7);//应答器故障记录事件,有数据,但数据不对
train.error|=DSERROR;
Point_Timer=timer;
}
if(StopSame)
{
j=GetPass(Stop_Timer,timer);
if(j>1500)
{
StopSame=0;
}
}
return(0);
}
int Com2_Proc(void)
{
static unsigned int Com2_Timer=0,Com2_State=0;
int i,j;
unsigned char c;
unsigned char com2data[10];
unsigned char data[256];
i=port_getlen(com2);
if(i>0)
{
if(i!=Com2_State)
{
if(!Com2_State)
Show_Io(1,100);
Com2_State=i;
Com2_Timer=timer;
}
}
if(Com2_State)
{
if(GetPass(Com2_Timer,timer)>=20 || port_getlen(com2)>=200)
{
memset(com2data,0,10);
if(port_gets(com2data,10,com2))
{
if(com2data[0]==0xf0 && com2data[1]==0xf8 && com2data[2]==0xff)
{
if(com2data[3]=='b')
{
data[0]=0xf0;
data[1]=0xf8;
data[2]=0xff;
data[3]='r';
port_puts(data,4,com2);
//printf("send!");
}
else if(com2data[3]=='L' || com2data[3]=='c')
{
data[0]=0xf0;
outportb(DCM_PORT,5);//data start
outportb(DCM_PORT,5);
outportb(DCM_PORT,5);
for(i=0;i<4;i++)
{
data[1+i]=peekb(DCM_SEG,DCM_OFF+4+i);//04长度和06起始地址
}
//printf("length=%d\n",JlLength);
data[5]=Sum_Check(data,5);
port_puts(data,6,com2);
if(com2data[3]=='c')
{
poke(DCM_SEG,DCM_OFF+4,1);//长度
poke(DCM_SEG,DCM_OFF+6,1);//起始地址
poke(DCM_SEG,DCM_OFF+8,0);//年
SetJlDate(2);
}
}
else if(com2data[3]=='S')
{
if(Sum_Check(com2data,6)!=com2data[6])
return(0);
j=com2data[5];
j<<=8;
j|=com2data[4];
data[129]=com2data[4];
data[130]=com2data[5];
i=5+(j%22528)/2048;
if(i<5 || i>=16)
return (0);
outportb(DCM_PORT,i);//data start
outportb(DCM_PORT,i);
outportb(DCM_PORT,i);
c=0;
j=(j%2048)*16;
for(i=0;i<128;i++)
{
data[i]=peekb(DCM_SEG,DCM_OFF+j+i);
c+=data[i];
}
data[128]=c;
port_puts(data,131,com2);
}
}
else if(com2data[0]=='A' && com2data[1]=='T' && com2data[2]=='&')
{
if(com2data[3]=='C' && com2data[4]=='O' && com2data[5]=='M')
{
if(com2data[6]=='1' || com2data[6]=='3' || com2data[6]=='4' || com2data[6]=='0')
{
i=com2data[6]-0x30;
DebugData(-i,0,0,NULL);
}
}
else if(com2data[3]=='C' && com2data[4]=='A' && com2data[5]=='N')
{
if(com2data[6]=='1' || com2data[6]=='2')
{
i=com2data[6]-0x30;
DebugData((-4-i),0,0,NULL);
}
}
}
else if(com2data[0]=='!' && com2data[1]=='P' && com2data[2]=='T' && com2data[3]=='C')
{
if(com2data[4]>='1' && com2data[4]<='9')
{
PointChange(com2data[4]-0x30);
//Show_Io(0x11,50);
}
}
}
port_clear(com2);
Com2_State=0;
Com2_Timer=timer;
}
}
return(0);
}
unsigned char CacCurTrainNum(void)
{
int i,j;
unsigned char c;
char num;
num=0;
if(train.curhook<2 || 0==joblist.jobid)
return 0;
for(i=0;i<(train.curhook-1);i++)
{
c=joblist.hooks[i].method;
j=joblist.hooks[i].trainnum;
if(j==0xff)
j=18;
if(c=='1' || c=='4')
{
num-=j;
}
else if(c=='2')
{
num+=j;
}
}
if(num<0)
num=0;
return(num);
}
/*int CacTrainLength(int cmd)
{
static unsigned char firtrk=0,sectrk=0;
static unsigned char fireng=0,seceng=0;
static int engagedis=0,cleardis=0;
static int lrtid=0;
int i,j,k;
unsigned char trks[2];
switch(cmd)
{
case 1:
k=0;
if(routepre.id>0 && lrtid!=routepre.id && (!firtrk || !sectrk))
{
for(i=0;i<routepre.fhjl.jlnum;i++)
{
for(j=0;j<routepre.base[i].tracknum;j++)
{
if(k<2)
trks[k++]=routepre.base[i].tracks[j];
}
}
if(k<2 || 1==GetTrkEngage(trks[1]))
{
firtrk=0;
sectrk=0;
fireng=0;
seceng=0;
lrtid=0;
}
else
{
firtrk=trks[0];
sectrk=trks[1];
fireng=GetTrkEngage(firtrk);
seceng=0;
lrtid=routepre.id;
}
}
break;
case 2:
if(firtrk && sectrk)
{
if(!seceng)
{
if(GetTrkEngage(sectrk))
{
engagedis=train.displacement;
seceng=1;
}
}
else
{
seceng=GetTrkEngage(sectrk);
}
if(fireng)
{
if(!GetTrkEngage(firtrk))
{
cleardis=train.displacement;
train.length=(abs(cleardis-engagedis)+7)/station.conversion;
if(0==train.length)
train.length=1;
else if(train.length>80)
train.length=-1;
firtrk=0;
sectrk=0;
fireng=0;
seceng=0;
lrtid=0;
}
}
else
{
fireng=GetTrkEngage(firtrk);
}
}
break;
case 4:
firtrk=0;
sectrk=0;
fireng=0;
seceng=0;
//train.length=-1;
lrtid=0;
break;
default:
break;
}
return(train.length);
}*/
/*int CacTrainLength(int cmd)
{
static unsigned char firtrk=0,firsignal=0;
static unsigned char trkeng=0,signalopen=0;
static int engagedis=0,cleardis=0;
static int lrtid=0;
ROUTE routels;
int i,j;
//char outstr[100];
switch(cmd)
{
case 1:
if(routepre.id>0 && lrtid!=routepre.id && (!firtrk || !firsignal))
{
port_puts("id=1,init!",10,com2);
if(0==IsSignalOpen(routepre.start))
{
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
}
else
{
firtrk=routepre.base[0].tracks[0];
firsignal=routepre.start;
trkeng=GetTrkEngage(firtrk)&0x01;
signalopen=1;
lrtid=routepre.id;
port_puts("ok!",3,com2);
}
}
break;
case 2:
if(firtrk && firsignal && lrtid)
{
if(!trkeng)
{
if(GetTrkEngage(firtrk)&0x01)
{
engagedis=train.displacement;
trkeng=1;
port_puts("id=2,fireng",11,com2);
}
}
trkeng=GetTrkEngage(firtrk)&0x01;
if(signalopen)
{
if(!IsSignalOpen(firsignal))
{
cleardis=train.displacement;
i=abs(cleardis-engagedis);
j=train.speed;
j=j*28*25;//j*700
j=(j+500)/1000;
i=abs(i-j);
train.length=(i+13)/station.conversion;
if(0==train.length)
train.length=1;
else if(train.length>80)
train.length=-1;
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
port_puts("id=2,clear,len is",17,com2);
port_puts((unsigned char *)&train.length,2,com2);
}
}
signalopen=IsSignalOpen(firsignal);
}
break;
case 4:
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
//train.length=-1;
lrtid=0;
break;
default:
break;
}
return(train.length);
}*/
int CacTrainLength(int cmd)
{
static unsigned char firtrk=0,firsignal=0,sectrk=0;
static unsigned char trkeng=0,signalopen=0,trk2eng=0;
static int engagedis=0,cleardis=0;
static int lrtid=0;
ROUTE routels;
int i,j;
//char outstr[100];
switch(cmd)
{
case 1:
if(route1.id<=0 || 0xffff==route1.id)
break;
if(!firtrk || (!sectrk && !firsignal))
{
//port_puts("id=1,init!",10,com2);
if(0==IsSignalOpen(route1.start))
{
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
sectrk=0;
trk2eng=0;
}
else
{
/*if(SG_D4==route1.base[0].start)
{
firtrk=TK_D4G;
sectrk=TK_4BG;
trkeng=GetTrkEngage(firtrk);
trk2eng=GetTrkEngage(sectrk);
signalopen=0;
firsignal=0;
}
else*/
{
firtrk=route1.base[0].tracks[0];
trkeng=GetTrkEngage(firtrk)&0x01;
lrtid=route1.id;
trk2eng=0;
if(IsGudaoXhj(route1.start))
{
if(route1.base[0].tracknum>1)
sectrk=route1.base[0].tracks[1];
else if(route1.fhjl.jlnum>1)
sectrk=route1.base[1].tracks[0];
else
{
sectrk=0;
firtrk=0;
trkeng=0;
}
signalopen=0;
}
else
{
firsignal=route1.start;
signalopen=1;
sectrk=0;
trk2eng=0;
}
}
//port_puts("ok!",3,com2);
}
}
break;
case 2:
if(firtrk && ((firsignal && lrtid) || sectrk))
{
if(!trkeng)
{
if(firsignal && (GetTrkEngage(firtrk)&0x01))
{
if(train.speed>0)
{
engagedis=train.displacement;
trkeng=1;
//port_puts("id=2,fireng",11,com2);
}
else
{
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
sectrk=0;
trk2eng=0;
}
}
}
if(!trk2eng)
{
if(sectrk && (GetTrkEngage(sectrk)&0x01))
{
if(train.speed>0)
{
engagedis=train.displacement;
trk2eng=1;
//port_puts("id=2,seceng",11,com2);
}
else
{
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
sectrk=0;
trk2eng=0;
}
}
}
if((firsignal && signalopen && !IsSignalOpen(firsignal)) ||
(sectrk && trkeng && !(GetTrkEngage(firtrk)&0x01)))
{
cleardis=train.displacement;
i=abs(cleardis-engagedis);
j=train.speed;
j=j*28*25;//j*700
j=(j+500)/1000;
i=abs(i-j);
train.length=(i+6)/station.conversion;
if(0==train.length)
train.length=1;
else if(train.length>60)
train.length=-1;
if(train.length>50)
train.length=50;
//port_puts("befor clear:",12,com2);
//port_puts(&firtrk,12,com2);
//port_puts("end",3,com2);
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
lrtid=0;
sectrk=0;
trk2eng=0;
if(train.speed<=0)
train.length=-1;
//port_puts("id=2,clear,len is",17,com2);
//port_puts((unsigned char *)&train.length,2,com2);
}
}
trkeng=GetTrkEngage(firtrk)&0x01;
trk2eng=GetTrkEngage(sectrk)&0x01;
signalopen=IsSignalOpen(firsignal);
break;
case 4:
firtrk=0;
firsignal=0;
trkeng=0;
signalopen=0;
sectrk=0;
trk2eng=0;
//train.length=-1;
lrtid=0;
//port_puts("delete cac!",11,com2);
break;
default:
break;
}
return(train.length);
}
int CacJoinLength(int cmd)
{
static int passpointdis=0,turndis=0;
//int i=0;
switch(cmd)
{
case 1:
if(2==train.netstate)//2005.12.15在网内不计算入网辆数
break;
if(0==train.displacement)
passpointdis=1;
else
passpointdis=train.displacement;
//printf("dis=%d\n",passj100dis);
break;
case 2:
if(0!=passpointdis && 0!=shouldjoin &&
((0x8a==train.g93trend && (shouldjoin&1)) || (0x0a==train.g93trend && !(shouldjoin&1))))
{
turndis=train.displacement;
if(!turndis)
turndis=1;
train.length=abs(turndis-passpointdis)+7;
if(train.length<0)
train.length=0;
train.length=train.length/station.conversion;
if(0==train.length)
train.length=1;
else if(train.length>MAXTRAINNUM)
train.length=-1;
//printf("done! ");
}
//printf("dis=%d,turn=%d,len=%d\n",passj100dis,turndis,train.length);
passpointdis=0;
turndis=0;
break;
case 4:
passpointdis=0;
turndis=0;
break;
default:
break;
}
return(train.length);
}
/*int CacSlideDis(int cmd)
{
static unsigned char firtrk=0,firsignal=0,sectrk=0;
static unsigned char trkeng=0,signalopen=0,trk2eng=0;
static int firdist=0,firdisp=0;
static ROUTE routesld;
int i,j;
//char outstr[100];
switch(cmd)
{
case 1:
if(route1.id<=0 || 0xffff==route1.id || !IsSignalSlide(route1.start))
break;
j=0;
if(routesld.id)
{
for(i=0;i<routesld.jlnum;i++)
{
if(routesld.bas
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -