syntax = "proto2";
package message;
import "message_base.proto";



//终端流程状态, 表示这个出入口到楼上停车位之间的所有设备总状态
enum Terminal_status
{
    E_TERMINAL_UNKNOW               = 0;     //未知
    E_TERMINAL_READY                = 1;     //准备，待机
    E_TERMINAL_STORE                = 2;	    //正在存车
    E_TERMINAL_PICKUP               = 3;	    //正在取车

    E_TERMINAL_FAULT                = 10;     //故障
}

//通道口属性, 出入口的方向属性, 表示这个通道允许停车或者取车
enum Passageway_direction
{
    E_INLET             =0;         //入口
    E_OUTLET            =1;         //出口
    E_BILATERAL         =2;         //双向口
}



//调度流程状态
enum Dispatch_process_status
{
    E_DISPATCH_POCESS_UNKNOW                = 0;     //未知
    E_DISPATCH_POCESS_WAIT                  = 1;     //等待
    E_DISPATCH_POCESS_WORKING               = 2;     //工作
    E_DISPATCH_POCESS_OVER                  = 3;     //完成

    E_DISPATCH_POCESS_FAULT                 = 100;     //故障
}

//调度流程信息
message Dispatch_process_information
{
    optional string                     car_numberPlate=1;					    //车牌号
    optional string                     command_key=2;                          //指令唯一标识符id
    optional Dispatch_motion_direction  dispatch_motion_direction=3;            //调度方向, 停车取车
    optional Id_struct                  id_struct=4;                            //id
    optional Locate_information         locate_information=5;                   //汽车测量信息, 只有停车时有数据, 取车时没有数据.
    repeated Parkspace_info             parkspace_info_ex=6;                    //车位编号, 停车位(B方案, 分配3个停车位)
    optional Car_type                   car_type=7;                             //汽车大小

    optional Dispatch_process_status    dispatch_process_status=8;              //调度流程状态
    optional int32                      m_wait_number=9;                        //只有等待才有等待编号
}

//调度模块终端出入口的状态
message Dispatch_terminal_status_msg
{
    required Base_info                  base_info=1;                    //消息类型
    optional Id_struct                  id_struct=2;                    //id
    required Terminal_status            terminal_status = 3;            //终端流程状态, 表示这个出入口到楼上停车位之间的所有设备总状态
    required Passageway_direction       passageway_direction = 4;       //通道口属性, 出入口的方向属性, 表示这个通道允许停车或者取车

    repeated Dispatch_process_information   dispatch_store_process_information_vector = 5;                          //
    optional string                         dispatch_store_process_information_updata_time=6;                        //
    repeated Dispatch_process_information   dispatch_pickup_process_information_vector = 7;                         //
    optional string                         dispatch_pickup_process_information_updata_time=8;                        //
}

//调度方向, 停车取车, 表示正在执行的动作
enum Dispatch_motion_direction
{
    E_STORE_CAR             =0;         //停车, 出入口 -> 停车位
    E_PICKUP_CAR            =1;         //取车, 停车位 -> 出入口
}



//执行搬运请求(主控->调度管理)
message Dispatch_request_msg
{
    required Base_info                  base_info=1;                            //消息类型
    required string                     command_key=2;                   //指令唯一标识符id

    optional Dispatch_motion_direction  dispatch_motion_direction=3;            //调度方向, 停车取车
    optional Id_struct                  id_struct=4;                              //id
    optional Locate_information         locate_information=5;                   //汽车测量信息, 只有停车时有数据, 取车时没有数据.

    repeated Parkspace_info             parkspace_info_ex=6;                         //车位编号, 停车位(B方案, 分配3个停车位)
    optional Car_type                   car_type=7;                             //汽车大小
}

//搬运动作执行完成后反馈结果(调度管理->主控)
message Dispatch_response_msg
{
    required Base_info                  base_info=1;                    //消息类型
    required string                     command_key=2;                   //指令唯一标识符id

    optional Dispatch_motion_direction  dispatch_motion_direction=3;            //调度方向, 停车取车
    optional Id_struct                  id_struct=4;                              //id
    optional Locate_information         locate_information=5;                   //汽车测量信息, 只有停车时有数据, 取车时没有数据.

    repeated Parkspace_info             parkspace_info_ex=6;                         //车位编号, 停车位(B方案, 分配3个停车位)
    optional Car_type                   car_type=7;                             //汽车大小

    optional Error_manager              error_manager = 8;
}
















