agv-control/Plugin/KcCtrl/KcStruct.h
2025-06-09 09:09:25 +08:00

496 lines
16 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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:地图路径点ID1地图自由位置坐标
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------------------------------------------//
*/