#pragma //科聪控制器请求报文头结构体信息 typedef struct KC_MESSAGE_HEADER { unsigned char version; //协议版本号,固定为0x01 unsigned char type; //报文类型,请求0x00,应答0x01 unsigned short serial_number; //通信序列号,发送时+1 unsigned char server_code; //服务码,固定0x10 unsigned char command_code; //命令码 unsigned char run_code; //执行码,应答报文填写 unsigned char reserve1; //预留字段1,固定为0 unsigned short content_length; //报文数据区长度 unsigned char reserve2[2]; //预留字段2 }ST_KC_MESSAGE_HEADER; //------------------------------------------------------(0xAF) AGV_STATUS BEGIN--------------------------------------------------// //位置状态信息结构体 typedef struct LOCATION_STATUS_INFO { float x; //机器人全局位置 x 坐标 float y; //机器人全局位置 y 坐标 float angle; //机器人绝对车体方向角 unsigned int point_id; //AGV 最后一次通过的点 ID unsigned int segment_id; //AGV 最后一次通过的段 ID unsigned int point_seq; //最后通过点在任务中的序列号 unsigned char confidence; //置信度0-100 unsigned char reserve[7]; //预留字段 }ST_LOCATION_STATUS_INFO; //运行状态信息结构体 typedef struct RUNNING_STATUS_INFO { float line_speed; //AGV实时线速度 float acceleration; //AGV实时加速度 float angular_speed; //AGV实时角速度 unsigned char mode; //AGV工作模式 unsigned char status; //AGV状态 unsigned char capability; //能力集状态,0未设置,1已设置 unsigned char reserve[5]; //预留字段 }ST_RUNNING_STATUS_INFO; //点状态序列 typedef struct POINT_STATE_SEQUENCE { unsigned int sequence; //点序列 unsigned int point_id; //点ID }ST_POINT_STATE_SEQUENCE; //段状态序列 typedef struct PATH_STATE_SEQUENCE { unsigned int sequence; //点序列 unsigned int path_id; //段ID }ST_PATH_STATE_SEQUENCE; //任务状态信息结构体 typedef struct TASK_STATUS_INFO { unsigned int order_id; //订单ID unsigned int task_key; //任务KEY unsigned char point_size; //点状态序列长度 unsigned char path_size; //段状态序列长度 unsigned char reserve[2]; //预留字段 ST_POINT_STATE_SEQUENCE *pPointStateSequence; //已收到且未执行的点序列,长度由point_size确定 ST_PATH_STATE_SEQUENCE *pPathStateSequence; //已收到且未执行的段序列,长度由path_size确定 }ST_TASK_STATUS_INFO; //电池状态信息结构体 typedef struct BATTERY_STATUS_INFO { float power; //电量百分比 float voltage; //电压 float current; //电流 unsigned char status; //充电状态 02满,01充电,00放电 unsigned char reserve[7]; //预留字段 }ST_BATTERY_STATUS_INFO; //异常事件状态信息结构体 typedef struct ABNORMAL_EVENT_STATUS_INFO { unsigned short event_code; //事件码 unsigned short event_level; //事件等级 信息00, 警告01,错误02 unsigned char reserve[8]; //预留字段 }ST_ABNORMAL_EVENT_STATUS_INFO; //动作状态信息结构体 typedef struct ACTION_STATUS_INFO { unsigned int action_id; //动作id, 0为无效数据 unsigned char action_status; //动作状态 00等待,01初始化,02执行中,03完成,04失败,05取消,06暂停 unsigned char reserve[7]; //预留字段 }ST_ACTION_STATUS_INFO; //AGV上报信息结构体 typedef struct REPORT_INFO { unsigned short info_size; //消息长度 unsigned short info_type; //消息类型 unsigned char *pInfoContent; //消息内容 4字节对齐, 长度由info_size确定 }ST_REPORT_INFO; typedef struct AGV_STATUS { unsigned char abnormal_size; //异常事件状态信息长度 unsigned char action_size; //动作状态长度 unsigned char info_size; //信息数量 unsigned char reserve1; //预留字段 ST_LOCATION_STATUS_INFO stLocationStatusInfo; //位置状态信息结构体 ST_RUNNING_STATUS_INFO stRunningStatusInfo; //运行状态信息结构体 ST_TASK_STATUS_INFO stTaskStatusInfo; //任务状态信息结构体 ST_BATTERY_STATUS_INFO stBatteryStatusInfo; //电池状态信息结构体 ST_ABNORMAL_EVENT_STATUS_INFO *pstAbnormalEventStatusInfo; //异常事件状态信息结构体, 长度由abnormal_size确定 ST_ACTION_STATUS_INFO *pstActionStatusInfo; //动作状态信息结构体,长度由action_size确定 ST_REPORT_INFO *pstReportInfo; //上报信息结构体,长度由info_size确定 }ST_AGV_STATUS; //---------------------------------------------------AGV_STATUS END---------------------------------------------// //---------------------------------------------------(0xBO) AGV_CARGO_STATUS BEGIN-----------------------------// typedef struct LOAD_STATUS_INFO { unsigned char cargo_id[64]; //需要RFID时填充 unsigned char cargo_status; //00无货,01有货 unsigned short cargo_type; //货物类型 unsigned char cargo_direction; //货物的方位索引 unsigned char reserve[4]; //预留 }ST_LOAD_STATUS_INFO; //AGV载货状态信息结构体 typedef struct AGV_CARGO_STATUS { unsigned char load_size; //载货状态的数量 unsigned char reserve[3]; //保留 ST_LOAD_STATUS_INFO *pstLoadStatusInfo; //载货状态结构体,长度由load_size确定 }ST_AGV_CARGO_STATUS; //---------------------------------------------------AGV_CARGO_STATUS END---------------------------------------------// //---------------------------------------------------(0xB1) SUBSCRIPTION_COMMAND BEGIN-------------------------------// //订阅的信令信息结构体 typedef struct SUBSCRIPTION_INFO { unsigned short command_code; //命令码 0不可订阅 unsigned short interval_time; //间隔时间 unsigned int duration_time; //持续时间 unsigned char reserve[8]; //预留 }ST_SUBSCRIPTION_INFO; //订阅请求结构体 typedef struct SUBSCRIPTION_REQ { ST_SUBSCRIPTION_INFO info[8]; //订阅的信令信息结构体 unsigned char uuid[64]; //uuid }ST_SUBSCRIPTION_REQ; //订阅应答结构体 typedef struct SUBSCRIPTION_RESP { unsigned char uuid[64]; //uuid unsigned char errcode; //错误码 0成功,1失败 }ST_SUBSCRIPTION_RESP; //---------------------------------------------------SUBSCRIPTION_COMMAND END---------------------------------------------// //---------------------------------------------------(0xB2) IMMEDIATE_ACTION_COMMAND BEGIN-------------------------------// typedef struct CONTENT_TYPE1 { unsigned int isStopImmediately; }; typedef struct CONTENT_TYPE2 { unsigned int orderId; unsigned int taskKey; }; typedef struct CONTENT_TYPE3 { unsigned int orderId; unsigned int isStopImmediately; }; //立即动作结构体 typedef struct IMMEDIATE_ACTION { unsigned short action_type; //动作类型 unsigned char action_parallel; //0x00:为移动和动作间都可并行,0x01:为动作间可以并行,不能移动0x02 只能执行当前动作 unsigned char reserve1; //预留 unsigned int action_id; //动作id unsigned char param_size; //内容长度 unsigned char reserve2[3]; //预留 unsigned char *pContent; //参数内容,长度由param_size确定 }ST_IMMEDIATE_ACTION; //---------------------------------------------------IMMEDIATE_ACTION_COMMAND END---------------------------------------------// //---------------------------------------------------(0x02) 读多变量值指令 BEGIN-------------------------------// typedef struct READ_VALUE_MEMBER { unsigned short offset; unsigned short length; }ST_READ_VALUE_MEMBER; typedef struct READ_STR_VALUE { unsigned char name[16]; unsigned int count; READ_VALUE_MEMBER *pReadValueMember; //个数由count确定 }ST_READ_STR_VALUE; //读多变量值请求 typedef struct READ_MULTIVARIABLE_REQ { unsigned char variable_count; //变量数量 unsigned char reserve1[3]; //预留 unsigned int value_id; //变量序列号 ST_READ_STR_VALUE *pReadStrValue; //长度由variable_count确定 }ST_READ_MULTIVARIABLE_REQ; //读多变量值应答 typedef struct READ_MULTIVARIABLE_RESP { unsigned int value_id; //变量序列号 unsigned short length; //应答数据总长度 unsigned char reserve1[2]; //预留 unsigned char *pRespData; //按照请求变量 4 字节对齐紧凑排列应答 }ST_READ_MULTIVARIABLE_RESP; //---------------------------------------------------读多变量值指令 END---------------------------------------------// //---------------------------------------------------(0x03) 写多变量值指令 BEGIN-------------------------------// typedef struct WRITE_VALUE_MEMBER { unsigned short offset; unsigned short length; unsigned int value; }ST_WRITE_VALUE_MEMBER; typedef struct WRITE_STR_VALUE { unsigned char name[16]; unsigned int count; WRITE_VALUE_MEMBER *pWriteValueMember; //个数由count确定 }ST_WRITE_STR_VALUE; //写多变量值请求 typedef struct WRITE_MULTIVARIABLE_REQ { unsigned char variable_count; //变量数量 unsigned char reserve1[3]; //预留 ST_WRITE_STR_VALUE *pWriteStrValue; //长度由variable_count确定 }ST_WRITE_MULTIVARIABLE_REQ; //---------------------------------------------------写多变量值指令 END---------------------------------------------// //---------------------------------------------------(0x14) 手动定位指令 BEGIN-------------------------------// typedef struct MANUAL_LOCATION { double x; double y; double angular; }ST_MANUAL_LOCATION; //---------------------------------------------------手动定位指令 END---------------------------------------------// //---------------------------------------------------(0x17) 查询机器人运行状态 BEGIN-------------------------------// typedef struct AGV_RUN_STATUS { double temperature; //温度 double x; //x坐标 double y; //y坐标 double angular; //角度 double power; //电池电量 unsigned char is_block; //是否被阻挡 0未阻挡,1被阻挡 unsigned char is_charge; //是否在充电 0未充电,1在充电 unsigned char mode; //运行模式 0手动,1自动 unsigned char map_statue; //地图载入状态 0载入成功,1载入失败,2未载入地图,3正在载入地图 unsigned int point_id; //当前的目标点ID double travel_speed; //前进速度 double turning_speed; //转弯速度 double voltage; //电压,充电为正,放电为负 double current; //电流,充电为正,放电为负 unsigned char task_status; //当前任务状态 (0无导航点任务,1等待,2正在前往导航点,3暂停,4完成,5失败,6退出,7等待开关门) unsigned char location_type; //当前定位方式(1二维码定位,2磁定位,3激光无反定位,4 激光有反定位,5高反码定位,6 gps定位) unsigned short map_version; //地图版本号 unsigned char reserve1[4]; //保留字段 double total_mileage; //累计行驶里程 单位m double this_runtime; //本次运行时间 double total_runtime; //累计运行时间 unsigned char location_status; //定位状态 0失败,1成功,2定位中,3定位完成 unsigned char is_traffic_control; //交通管制 0未交通管制,1交通管制 unsigned char reserve2[2]; //保留 unsigned int map_count; //地图数量 unsigned char map_name[64]; //当前地图名称 float confidence; //置信度 }ST_AGV_RUN_STATUS; //---------------------------------------------------查询机器人运行状态 END---------------------------------------------// //------------------------------------------------------(0xAE) 下发指令 BEGIN------------------------------------------// typedef struct ACTION { unsigned short action_type; //动作类型 unsigned char action_run_type; //执行动作并行方式 unsigned char reserve1; //预留 unsigned int action_id; //动作ID unsigned char param_size; //参数长度 unsigned char reserve2[3]; //预留 unsigned char *pParamContent; //参数内容 }ST_ACTION; typedef struct POINT_INFO { unsigned int point_id; //地图路径点 ID unsigned char reserve[4]; //预留 }ST_POINT_INFO; typedef struct TPOINT { float x; //x坐标 float y; //y坐标 }ST_TPOINT; typedef union DYNMIC_POINT { POINT_INFO point_info; //地图路径点信息 TPOINT tpoint; //地图坐标系下自由点坐标 }ST_DYNMIC_POINT; typedef struct GUIDE_0_POINT //导航方式为0时点结构 { unsigned int serial_number; //序列号 unsigned int point_id; //点id float angle; //指定角度时路径点的车头角度 unsigned char is_assign_angle; //是否指定路径点角度,1 指定 0 不指定 unsigned char action_size; //动作结构体数组结构体个数 unsigned char reserve[6]; //预留 ST_ACTION *pAction; //任务中点或边上动作结构体 }ST_GUIDE_0_POINT; typedef struct GUIDE_1_POINT //导航方式为1时点结构 { unsigned int serial_number; //序列号 float angle; //指定角度时路径点的车头角度 unsigned char is_assign_angle; //是否指定路径点角度,1 指定 0 不指定 unsigned char action_size; //动作结构体数组结构体个数 unsigned char dynmic_point_type; //0:地图路径点ID,1地图自由位置坐标 unsigned char reserve; //预留 ST_DYNMIC_POINT dymic_point; //动态数据结构 ST_ACTION *pAction; //任务中点或边上动作结构体 }ST_GUIDE_1_POINT; typedef union GUIDE_POINT { ST_GUIDE_0_POINT point_guide_0; //地图路径点信息 ST_GUIDE_1_POINT point_guide_1; //地图坐标系下自由点坐标 }ST_GUIDE_POINT; typedef struct PATH { unsigned int serial_number; //序列号 unsigned int segment_id; //段ID float fixed_angle; //固定角 unsigned char is_fixed_angle; //是否固定角度 unsigned char driver_pose; //行驶姿态 unsigned char action_size; //动作结构体数组结构体个数 unsigned char reserve1; //预留 float max_speed; //最大速度 float max_angular_speed; //最大角速度 unsigned char reserve2[4]; //预留 ST_ACTION *pAction; //任务中点或边上动作结构体 }ST_PATH; typedef struct PATH_JOINT { unsigned int order_id; //订单ID unsigned int task_key; //子任务ID unsigned char point_size; //点信息结构体数组中结构体个数 unsigned char path_size; //边信息结构体数组中结构体个数 unsigned char guide_type; //导航方式0:路径拼接 1:自由导航 2:目标点导航 unsigned char reserve; //预留 GUIDE_0_POINT *pstPoint; ST_PATH *pstPath; }ST_PATH_JOINT; //------------------------------------------------------(0xAE) 下发指令 END------------------------------------------// /* //------------------------------------------------------(0x02) 下发指令 BEGIN------------------------------------------// typedef struct READ_VALUE_MEMBER { uint16_t var_offset; uint16_t var_length; }ST_READ_VALUE_MEMBER; typedef struct READ_STR_VALUE { uint8_t var_name[16]; //变量名称 uint32_t var_member_number; //变量成员数量 ST_READ_VALUE_MEMBER *pReadMember; //成员变量 }ST_READ_STR_VALUE; typedef struct READ_MUTI_VARIABLE_REQ { uint8_t var_number; //变量数量 uint8_t reserve[3]; //预留 uint32_t var_servial; //变量序列号 ST_READ_STR_VALUE *pReadValue; }ST_READ_MUTI_VARIABLE_REQ; typedef struct READ_MUTI_VARIABLE_RES { uint32_t var_servial; //变量序列号 uint16_t data_length; //应答数据长度 uint32_t reserve[2]; //预留 uint8_t *pData; }ST_READ_MUTI_VARIABLE_RES; //------------------------------------------------------(0x02) 下发指令 END------------------------------------------// */