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

📄 djk.c

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