613 lines
17 KiB
C++
613 lines
17 KiB
C++
#ifndef PARSE_H
|
|
#define PARSE_H
|
|
|
|
#include <QObject>
|
|
#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
|
|
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;
|
|
|
|
//记录数据文件的文件名
|
|
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;
|
|
|
|
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:
|
|
/**
|
|
* @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
|