//调度管理 的状态
enum Dispatch_manager_status
{
    E_DISPATCH_MANAGER_UNKNOW               = 0;    //未知
    E_DISPATCH_MANAGER_READY                = 1;    //准备，待机
    E_DISPATCH_MANAGER_STORE                = 2;    //正在存车
    E_DISPATCH_MANAGER_PICKUP               = 3;    //正在取车

    E_DISPATCH_MANAGER_FAULT               = 100;    //故障
}

//设备状态,这个类的总状态,这里指工作任务流程
	enum Dispatch_device_status
	{
	    DISPATCH_DEVICE_UNKNOW               	= 0;    //未知
    	DISPATCH_DEVICE_READY               	= 1;    //准备，待机
    	DISPATCH_DEVICE_BUSY					= 2; 	//工作正忙

    	DISPATCH_DEVICE_ONE_LEVEL_OVER		= 3; 	//一级工作完成;
    	DISPATCH_DEVICE_ONE_LEVEL_WORK		= 4;	//一级工作状态; 就是普通的移动任务
    	DISPATCH_DEVICE_TWO_LEVEL_OVER		= 5; 	//一级工作完成;
    	DISPATCH_DEVICE_TWO_LEVEL_WORK		= 6;	//二级工作状态; 就是紧急避让; 插队任务(会在执行一级任务的过程中; 插队并优先执行二级任务)
    	DISPATCH_DEVICE_THREE_LEVEL_OVER		= 7; 	//一级工作完成;
    	DISPATCH_DEVICE_THREE_LEVEL_WORK		= 8;	//三级工作任务; 就是锁定硬件资源; 不让插队; (除非急停或者取消任务)

       	DISPATCH_DEVICE_FAULT					= 100;	//故障
    	DISPATCH_DEVICE_DISCONNECT			= 101; 	//通信故障
	};

	//调度任务的等级
	enum Dispatch_task_level
	{
//	    DISPATCH_TASK_UNKNOW_LEVEL          = 0;    //无效任务
		DISPATCH_TASK_ONE_LEVEL             = 1;    //一级任务
		DISPATCH_TASK_TWO_LEVEL				= 2;	//二级任务
		DISPATCH_TASK_THREE_LEVEL			= 3;	//三级任务
	};

	//抓车的夹杆
	enum Clamp_motion
	{
		E_CLAMP_NO_ACTION            	= 0;    //无动作.
		E_CLAMP_TIGHT               	= 1;    //夹紧夹杆
		E_CLAMP_LOOSE					= 2;	//松开夹杆
	};

	//中跑车和平层轨道的对接
	enum Joint_motion
	{
		E_JOINT_NO_ACTION            	= 0;    //无动作.
		E_JOINT_HOLD_OUT               	= 1;    //伸出对接，之后中跑车可以x轴移动，电梯不能Z轴移动
		E_JOINT_TAKE_BACK				= 2;	//收回对接，之后中跑车固定在电梯上不能X轴移动，电梯可以Z轴移动
	};

	//小跑车的位置,是否在中跑车上面
	enum Small_sports_car_motion
	{
		E_SMALL_SPORTS_NO_ACTION		= 0;    //无动作.
		E_SMALL_SPORTS_CAR_GET_AWAY 	= 1;    //小跑车离开中跑车
		E_SMALL_SPORTS_CAR_GET_BACK		= 2;	//小跑车返回中跑车
	};


	//指令完成状态, 设备答复指令, 返回任务完成的情况
	enum Respons_status
	{
		RESPONS_WORKING            	= 0;    //任务进行中
		RESPONS_OVER               	= 1;    //任务完成
		RESPONS_MINOR_ERROR			= 100;	//一般故障, 可恢复
		RESPONS_CRITICAL_ERROR		= 101;	//致命故障,不可恢复
	};

	//设备的硬件设备状态
	enum Hardware_device_status
	{
		DEVICE_UNKNOWN              = 0;    //设备未知
		DEVICE_READY                = 1;    //设备空闲(可以接受新的指令任务)
		DEVICE_WORKING				= 2;	//设备工作中
		DEVICE_EMERGENCY_STOP		= 3;	//设备急停
		DEVICE_UNSAFETY				= 4;	//设备不安全(暂时不考虑是否处于安全位置)
		DEVICE_COLLISION			= 5;	//设备发生碰撞
		DEVICE_FAULT				= 6;	//设备故障
	};

	//设备的负载状态, 小跑车上面是否有车.
	enum Load_status
	{
		LOAD_UNKNOWN				= 0;	//负载未知
		HAVE_CAR               		= 1;    //有车
		NO_CAR            			= 2;    //没车
	};

	//7号出口 转台方向
	enum Turntable_direction
	{
		TURNTABLE_DIRECTION_UNKNOWN				= 0;	//方向未知,
		TURNTABLE_DIRECTION_INSIDE 				= 1;    //方向朝里,对接内门的小跑车
		TURNTABLE_DIRECTION_OUTSIDE  			= 2;    //没车朝外,对接外门的出口
	};

	//出入口 门的开关状态
	enum Door_motion
	{
		DOOR_UNKNOWN            = 0;    //门的开关状态 未知, 或者工作到一半,正在工作中.
	    DOOR_OPEN               = 1;    //开门
		DOOR_CLOSE				= 2;	//关门
		DOOR_ERROR				= 3;	//
	};

	//边界判断,是否超界
	enum Overstep_the_boundary
	{
		BOUNDARY_NORMAL			= 0;	//边界 正常
		BOUNDARY_OVERSTEP       = 1;    //超界
	};




