IN_OUT.c 5.79 KB
#include "includes.h"
#include "hardware.h"
#include "all_value.h"


/***********************************input+output*****************************************/

/****************************IO_IN************************************/
/**手执器**/
u8 Handnum=0;     //手执器键值
u8 IN_Forward=0;     //前进
u8 IN_Backward=0;     //后退
u8 IN_Left=0;     //左移
u8 IN_Right=0;    //右移
u8 IN_Cw=0;    //顺转
u8 IN_CCw=0;     //逆转
u8 IN_Up=0;     //上升
u8 IN_Down=0;     //下降
u8 IN_Stop=0;     //急停复位
u8 IN_HelmLeft=0;     //左移
u8 IN_HelmRight=0;    //右移

/**面板外部**/
u8 IN_Mode=0;     //模式按钮
u8 IN_Safe=0;     //安全触边检测
u8 IN_EmergStop=0;     //急停按钮
u8 IN_Reset=0;     //复位键
/**驱动采集**/
//u8 IN_Motorerr1=0;   //电机报错1   
/**避障+测量雷达信息采集**/                    
u8 IN_LRadarB_Near;   //TIM_F近区域触发
u8 IN_LRadarB_Middle;   //TIM_F中区域触发
u8 IN_LRadarB_Far;   //TIM_F远区域触发
u8 IN_LRadarB_Ok;   //

u8 IN_LRadarF_Near;   //Scan_F近区域触发
u8 IN_LRadarF_Middle;   //Scan_F中区域触发
u8 IN_LRadarF_Far;   //Scan_F远区域触发
u8 IN_LRadarF_Ok;   //
/**普通光电检测**/
u8 IN_UpLimit;   //上限位检测
u8 IN_DownLimit;   //下限位检测
u8 IN_LimitL;   //左限位检测
u8 IN_LimitR;   //左限位检测
u8 IN_LimitL2;   //左限位检测
u8 IN_LimitR2;   //左限位检测
//u8 IN_InitPoint1;   //
//u8 IN_InitPoint2;   //
/**其他**/
u8 IN_SensorPower;   //传感器供电检测
u8 IN_Cargo1;   //平台上货物检测
u8 IN_Cargo2;   //平台上货物检测
u8 IN_HydraOilOk;//液压油检测
u8 IN_CargoF;   //车前货物检测
u8 IN_CargoB;   //车后货物检测
u8 IN_CargoLF;   //车左前货物检测
u8 IN_CargoLB;   //车左后货物检测
u8 IN_CargoRF;   //车右前货物检测
u8 IN_CargoRB;   //车右后货物检测

u8 IN_LaSafe;   //雷达安全检测信号
/******************************IO_OUT***********************************/
/**三色灯+蜂鸣器**/
u8 Out_LEDG;          //绿灯
u8 Out_LEDY;          //黄灯
u8 Out_LEDW;          //白灯

//u8 Out_BEEP;          //蜂鸣器
/**其他输出**/
u8 Out_Poweroff;     //小车关机
u8 Out_Charge;     //充电
u8 Out_SetEncoder;     //充电
//u8 Out_ApReon;     //moxa重启
//u8 Out_UpCCDLed;
u8 Out_Fan1Power;     //风扇1电源中间
u8 Out_Fan2Power;     //风扇2电源
u8 Out_DownValve;     //下降阀

/**驱动器使能输出**/
//u8 Out_Enable1;       //驱动器1使能
//u8 Out_Enable2;       //驱动器2使能
//u8 Out_Enable3;       //驱动器3使能
//u8 Out_Enable4;       //驱动器4使能

/**TIM区域选择输出**/

u8 Out_LRadarBIn1;       //TIM_IN1
u8 Out_LRadarBIn2;       //TIM_IN2
u8 Out_LRadarBIn3;       //TIM_IN3
u8 Out_LRadarBIn4;       //TIM_IN4

u8 Out_SystemLed;//主板灯


