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

📄 djk.c

📁 LINUX的简单应用
💻 C
📖 第 1 页 / 共 5 页
字号:
							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 + -