//抓取器的状态(机器手)
message Catcher_data
{
    required Dispatch_device_type               dispatch_device_type=1;         //调度设备的类型
    required Dispatch_device_status             dispatch_device_status=2;       //设备总状态, 控制任务流程(长流程)

    required int32                              device_id=3;                    //设备id,
	optional Hardware_device_status				actual_device_status=4;			//机器人的硬件设备状态(短流程)
	optional Load_status						actual_load_status=5;	        //机器人的负载状态, 机器人上面是否有车.

    optional int32 								actual_coordinates_id=6;		//机器人真实 空间位置的id.
	optional float 								actual_x=7;					    //机器人坐标x轴,
	optional float 								actual_y=8;					    //机器人坐标y轴,
	optional float 								actual_b=9;					    //机器人坐标b轴, 旋转范围80~280
	optional float 								actual_z=10;				    //机器人坐标z轴,
	optional float 								actual_d1=11;				    //机器人坐标d1轴, 机器人抓车杆纵向移动(前轮抓杆)
	optional float 								actual_d2=12;				    //机器人坐标d2轴, 机器人抓车杆纵向移动(后轮抓杆)
	optional Clamp_motion						actual_clamp_motion1=13;		//机器人夹车杆. 0=无动作，1=夹紧，2=松开
	optional Clamp_motion						actual_clamp_motion2=14;		//机器人夹车杆. 0=无动作，1=夹紧，2=松开
	optional Clamp_motion						actual_clamp_motion3=15;		//机器人夹车杆. 0=无动作，1=夹紧，2=松开
	optional Clamp_motion						actual_clamp_motion4=16;		//机器人夹车杆. 0=无动作，1=夹紧，2=松开

    optional string                             actual_error_code=17;	        //机器人设备的故障信息位
    optional string                             actual_warning_code=18;     	//机器人设备的警告信息位
    optional string							    actual_error_description=19;    //机器人设备的错误描述
}

