#ifndef PARSE_H #define PARSE_H #include #include "QRunnable" #include "QDebug" #include "QThread" #include "QElapsedTimer" #include "QtMath" #include "QThreadPool" #include "QFile" #include "QDateTime" #include "QDataStream" class Parse : public QObject, public QRunnable { Q_OBJECT public: typedef struct { qreal roll_rate;//滚转角速度 qreal yaw_rate;//偏航角速度 qreal pitch_rate;//俯仰角速度 qreal yaw;//航向角 qreal pitch;//俯仰角 qreal roll;//滚转角 qreal ax;//机体纵向加速度 qreal ay;//机体法向加速度 qreal az;//机体侧向加速度 }_ins;//1~18 typedef struct { struct{ QString navStatus;//D7D6 导航状态 QString insStatus;//D5D4 组合状态 QString headingSrc;//D3D2 航向信号源 QString Satellite;//D1D0 卫星信号源 }state1;//工作状态字 qreal longitude;//位置经度 qreal latitude;//位置纬度 qreal altitude;//组合高度 quint16 worktime;//本状态工作时间 qreal Ve;//东向速度 qreal Vn;//北向速度 qreal Vu;//天向速度 qreal Gs;//地速 qreal heading;//航迹角 qreal Ae;//东向加速度 qreal An;//北向加速度 qreal Au;//天向加速度 qreal satellite_longitude;//卫星经度 qreal satellite_latitude;//卫星纬度 qreal satellite_altitude;//卫星高度 qreal satellite_Ve;//卫星东向速度 qreal satellite_Vn;//卫星北向速度 qreal satellite_Vu;//卫星天向速度 struct { bool ins;//惯导数据有效位 bool altitude;//组合高度有效位 bool exRTK;//外置差分数据有效位 bool exSatellite;//外置卫星数据有效位 bool RTK;//内置差分数据有效位 bool satellite;//内置卫星数据有效位 bool heading;//双天线航向有效位 bool communication;//通讯状态 }state2; struct { bool back7;// bool das;//大气数据有效位 bool install;//外部状态偏角有效位 bool back4;// QString altitudeInfo;//D3D2 高度阻尼信号 bool back1;// bool back0;// }state3; quint16 year;//UTC年 quint8 month;//UTC月 quint8 day;//UTC日 quint8 hour;//UTC时 quint8 minute;//UTC分 qint16 second;//UTC秒 }_nav;//19~73 typedef struct { bool SW[24]; quint8 DI[3]; qreal LeftWheel; qreal RightWheel; qreal rpm3; qreal rpm4; qreal fuel; qreal LeftPressure; qreal RightPressure; qreal AirPressure; quint16 cpu_load; bool DO[24]; bool cmd; quint8 status; }_gear; typedef struct { quint8 type; quint8 id; qint16 wheel; qint16 left_trans; qint16 right_trans; quint8 status; quint16 current; qint8 temp; qint8 left_brake; qint8 right_brake; }_actuator; typedef struct { quint8 type; quint8 id; qint16 left_ail; qint16 right_ail; qint16 left_rud; qint16 right_rud; quint8 status; quint16 current; qint8 temp; }_actuator1; typedef struct { quint8 type; quint8 id; qint16 left_ele; qint16 right_ele; qint16 left_brake; qint16 right_brake; quint8 status; quint16 current; qint8 temp; }_actuator2; typedef struct { quint32 time_stamp; struct { bool com_ok;//0 bool status_bit; bool accel_x_bit; bool accel_y_bit; bool accel_z_bit; bool gyro_x_bit; bool gyro_y_bit; bool gyro_z_bit; bool accel_in_range; bool gyro_in_range;//9 }status; qreal accel_x; qreal accel_y; qreal accel_z; qreal gyro_x; qreal gyro_y; qreal gyro_z; qreal temp; qreal delta_vel_x; qreal delta_vel_y; qreal delta_vel_z; qreal delta_angle_x; qreal delta_angle_y; qreal delta_angle_z; }_imu; typedef struct { quint32 time_stamp; qreal roll; qreal pitch; qreal yaw; qreal roll_acc; qreal pitch_acc; qreal yaw_acc; struct { QString solutionMode;//0-3 bool attitude_valid;//4 bool heading_valid;//5 bool velocity_valid;//6 bool position_valid;//7 bool vert_ref_used;//8 bool mag_ref_used;//9 bool gps1_vel_used;//10 bool gps1_pos_used;//11 bool gps1_hdt_used;//13 bool gps2_vel_used;//14 bool gps2_pos_used;//15 bool gps2_hdt_used;//17 bool odo_used;//18 bool dvl_bt_used;//19 bool dvl_wt_used;//20 bool usel_used;//24 bool air_data_used;//25 bool zupt_used;//26 bool align_valid;//27 bool depth_used;//28 }solution; }_euler; typedef struct { QString heatmode;//加温模式 QString heatstatus;//加温状态 quint8 heatmode_t; quint8 heatstatus_t; qreal psi;//指示静压 qreal ps;//真实静压 qreal qci;//指示动压 qreal qc;//真实动压 qreal hp;//气压高度 qreal hpr;//升降速度 qreal ts;//静温 qreal tt;//总温 qreal mi;//马赫数 qreal vi;//指示空速 qreal vt;//真空速 qreal adr;//大气密度比 qreal aoai1;//局部攻角1 qreal aoai2;//局部攻角2 qreal aoat1;//真攻角1 qreal aoat2;//真攻角2 qreal aosi1;//局部侧滑角1 qreal aosi2;//局部侧滑角2 qreal aost1;//真侧滑角1 qreal aost2;//真侧滑角2 struct { bool ps;//静压传感器故障 bool qc;//动压传感器故障 bool ts;//静温传感器故障 bool aoa1;//攻角1故障 bool aoa2;//攻角2故障 bool aos1;//侧滑角1故障 bool aos2;//侧滑角2故障 bool heat;//加热故障 bool ex_storage;//外部存储故障 bool aoa_diff;//双余度攻角不跟随故障 bool aos_diff;//双余度侧滑角不跟随故障 bool qc_zero;//动压零位过度修正 bool back1; bool back2; bool overtemp;//管头过热故障 bool system;//大气数据计算机故障 }faultword;//故障字 struct { bool psi;//指示静压 bool ps;//真实静压 bool qci;//指示动压 bool qc;//真实动压 bool hp;//气压高度 bool hpr;//升降速度 bool ts;//静温 bool tt;//总温 bool mi;//马赫数 bool vi;//指示空速 bool vt;//真空速 bool adr;//大气密度比 bool aoai1;//局部攻角1 bool aoai2;//局部攻角2 bool aoat1;//真攻角1 bool aoat2;//真攻角2 bool aosi1;//局部侧滑角1 bool aosi2;//局部侧滑角2 bool aost1;//真侧滑角1 bool aost2;//真侧滑角2 }datavalid;//数据有效性 qreal coffpress_k0;//压力校准系数K0 qreal coffpress_k1;//压力校准系数K1 qreal coffpress_k2;//压力校准系数K2 qreal coffpress_k3;//压力校准系数K3 qreal coffangle_k0;//攻角侧滑角校准系数K0 qreal coffangle_k1;//攻角侧滑角校准系数K1 qreal coffangle_k2;//攻角侧滑角校准系数K2 qreal coffangle_k3;//攻角侧滑角校准系数K3 }_eadc; typedef struct { qreal rpm_c; qreal rpm;//rpm 0~30000 qreal rpm_t; qreal t1;//℃ -60~+90 qreal t5;//℃ 报警大于900 qreal p2;//MPa 报警大于 0.28 或小于 0.15 qreal servo_current;//mA 0~150 QString oil_low;//小于 0.15 QString p2_high;//大于900 QString states; }_ecu; typedef struct { qreal bus_voltage;//汇流条电压 qreal battery_voltage;//蓄电池电压 qreal battery_current;//蓄电池电流 qreal main_voltage;//主电源电压 qreal main_current;//主电源电流 qreal current_ch1;//燃油泵及流量计 (32A) qreal current_ch2;//副翼及前起舵机(22A) qreal current_ch3;//56V电池加温1 (10A) qreal current_ch4;//28V电池加温(10A) qreal current_ch5;//智能计算机(2A) qreal current_ch6;//发动机控制器(2A) qreal current_ch7;//空速管加温 (2A) qreal current_ch8;//温度变换器(1A) qreal current_ch9;//燃油切断阀(1A) qreal current_ch10;//56V电池加温2 (10A) qreal current_ch11;//垂直舵机(6A) qreal current_ch12;//56V并网(5A) qreal current_ch13;//滑油压力变换器(1A) quint8 source; struct { bool current_ch1;//燃油泵及流量计 (32A) bool current_ch2;//副翼及前起舵机(22A) bool current_ch3;//56V电池加温1 (10A) bool current_ch4;//28V电池加温(10A) bool current_ch5;//智能计算机(2A) bool current_ch6;//发动机控制器(2A) bool current_ch7;//空速管加温 (2A) bool current_ch8;//温度变换器(1A) }state1; struct { bool current_ch9;//燃油切断阀(1A) bool current_ch10;//56V电池加温2 (10A) bool current_ch11;//垂直舵机(6A) bool current_ch12;//56V并网(5A) bool current_ch13;//直流接触器控制输出 bool current_ch14;//滑油压力变换器(1A) bool current_ch15;//备份 bool current_ch16;//备份 }state2; struct { bool CUP_STA;//CPU 状态 bool current;//直流电源变送器输出接触器状态 bool current_10A;//10A板CAN通讯状态 bool current_40A;//40A板CAN通讯状态 }check; struct { bool ins_sbg;//SBG熔断器 bool ins_320;//320惯导熔断器 bool dlink_l;//l链熔断器 bool dlink_u;//u链熔断器 bool eadc;//大气计算机熔断器 bool rec;//飞参记录仪熔断器 bool landinggear;//起落架熔断器 bool act1;//舵机1熔断器 }err1; struct { bool act2;//舵机2熔断器 bool act3;//舵机3熔断器 bool computer;//飞管计算机熔断器 }err2; struct { quint8 pump;//燃油及流量计 quint8 ail;//副翼及前起舵机 quint8 temp_56v;//56V电池加温 quint8 temp_28v;//28V电池加温 }err3; struct { quint8 computer;//智能计算机 quint8 ecu;//发动机控制器 quint8 eadc;//空速管加温 quint8 temp;//温度变送器 }err4; struct { quint8 fuel;//智能计算机 quint8 temp_56v2;//发动机控制器 quint8 v_act;//空速管加温 quint8 current56V;//温度变送器 }err5; struct { quint8 oil_press;//智能计算机 }err6; }_sspc; typedef struct { quint32 time_stamp; struct { quint32 status_value; quint32 type_value; QString vel_status;//0~5 QString vel_type;//6~11 }status; quint32 tow; qreal vel_n; qreal vel_e; qreal vel_d; qreal vel_acc_n; qreal vel_acc_e; qreal vel_acc_d; qreal course; qreal course_acc; }_vel; typedef struct { quint32 time_stamp; struct { quint32 status_value; quint32 type_value; QString pos_status;//0~5 QString pos_type;//6~11 bool gps_l1_used;//12 bool gps_l2_used; bool gps_l5_used; bool glo_l1_used; bool glo_l2_used; bool glo_l3_used; bool gal_e1_used; bool gal_e5a_used; bool gal_e5b_used; bool gal_e5alt_used; bool gal_e6_used; bool bds_b1_used; bool bds_b2_used; bool bds_b3_used;//25 }status; quint32 tow; qreal lat; qreal lng; qreal alt; qreal undulation; qreal pos_acc_lat; qreal pos_acc_lng; qreal pos_acc_alt; quint8 num_sv_used; quint16 base_station_id; quint16 diff_age; }_pos; explicit Parse(QObject *parent = nullptr); ~Parse(); void run() override; public slots: void parseData(const int id, const QByteArray data); signals: void INS_Info(Parse::_ins info); void NAV_Info(Parse::_nav info); void gear_Info(Parse::_gear info); void EADC_Info(Parse::_eadc info); void ECU_Info(Parse::_ecu info); void SSPC_Info(Parse::_sspc info); void actuator_info(Parse::_actuator info); void actuator_info_brake(Parse::_actuator info); void actuator1_info(Parse::_actuator1 info); void actuator2_info(Parse::_actuator2 info); void imu_info(Parse::_imu info); void euler_info(Parse::_euler info); void vel_info(Parse::_vel info); void pos_info(Parse::_pos info); void SSPC_Info_state(Parse::_sspc info); private: QByteArray raw; int index; }; #endif // PARSE_H