496 lines
16 KiB
C
496 lines
16 KiB
C
#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------------------------------------------//
|
||
*/ |