//搬运器的状态
message Carrier_data
{
    required Dispatch_device_type               dispatch_device_type=1;         //调度设备的类型
    required Dispatch_device_status             dispatch_device_status=2;       //设备总状态, 控制任务流程(长流程)

    required int32                              device_id=3;                    //设备id,
	optional Hardware_device_status				actual_device_status=4;			//搬运器的硬件设备状态(短流程)
	optional Load_status						actual_load_status=5;	        //搬运器的负载状态, 小跑车上面是否有车.

    optional int32 								actual_coordinates_id=6;	    //搬运器真实 空间位置的id.
	optional float 								actual_x=7;					    //搬运器坐标x轴, 中跑车控制横向移动
	optional float 								actual_y=8;					    //搬运器坐标y轴, 小跑车控制纵向移动
	optional float 								actual_z=9;					    //搬运器坐标z轴, 电梯控制上下移动
	optional float 								actual_y1=10;				        //搬运器坐标y1轴, 小跑车控制纵向移动(前轮抓杆)
	optional float 								actual_y2=11;				        //搬运器坐标y2轴, 小跑车控制纵向移动(后轮抓杆)
	optional Clamp_motion						actual_clamp_motion1=12;		    //小跑车夹车杆. 0=无动作，1=夹紧，2=松开
	optional Clamp_motion						actual_clamp_motion2=13;		    //小跑车夹车杆. 0=无动作，1=夹紧，2=松开
	optional Small_sports_car_motion			actual_small_sports_car_motion=14;	//小跑车的位置,是否在中跑车上面, 0=无动作，1=出发到位，2=返回到位
	optional Joint_motion						actual_joint_motion_x1=15;		    //电梯与X轴的横向轨道对接,0=无动作，1=伸出到位，2=收回到位
	optional Joint_motion						actual_joint_motion_x2=16;		    //电梯与X轴的横向轨道对接,0=无动作，1=伸出到位，2=收回到位

    optional string                             actual_error_code=17;	        //搬运器设备的故障信息位
    optional string                             actual_warning_code=18;	        //搬运器设备的警告信息位
    optional string							    actual_error_description=19;    //搬运器设备的错误描述
}

//出入口的状态
message Passageway_data
{
    required Dispatch_device_type               dispatch_device_type=1;         //调度设备的类型
    required Dispatch_device_status             dispatch_device_status=2;       //设备总状态, 控制任务流程(长流程)

    required int32                              device_id=3;                    //设备id,
    //通道口的设备状态数据,
	optional Hardware_device_status				actual_device_status=4;			//通道口的硬件设备状态(短流程)
	optional Load_status						actual_inside_load_status=5;	        //通道口的内部负载状态, 门内地感是否有车.
	optional Load_status						actual_outside_load_status=6;	        //通道口的外部负载状态, 门外地感是否有车.
	optional Overstep_the_boundary				actual_front_overstep_the_boundary=7;	//通道口 汽车前边界
	optional Overstep_the_boundary				actual_back_overstep_the_boundary=8;	//通道口 汽车后边界
	optional Overstep_the_boundary				actual_height_overstep_the_boundary=9;	//通道口 车辆是否超高
	optional Load_status						actual_outside_door_sensor=10;	//通道口 的外门处的传感器, 判断是否有车经过外门
	//通道口的真实状态, 可能是路径中间的坐标
    optional Door_motion						actual_inside_door_motion=11;	//通道口 内门动作
	optional Door_motion						actual_outside_door_motion=12;	//通道口 外门动作
	optional Load_status						actual_turntable_load_status=13;	//通道口 转盘负载状态, 是否有车.
	optional Turntable_direction				actual_turntable_direction=14;	//通道口 转台方向

    optional string                             actual_error_code=15;	        //通道口设备的故障信息位
    optional string                             actual_warning_code=16;	        //通道口设备的警告信息位
    optional string							    actual_error_description=17;    //通道口设备的错误描述
}


//调度管理总管理的状态
message Dispatch_manager_status_msg
{
    required Base_info                  base_info=1;                    //消息类型

    required int32                      dispatch_id=2;                  //调度管理模块 id
    required Dispatch_manager_status    dispatch_manager_status = 3;    //调度管理模块 状态

    repeated Catcher_data               catcher_data_map = 4;           //机器手的数据
    repeated Carrier_data               carrier_data_map = 5;           //搬运器的数据
    repeated Passageway_data            passageway_data_map = 6;           //出入口的数据

}





//调度管理的设备详细的数据信息
message Dispatch_manager_data_msg
{
    //后续再加
}
