Files
gcs-nf/App/ToolsUI/Parse.h
T
2024-07-26 14:29:17 +08:00

702 lines
18 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"
#include <QMetaType>
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