#if ( (AgvStypeNo==1)|(AgvStypeNo==2) )	//1-大舵轮车;2-小舵轮车;3-台光样车;4-标准AGV;5-福田小车		
	void In_Pro(void) //获取DI具体对应信息/*将采集的信息整体->个体映射*/
	{
		In_D();
		if( VaIndexDW_R(&F_AgvContr,9))IN_Cargo1=NOT(VaIndexW_R(&In_1_W,4));    //轴5输送 上层输送					
		else  IN_Cargo1=VaIndexW_R(&In_1_W,4);
		if( VaIndexDW_R(&F_AgvContr,8))IN_Cargo2=NOT(VaIndexW_R(&In_1_W,5));	    //轴0输送 下层输送	
		else IN_Cargo2=VaIndexW_R(&In_1_W,5);
		IN_HydraOilOk=NOT(VaIndexW_R(&In_1_W,6));			

		IN_Down=VaIndexW_R(&In_2_W,10);
		IN_Up=VaIndexW_R(&In_2_W,11);
		IN_Cw=VaIndexW_R(&In_2_W,0);
		IN_CCw=VaIndexW_R(&In_2_W,1);
		IN_Backward=VaIndexW_R(&In_2_W,4);
		IN_Forward=VaIndexW_R(&In_2_W,5);
	//	IN_Forward=VaIndexW_R(&In_2_W,6);
//		IN_Stop=VaIndexW_R(&In_2_W,8);
//		IN_Left=VaIndexW_R(&In_2_W,3);
//		IN_Right=VaIndexW_R(&In_2_W,2);	
//		IN_HelmLeft=VaIndexW_R(&In_2_W,9);
//		IN_HelmRight=VaIndexW_R(&In_2_W,7);
		IN_Stop=VaIndexW_R(&In_2_W,9);
		IN_Left=VaIndexW_R(&In_2_W,3);
		IN_Right=VaIndexW_R(&In_2_W,2);	
		IN_HelmLeft=VaIndexW_R(&In_2_W,7);
		IN_HelmRight=VaIndexW_R(&In_2_W,8);		

		
		IN_LRadarB_Ok=VaIndexW_R(&In_2_W,12);
		IN_LRadarB_Far=NOT(VaIndexW_R(&In_2_W,13) );	//有物体进入是1
		IN_LRadarB_Middle=NOT(VaIndexW_R(&In_2_W,14) );
		IN_LRadarB_Near=NOT(VaIndexW_R(&In_2_W,15) );
	
		
		IN_Mode=VaIndexW_R(&In_3_W,0);
		IN_EmergStop=VaIndexW_R(&In_3_W,1);
		IN_SensorPower=VaIndexW_R(&In_3_W,2);
		IN_Safe=VaIndexW_R(&In_3_W,3);
		IN_Reset=VaIndexW_R(&In_3_W,4);
		

  	if(VaIndexDW_R(&F_AgvContr,1))//液压升降		
		{ IN_DownLimit=NOT(VaIndexW_R(&In_3_W,8));
			IN_UpLimit=NOT(VaIndexW_R(&In_3_W,9));
		}
		else//电动缸升降
		{	IN_DownLimit=VaIndexW_R(&In_3_W,8);
			IN_UpLimit=VaIndexW_R(&In_3_W,9);	
		}
		if(VaIndexDW_R(&F_AgvContr,9))//6号轴是输送滚筒	
		{ IN_LimitL=NOT(VaIndexW_R(&In_1_W,8));
			IN_LimitR=NOT(VaIndexW_R(&In_1_W,9));	
		 }
		else
		{ IN_LimitL=VaIndexW_R(&In_3_W,10);
		  IN_LimitR=VaIndexW_R(&In_3_W,11);
		 }
		
		IN_LimitL2=NOT(VaIndexW_R(&In_1_W,10));
		IN_LimitR2=NOT(VaIndexW_R(&In_1_W,11));

		
		
	}


	void Out_Pro(void) //将输出DO对应到输出口/*将输出信息个体->整体映射*/
	{
		IO_Force();
		VaIndexW_W(&Out_1_W,0,Out_LEDW);
		VaIndexW_W(&Out_1_W,1,Out_LEDY);
		VaIndexW_W(&Out_1_W,2,Out_LEDG);
		VaIndexW_W(&Out_1_W,3,Out_SetEncoder);
		VaIndexW_W(&Out_1_W,4,0);	
		VaIndexW_W(&Out_1_W,5,0);		

		VaIndexW_W(&Out_1_W,8,Out_LRadarBIn4);
		VaIndexW_W(&Out_1_W,9,Out_LRadarBIn3);	
		VaIndexW_W(&Out_1_W,10,Out_LRadarBIn2);
		VaIndexW_W(&Out_1_W,11,Out_LRadarBIn1);


		VaIndexW_W(&Out_2_W,0,Out_DownValve);	//VaIndexW_W(&Out_2_W,5,Out_DownValve);
		VaIndexW_W(&Out_2_W,1,Out_Charge);
		VaIndexW_W(&Out_2_W,2,Out_Poweroff);
		VaIndexW_W(&Out_2_W,3,Out_Fan1Power);
		VaIndexW_W(&Out_2_W,4,Out_Fan2Power);


		VaIndexW_W(&Out_2_W,8,Out_SystemLed);
		
		Out_D();	
	}
#elif (AgvStypeNo==3) 	

	
	
#endif
	
void IO_Force(void) //
{
	if(SysKey==88)
	{
 		if(VaIndexDW_R(&Touch_Contr,4))Out_Charge=1;//用于人工充电桩处人工快速充电
		if(VaIndexDW_R(&Touch_Contr,5)){Out_Fan1Power=Out_Fan2Power=1;}//强制风扇	
		
		if(VaIndexDW_R(&Touch_Contr,14))Out_Poweroff=1;//强制断电
		else Out_Poweroff=0;
	}
	
	if(SysKey==89)
	{ if(VaIndexDW_R(&Touch_Contr,12))Out_SetEncoder=1;//强制测距置零
		else Out_SetEncoder=0;

		if(VaIndexDW_R(&Touch_Contr,16)&&(Motor[5].PcToM.SetZero_Step==0))Motor[5].PcToM.SetZero_Step=1;

	}
	
}