#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" #include typedef struct { float l_var_current; //左变体电流 float r_var_current; //右变体电流 quint8 l_var_dir; //左变体方向 quint8 r_var_dir; //右变体方向 } Variant; Q_DECLARE_METATYPE(Variant); 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秒 quint8 starsRecNum; //收星数 quint16 PDOP; //PDOP值 quint16 HDOP; //HDOP值 QString locateMode; //定位方式 }_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 { quint8 ignitionStatus1; quint8 ignitionCommand1; quint8 ignitionStatus2; quint8 ignitionCommand2; }thruster; 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 { qreal ps;//静压 qreal hp;//气压高度 qreal tt;//总温 qreal mi;//马赫数 qreal vi;//指示空速 qreal tp; //总压 qreal attA; //迎角 qreal sideA; //侧滑角 qreal attAAcq; //迎角采集值 qreal sideAAcq; //侧滑角采集值 qreal dp; //动压 qreal vt; //真空速 struct { bool productFault; //产品故障 bool memoryFault; //存储器故障 bool vmcFault; //VMC通讯故障 bool cpuFault; //cpu故障 bool tpFault; //总压传感器故障 bool psFault; //静压传感器故障 bool batteryFault; //电源故障 }faultword;//故障字 struct { bool hp; //气压高度有效性 bool ps; //静压有效性 bool mi; //马赫数有效性 bool vi; //指示空速有效性 bool tp; //总压有效性 bool attA; //迎角有效性 bool sideA; //侧滑角有效性 bool tt; //总温有效 }datavalid;//数据有效性 struct { bool probeHeating; //探头加温状态 bool attAAcq; //迎角采集值有效性 bool sideAAcq; //侧滑角采集值有效性 }validAndStatus; }_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 bool qzss_l1_used; bool qzss_l2_used; bool qzss_l3_used;//2 }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; typedef struct { quint16 GPSWeek; quint32 tow_ms; quint32 GPSWeek1; qreal tow; struct { bool XGyroState1; bool YGyroState; bool ZGyroState; bool XAccelerometerState1; bool YAccelerometerState; bool ZAccelerometerState; }IMUState; qreal az; qreal ax; qreal ay; qreal q; qreal p; qreal r; }_100eIMU; typedef struct { quint32 tick; struct { int ahrs; bool compassCalibration; bool compass; bool gyroscope; bool additive; bool barometer; }state; float pitch; float roll; float yaw; float gps_yaw; float pitch_rate; float roll_rate; float yaw_rate; qreal lon; qreal lat; qreal alt_baro; qreal alt_gps; qreal alt; float velocity_n; float velocity_e; float velocity_d; float velocity_air; float accel_n; float accel_e; float accel_d; quint8 satellite_num; float hdop; float vdop; QString gps_fixtype; QString time; qint8 temperature; float gps_hdg; float gps_hdg_dev; struct { QString additive; QString gyroscope; QString compass; QString gps; }redundancy; qint32 gps0_dt; qint32 gps1_dt; float gps_vn; float gps_ve; float gps_vd; quint16 gps_msec; quint8 gps_day; quint16 gps_week; QString work_state; }_100eIns; //记录数据文件的文件名 QString ecu_file_name; QString ins_file_name; QString nav_file_name; QString gear_file_name; QString actuator_file_name; QString actuator1_file_name; QString actuator2_file_name; QString imu_file_name; QString euler_file_name; QString eadc_file_name; QString sspc_file_name; QString vel_file_name; QString pos_file_name; QString variant_file_name; 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 _100eIMUInfo(Parse::_100eIMU info); void _100eInsInfo(Parse::_100eIns info); void euler_info(Parse::_euler info); void vel_info(Parse::_vel info); void pos_info(Parse::_pos info); void thrusterInfo(Parse::thruster info); void SSPC_Info_state(Parse::_sspc info); /** * @brief 变体舵机信息 * @param info */ void variantInfo(Variant const &info); private: /** * @brief 将变体的信息保存到文件中 * @param var */ void saveVariantToFile(Variant const &var); /** * @brief 把ins解析的数据保存到文件 * @param ins 保存ins数据的结构体 */ void saveInsDataToFile(Parse::_ins const &ins); /** * @brief 把nav解析的数据保存到文件 * @param nav 保存nav数据的结构器 */ void saveNavDataToFile(Parse::_nav const &nav); /** * @brief 把gear解析的数据保存到文件 * @param gear 保存gear数据的结构体 */ void saveGearDataToFile(Parse::_gear const &gear); /** * @brief 把actuator解析的数据保存到文件 * @param actuator 保存actuator数据的结构体 */ void saveActuatorDataToFile(Parse::_actuator const &actuator); /** * @brief 把actuator1的数据保存到文件中 * @param actuator1 保存actuator1数据的结构体 */ void saveActuator1DataToFile(Parse::_actuator1 const &actuator1); /** * @brief 把actuator2的数据保存到文件中 * @param actuator2 保存actuator2数据的结构体 */ void saveActuator2DataToFile(Parse::_actuator2 const &actuator2); /** * @brief 把imu的数据保存到文件中 * @param imu imu数据的的结构体 */ void saveImuDataToFile(Parse::_imu const &imu); /** * @brief 把euler的数据保存到文件中 * @param euler euler数据的结构体 */ void saveEulerDataToFile(Parse::_euler const &euler); /** * @brief 把eadu的数据保存到文件中 * @param eadc 数据的结构体 */ void saveEadcDataToFile(Parse::_eadc const &eadc); /** * @brief 把ecu的数据保存到文件中 * @param ecu 数据的结构体 */ void saveEcuDataToFile(Parse::_ecu const &ecu); /** * @brief 把sspc的数据保存到文件中 * @param sspc 保存数据的结构体 */ void saveSspcDataToFile(Parse::_sspc const &sspc); /** * @brief 把vel的数据保存到文件中 * @param vel 保存数据的结构体 */ void saveVelDataToFile(Parse::_vel const &vel); /** * @brief 把pos的数据保存到文件中 * @param pos pos数据的结构体 */ void savePosDataToFile(Parse::_pos const &pos); private: QByteArray raw; int index; }; #endif // PARSE_H