123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911 |
- //
- // Created by huli on 2020/9/25.
- //
- #ifndef NNXX_TESTS_DISPATCH_COMMUNICATION_H
- #define NNXX_TESTS_DISPATCH_COMMUNICATION_H
- #include "../tool/singleton.h"
- #include "../snap7_communication/snap7_communication_base.h"
- class Dispatch_communication:public Singleton<Dispatch_communication>, public Snap7_communication_base
- {
- public:
- //snap7的通信参数路径
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_A "snap7_communication_a.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B "snap7_communication_b.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_C "snap7_communication_c.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_A1 "snap7_communication_a1.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_A2 "snap7_communication_a2.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_A3 "snap7_communication_a3.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_A4 "snap7_communication_a4.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B1 "snap7_communication_b1.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B2 "snap7_communication_b2.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B3 "snap7_communication_b3.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B4 "snap7_communication_b4.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_B5 "snap7_communication_b5.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_C1 "snap7_communication_c1.prototxt"
- #define SNAP7_COMMUNICATION_PARAMETER_PATH_C2 "snap7_communication_c2.prototxt"
- //发送db快的标记位, 保证先发数据再发唯一码
- enum Send_database_flag
- {
- E_SEND_UNKNOW = 0,
- E_SEND_DATA_START = 1, //开始发送数据
- E_SEND_DATA_END = 2, //结束发送数据
- E_SEND_KEY_START = 3, //开始发送唯一码
- E_SEND_KEY_END = 4, //结束发送唯一码
- };
- #pragma pack(push, 1) //struct按照1个byte对齐
- //抓车模块给plc发送请求消息的DB编号
- #define CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_1 110
- #define CATCHER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_2 120
- //抓车模块给plc发送请求消息的指令结构体
- struct Catcher_request_from_dispatch_to_plc_for_data
- {
- //指令信息
- unsigned char m_reserved50 = 0; //预留
- unsigned char m_reserved51_69[19] = {0}; //预留
- // 请求的目标坐标和动作
- float m_request_x = 0; //机器人坐标x轴,
- float m_request_y = 0; //机器人坐标y轴,
- float m_request_b = 0; //机器人坐标b轴, 旋转范围80~280
- float m_request_z = 0; //机器人坐标z轴,
- unsigned char m_request_clamp_motion = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_reserved87_89[3] = {0}; //预留
- float m_request_wheelbase = 0; //机器人抓车杆前后轮距.
- float m_request_d1 = 0; //机器人坐标d1轴, 机器人抓车杆纵向移动(前轮抓杆)
- float m_request_d2 = 0; //机器人坐标d2轴, 机器人抓车杆纵向移动(后轮抓杆)
- };
- //抓车模块给plc发送请求消息的指令结构体
- struct Catcher_request_from_dispatch_to_plc_for_key
- {
- //指令信息
- unsigned char m_request_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- };
- //plc给抓车模块发送答复消息的DB编号
- #define CATCHER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_1 111
- #define CATCHER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_2 121
- //plc给抓车模块发送答复消息的指令结构体
- struct Catcher_response_from_plc_to_dispatch
- {
- //指令信息
- unsigned char m_respons_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- unsigned char m_respons_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- unsigned char m_reserved51_69[19] = {0}; //预留
- //请求的目标坐标和动作
- float m_respons_x = 0; //机器人坐标x轴,
- float m_respons_y = 0; //机器人坐标y轴,
- float m_respons_b = 0; //机器人坐标b轴, 旋转范围80~280
- float m_respons_z = 0; //机器人坐标z轴,
- unsigned char m_respons_clamp_motion = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_reserved87_89[3] = {0}; //预留
- float m_respons_wheelbase = 0; //机器人抓车杆前后轮距.
- float m_respons_d1 = 0; //机器人坐标d1轴, 机器人抓车杆纵向移动(前轮抓杆)
- float m_respons_d2 = 0; //机器人坐标d2轴, 机器人抓车杆纵向移动(后轮抓杆)
- };
- //plc给抓车模块发送状态消息的DB编号
- #define CATCHER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_1 113
- #define CATCHER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_2 123
- //plc给抓车模块发送状态消息的指令结构体
- struct Catcher_status_from_plc_to_dispatch
- {
- unsigned char m_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_safe_status = 0; //设备的安全状态
- unsigned char m_work_status = 0; //机器人的硬件设备状态
- unsigned char m_actual_load_status = 0; //机器人的负载状态, 机器人上面是否有车.
- unsigned char m_reserved4_37[34] = {0}; //预留
- float m_actual_x = 0; //机器人坐标x轴,
- float m_actual_y = 0; //机器人坐标y轴,
- float m_actual_b = 0; //机器人坐标b轴, 旋转范围80~280
- float m_actual_z = 0; //机器人坐标z轴,
- float m_actual_d1 = 0; //机器人坐标d1轴, 机器人抓车杆纵向移动(前轮抓杆)
- float m_actual_d2 = 0; //机器人坐标d2轴, 机器人抓车杆纵向移动(后轮抓杆)
- unsigned char m_actual_clamp_motion1 = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_actual_clamp_motion2 = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_actual_clamp_motion3 = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_actual_clamp_motion4 = 0; //机器人夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_reserved66_99[34] = {0}; //预留
- //故障信息
- unsigned char m_actual_error_code[50] = {0}; //搬运器错误码
- unsigned char m_actual_warning_code[50] = {0}; //升降机错误码
- unsigned char m_actual_error_description[256] = {0}; //升降机错误描述
- };
- //搬运器给plc发送请求消息的DB编号
- #define CARRIER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_1 200
- #define CARRIER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_2 270
- #define CARRIER_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_3 230
- //搬运器给plc发送请求消息的指令结构体
- struct Carrier_request_from_dispatch_to_plc_for_data
- {
- //指令信息
- unsigned char m_reserved50 = 0; //预留
- unsigned char m_reserved51_71[21] = {0}; //预留
- //请求的目标坐标和动作
- float m_request_x; //搬运器坐标x轴, 中跑车控制横向移动
- float m_request_y; //搬运器坐标y轴, 小跑车控制纵向移动
- float m_request_z; //搬运器坐标z轴, 电梯控制上下移动
- float m_request_y1; //搬运器坐标y1轴, 小跑车控制纵向移动(前轮抓杆)
- float m_request_y2; //搬运器坐标y2轴, 小跑车控制纵向移动(后轮抓杆)
- unsigned char m_request_clamp_motion; //小跑车夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_request_joint_motion_x; //电梯与X轴的横向轨道对接,0=无动作,1=进行对接, 2=松开对接
- unsigned char m_request_joint_motion_y; //小跑车与Y轴的横向轨道对接,0=无动作,1=进行对接, 2=松开对接
- unsigned char m_reserved95 = 0; //预留
- int m_request_space_id; //搬运器空间位置的id.
- int m_request_floor_id; //搬运器楼层位置的id.
- float m_request_wheelbase; //搬运器小跑车的抓车杆前后轮距.
- };
- //搬运器给plc发送请求消息的指令结构体
- struct Carrier_request_from_dispatch_to_plc_for_key
- {
- //指令信息
- unsigned char m_request_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- };
- //plc给搬运器发送答复消息的DB编号
- #define CARRIER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_1 201
- #define CARRIER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_2 271
- #define CARRIER_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_3 231
- //plc给搬运器发送答复消息的指令结构体
- struct Carrier_response_from_plc_to_dispatch
- {
- //指令信息
- unsigned char m_respons_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- unsigned char m_respons_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- unsigned char m_reserved51_71[21] = {0}; //预留
- //请求的目标坐标和动作
- float m_respons_x; //搬运器坐标x轴, 中跑车控制横向移动
- float m_respons_y; //搬运器坐标y轴, 小跑车控制纵向移动
- float m_respons_z; //搬运器坐标z轴, 电梯控制上下移动
- float m_respons_y1; //搬运器坐标y1轴, 小跑车控制纵向移动(前轮抓杆)
- float m_respons_y2; //搬运器坐标y2轴, 小跑车控制纵向移动(后轮抓杆)
- unsigned char m_respons_clamp_motion; //小跑车夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_respons_joint_motion_x; //电梯与X轴的横向轨道对接,0=无动作,1=进行对接, 2=松开对接
- unsigned char m_respons_joint_motion_y; //小跑车与Y轴的横向轨道对接,0=无动作,1=进行对接, 2=松开对接
- unsigned char m_reserved95 = 0; //预留
- int m_respons_space_id; //搬运器空间位置的id.
- int m_respons_floor_id; //搬运器楼层位置的id.
- float m_respons_wheelbase; //搬运器小跑车的抓车杆前后轮距.
- };
- //plc给搬运器发送状态消息的DB编号
- #define CARRIER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_1 203
- #define CARRIER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_2 273
- #define CARRIER_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_3 233
- //plc给搬运器发送状态消息的指令结构体
- struct Carrier_status_from_plc_to_dispatch
- {
- unsigned char m_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_safe_status = 0; //设备的安全状态
- unsigned char m_work_status = 0; //搬运器的硬件设备状态
- unsigned char m_actual_load_status = 0; //搬运器的负载状态, 小跑车上面是否有车.
- unsigned char m_reserved4_37[34] = {0}; //预留
- float m_actual_x = 0; //搬运器坐标x轴,
- float m_actual_y = 0; //搬运器坐标y轴,
- float m_actual_z = 0; //搬运器坐标z轴,
- float m_actual_y1 = 0; //搬运器坐标y1轴, 小跑车控制纵向移动(前轮抓杆)
- float m_actual_y2 = 0; //搬运器坐标y2轴, 小跑车控制纵向移动(前轮抓杆)
- unsigned char m_actual_clamp_motion1 = 0; //小跑车夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_actual_clamp_motion2 = 0; //小跑车夹车杆. 0=无动作,1=夹紧,2=松开
- unsigned char m_actual_small_sports_car_motion = 0; //小跑车的位置,是否在中跑车上面, 0=无动作,1=出发到位,2=返回到位
- unsigned char m_actual_joint_motion_x1 = 0; //电梯与X轴的横向轨道对接,0=无动作,1=伸出到位,2=收回到位
- unsigned char m_actual_joint_motion_x2 = 0; //电梯与X轴的横向轨道对接,0=无动作,1=伸出到位,2=收回到位
- unsigned char m_reserved63_101[39] = {0}; //预留
- //故障信息
- unsigned char m_actual_error_code[50] = {0}; //搬运器错误码
- unsigned char m_actual_warning_code[50] = {0}; //升降机错误码
- unsigned char m_actual_error_description[256] = {0}; //升降机错误描述
- };
- //通道口给plc发送请求消息的DB编号
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_0 300
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_1 310
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_2 320
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_3 330
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_4 340
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_5 350
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_6 360
- #define PASSAGEWAY_REQUEST_FROM_DISPATCH_TO_PLC_DBNUMBER_7 370
- //通道口给plc发送请求消息的指令结构体
- struct Passageway_request_from_dispatch_to_plc_for_data
- {
- //指令信息
- unsigned char m_reserved50 = 0; //预留
- unsigned char m_reserved51_69[19] = {0}; //预留
- // 请求的目标坐标和动作
- unsigned char m_request_inside_door_motion = 0; //通道口 内门动作
- unsigned char m_request_outside_door_motion = 0; //通道口 外门动作
- unsigned char m_request_turntable_direction = 0; //通道口 转台方向
- };
- //通道口给plc发送请求消息的指令结构体
- struct Passageway_request_from_dispatch_to_plc_for_key
- {
- //指令信息
- unsigned char m_request_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- };
- //plc给通道口发送答复消息的DB编号
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_0 301
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_1 311
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_2 321
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_3 331
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_4 341
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_5 351
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_6 361
- #define PASSAGEWAY_RESPONSE_FROM_PLC_TO_DISPATCH_DBNUMBER_7 371
- //plc给通道口发送答复消息的指令结构体
- struct Passageway_response_from_plc_to_dispatch
- {
- //指令信息
- unsigned char m_respons_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- unsigned char m_respons_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- unsigned char m_reserved51_69[19] = {0}; //预留
- unsigned char m_respons_inside_door_motion = 0; //通道口 内门动作
- unsigned char m_respons_outside_door_motion = 0; //通道口 外门动作
- unsigned char m_respons_turntable_direction = 0; //通道口 转台方向
- };
- //plc给通道口发送状态消息的DB编号
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_0 303
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_1 313
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_2 323
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_3 333
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_4 343
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_5 353
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_6 363
- #define PASSAGEWAY_STATUS_FROM_PLC_TO_DISPATCH_DBNUMBER_7 373
- //plc给通道口发送状态消息的指令结构体
- struct Passageway_status_from_plc_to_dispatch
- {
- unsigned char m_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_safe_status = 0; //设备的安全状态
- unsigned char m_sensor_status1 = 0; //设备的传感器状态1
- unsigned char m_sensor_status2 = 0; //设备的传感器状态2
- unsigned char m_reserved4_35[32] = {0}; //预留
- unsigned char m_actual_turntable_direction; //通道口 转台方向
- unsigned char m_reserved37 = 0; //预留
- //故障信息
- unsigned char m_actual_error_code[50] = {0}; //通道口错误码
- unsigned char m_actual_warning_code[50] = {0}; //升降机错误码
- unsigned char m_actual_error_description[256] = {0}; //升降机错误描述
- };
- //调度管理给plc发送调度指令 的DB编号
- #define DISPATCH_REQUEST_FROM_MANAGER_TO_PLC_DBNUMBER_0 9000
- //调度管理给plc发送调度指令 的结构体
- struct Dispatch_request_from_manager_to_plc_for_data_ab
- {
- //指令信息
- unsigned short m_request_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- float m_request_working_total_time; //搬运总时间(秒)
- float m_request_working_remaining_time; //剩余时间(秒)
- unsigned char m_reserved60_73[14] = {0}; //预留
- // 调度指令的起点,终点,方向
- unsigned short m_request_dispatch_motion_direction = 0; //调度方向 0=未知,1=存车,2=取车
- unsigned char m_reserved75_79[4] = {0}; //预留
- unsigned int m_request_passageway_id = 0; //出入口id 6个入口和6个出口
- unsigned char m_request_passageway_direction = 0; //出入口方向 0=未知,1=入口,2=出口
- unsigned char m_reserved85 = 0; //预留
- unsigned short m_request_car_height_level = 0; //车高 0=无车 1=1480 2=1500 3=2050 4=超高车
- unsigned char m_reserved88_89[2] = {0}; //预留
- unsigned int m_request_parkingspace_index_id = 0; //楼上车位索引id 1~180(3*6*13)
- unsigned int m_request_parkingspace_unit_id = 0; //楼上车位单元号 1~3
- unsigned int m_request_parkingspace_label_id = 0; //楼上车位标签号 1~78
- unsigned int m_request_parkingspace_floor_id = 0; //楼上车位楼层号 2~11
- unsigned int m_request_parkingspace_room_id = 0; //楼上车位房间号 1~6
- unsigned char m_request_parkingspace_direction = 0; //楼上车位方向 0=未知,1=朝南,2=朝北
- unsigned char m_reserved111 = 0; //预留
- //汽车的定位信息(地面雷达)
- float m_request_car_center_x = 0; //整车的中心点x值, 四轮的中心, 单位:米 m
- float m_request_car_center_y = 0; //整车的中心点y值, 四轮的中心, 单位:米 m
- float m_request_car_angle = 0; //整车的车身旋转角, 单位:度 (-90~90)
- float m_request_car_front_theta = 0; //整车的前轮的旋转角, 单位:度 (-90~90)
- float m_request_car_length = 0; //整车的长度, 用于规避碰撞, 单位:米 m
- float m_request_car_width = 0; //整车的宽度, 用于规避碰撞, 单位:米 m
- float m_request_car_height = 0; //整车的高度, 用于规避碰撞, 单位:米 m
- float m_request_car_wheel_base = 0; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_request_car_wheel_width = 0; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车, 单位:米 m
- unsigned char m_request_car_license[20] = {0}; //车牌号(汽车唯一标示) 例如: 鄂A12345
- //168字节后面的,AB单元删除了,C单元特有的雷达数据
- /* unsigned char m_reserved168_187[20] = {0}; //预留
- unsigned char m_request_car_type = 0; //0=未知,1=小车,2=中车,3=大车 ..188
- unsigned char m_reserved189_191[3] = {0}; //预留
- float m_request_uniformed_car_x = 0; //转角复位后,车辆中心点x
- float m_request_uniformed_car_y = 0; //转角复位后,车辆中心点y
- unsigned char m_reserved200_209[10] = {0}; //预留
- //防撞雷达 ..210
- unsigned char m_request_anticollision_lidar_flag = 0; //汽车是否停到正确的位置, 防撞雷达 预留, 楚天暂时不用,0=未知,1=位置正常,2=位置异常
- unsigned char m_reserved211_215[5] = {0}; //预留
- //轮距雷达 ..216
- float m_request_car_wheel_base_exact_value = 0; //汽车前后轮距,轮距雷达的精确值 预留, 楚天暂时不用,单位:米 m
- unsigned char m_reserved220_231[12] = {0}; //预留
- */
- };
- //调度管理给plc发送调度指令 的结构体, C单元完整版
- struct Dispatch_request_from_manager_to_plc_for_data
- {
- //指令信息
- unsigned short m_request_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- float m_request_working_total_time; //搬运总时间(秒)
- float m_request_working_remaining_time; //剩余时间(秒)
- unsigned char m_reserved60_73[14] = {0}; //预留
- // 调度指令的起点,终点,方向
- unsigned char m_request_dispatch_motion_direction = 0; //调度方向 0=未知,1=存车,2=取车
- unsigned char m_reserved75_79[5] = {0}; //预留
- unsigned int m_request_passageway_id = 0; //出入口id 6个入口和6个出口
- unsigned char m_request_passageway_direction = 0; //出入口方向 0=未知,1=入口,2=出口
- unsigned char m_reserved85 = 0; //预留
- unsigned short m_request_car_height_level = 0; //车高 0=无车 1=1480 2=1500 3=2050 4=超高车
- unsigned char m_reserved88_89[2] = {0}; //预留
- unsigned int m_request_parkingspace_index_id = 0; //楼上车位索引id 1~180(3*6*13)
- unsigned int m_request_parkingspace_unit_id = 0; //楼上车位单元号 1~3
- unsigned int m_request_parkingspace_label_id = 0; //楼上车位标签号 1~78
- unsigned int m_request_parkingspace_floor_id = 0; //楼上车位楼层号 2~11
- unsigned int m_request_parkingspace_room_id = 0; //楼上车位房间号 1~6
- unsigned char m_request_parkingspace_direction = 0; //楼上车位方向 0=未知,1=朝南,2=朝北
- unsigned char m_reserved111 = 0; //预留
- //汽车的定位信息(地面雷达)
- float m_request_car_center_x = 0; //整车的中心点x值, 四轮的中心, 单位:米 m
- float m_request_car_center_y = 0; //整车的中心点y值, 四轮的中心, 单位:米 m
- float m_request_car_angle = 0; //整车的车身旋转角, 单位:度 (-90~90)
- float m_request_car_front_theta = 0; //整车的前轮的旋转角, 单位:度 (-90~90)
- float m_request_car_length = 0; //整车的长度, 用于规避碰撞, 单位:米 m
- float m_request_car_width = 0; //整车的宽度, 用于规避碰撞, 单位:米 m
- float m_request_car_height = 0; //整车的高度, 用于规避碰撞, 单位:米 m
- float m_request_car_wheel_base = 0; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_request_car_wheel_width = 0; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车, 单位:米 m
- unsigned char m_request_car_license[20] = {0}; //车牌号(汽车唯一标示) 例如: 鄂A12345
- //168字节后面的,AB单元删除了,C单元特有的雷达数据
- unsigned char m_reserved168_187[20] = {0}; //预留
- unsigned char m_request_car_type = 0; //0=未知,1=小车,2=中车,3=大车 ..188
- unsigned char m_reserved189_191[3] = {0}; //预留
- float m_request_uniformed_car_x = 0; //转角复位后,车辆中心点x
- float m_request_uniformed_car_y = 0; //转角复位后,车辆中心点y
- unsigned char m_reserved200_209[10] = {0}; //预留
- //防撞雷达 ..210
- unsigned char m_request_anticollision_lidar_flag = 0; //汽车是否停到正确的位置, 防撞雷达 预留, 楚天暂时不用,0=未知,1=位置正常,2=位置异常
- unsigned char m_reserved211_215[5] = {0}; //预留
- //轮距雷达 ..216
- float m_request_car_wheel_base_exact_value = 0; //汽车前后轮距,轮距雷达的精确值 预留, 楚天暂时不用,单位:米 m
- unsigned char m_reserved220_231[12] = {0}; //预留
- };
- //调度管理给plc发送调度指令 的结构体
- struct Dispatch_request_from_manager_to_plc_for_key
- {
- //指令信息
- unsigned char m_request_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- };
- //plc给调度管理发送调度答复 的DB编号
- #define DISPATCH_RESPONSE_FROM_PLC_TO_MANAGER_DBNUMBER_0 9001
- //plc给调度管理发送调度答复 的结构体, AB单元的阉割版
- struct Dispatch_response_from_plc_to_manager_ab
- {
- unsigned char m_response_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- //指令信息
- unsigned short m_response_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- float m_response_working_total_time; //搬运总时间(秒)
- float m_response_working_remaining_time; //剩余时间(秒)
- unsigned char m_reserved60_73[14] = {0}; //预留
- // 调度指令的起点,终点,方向
- unsigned short m_response_dispatch_motion_direction = 0; //调度方向 0=未知,1=存车,2=取车
- unsigned char m_reserved75_79[4] = {0}; //预留
- unsigned int m_response_passageway_id = 0; //出入口id 6个入口和6个出口
- unsigned char m_response_passageway_direction = 0; //出入口方向 0=未知,1=入口,2=出口
- unsigned char m_reserved85 = 0; //预留
- unsigned short m_response_car_height_level = 0; //车高 0=无车 1=1480 2=1500 3=2050 4=超高车
- unsigned char m_reserved88_89[2] = {0}; //预留
- unsigned int m_response_parkingspace_index_id = 0; //楼上车位索引id 1~180(3*6*13)
- unsigned int m_response_parkingspace_unit_id = 0; //楼上车位单元号 1~3
- unsigned int m_response_parkingspace_label_id = 0; //楼上车位标签号 1~78
- unsigned int m_response_parkingspace_floor_id = 0; //楼上车位楼层号 2~11
- unsigned int m_response_parkingspace_room_id = 0; //楼上车位房间号 1~6
- unsigned char m_response_parkingspace_direction = 0; //楼上车位方向 0=未知,1=朝南,2=朝北
- unsigned char m_reserved111 = 0; //预留
- //汽车的定位信息(地面雷达)
- float m_response_car_center_x = 0; //整车的中心点x值, 四轮的中心, 单位:米 m
- float m_response_car_center_y = 0; //整车的中心点y值, 四轮的中心, 单位:米 m
- float m_response_car_angle = 0; //整车的车身旋转角, 单位:度 (-90~90)
- float m_response_car_front_theta = 0; //整车的前轮的旋转角, 单位:度 (-90~90)
- float m_response_car_length = 0; //整车的长度, 用于规避碰撞, 单位:米 m
- float m_response_car_width = 0; //整车的宽度, 用于规避碰撞, 单位:米 m
- float m_response_car_height = 0; //整车的高度, 用于规避碰撞, 单位:米 m
- float m_response_car_wheel_base = 0; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_response_car_wheel_width = 0; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车, 单位:米 m
- unsigned char m_response_car_license[20] = {0}; //车牌号(汽车唯一标示) 例如: 鄂A12345
- //168字节后面的,AB单元删除了,C单元特有的雷达数据
- /* unsigned char m_reserved168_187[20] = {0}; //预留
- unsigned char m_response_car_type = 0; //0=未知,1=小车,2=中车,3=大车 ..188
- unsigned char m_reserved189_191[3] = {0}; //预留
- float m_response_uniformed_car_x = 0; //转角复位后,车辆中心点x
- float m_response_uniformed_car_y = 0; //转角复位后,车辆中心点y
- unsigned char m_reserved200_209[10] = {0}; //预留
- //防撞雷达 ..210
- unsigned char m_response_anticollision_lidar_flag = 0; //汽车是否停到正确的位置, 防撞雷达 预留, 楚天暂时不用,0=未知,1=位置正常,2=位置异常
- unsigned char m_reserved211_215[5] = {0}; //预留
- //轮距雷达 ..216
- float m_response_car_wheel_base_exact_value = 0; //汽车前后轮距,轮距雷达的精确值 预留, 楚天暂时不用,单位:米 m
- unsigned char m_reserved220_231[12] = {0}; //预留
- */
- };
- //plc给调度管理发送调度答复 的结构体, C单元的完整版
- struct Dispatch_response_from_plc_to_manager
- {
- unsigned char m_response_key[50] = {0}; //指令key(任务唯一码), 作为通信标志位
- //指令信息
- unsigned short m_response_status = 0; //指令完成状态, 机器人答复指令, 返回任务完成的情况
- float m_response_working_total_time; //搬运总时间(秒)
- float m_response_working_remaining_time; //剩余时间(秒)
- unsigned char m_reserved60_73[14] = {0}; //预留
- // 调度指令的起点,终点,方向
- unsigned short m_response_dispatch_motion_direction = 0; //调度方向 0=未知,1=存车,2=取车
- unsigned char m_reserved75_79[4] = {0}; //预留
- unsigned int m_response_passageway_id = 0; //出入口id 6个入口和6个出口
- unsigned char m_response_passageway_direction = 0; //出入口方向 0=未知,1=入口,2=出口
- unsigned char m_reserved85 = 0; //预留
- unsigned short m_response_car_height_level = 0; //车高 0=无车 1=1480 2=1500 3=2050 4=超高车
- unsigned char m_reserved88_89[2] = {0}; //预留
- unsigned int m_response_parkingspace_index_id = 0; //楼上车位索引id 1~180(3*6*13)
- unsigned int m_response_parkingspace_unit_id = 0; //楼上车位单元号 1~3
- unsigned int m_response_parkingspace_label_id = 0; //楼上车位标签号 1~78
- unsigned int m_response_parkingspace_floor_id = 0; //楼上车位楼层号 2~11
- unsigned int m_response_parkingspace_room_id = 0; //楼上车位房间号 1~6
- unsigned char m_response_parkingspace_direction = 0; //楼上车位方向 0=未知,1=朝南,2=朝北
- unsigned char m_reserved111 = 0; //预留
- //汽车的定位信息(地面雷达)
- float m_response_car_center_x = 0; //整车的中心点x值, 四轮的中心, 单位:米 m
- float m_response_car_center_y = 0; //整车的中心点y值, 四轮的中心, 单位:米 m
- float m_response_car_angle = 0; //整车的车身旋转角, 单位:度 (-90~90)
- float m_response_car_front_theta = 0; //整车的前轮的旋转角, 单位:度 (-90~90)
- float m_response_car_length = 0; //整车的长度, 用于规避碰撞, 单位:米 m
- float m_response_car_width = 0; //整车的宽度, 用于规避碰撞, 单位:米 m
- float m_response_car_height = 0; //整车的高度, 用于规避碰撞, 单位:米 m
- float m_response_car_wheel_base = 0; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_response_car_wheel_width = 0; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车, 单位:米 m
- unsigned char m_response_car_license[20] = {0}; //车牌号(汽车唯一标示) 例如: 鄂A12345
- //168字节后面的,AB单元删除了,C单元特有的雷达数据
- unsigned char m_reserved168_187[20] = {0}; //预留
- unsigned char m_response_car_type = 0; //0=未知,1=小车,2=中车,3=大车 ..188
- unsigned char m_reserved189_191[3] = {0}; //预留
- float m_response_uniformed_car_x = 0; //转角复位后,车辆中心点x
- float m_response_uniformed_car_y = 0; //转角复位后,车辆中心点y
- unsigned char m_reserved200_209[10] = {0}; //预留
- //防撞雷达 ..210
- unsigned char m_response_anticollision_lidar_flag = 0; //汽车是否停到正确的位置, 防撞雷达 预留, 楚天暂时不用,0=未知,1=位置正常,2=位置异常
- unsigned char m_reserved211_215[5] = {0}; //预留
- //轮距雷达 ..216
- float m_response_car_wheel_base_exact_value = 0; //汽车前后轮距,轮距雷达的精确值 预留, 楚天暂时不用,单位:米 m
- unsigned char m_reserved220_231[12] = {0}; //预留
- };
- #ifdef CHUTIAN_PROJECT_PROJECT
- //调度管理的的状态信息 的DB编号
- #define DISPATCH_PLC_STATUS_FROM_MANAGER_TO_PLC_DBNUMBER_0 9002
- //调度管理给plc发送状态消息的指令结构体
- struct Dispatch_plc_status_from_manager_to_plc
- {
- unsigned char m_dispatch_heartbeat = 0; //心跳位, 0-255循环
- };
- //plc的状态信息 的DB编号
- #define DISPATCH_PLC_STATUS_FROM_PLC_TO_MANAGER_DBNUMBER_0 9003
- //plc给通道口发送状态消息的指令结构体
- struct Dispatch_plc_status_from_plc_to_manager
- {
- unsigned char m_plc_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_plc_status_info = 0; //plc状态的集合
- //0 bit, 手动模式
- //1 bit, 自动模式
- //2 bit, 自动运行中
- //3 bit, 复位
- //4 bit, 1号口可以进车
- //5 bit, 2号口可以进车
- //6 bit, 预留
- //7 bit, 预留
- unsigned char m_reserved2_37[36] = {0}; //预留 36个
- float m_turnplate_angle_min1 = 0; //1号口转盘最小值
- float m_turnplate_angle_max1 = 0; //1号口转盘最大值
- float m_turnplate_angle_min2 = 0; //2号口转盘最小值
- float m_turnplate_angle_max2 = 0; //2号口转盘最大值
- };
- #endif // CHUTIAN_PROJECT_PROJECT
- #ifdef SHANGGUJIE_PROJECT_PROJECT
- //调度管理的的状态信息 的DB编号
- #define DISPATCH_PLC_STATUS_FROM_MANAGER_TO_PLC_DBNUMBER_0 9002
- //调度管理给plc发送状态消息 的结构体
- struct Dispatch_plc_status_from_manager_to_plc
- {
- unsigned short m_dispatch_heartbeat = 0; //心跳位, 0-255循环
- unsigned short m_inlet_door_control_1 = 0; //1#入口外门控制, 0:无效, 1:开门, 2:关门
- unsigned short m_inlet_door_control_2 = 0; //2#入口外门控制, 0:无效, 1:开门, 2:关门
- unsigned short m_outlet_door_control_3 = 0; //3#出口外门控制, 0:无效, 1:开门, 2:关门
- unsigned short m_outlet_door_control_4 = 0; //4#出口外门控制, 0:无效, 1:开门, 2:关门
- unsigned short m_ready_small_space_count = 0; //空闲小车位数量, 减去存车排队
- unsigned short m_ready_middle_space_count = 0; //空闲中车位数量, 减去存车排队
- unsigned short m_ready_big_space_count = 0; //空闲大车位数量, 减去存车排队
- unsigned short m_ready_total_space_count = 0; //空闲总车位数量, 减去存车排队
- unsigned short m_wait_small_park_count = 0; //排队小车存车的数量
- unsigned short m_wait_middle_park_count = 0; //排队中车存车的数量
- unsigned short m_wait_big_park_count = 0; //排队大车存车的数量
- unsigned short m_wait_total_park_count = 0; //排队总车存车的数量
- unsigned short m_wait_small_pick_count = 0; //排队小车取车的数量
- unsigned short m_wait_middle_pick_count = 0; //排队中车取车的数量
- unsigned short m_wait_big_pick_count = 0; //排队大车取车的数量
- unsigned short m_wait_total_pick_count = 0; //排队总车取车的数量
- };
- //plc的状态信息 的DB编号
- #define DISPATCH_PLC_STATUS_FROM_PLC_TO_MANAGER_DBNUMBER_0 9003
- //plc出入口状态结构体
- struct Dispatch_plc_passway_status
- {
- unsigned short m_car_height = 0; //车高 0=无车 1=1480 2=1500 3=2050 4=超高车
- unsigned short m_outside_door_status = 0; //外门状态 0=无状态 1=开到位 2=关到位
- unsigned short m_inside_door_status = 0; //内门状态 0=无状态 1=开到位 2=关到位
- unsigned short m_comb_body_status = 0; //梳体状态 0=无状态 1=上到位 2=下到位, AB特有
- float m_turnplate_angle_min = 0; //转盘角度最小值, C特有, 负值, 例如 -5度
- float m_turnplate_angle_max = 0; //转盘角度最大值, C特有, 正值, 例如 +5度
- unsigned char m_sensor_1 = 0; //传感器状态的集合1
- //0 bit, 地感 0=无车 1=有车
- //1 bit, 移动检测 0=运动 1=静止
- //2 bit, 动态超限 0=遮挡 1=正常
- //3 bit, 后超界 0=遮挡 1=正常
- //4 bit, 前超界 0=遮挡 1=正常
- //5 bit, 左超界 0=遮挡 1=正常
- //6 bit, 右超界 0=遮挡 1=正常
- //7 bit, 车高小车, 0=遮挡 1=正常,AB单元为1480, C单元为1780,
- unsigned char m_sensor_2 = 0; //传感器状态的集合2
- //0 bit, 车高小车, 0=遮挡 1=正常,AB单元为1500, C单元为1800,
- //1 bit, 车高小车, 0=遮挡 1=正常,AB单元为2050, C单元为2050,
- //2 bit, 有车检测 0=无车 1=有车
- //3 bit, 车轮1检测 0=无车 1=有车, AB特有
- //4 bit, 车轮2检测 0=无车 1=有车, AB特有
- //5 bit, 预留
- //6 bit, 预留
- //7 bit, 预留
- unsigned char m_reserved28_29[2] = {0}; //预留 2个
- };
- //plc给调度管理发送状态消息 的结构体
- struct Dispatch_plc_status_from_plc_to_manager
- {
- unsigned short m_plc_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_plc_mode_status = 0; //plc状态的集合
- //0 bit, 手动模式, 维修模式
- //1 bit, 自动模式
- //2 bit, 自动运行中
- //3 bit, 复位
- //4 bit, 预留
- //5 bit, 预留
- //6 bit, 预留
- //7 bit, 预留
- unsigned char m_plc_passway_status = 0; //plc 出入口状态
- //0 bit, 入口1 可进车
- //1 bit, 入口1 维护
- //2 bit, 入口2 可进车
- //3 bit, 入口2 维护
- //4 bit, 出口1 可出车
- //5 bit, 出口1 维护
- //6 bit, 出口2 可出车
- //7 bit, 出口2 维护
- unsigned short m_plc_carrier_status; //搬运器状态 0=故障 1=存车 2=取车 3=空闲 4=维护
- unsigned char m_reserved6_9[4] = {0}; //预留 4个
- //plc出入口状态结构体 数组下标0~1是入口, 数组下标2~3是出口
- Dispatch_plc_passway_status m_passway_vector[4]; //plc出入口状态结构体
- };
- #endif // SHANGGUJIE_PROJECT_PROJECT
- //地面雷达给plc
- #define GROUND_LIDAR_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_0 9004
- #define GROUND_LIDAR_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_1 9014
- struct Ground_lidar_response_from_manager_to_plc_for_key
- {
- unsigned char m_response_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_response_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_response_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_response_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- };
- struct Ground_lidar_response_from_manager_to_plc_for_data
- {
- //汽车的定位信息(地面雷达)
- float m_response_car_center_x = 0; //整车的中心点x值, 四轮的中心, 单位:米 m
- float m_response_car_center_y = 0; //整车的中心点y值, 四轮的中心, 单位:米 m
- float m_response_car_angle = 0; //整车的车身旋转角, 单位:度 (-90~90)
- float m_response_car_front_theta = 0; //整车的前轮的旋转角, 单位:度 (-90~90)
- float m_response_car_length = 0; //整车的长度, 用于规避碰撞, 单位:米 m
- float m_response_car_width = 0; //整车的宽度, 用于规避碰撞, 单位:米 m
- float m_response_car_height = 0; //整车的高度, 用于规避碰撞, 单位:米 m
- float m_response_car_wheel_base = 0; //整车的轮距, 前后轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_response_car_wheel_width = 0; //整车的轮距, 左右轮的距离, 用于机器人或agv的抓车, 单位:米 m
- float m_response_uniformed_car_x = 0; //转角复位后,车辆中心点x
- float m_response_uniformed_car_y = 0; //转角复位后,车辆中心点y
- unsigned char m_response_locate_correct = 0; //数据是否有效, 0=无效, 1=有效
- unsigned char m_response_ground_status = 0; ////0 ok 1,nothing 2,noise 3,border
- unsigned char m_response_motion_status = 0; //运动状态,0=运动, 1=静止(只有三秒内都是静止才会写1,只要瞬间触发运动就会写0)
- unsigned char m_reserved47 = 0; //预留
- unsigned char m_response_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_response_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_response_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_response_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- int m_response_border_status = 0; //超界状态描述, 按位运算
- };
- //plc给地面雷达
- #define GROUND_LIDAR_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0 9005
- #define GROUND_LIDAR_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_1 9015
- struct Ground_lidar_request_from_plc_to_manager
- {
- unsigned char m_request_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_request_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_request_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_request_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- };
- //防撞雷达给plc
- #define ANTICOLLISION_LIDAR_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_0 9006
- struct Anticollision_lidar_response_from_manager_to_plc_for_key
- {
- unsigned char m_response_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_response_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_response_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_response_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- };
- struct Anticollision_lidar_response_from_manager_to_plc_for_data
- {
- unsigned char m_response_anticollision_lidar_flag = 0; //汽车是否停到正确的位置, 防撞雷达 预留, 楚天暂时不用,0=未知,1=位置正常,2=位置异常
- unsigned char m_reserved5_7[3] = {0}; //预留
- float m_response_offset_x = 0; //汽车x轴的偏移量, -1.0~+1.0, 单位米
- float m_response_offset_angle = 0; //汽车角度的偏移量, -7~+7, 单位度
- };
- //plc给防撞雷达
- #define ANTICOLLISION_LIDAR_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0 9007
- struct Anticollision_lidar_request_from_plc_to_manager
- {
- unsigned char m_request_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_request_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_request_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_request_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- };
- //单片机给plc
- #define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_0 9008
- #define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_1 9018
- #define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_2 9028
- #define SINGLECHIP_RESPONSE_FROM_MANAGER_TO_PLC_DBNUMBER_3 9038
- struct Singlechip_response_from_manager_to_plc
- {
- unsigned char m_process_status; //流程状态
- unsigned char m_process_control; //流程控制
- unsigned char m_over_border_status; //超界状态, 0:未知, 1:正常, 2:前超界, 3:后超界, 4:左超界, 5:右超界
- unsigned char m_car_height_status_current; //车高状态,当前持续的状态, 0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车
- unsigned char m_car_height_status_passing; //车高状态,经过外门口的状态, 0:未知, 1:小车, 2:中车, 3:大车, 4:巨大车, 5:故障车
- unsigned char m_outside_door_status; //外门的状态, 0:未知, 1:外门开到位, 2:外门关到位, 3:外门运行中, 4:外门故障
- unsigned char m_outside_door_control; //外门的控制, 0:未知, 1:外门开, 2:外门关,
- unsigned char m_dispatch_finish_flag; //调度完成标志位,true表示允许终端放下一辆车进入入口
- unsigned char m_inside_existence_flag; //门内是否存在汽车的标志位, true表示有车
- unsigned char m_outside_existence_flag; //门外是否存在汽车的标志位, 门外地感触发停车流程, true表示有车
- unsigned char m_reset_flag; //重启标志, true:控制看门狗重启
- unsigned char m_stop_flag; //急停标志,true:把控制口全部写0,并关闭流程。
- unsigned int m_error_code; //错误码
- unsigned char m_reserved16_35[20] = {0}; //预留
- unsigned char m_gpio_input[16] = {0}; //gpio输入口原始数据,
- unsigned char m_gpio_output[8] = {0}; //gpio输出口原始数据,
- unsigned char m_reserved60_79[20] = {0}; //预留
- unsigned char m_response_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_response_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_response_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_response_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- };
- //plc给单片机
- #define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_0 9009
- #define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_1 9019
- #define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_2 9029
- #define SINGLECHIP_REQUEST_FROM_PLC_TO_MANAGER_DBNUMBER_3 9039
- struct Singlechip_request_from_plc_to_manager
- {
- unsigned char m_request_heartbeat = 0; //心跳位, 0-255循环
- unsigned char m_request_communication_mode = 0; //通信模式 0 = 未知, 1=自动循环模式,2=手动刷新模式
- unsigned char m_request_refresh_command = 0; //刷新指令 0-255任意数字,与上一次不同即可
- unsigned char m_request_data_validity = 0; //数据有效性, 0 = 未知, 1 = 有效, 2 = 无效
- unsigned char m_request_insidedoor_status = 0; //内门状态, 0:未知, 1:外门开到位, 2:外门关到位,
- unsigned char m_request_outsidedoor_control = 0; //外门控制, 0:必须关门, 1:可以开门, (触发地感后可以开门)
- };
- //plc数据储存
- #define DATA_STORAGE_FROM_PLC_TO_MANAGER_DBNUMBER_0 9500
- #define DATA_STORAGE_PLC_DATA_LENGTH 60
- struct Data_storage_from_plc_to_manager
- {
- float m_plc_data[DATA_STORAGE_PLC_DATA_LENGTH];
- float m_heartbeat;
- };
- #pragma pack(pop) //取消对齐
- // 子类必须把父类设定为友元函数,这样父类才能使用子类的私有构造函数。
- friend class Singleton<Dispatch_communication>;
- private:
- // 父类的构造函数必须保护,子类的构造函数必须私有。
- Dispatch_communication();
- public:
- //必须关闭拷贝构造和赋值构造,只能通过 get_instance 函数来进行操作唯一的实例。
- Dispatch_communication(const Dispatch_communication& other) = delete;
- Dispatch_communication& operator =(const Dispatch_communication& other) = delete;
- ~Dispatch_communication();
- public://API functions
- //初始化 通信 模块。如下三选一
- virtual Error_manager communication_init(int plc_id);
- //反初始化 通信 模块。
- virtual Error_manager communication_uninit();
- public://get or set member variable
- // std::mutex * get_data_lock();
- // Request_from_dispatch_to_plc * get_request_from_dispatch_to_plc();
- // Response_from_plc_to_dispatch * get_response_from_plc_to_dispatch();
- // Status_from_dispatch_to_plc * get_status_from_dispatch_to_plc();
- // Status_from_plc_to_dispatch * get_status_from_plc_to_dispatch();
- protected://member functions
- //更新数据
- virtual Error_manager updata_receive_buf();
- virtual Error_manager updata_send_buf();
- protected://member variable
- public:
- int m_plc_id; //plc的id, 楚天车库的单元号
- std::mutex m_data_lock; //数据锁
- // Catcher_request_from_dispatch_to_plc_for_data m_catcher_request_from_dispatch_to_plc_for_data[2]; //抓车模块给plc发送请求消息的指令结构体
- // Catcher_request_from_dispatch_to_plc_for_key m_catcher_request_from_dispatch_to_plc_for_key[2]; //抓车模块给plc发送请求消息的指令结构体
- // Catcher_response_from_plc_to_dispatch m_catcher_response_from_plc_to_dispatch[2]; //plc给抓车模块发送答复消息的指令结构体
- // Catcher_status_from_plc_to_dispatch m_catcher_status_from_plc_to_dispatch[2]; //plc给抓车模块发送状态消息的指令结构体
- //
- // Carrier_request_from_dispatch_to_plc_for_data m_carrier_request_from_dispatch_to_plc_for_data[3]; //搬运器给plc发送请求消息的指令结构体
- // Carrier_request_from_dispatch_to_plc_for_key m_carrier_request_from_dispatch_to_plc_for_key[3]; //搬运器给plc发送请求消息的指令结构体
- // Carrier_response_from_plc_to_dispatch m_carrier_response_from_plc_to_dispatch[3]; //plc给搬运器发送答复消息的指令结构体
- // Carrier_status_from_plc_to_dispatch m_carrier_status_from_plc_to_dispatch[3]; //plc给搬运器发送状态消息的指令结构体
- //
- // Passageway_request_from_dispatch_to_plc_for_data m_passageway_request_from_dispatch_to_plc_for_data[8]; //通道口给plc发送请求消息的指令结构体
- // Passageway_request_from_dispatch_to_plc_for_key m_passageway_request_from_dispatch_to_plc_for_key[8]; //通道口给plc发送请求消息的指令结构体
- // Passageway_response_from_plc_to_dispatch m_passageway_response_from_plc_to_dispatch[8]; //plc给通道口发送答复消息的指令结构体
- // Passageway_status_from_plc_to_dispatch m_passageway_status_from_plc_to_dispatch[8]; //plc给通道口发送状态消息的指令结构体
- //调度指令
- Dispatch_request_from_manager_to_plc_for_data m_dispatch_request_from_manager_to_plc_for_data;
- Dispatch_request_from_manager_to_plc_for_data_ab m_dispatch_request_from_manager_to_plc_for_data_ab;
- Dispatch_request_from_manager_to_plc_for_key m_dispatch_request_from_manager_to_plc_for_key;
- Dispatch_response_from_plc_to_manager m_dispatch_response_from_plc_to_manager;
- Dispatch_response_from_plc_to_manager_ab m_dispatch_response_from_plc_to_manager_ab;
- //调度状态
- Dispatch_plc_status_from_manager_to_plc m_dispatch_plc_status_from_manager_to_plc;
- Dispatch_plc_status_from_plc_to_manager m_dispatch_plc_status_from_plc_to_manager;
- //地面雷达指令
- Ground_lidar_response_from_manager_to_plc_for_data m_ground_lidar_response_from_manager_to_plc_for_data[2];
- Ground_lidar_response_from_manager_to_plc_for_key m_ground_lidar_response_from_manager_to_plc_for_key[2];
- Ground_lidar_request_from_plc_to_manager m_ground_lidar_request_from_plc_to_manager[2];
- //防撞雷达指令
- Anticollision_lidar_response_from_manager_to_plc_for_data m_anticollision_lidar_response_from_manager_to_plc_for_data;
- Anticollision_lidar_response_from_manager_to_plc_for_key m_anticollision_lidar_response_from_manager_to_plc_for_key;
- Anticollision_lidar_request_from_plc_to_manager m_anticollision_lidar_request_from_plc_to_manager;
- //单片机
- Singlechip_response_from_manager_to_plc m_singlechip_response_from_manager_to_plc[4];
- Singlechip_request_from_plc_to_manager m_singlechip_request_from_plc_to_manager[4];
- //plc数据储存
- Data_storage_from_plc_to_manager m_data_storage_from_plc_to_manager;
- private:
- };
- #endif //NNXX_TESTS_DISPATCH_COMMUNICATION_H
|