From 25ca69597bd05dc689fcfd6ae6f982181a9ac7b1 Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Fri, 6 Jun 2025 11:02:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=9B=91=E6=8E=A7=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E8=BF=9E=E9=80=9A=EF=BC=8C=E8=BF=98=E5=B7=AE=E7=BB=98?= =?UTF-8?q?=E5=9B=BE=E5=92=8C=E6=B3=A8=E5=85=A5=E5=8A=9F=E8=83=BD=E6=9C=AA?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/IDL/C909_V1/.vscode/settings.json | 73 ++++ .../C909_V1/ATA04/Aerodynamics_heartbeat.hpp | 3 +- .../IDL/C909_V1/ATA04/Aerodynamics_input.hpp | 55 +-- .../IDL/C909_V1/ATA04/Aerodynamics_output.hpp | 27 +- .../ATA04/GroundHandling_heartbeat.hpp | 3 +- .../C909_V1/ATA04/GroundHandling_input.hpp | 79 ++-- .../C909_V1/ATA04/GroundHandling_output.hpp | 69 +-- .../C909_V1/ATA04/WeightBalance_heartbeat.hpp | 3 +- .../IDL/C909_V1/ATA04/WeightBalance_input.hpp | 47 ++- .../C909_V1/ATA04/WeightBalance_output.hpp | 113 ++--- Release/Models/libXNAerodynamics.so.1.0.0.0 | Bin 36896 -> 36896 bytes .../Models/libXNGroundHandling.so.2.0.143.1 | Bin 41208 -> 41208 bytes Release/Models/libXNWeightBalance.so.1.0.0.0 | Bin 36880 -> 40976 bytes Release/database/XNSim.db | Bin 1224704 -> 1224704 bytes Release/include/XNCore/XNDDSInterface.h | 105 +++-- XNCore/XNDDSInterface.cpp | 4 +- XNCore/XNDDSInterface.h | 107 +++-- XNInterfaceGenServer/DDSInterfaceGen.cpp | 3 +- XNModels/CMakeLists.txt | 8 + XNMonitorServer/XNMonitorInterface.cpp | 4 - XNSimHtml/components/data-monitor.js | 397 +++++++++++++++++- XNSimHtml/components/header-tools.js | 23 +- XNSimHtml/components/run-sim.js | 36 +- XNSimHtml/routes/DataMonitor.js | 177 ++++++++ XNSimHtml/server.js | 2 + XNSimHtml/utils/systemMonitor.js | 141 ++++++- 26 files changed, 1198 insertions(+), 281 deletions(-) create mode 100644 Release/IDL/C909_V1/.vscode/settings.json create mode 100755 XNModels/CMakeLists.txt create mode 100644 XNSimHtml/routes/DataMonitor.js diff --git a/Release/IDL/C909_V1/.vscode/settings.json b/Release/IDL/C909_V1/.vscode/settings.json new file mode 100644 index 0000000..5b12b50 --- /dev/null +++ b/Release/IDL/C909_V1/.vscode/settings.json @@ -0,0 +1,73 @@ +{ + "files.associations": { + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "any": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "*.tcc": "cpp", + "bitset": "cpp", + "chrono": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "complex": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "regex": "cpp", + "string": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "ostream": "cpp", + "ranges": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeindex": "cpp", + "typeinfo": "cpp", + "valarray": "cpp", + "variant": "cpp" + } +} diff --git a/Release/IDL/C909_V1/ATA04/Aerodynamics_heartbeat.hpp b/Release/IDL/C909_V1/ATA04/Aerodynamics_heartbeat.hpp index 5057ce0..47a6731 100644 --- a/Release/IDL/C909_V1/ATA04/Aerodynamics_heartbeat.hpp +++ b/Release/IDL/C909_V1/ATA04/Aerodynamics_heartbeat.hpp @@ -30,7 +30,8 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.aero_model_heartbeat(), model_data->aero_model_heartbeat); + assign_value_set(out_data.aero_model_heartbeat(), model_data->aero_model_heartbeat); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/Aerodynamics_input.hpp b/Release/IDL/C909_V1/ATA04/Aerodynamics_input.hpp index 8b51c5e..8bf648c 100644 --- a/Release/IDL/C909_V1/ATA04/Aerodynamics_input.hpp +++ b/Release/IDL/C909_V1/ATA04/Aerodynamics_input.hpp @@ -56,33 +56,34 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_i_aerocomac_alpha_f8(), model_data->l_04_i_aerocomac_alpha_f8); - assign_value_set(data.l_04_i_aerocomac_alpdot_f8(), model_data->l_04_i_aerocomac_alpdot_f8); - assign_value_set(data.l_04_i_aerocomac_beta_f8(), model_data->l_04_i_aerocomac_beta_f8); - assign_value_set(data.l_04_i_aerocomac_press_alt_f8(), model_data->l_04_i_aerocomac_press_alt_f8); - assign_value_set(data.l_04_i_aerocomac_tas_f8(), model_data->l_04_i_aerocomac_tas_f8); - assign_value_set(data.l_04_i_aerocomac_mach_f8(), model_data->l_04_i_aerocomac_mach_f8); - assign_value_set(data.l_04_i_aerocomac_nx_f8(), model_data->l_04_i_aerocomac_nx_f8); - assign_value_set(data.l_04_i_aerocomac_ny_f8(), model_data->l_04_i_aerocomac_ny_f8); - assign_value_set(data.l_04_i_aerocomac_nz_f8(), model_data->l_04_i_aerocomac_nz_f8); - assign_value_set(data.l_04_i_aerocomac_p_f8(), model_data->l_04_i_aerocomac_p_f8); - assign_value_set(data.l_04_i_aerocomac_q_f8(), model_data->l_04_i_aerocomac_q_f8); - assign_value_set(data.l_04_i_aerocomac_r_f8(), model_data->l_04_i_aerocomac_r_f8); - assign_value_set(data.l_04_i_aerocomac_qbar_f8(), model_data->l_04_i_aerocomac_qbar_f8); - assign_value_set(data.l_04_i_aerocomac_blcg_f8(), model_data->l_04_i_aerocomac_blcg_f8); - assign_value_set(data.l_04_i_aerocomac_bscg_f8(), model_data->l_04_i_aerocomac_bscg_f8); - assign_value_set(data.l_04_i_aerocomac_wlcg_f8(), model_data->l_04_i_aerocomac_wlcg_f8); - assign_value_set(data.l_04_i_aerocomac_ail_f8(), model_data->l_04_i_aerocomac_ail_f8); - assign_value_set(data.l_04_i_aerocomac_elv_f8(), model_data->l_04_i_aerocomac_elv_f8); - assign_value_set(data.l_04_i_aerocomac_rud_f8(), model_data->l_04_i_aerocomac_rud_f8); - assign_value_set(data.l_04_i_aerocomac_stab_f8(), model_data->l_04_i_aerocomac_stab_f8); - assign_value_set(data.l_04_i_aerocomac_gear_f8(), model_data->l_04_i_aerocomac_gear_f8); - assign_value_set(data.l_04_i_aerocomac_flap_f8(), model_data->l_04_i_aerocomac_flap_f8); - assign_value_set(data.l_04_i_aerocomac_slat_f8(), model_data->l_04_i_aerocomac_slat_f8); - assign_value_set(data.l_04_i_aerocomac_spl_f8(), model_data->l_04_i_aerocomac_spl_f8); - assign_value_set(data.l_04_i_aerocomac_tnet_f8(), model_data->l_04_i_aerocomac_tnet_f8); - assign_value_set(data.l_04_i_aerocomac_kice_f8(), model_data->l_04_i_aerocomac_kice_f8); - assign_value_set(data.l_04_i_aerocomac_alt_agl_f8(), model_data->l_04_i_aerocomac_alt_agl_f8); + assign_value_set(out_data.l_04_i_aerocomac_alpha_f8(), model_data->l_04_i_aerocomac_alpha_f8); + assign_value_set(out_data.l_04_i_aerocomac_alpdot_f8(), model_data->l_04_i_aerocomac_alpdot_f8); + assign_value_set(out_data.l_04_i_aerocomac_beta_f8(), model_data->l_04_i_aerocomac_beta_f8); + assign_value_set(out_data.l_04_i_aerocomac_press_alt_f8(), model_data->l_04_i_aerocomac_press_alt_f8); + assign_value_set(out_data.l_04_i_aerocomac_tas_f8(), model_data->l_04_i_aerocomac_tas_f8); + assign_value_set(out_data.l_04_i_aerocomac_mach_f8(), model_data->l_04_i_aerocomac_mach_f8); + assign_value_set(out_data.l_04_i_aerocomac_nx_f8(), model_data->l_04_i_aerocomac_nx_f8); + assign_value_set(out_data.l_04_i_aerocomac_ny_f8(), model_data->l_04_i_aerocomac_ny_f8); + assign_value_set(out_data.l_04_i_aerocomac_nz_f8(), model_data->l_04_i_aerocomac_nz_f8); + assign_value_set(out_data.l_04_i_aerocomac_p_f8(), model_data->l_04_i_aerocomac_p_f8); + assign_value_set(out_data.l_04_i_aerocomac_q_f8(), model_data->l_04_i_aerocomac_q_f8); + assign_value_set(out_data.l_04_i_aerocomac_r_f8(), model_data->l_04_i_aerocomac_r_f8); + assign_value_set(out_data.l_04_i_aerocomac_qbar_f8(), model_data->l_04_i_aerocomac_qbar_f8); + assign_value_set(out_data.l_04_i_aerocomac_blcg_f8(), model_data->l_04_i_aerocomac_blcg_f8); + assign_value_set(out_data.l_04_i_aerocomac_bscg_f8(), model_data->l_04_i_aerocomac_bscg_f8); + assign_value_set(out_data.l_04_i_aerocomac_wlcg_f8(), model_data->l_04_i_aerocomac_wlcg_f8); + assign_value_set(out_data.l_04_i_aerocomac_ail_f8(), model_data->l_04_i_aerocomac_ail_f8); + assign_value_set(out_data.l_04_i_aerocomac_elv_f8(), model_data->l_04_i_aerocomac_elv_f8); + assign_value_set(out_data.l_04_i_aerocomac_rud_f8(), model_data->l_04_i_aerocomac_rud_f8); + assign_value_set(out_data.l_04_i_aerocomac_stab_f8(), model_data->l_04_i_aerocomac_stab_f8); + assign_value_set(out_data.l_04_i_aerocomac_gear_f8(), model_data->l_04_i_aerocomac_gear_f8); + assign_value_set(out_data.l_04_i_aerocomac_flap_f8(), model_data->l_04_i_aerocomac_flap_f8); + assign_value_set(out_data.l_04_i_aerocomac_slat_f8(), model_data->l_04_i_aerocomac_slat_f8); + assign_value_set(out_data.l_04_i_aerocomac_spl_f8(), model_data->l_04_i_aerocomac_spl_f8); + assign_value_set(out_data.l_04_i_aerocomac_tnet_f8(), model_data->l_04_i_aerocomac_tnet_f8); + assign_value_set(out_data.l_04_i_aerocomac_kice_f8(), model_data->l_04_i_aerocomac_kice_f8); + assign_value_set(out_data.l_04_i_aerocomac_alt_agl_f8(), model_data->l_04_i_aerocomac_alt_agl_f8); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/Aerodynamics_output.hpp b/Release/IDL/C909_V1/ATA04/Aerodynamics_output.hpp index 0fa91c6..e913724 100644 --- a/Release/IDL/C909_V1/ATA04/Aerodynamics_output.hpp +++ b/Release/IDL/C909_V1/ATA04/Aerodynamics_output.hpp @@ -42,19 +42,20 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_o_aerocomac_fxb_f8(), model_data->l_04_o_aerocomac_fxb_f8); - assign_value_set(data.l_04_o_aerocomac_fyb_f8(), model_data->l_04_o_aerocomac_fyb_f8); - assign_value_set(data.l_04_o_aerocomac_fzb_f8(), model_data->l_04_o_aerocomac_fzb_f8); - assign_value_set(data.l_04_o_aerocomac_mxb_f8(), model_data->l_04_o_aerocomac_mxb_f8); - assign_value_set(data.l_04_o_aerocomac_myb_f8(), model_data->l_04_o_aerocomac_myb_f8); - assign_value_set(data.l_04_o_aerocomac_mzb_f8(), model_data->l_04_o_aerocomac_mzb_f8); - assign_value_set(data.l_04_o_aerocomac_cls_f8(), model_data->l_04_o_aerocomac_cls_f8); - assign_value_set(data.l_04_o_aerocomac_cl_f8(), model_data->l_04_o_aerocomac_cl_f8); - assign_value_set(data.l_04_o_aerocomac_cd_f8(), model_data->l_04_o_aerocomac_cd_f8); - assign_value_set(data.l_04_o_aerocomac_cm_f8(), model_data->l_04_o_aerocomac_cm_f8); - assign_value_set(data.l_04_o_aerocomac_cr_f8(), model_data->l_04_o_aerocomac_cr_f8); - assign_value_set(data.l_04_o_aerocomac_cy_f8(), model_data->l_04_o_aerocomac_cy_f8); - assign_value_set(data.l_04_o_aerocomac_cn_f8(), model_data->l_04_o_aerocomac_cn_f8); + assign_value_set(out_data.l_04_o_aerocomac_fxb_f8(), model_data->l_04_o_aerocomac_fxb_f8); + assign_value_set(out_data.l_04_o_aerocomac_fyb_f8(), model_data->l_04_o_aerocomac_fyb_f8); + assign_value_set(out_data.l_04_o_aerocomac_fzb_f8(), model_data->l_04_o_aerocomac_fzb_f8); + assign_value_set(out_data.l_04_o_aerocomac_mxb_f8(), model_data->l_04_o_aerocomac_mxb_f8); + assign_value_set(out_data.l_04_o_aerocomac_myb_f8(), model_data->l_04_o_aerocomac_myb_f8); + assign_value_set(out_data.l_04_o_aerocomac_mzb_f8(), model_data->l_04_o_aerocomac_mzb_f8); + assign_value_set(out_data.l_04_o_aerocomac_cls_f8(), model_data->l_04_o_aerocomac_cls_f8); + assign_value_set(out_data.l_04_o_aerocomac_cl_f8(), model_data->l_04_o_aerocomac_cl_f8); + assign_value_set(out_data.l_04_o_aerocomac_cd_f8(), model_data->l_04_o_aerocomac_cd_f8); + assign_value_set(out_data.l_04_o_aerocomac_cm_f8(), model_data->l_04_o_aerocomac_cm_f8); + assign_value_set(out_data.l_04_o_aerocomac_cr_f8(), model_data->l_04_o_aerocomac_cr_f8); + assign_value_set(out_data.l_04_o_aerocomac_cy_f8(), model_data->l_04_o_aerocomac_cy_f8); + assign_value_set(out_data.l_04_o_aerocomac_cn_f8(), model_data->l_04_o_aerocomac_cn_f8); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/GroundHandling_heartbeat.hpp b/Release/IDL/C909_V1/ATA04/GroundHandling_heartbeat.hpp index c55294c..0b72ca2 100644 --- a/Release/IDL/C909_V1/ATA04/GroundHandling_heartbeat.hpp +++ b/Release/IDL/C909_V1/ATA04/GroundHandling_heartbeat.hpp @@ -30,7 +30,8 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.groundhandling_model_heartbeat(), model_data->groundhandling_model_heartbeat); + assign_value_set(out_data.groundhandling_model_heartbeat(), model_data->groundhandling_model_heartbeat); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/GroundHandling_input.hpp b/Release/IDL/C909_V1/ATA04/GroundHandling_input.hpp index cc6cc10..13a19ec 100644 --- a/Release/IDL/C909_V1/ATA04/GroundHandling_input.hpp +++ b/Release/IDL/C909_V1/ATA04/GroundHandling_input.hpp @@ -68,45 +68,46 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_i_gdcomac_frz_l1(), model_data->l_04_i_gdcomac_frz_l1); - assign_value_set(data.l_04_i_gdcomac_chocks_l1(), model_data->l_04_i_gdcomac_chocks_l1); - assign_value_set(data.l_04_i_gdcomac_alt_agl_f8(), model_data->l_04_i_gdcomac_alt_agl_f8); - assign_value_set(data.l_04_i_gdcomac_frzflt_l1(), model_data->l_04_i_gdcomac_frzflt_l1); - assign_value_set(data.l_04_i_gdcomac_p_f8(), model_data->l_04_i_gdcomac_p_f8); - assign_value_set(data.l_04_i_gdcomac_q_f8(), model_data->l_04_i_gdcomac_q_f8); - assign_value_set(data.l_04_i_gdcomac_r_f8(), model_data->l_04_i_gdcomac_r_f8); - assign_value_set(data.l_04_i_gdcomac_ug_f8(), model_data->l_04_i_gdcomac_ug_f8); - assign_value_set(data.l_04_i_gdcomac_vg_f8(), model_data->l_04_i_gdcomac_vg_f8); - assign_value_set(data.l_04_i_gdcomac_wg_f8(), model_data->l_04_i_gdcomac_wg_f8); - assign_value_set(data.l_04_i_gdcomac_blcg_f8(), model_data->l_04_i_gdcomac_blcg_f8); - assign_value_set(data.l_04_i_gdcomac_bscg_f8(), model_data->l_04_i_gdcomac_bscg_f8); - assign_value_set(data.l_04_i_gdcomac_wlcg_f8(), model_data->l_04_i_gdcomac_wlcg_f8); - assign_value_set(data.l_04_i_gdcomac_pb_active_l1(), model_data->l_04_i_gdcomac_pb_active_l1); - assign_value_set(data.l_04_i_gdcomac_brake_torq_f8(), model_data->l_04_i_gdcomac_brake_torq_f8); - assign_value_set(data.l_04_i_gdcomac_gear_f8(), model_data->l_04_i_gdcomac_gear_f8); - assign_value_set(data.l_04_i_gdcomac_gsteer_f8(), model_data->l_04_i_gdcomac_gsteer_f8); - assign_value_set(data.l_04_i_gdcomac_tire_pres_f8(), model_data->l_04_i_gdcomac_tire_pres_f8); - assign_value_set(data.l_04_i_gdcomac_onjax_l1(), model_data->l_04_i_gdcomac_onjax_l1); - assign_value_set(data.l_04_i_gdcomac_contdep_f8(), model_data->l_04_i_gdcomac_contdep_f8); - assign_value_set(data.l_04_i_gdcomac_thetag_f8(), model_data->l_04_i_gdcomac_thetag_f8); - assign_value_set(data.l_04_i_gdcomac_phig_f8(), model_data->l_04_i_gdcomac_phig_f8); - assign_value_set(data.l_04_i_gdcomac_rwyrgh_i2(), model_data->l_04_i_gdcomac_rwyrgh_i2); - assign_value_set(data.l_04_i_gdcomac_rwyhdg_f8(), model_data->l_04_i_gdcomac_rwyhdg_f8); - assign_value_set(data.l_04_i_gdcomac_reset_braketemp_l1(), model_data->l_04_i_gdcomac_reset_braketemp_l1); - assign_value_set(data.l_04_i_gdcomac_reset_tirepress_l1(), model_data->l_04_i_gdcomac_reset_tirepress_l1); - assign_value_set(data.l_04_i_gdcomac_temp_c_f8(), model_data->l_04_i_gdcomac_temp_c_f8); - assign_value_set(data.l_04_i_gdcomac_brake_temp_f8(), model_data->l_04_i_gdcomac_brake_temp_f8); - assign_value_set(data.l_04_i_gdcomac_tire_tburst_l1(), model_data->l_04_i_gdcomac_tire_tburst_l1); - assign_value_set(data.l_04_i_gdcomac_tire_tflat_l1(), model_data->l_04_i_gdcomac_tire_tflat_l1); - assign_value_set(data.l_04_i_gdcomac_brk_reset_tpres_l1(), model_data->l_04_i_gdcomac_brk_reset_tpres_l1); - assign_value_set(data.l_04_i_gdcomac_rcon_ci_f8(), model_data->l_04_i_gdcomac_rcon_ci_f8); - assign_value_set(data.l_04_i_gdcomac_pb_towforce_f8(), model_data->l_04_i_gdcomac_pb_towforce_f8); - assign_value_set(data.l_04_i_gdcomac_gsteer_state_i4(), model_data->l_04_i_gdcomac_gsteer_state_i4); - assign_value_set(data.l_04_i_gdcomac_trim_active_l1(), model_data->l_04_i_gdcomac_trim_active_l1); - assign_value_set(data.l_04_i_gdcomac_phi_deg_f8(), model_data->l_04_i_gdcomac_phi_deg_f8); - assign_value_set(data.l_04_i_gdcomac_theta_deg_f8(), model_data->l_04_i_gdcomac_theta_deg_f8); - assign_value_set(data.l_04_i_gdcomac_psi_deg_f8(), model_data->l_04_i_gdcomac_psi_deg_f8); - assign_value_set(data.l_04_i_gdcomac_resetint_l1(), model_data->l_04_i_gdcomac_resetint_l1); + assign_value_set(out_data.l_04_i_gdcomac_frz_l1(), model_data->l_04_i_gdcomac_frz_l1); + assign_value_set(out_data.l_04_i_gdcomac_chocks_l1(), model_data->l_04_i_gdcomac_chocks_l1); + assign_value_set(out_data.l_04_i_gdcomac_alt_agl_f8(), model_data->l_04_i_gdcomac_alt_agl_f8); + assign_value_set(out_data.l_04_i_gdcomac_frzflt_l1(), model_data->l_04_i_gdcomac_frzflt_l1); + assign_value_set(out_data.l_04_i_gdcomac_p_f8(), model_data->l_04_i_gdcomac_p_f8); + assign_value_set(out_data.l_04_i_gdcomac_q_f8(), model_data->l_04_i_gdcomac_q_f8); + assign_value_set(out_data.l_04_i_gdcomac_r_f8(), model_data->l_04_i_gdcomac_r_f8); + assign_value_set(out_data.l_04_i_gdcomac_ug_f8(), model_data->l_04_i_gdcomac_ug_f8); + assign_value_set(out_data.l_04_i_gdcomac_vg_f8(), model_data->l_04_i_gdcomac_vg_f8); + assign_value_set(out_data.l_04_i_gdcomac_wg_f8(), model_data->l_04_i_gdcomac_wg_f8); + assign_value_set(out_data.l_04_i_gdcomac_blcg_f8(), model_data->l_04_i_gdcomac_blcg_f8); + assign_value_set(out_data.l_04_i_gdcomac_bscg_f8(), model_data->l_04_i_gdcomac_bscg_f8); + assign_value_set(out_data.l_04_i_gdcomac_wlcg_f8(), model_data->l_04_i_gdcomac_wlcg_f8); + assign_value_set(out_data.l_04_i_gdcomac_pb_active_l1(), model_data->l_04_i_gdcomac_pb_active_l1); + assign_value_set(out_data.l_04_i_gdcomac_brake_torq_f8(), model_data->l_04_i_gdcomac_brake_torq_f8); + assign_value_set(out_data.l_04_i_gdcomac_gear_f8(), model_data->l_04_i_gdcomac_gear_f8); + assign_value_set(out_data.l_04_i_gdcomac_gsteer_f8(), model_data->l_04_i_gdcomac_gsteer_f8); + assign_value_set(out_data.l_04_i_gdcomac_tire_pres_f8(), model_data->l_04_i_gdcomac_tire_pres_f8); + assign_value_set(out_data.l_04_i_gdcomac_onjax_l1(), model_data->l_04_i_gdcomac_onjax_l1); + assign_value_set(out_data.l_04_i_gdcomac_contdep_f8(), model_data->l_04_i_gdcomac_contdep_f8); + assign_value_set(out_data.l_04_i_gdcomac_thetag_f8(), model_data->l_04_i_gdcomac_thetag_f8); + assign_value_set(out_data.l_04_i_gdcomac_phig_f8(), model_data->l_04_i_gdcomac_phig_f8); + assign_value_set(out_data.l_04_i_gdcomac_rwyrgh_i2(), model_data->l_04_i_gdcomac_rwyrgh_i2); + assign_value_set(out_data.l_04_i_gdcomac_rwyhdg_f8(), model_data->l_04_i_gdcomac_rwyhdg_f8); + assign_value_set(out_data.l_04_i_gdcomac_reset_braketemp_l1(), model_data->l_04_i_gdcomac_reset_braketemp_l1); + assign_value_set(out_data.l_04_i_gdcomac_reset_tirepress_l1(), model_data->l_04_i_gdcomac_reset_tirepress_l1); + assign_value_set(out_data.l_04_i_gdcomac_temp_c_f8(), model_data->l_04_i_gdcomac_temp_c_f8); + assign_value_set(out_data.l_04_i_gdcomac_brake_temp_f8(), model_data->l_04_i_gdcomac_brake_temp_f8); + assign_value_set(out_data.l_04_i_gdcomac_tire_tburst_l1(), model_data->l_04_i_gdcomac_tire_tburst_l1); + assign_value_set(out_data.l_04_i_gdcomac_tire_tflat_l1(), model_data->l_04_i_gdcomac_tire_tflat_l1); + assign_value_set(out_data.l_04_i_gdcomac_brk_reset_tpres_l1(), model_data->l_04_i_gdcomac_brk_reset_tpres_l1); + assign_value_set(out_data.l_04_i_gdcomac_rcon_ci_f8(), model_data->l_04_i_gdcomac_rcon_ci_f8); + assign_value_set(out_data.l_04_i_gdcomac_pb_towforce_f8(), model_data->l_04_i_gdcomac_pb_towforce_f8); + assign_value_set(out_data.l_04_i_gdcomac_gsteer_state_i4(), model_data->l_04_i_gdcomac_gsteer_state_i4); + assign_value_set(out_data.l_04_i_gdcomac_trim_active_l1(), model_data->l_04_i_gdcomac_trim_active_l1); + assign_value_set(out_data.l_04_i_gdcomac_phi_deg_f8(), model_data->l_04_i_gdcomac_phi_deg_f8); + assign_value_set(out_data.l_04_i_gdcomac_theta_deg_f8(), model_data->l_04_i_gdcomac_theta_deg_f8); + assign_value_set(out_data.l_04_i_gdcomac_psi_deg_f8(), model_data->l_04_i_gdcomac_psi_deg_f8); + assign_value_set(out_data.l_04_i_gdcomac_resetint_l1(), model_data->l_04_i_gdcomac_resetint_l1); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/GroundHandling_output.hpp b/Release/IDL/C909_V1/ATA04/GroundHandling_output.hpp index e3e78cd..77ec560 100644 --- a/Release/IDL/C909_V1/ATA04/GroundHandling_output.hpp +++ b/Release/IDL/C909_V1/ATA04/GroundHandling_output.hpp @@ -63,40 +63,41 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_o_gdcomac_frz_l1(), model_data->l_04_o_gdcomac_frz_l1); - assign_value_set(data.l_04_o_gdcomac_ac_on_ground_l1(), model_data->l_04_o_gdcomac_ac_on_ground_l1); - assign_value_set(data.l_04_o_gdcomac_ac_stationary_f8(), model_data->l_04_o_gdcomac_ac_stationary_f8); - assign_value_set(data.l_04_o_gdcomac_alt_tire_f8(), model_data->l_04_o_gdcomac_alt_tire_f8); - assign_value_set(data.l_04_o_gdcomac_zcg_to_tire_f8(), model_data->l_04_o_gdcomac_zcg_to_tire_f8); - assign_value_set(data.l_04_o_gdcomac_fxb_f8(), model_data->l_04_o_gdcomac_fxb_f8); - assign_value_set(data.l_04_o_gdcomac_fyb_f8(), model_data->l_04_o_gdcomac_fyb_f8); - assign_value_set(data.l_04_o_gdcomac_fzb_f8(), model_data->l_04_o_gdcomac_fzb_f8); - assign_value_set(data.l_04_o_gdcomac_mxb_f8(), model_data->l_04_o_gdcomac_mxb_f8); - assign_value_set(data.l_04_o_gdcomac_myb_f8(), model_data->l_04_o_gdcomac_myb_f8); - assign_value_set(data.l_04_o_gdcomac_mzb_f8(), model_data->l_04_o_gdcomac_mzb_f8); - assign_value_set(data.l_04_o_gdcomac_fygs_f8(), model_data->l_04_o_gdcomac_fygs_f8); - assign_value_set(data.l_04_o_gdcomac_mzgs_f8(), model_data->l_04_o_gdcomac_mzgs_f8); - assign_value_set(data.l_04_o_gdcomac_mu_f8(), model_data->l_04_o_gdcomac_mu_f8); - assign_value_set(data.l_04_o_gdcomac_dstroke_f8(), model_data->l_04_o_gdcomac_dstroke_f8); - assign_value_set(data.l_04_o_gdcomac_sr_f8(), model_data->l_04_o_gdcomac_sr_f8); - assign_value_set(data.l_04_o_gdcomac_sy_f8(), model_data->l_04_o_gdcomac_sy_f8); - assign_value_set(data.l_04_o_gdcomac_sx_f8(), model_data->l_04_o_gdcomac_sx_f8); - assign_value_set(data.l_04_o_gdcomac_xft_f8(), model_data->l_04_o_gdcomac_xft_f8); - assign_value_set(data.l_04_o_gdcomac_yft_f8(), model_data->l_04_o_gdcomac_yft_f8); - assign_value_set(data.l_04_o_gdcomac_zft_f8(), model_data->l_04_o_gdcomac_zft_f8); - assign_value_set(data.l_04_o_gdcomac_distngrxcg_f8(), model_data->l_04_o_gdcomac_distngrxcg_f8); - assign_value_set(data.l_04_o_gdcomac_distmgrxcg_f8(), model_data->l_04_o_gdcomac_distmgrxcg_f8); - assign_value_set(data.l_04_o_gdcomac_distmgrzcg_f8(), model_data->l_04_o_gdcomac_distmgrzcg_f8); - assign_value_set(data.l_04_o_gdcomac_tire_vel_f8(), model_data->l_04_o_gdcomac_tire_vel_f8); - assign_value_set(data.l_04_o_gdcomac_tire_burst_l1(), model_data->l_04_o_gdcomac_tire_burst_l1); - assign_value_set(data.l_04_o_gdcomac_tire_temp_f8(), model_data->l_04_o_gdcomac_tire_temp_f8); - assign_value_set(data.l_04_o_gdcomac_wow_l1(), model_data->l_04_o_gdcomac_wow_l1); - assign_value_set(data.l_04_o_gdcomac_utirew_f8(), model_data->l_04_o_gdcomac_utirew_f8); - assign_value_set(data.l_04_o_gdcomac_vtirew_f8(), model_data->l_04_o_gdcomac_vtirew_f8); - assign_value_set(data.l_04_o_gdcomac_whl_omega_f8(), model_data->l_04_o_gdcomac_whl_omega_f8); - assign_value_set(data.l_04_o_gdcomac_dstruc_f8(), model_data->l_04_o_gdcomac_dstruc_f8); - assign_value_set(data.l_04_o_gdcomac_wor_par_f8(), model_data->l_04_o_gdcomac_wor_par_f8); - assign_value_set(data.l_04_o_gdcomac_nd_f8(), model_data->l_04_o_gdcomac_nd_f8); + assign_value_set(out_data.l_04_o_gdcomac_frz_l1(), model_data->l_04_o_gdcomac_frz_l1); + assign_value_set(out_data.l_04_o_gdcomac_ac_on_ground_l1(), model_data->l_04_o_gdcomac_ac_on_ground_l1); + assign_value_set(out_data.l_04_o_gdcomac_ac_stationary_f8(), model_data->l_04_o_gdcomac_ac_stationary_f8); + assign_value_set(out_data.l_04_o_gdcomac_alt_tire_f8(), model_data->l_04_o_gdcomac_alt_tire_f8); + assign_value_set(out_data.l_04_o_gdcomac_zcg_to_tire_f8(), model_data->l_04_o_gdcomac_zcg_to_tire_f8); + assign_value_set(out_data.l_04_o_gdcomac_fxb_f8(), model_data->l_04_o_gdcomac_fxb_f8); + assign_value_set(out_data.l_04_o_gdcomac_fyb_f8(), model_data->l_04_o_gdcomac_fyb_f8); + assign_value_set(out_data.l_04_o_gdcomac_fzb_f8(), model_data->l_04_o_gdcomac_fzb_f8); + assign_value_set(out_data.l_04_o_gdcomac_mxb_f8(), model_data->l_04_o_gdcomac_mxb_f8); + assign_value_set(out_data.l_04_o_gdcomac_myb_f8(), model_data->l_04_o_gdcomac_myb_f8); + assign_value_set(out_data.l_04_o_gdcomac_mzb_f8(), model_data->l_04_o_gdcomac_mzb_f8); + assign_value_set(out_data.l_04_o_gdcomac_fygs_f8(), model_data->l_04_o_gdcomac_fygs_f8); + assign_value_set(out_data.l_04_o_gdcomac_mzgs_f8(), model_data->l_04_o_gdcomac_mzgs_f8); + assign_value_set(out_data.l_04_o_gdcomac_mu_f8(), model_data->l_04_o_gdcomac_mu_f8); + assign_value_set(out_data.l_04_o_gdcomac_dstroke_f8(), model_data->l_04_o_gdcomac_dstroke_f8); + assign_value_set(out_data.l_04_o_gdcomac_sr_f8(), model_data->l_04_o_gdcomac_sr_f8); + assign_value_set(out_data.l_04_o_gdcomac_sy_f8(), model_data->l_04_o_gdcomac_sy_f8); + assign_value_set(out_data.l_04_o_gdcomac_sx_f8(), model_data->l_04_o_gdcomac_sx_f8); + assign_value_set(out_data.l_04_o_gdcomac_xft_f8(), model_data->l_04_o_gdcomac_xft_f8); + assign_value_set(out_data.l_04_o_gdcomac_yft_f8(), model_data->l_04_o_gdcomac_yft_f8); + assign_value_set(out_data.l_04_o_gdcomac_zft_f8(), model_data->l_04_o_gdcomac_zft_f8); + assign_value_set(out_data.l_04_o_gdcomac_distngrxcg_f8(), model_data->l_04_o_gdcomac_distngrxcg_f8); + assign_value_set(out_data.l_04_o_gdcomac_distmgrxcg_f8(), model_data->l_04_o_gdcomac_distmgrxcg_f8); + assign_value_set(out_data.l_04_o_gdcomac_distmgrzcg_f8(), model_data->l_04_o_gdcomac_distmgrzcg_f8); + assign_value_set(out_data.l_04_o_gdcomac_tire_vel_f8(), model_data->l_04_o_gdcomac_tire_vel_f8); + assign_value_set(out_data.l_04_o_gdcomac_tire_burst_l1(), model_data->l_04_o_gdcomac_tire_burst_l1); + assign_value_set(out_data.l_04_o_gdcomac_tire_temp_f8(), model_data->l_04_o_gdcomac_tire_temp_f8); + assign_value_set(out_data.l_04_o_gdcomac_wow_l1(), model_data->l_04_o_gdcomac_wow_l1); + assign_value_set(out_data.l_04_o_gdcomac_utirew_f8(), model_data->l_04_o_gdcomac_utirew_f8); + assign_value_set(out_data.l_04_o_gdcomac_vtirew_f8(), model_data->l_04_o_gdcomac_vtirew_f8); + assign_value_set(out_data.l_04_o_gdcomac_whl_omega_f8(), model_data->l_04_o_gdcomac_whl_omega_f8); + assign_value_set(out_data.l_04_o_gdcomac_dstruc_f8(), model_data->l_04_o_gdcomac_dstruc_f8); + assign_value_set(out_data.l_04_o_gdcomac_wor_par_f8(), model_data->l_04_o_gdcomac_wor_par_f8); + assign_value_set(out_data.l_04_o_gdcomac_nd_f8(), model_data->l_04_o_gdcomac_nd_f8); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/WeightBalance_heartbeat.hpp b/Release/IDL/C909_V1/ATA04/WeightBalance_heartbeat.hpp index 833306c..98969f1 100644 --- a/Release/IDL/C909_V1/ATA04/WeightBalance_heartbeat.hpp +++ b/Release/IDL/C909_V1/ATA04/WeightBalance_heartbeat.hpp @@ -30,7 +30,8 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.weightbody_model_heartbeat(), model_data->weightbody_model_heartbeat); + assign_value_set(out_data.weightbody_model_heartbeat(), model_data->weightbody_model_heartbeat); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/WeightBalance_input.hpp b/Release/IDL/C909_V1/ATA04/WeightBalance_input.hpp index 4848025..b5c0651 100644 --- a/Release/IDL/C909_V1/ATA04/WeightBalance_input.hpp +++ b/Release/IDL/C909_V1/ATA04/WeightBalance_input.hpp @@ -52,29 +52,30 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_i_wbcomac_theta_deg_f8(), model_data->l_04_i_wbcomac_theta_deg_f8); - assign_value_set(data.l_04_i_wbcomac_gear_mode_l1(), model_data->l_04_i_wbcomac_gear_mode_l1); - assign_value_set(data.l_04_i_wbcomac_acset_gw_f8(), model_data->l_04_i_wbcomac_acset_gw_f8); - assign_value_set(data.l_04_i_wbcomac_acset_cg_f8(), model_data->l_04_i_wbcomac_acset_cg_f8); - assign_value_set(data.l_04_i_wbcomac_acset_tankfuel_f4(), model_data->l_04_i_wbcomac_acset_tankfuel_f4); - assign_value_set(data.l_04_i_wbcomac_acset_totfuel_f8(), model_data->l_04_i_wbcomac_acset_totfuel_f8); - assign_value_set(data.l_04_i_wbcomac_acset_zfw_f8(), model_data->l_04_i_wbcomac_acset_zfw_f8); - assign_value_set(data.l_04_i_wbcomac_acset_zfwcg_f8(), model_data->l_04_i_wbcomac_acset_zfwcg_f8); - assign_value_set(data.l_04_i_wbcomac_eng_efsep_l1(), model_data->l_04_i_wbcomac_eng_efsep_l1); - assign_value_set(data.l_04_i_wbcomac_fuel_f8(), model_data->l_04_i_wbcomac_fuel_f8); - assign_value_set(data.l_04_i_wbcomac_gear_avg_f8(), model_data->l_04_i_wbcomac_gear_avg_f8); - assign_value_set(data.l_04_i_wbcomac_kice_f8(), model_data->l_04_i_wbcomac_kice_f8); - assign_value_set(data.l_04_i_wbcomac_bycglim_l1(), model_data->l_04_i_wbcomac_bycglim_l1); - assign_value_set(data.l_04_i_wbcomac_bygwlim_l1(), model_data->l_04_i_wbcomac_bygwlim_l1); - assign_value_set(data.l_04_i_wbcomac_frz_l1(), model_data->l_04_i_wbcomac_frz_l1); - assign_value_set(data.l_04_i_wbcomac_zcgfrz_l1(), model_data->l_04_i_wbcomac_zcgfrz_l1); - assign_value_set(data.l_04_i_wbcomac_zcgfrz_grfx_l1(), model_data->l_04_i_wbcomac_zcgfrz_grfx_l1); - assign_value_set(data.l_04_i_wbcomac_ycgfrz_l1(), model_data->l_04_i_wbcomac_ycgfrz_l1); - assign_value_set(data.l_04_i_wbcomac_inertfrz_l1(), model_data->l_04_i_wbcomac_inertfrz_l1); - assign_value_set(data.l_04_i_wbcomac_potreq_gw_f8(), model_data->l_04_i_wbcomac_potreq_gw_f8); - assign_value_set(data.l_04_i_wbcomac_potreq_gwcg_f8(), model_data->l_04_i_wbcomac_potreq_gwcg_f8); - assign_value_set(data.l_04_i_wbcomac_phi_deg_f8(), model_data->l_04_i_wbcomac_phi_deg_f8); - assign_value_set(data.l_04_i_wbcomac_psi_deg_f8(), model_data->l_04_i_wbcomac_psi_deg_f8); + assign_value_set(out_data.l_04_i_wbcomac_theta_deg_f8(), model_data->l_04_i_wbcomac_theta_deg_f8); + assign_value_set(out_data.l_04_i_wbcomac_gear_mode_l1(), model_data->l_04_i_wbcomac_gear_mode_l1); + assign_value_set(out_data.l_04_i_wbcomac_acset_gw_f8(), model_data->l_04_i_wbcomac_acset_gw_f8); + assign_value_set(out_data.l_04_i_wbcomac_acset_cg_f8(), model_data->l_04_i_wbcomac_acset_cg_f8); + assign_value_set(out_data.l_04_i_wbcomac_acset_tankfuel_f4(), model_data->l_04_i_wbcomac_acset_tankfuel_f4); + assign_value_set(out_data.l_04_i_wbcomac_acset_totfuel_f8(), model_data->l_04_i_wbcomac_acset_totfuel_f8); + assign_value_set(out_data.l_04_i_wbcomac_acset_zfw_f8(), model_data->l_04_i_wbcomac_acset_zfw_f8); + assign_value_set(out_data.l_04_i_wbcomac_acset_zfwcg_f8(), model_data->l_04_i_wbcomac_acset_zfwcg_f8); + assign_value_set(out_data.l_04_i_wbcomac_eng_efsep_l1(), model_data->l_04_i_wbcomac_eng_efsep_l1); + assign_value_set(out_data.l_04_i_wbcomac_fuel_f8(), model_data->l_04_i_wbcomac_fuel_f8); + assign_value_set(out_data.l_04_i_wbcomac_gear_avg_f8(), model_data->l_04_i_wbcomac_gear_avg_f8); + assign_value_set(out_data.l_04_i_wbcomac_kice_f8(), model_data->l_04_i_wbcomac_kice_f8); + assign_value_set(out_data.l_04_i_wbcomac_bycglim_l1(), model_data->l_04_i_wbcomac_bycglim_l1); + assign_value_set(out_data.l_04_i_wbcomac_bygwlim_l1(), model_data->l_04_i_wbcomac_bygwlim_l1); + assign_value_set(out_data.l_04_i_wbcomac_frz_l1(), model_data->l_04_i_wbcomac_frz_l1); + assign_value_set(out_data.l_04_i_wbcomac_zcgfrz_l1(), model_data->l_04_i_wbcomac_zcgfrz_l1); + assign_value_set(out_data.l_04_i_wbcomac_zcgfrz_grfx_l1(), model_data->l_04_i_wbcomac_zcgfrz_grfx_l1); + assign_value_set(out_data.l_04_i_wbcomac_ycgfrz_l1(), model_data->l_04_i_wbcomac_ycgfrz_l1); + assign_value_set(out_data.l_04_i_wbcomac_inertfrz_l1(), model_data->l_04_i_wbcomac_inertfrz_l1); + assign_value_set(out_data.l_04_i_wbcomac_potreq_gw_f8(), model_data->l_04_i_wbcomac_potreq_gw_f8); + assign_value_set(out_data.l_04_i_wbcomac_potreq_gwcg_f8(), model_data->l_04_i_wbcomac_potreq_gwcg_f8); + assign_value_set(out_data.l_04_i_wbcomac_phi_deg_f8(), model_data->l_04_i_wbcomac_phi_deg_f8); + assign_value_set(out_data.l_04_i_wbcomac_psi_deg_f8(), model_data->l_04_i_wbcomac_psi_deg_f8); + sendOutData(); } protected: DDSType data; diff --git a/Release/IDL/C909_V1/ATA04/WeightBalance_output.hpp b/Release/IDL/C909_V1/ATA04/WeightBalance_output.hpp index 1f9a580..674d9b0 100644 --- a/Release/IDL/C909_V1/ATA04/WeightBalance_output.hpp +++ b/Release/IDL/C909_V1/ATA04/WeightBalance_output.hpp @@ -85,62 +85,63 @@ public: return; std::lock_guard lock(outDataMutex); clearOutData(); - assign_value_set(data.l_04_o_wbcomac_frz_l1(), model_data->l_04_o_wbcomac_frz_l1); - assign_value_set(data.l_04_o_wbcomac_zcgfrz_l1(), model_data->l_04_o_wbcomac_zcgfrz_l1); - assign_value_set(data.l_04_o_wbcomac_zcgfrz_grfx_l1(), model_data->l_04_o_wbcomac_zcgfrz_grfx_l1); - assign_value_set(data.l_04_o_wbcomac_ycgfrz_l1(), model_data->l_04_o_wbcomac_ycgfrz_l1); - assign_value_set(data.l_04_o_wbcomac_inertfrz_l1(), model_data->l_04_o_wbcomac_inertfrz_l1); - assign_value_set(data.l_04_o_wbcomac_gw_f4(), model_data->l_04_o_wbcomac_gw_f4); - assign_value_set(data.l_04_o_wbcomac_cg_f4(), model_data->l_04_o_wbcomac_cg_f4); - assign_value_set(data.l_04_o_wbcomac_blcg_f8(), model_data->l_04_o_wbcomac_blcg_f8); - assign_value_set(data.l_04_o_wbcomac_bscg_f8(), model_data->l_04_o_wbcomac_bscg_f8); - assign_value_set(data.l_04_o_wbcomac_wlcg_f8(), model_data->l_04_o_wbcomac_wlcg_f8); - assign_value_set(data.l_04_o_wbcomac_xcg_f8(), model_data->l_04_o_wbcomac_xcg_f8); - assign_value_set(data.l_04_o_wbcomac_ixx_f8(), model_data->l_04_o_wbcomac_ixx_f8); - assign_value_set(data.l_04_o_wbcomac_ixy_f8(), model_data->l_04_o_wbcomac_ixy_f8); - assign_value_set(data.l_04_o_wbcomac_ixz_f8(), model_data->l_04_o_wbcomac_ixz_f8); - assign_value_set(data.l_04_o_wbcomac_iyy_f8(), model_data->l_04_o_wbcomac_iyy_f8); - assign_value_set(data.l_04_o_wbcomac_iyz_f8(), model_data->l_04_o_wbcomac_iyz_f8); - assign_value_set(data.l_04_o_wbcomac_izz_f8(), model_data->l_04_o_wbcomac_izz_f8); - assign_value_set(data.l_04_o_wbcomac_zfw_f4(), model_data->l_04_o_wbcomac_zfw_f4); - assign_value_set(data.l_04_o_wbcomac_zfwcg_f4(), model_data->l_04_o_wbcomac_zfwcg_f4); - assign_value_set(data.l_04_o_wbcomac_zfw_blcg_f4(), model_data->l_04_o_wbcomac_zfw_blcg_f4); - assign_value_set(data.l_04_o_wbcomac_zfw_wlcg_f4(), model_data->l_04_o_wbcomac_zfw_wlcg_f4); - assign_value_set(data.l_04_o_wbcomac_fuel_cmd_f8(), model_data->l_04_o_wbcomac_fuel_cmd_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_mode_i4(), model_data->l_04_o_wbcomac_fuel_mode_i4); - assign_value_set(data.l_04_o_wbcomac_fuel_ixx_f8(), model_data->l_04_o_wbcomac_fuel_ixx_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_ixy_f8(), model_data->l_04_o_wbcomac_fuel_ixy_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_ixz_f8(), model_data->l_04_o_wbcomac_fuel_ixz_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_iyy_f8(), model_data->l_04_o_wbcomac_fuel_iyy_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_iyz_f8(), model_data->l_04_o_wbcomac_fuel_iyz_f8); - assign_value_set(data.l_04_o_wbcomac_fuel_izz_f8(), model_data->l_04_o_wbcomac_fuel_izz_f8); - assign_value_set(data.l_04_o_wbcomac_l_wt_fuel_f8(), model_data->l_04_o_wbcomac_l_wt_fuel_f8); - assign_value_set(data.l_04_o_wbcomac_ice_airframe_total_f8(), model_data->l_04_o_wbcomac_ice_airframe_total_f8); - assign_value_set(data.l_04_o_wbcomac_ice_eng_f8(), model_data->l_04_o_wbcomac_ice_eng_f8); - assign_value_set(data.l_04_o_wbcomac_ice_eng_total_f8(), model_data->l_04_o_wbcomac_ice_eng_total_f8); - assign_value_set(data.l_04_o_wbcomac_ice_fuselage_f8(), model_data->l_04_o_wbcomac_ice_fuselage_f8); - assign_value_set(data.l_04_o_wbcomac_ice_stab_left_f8(), model_data->l_04_o_wbcomac_ice_stab_left_f8); - assign_value_set(data.l_04_o_wbcomac_ice_stab_right_f8(), model_data->l_04_o_wbcomac_ice_stab_right_f8); - assign_value_set(data.l_04_o_wbcomac_ice_stab_total_f8(), model_data->l_04_o_wbcomac_ice_stab_total_f8); - assign_value_set(data.l_04_o_wbcomac_ice_total_f8(), model_data->l_04_o_wbcomac_ice_total_f8); - assign_value_set(data.l_04_o_wbcomac_ice_total_frac_f8(), model_data->l_04_o_wbcomac_ice_total_frac_f8); - assign_value_set(data.l_04_o_wbcomac_ice_vert_tail_f8(), model_data->l_04_o_wbcomac_ice_vert_tail_f8); - assign_value_set(data.l_04_o_wbcomac_ice_wing_left_f8(), model_data->l_04_o_wbcomac_ice_wing_left_f8); - assign_value_set(data.l_04_o_wbcomac_ice_wing_right_f8(), model_data->l_04_o_wbcomac_ice_wing_right_f8); - assign_value_set(data.l_04_o_wbcomac_ice_wing_total_f8(), model_data->l_04_o_wbcomac_ice_wing_total_f8); - assign_value_set(data.l_04_o_wbcomac_init_l1(), model_data->l_04_o_wbcomac_init_l1); - assign_value_set(data.l_04_o_wbcomac_potmin_gw_f8(), model_data->l_04_o_wbcomac_potmin_gw_f8); - assign_value_set(data.l_04_o_wbcomac_potmax_gw_f8(), model_data->l_04_o_wbcomac_potmax_gw_f8); - assign_value_set(data.l_04_o_wbcomac_potmin_gwcg_f8(), model_data->l_04_o_wbcomac_potmin_gwcg_f8); - assign_value_set(data.l_04_o_wbcomac_potmax_gwcg_f8(), model_data->l_04_o_wbcomac_potmax_gwcg_f8); - assign_value_set(data.l_04_o_wbcomac_min_cg_f4(), model_data->l_04_o_wbcomac_min_cg_f4); - assign_value_set(data.l_04_o_wbcomac_min_gw_f4(), model_data->l_04_o_wbcomac_min_gw_f4); - assign_value_set(data.l_04_o_wbcomac_min_zfw_f4(), model_data->l_04_o_wbcomac_min_zfw_f4); - assign_value_set(data.l_04_o_wbcomac_min_zfwcg_f4(), model_data->l_04_o_wbcomac_min_zfwcg_f4); - assign_value_set(data.l_04_o_wbcomac_max_cg_f4(), model_data->l_04_o_wbcomac_max_cg_f4); - assign_value_set(data.l_04_o_wbcomac_max_gw_f4(), model_data->l_04_o_wbcomac_max_gw_f4); - assign_value_set(data.l_04_o_wbcomac_max_zfw_f4(), model_data->l_04_o_wbcomac_max_zfw_f4); - assign_value_set(data.l_04_o_wbcomac_max_zfwcg_f4(), model_data->l_04_o_wbcomac_max_zfwcg_f4); + assign_value_set(out_data.l_04_o_wbcomac_frz_l1(), model_data->l_04_o_wbcomac_frz_l1); + assign_value_set(out_data.l_04_o_wbcomac_zcgfrz_l1(), model_data->l_04_o_wbcomac_zcgfrz_l1); + assign_value_set(out_data.l_04_o_wbcomac_zcgfrz_grfx_l1(), model_data->l_04_o_wbcomac_zcgfrz_grfx_l1); + assign_value_set(out_data.l_04_o_wbcomac_ycgfrz_l1(), model_data->l_04_o_wbcomac_ycgfrz_l1); + assign_value_set(out_data.l_04_o_wbcomac_inertfrz_l1(), model_data->l_04_o_wbcomac_inertfrz_l1); + assign_value_set(out_data.l_04_o_wbcomac_gw_f4(), model_data->l_04_o_wbcomac_gw_f4); + assign_value_set(out_data.l_04_o_wbcomac_cg_f4(), model_data->l_04_o_wbcomac_cg_f4); + assign_value_set(out_data.l_04_o_wbcomac_blcg_f8(), model_data->l_04_o_wbcomac_blcg_f8); + assign_value_set(out_data.l_04_o_wbcomac_bscg_f8(), model_data->l_04_o_wbcomac_bscg_f8); + assign_value_set(out_data.l_04_o_wbcomac_wlcg_f8(), model_data->l_04_o_wbcomac_wlcg_f8); + assign_value_set(out_data.l_04_o_wbcomac_xcg_f8(), model_data->l_04_o_wbcomac_xcg_f8); + assign_value_set(out_data.l_04_o_wbcomac_ixx_f8(), model_data->l_04_o_wbcomac_ixx_f8); + assign_value_set(out_data.l_04_o_wbcomac_ixy_f8(), model_data->l_04_o_wbcomac_ixy_f8); + assign_value_set(out_data.l_04_o_wbcomac_ixz_f8(), model_data->l_04_o_wbcomac_ixz_f8); + assign_value_set(out_data.l_04_o_wbcomac_iyy_f8(), model_data->l_04_o_wbcomac_iyy_f8); + assign_value_set(out_data.l_04_o_wbcomac_iyz_f8(), model_data->l_04_o_wbcomac_iyz_f8); + assign_value_set(out_data.l_04_o_wbcomac_izz_f8(), model_data->l_04_o_wbcomac_izz_f8); + assign_value_set(out_data.l_04_o_wbcomac_zfw_f4(), model_data->l_04_o_wbcomac_zfw_f4); + assign_value_set(out_data.l_04_o_wbcomac_zfwcg_f4(), model_data->l_04_o_wbcomac_zfwcg_f4); + assign_value_set(out_data.l_04_o_wbcomac_zfw_blcg_f4(), model_data->l_04_o_wbcomac_zfw_blcg_f4); + assign_value_set(out_data.l_04_o_wbcomac_zfw_wlcg_f4(), model_data->l_04_o_wbcomac_zfw_wlcg_f4); + assign_value_set(out_data.l_04_o_wbcomac_fuel_cmd_f8(), model_data->l_04_o_wbcomac_fuel_cmd_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_mode_i4(), model_data->l_04_o_wbcomac_fuel_mode_i4); + assign_value_set(out_data.l_04_o_wbcomac_fuel_ixx_f8(), model_data->l_04_o_wbcomac_fuel_ixx_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_ixy_f8(), model_data->l_04_o_wbcomac_fuel_ixy_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_ixz_f8(), model_data->l_04_o_wbcomac_fuel_ixz_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_iyy_f8(), model_data->l_04_o_wbcomac_fuel_iyy_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_iyz_f8(), model_data->l_04_o_wbcomac_fuel_iyz_f8); + assign_value_set(out_data.l_04_o_wbcomac_fuel_izz_f8(), model_data->l_04_o_wbcomac_fuel_izz_f8); + assign_value_set(out_data.l_04_o_wbcomac_l_wt_fuel_f8(), model_data->l_04_o_wbcomac_l_wt_fuel_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_airframe_total_f8(), model_data->l_04_o_wbcomac_ice_airframe_total_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_eng_f8(), model_data->l_04_o_wbcomac_ice_eng_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_eng_total_f8(), model_data->l_04_o_wbcomac_ice_eng_total_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_fuselage_f8(), model_data->l_04_o_wbcomac_ice_fuselage_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_stab_left_f8(), model_data->l_04_o_wbcomac_ice_stab_left_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_stab_right_f8(), model_data->l_04_o_wbcomac_ice_stab_right_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_stab_total_f8(), model_data->l_04_o_wbcomac_ice_stab_total_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_total_f8(), model_data->l_04_o_wbcomac_ice_total_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_total_frac_f8(), model_data->l_04_o_wbcomac_ice_total_frac_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_vert_tail_f8(), model_data->l_04_o_wbcomac_ice_vert_tail_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_wing_left_f8(), model_data->l_04_o_wbcomac_ice_wing_left_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_wing_right_f8(), model_data->l_04_o_wbcomac_ice_wing_right_f8); + assign_value_set(out_data.l_04_o_wbcomac_ice_wing_total_f8(), model_data->l_04_o_wbcomac_ice_wing_total_f8); + assign_value_set(out_data.l_04_o_wbcomac_init_l1(), model_data->l_04_o_wbcomac_init_l1); + assign_value_set(out_data.l_04_o_wbcomac_potmin_gw_f8(), model_data->l_04_o_wbcomac_potmin_gw_f8); + assign_value_set(out_data.l_04_o_wbcomac_potmax_gw_f8(), model_data->l_04_o_wbcomac_potmax_gw_f8); + assign_value_set(out_data.l_04_o_wbcomac_potmin_gwcg_f8(), model_data->l_04_o_wbcomac_potmin_gwcg_f8); + assign_value_set(out_data.l_04_o_wbcomac_potmax_gwcg_f8(), model_data->l_04_o_wbcomac_potmax_gwcg_f8); + assign_value_set(out_data.l_04_o_wbcomac_min_cg_f4(), model_data->l_04_o_wbcomac_min_cg_f4); + assign_value_set(out_data.l_04_o_wbcomac_min_gw_f4(), model_data->l_04_o_wbcomac_min_gw_f4); + assign_value_set(out_data.l_04_o_wbcomac_min_zfw_f4(), model_data->l_04_o_wbcomac_min_zfw_f4); + assign_value_set(out_data.l_04_o_wbcomac_min_zfwcg_f4(), model_data->l_04_o_wbcomac_min_zfwcg_f4); + assign_value_set(out_data.l_04_o_wbcomac_max_cg_f4(), model_data->l_04_o_wbcomac_max_cg_f4); + assign_value_set(out_data.l_04_o_wbcomac_max_gw_f4(), model_data->l_04_o_wbcomac_max_gw_f4); + assign_value_set(out_data.l_04_o_wbcomac_max_zfw_f4(), model_data->l_04_o_wbcomac_max_zfw_f4); + assign_value_set(out_data.l_04_o_wbcomac_max_zfwcg_f4(), model_data->l_04_o_wbcomac_max_zfwcg_f4); + sendOutData(); } protected: DDSType data; diff --git a/Release/Models/libXNAerodynamics.so.1.0.0.0 b/Release/Models/libXNAerodynamics.so.1.0.0.0 index cf44956098f578ffee641fff48d4ccd18a1cdd78..7716a434cca2f36599b405f59e81c441fe201eed 100644 GIT binary patch delta 5678 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 diff --git a/Release/Models/libXNGroundHandling.so.2.0.143.1 b/Release/Models/libXNGroundHandling.so.2.0.143.1 index 4a11400656dc289b6040559c07b1cf63055e009b..2704ceb92c77fcc061322eb898088a551e0012ff 100644 GIT binary patch delta 3943 zcma)94Nw%<9p76HI6h?W5cB|zryd6U08CB1HrCuJl9isaDk>`4tC5cwQ)$&ot$JtH zwRc_5p?zaZG)~brsS}%)c-A^4u`t?|WD?6bMM+Zyt(_dL3e`-+&cyBSy*eT)9r?BQ z>PY8b{#KoTKPnuLRr4Pw6}lvYmueU;dj!X2a_O9Xz5yIbGHgEarHv*{DK_3Kkpn4Z zDSb-}M}YLFEYJ0>FlyTk!~F@}Pe7RV6=Y@VYkb#Y!l$j_+bhW0v@#mu^|Z1lTxNvh zW}7sN(Wa}y089m3a)N<}7Lf_*MLa?-PA}u7RpbC_B@%fT#tZZ-hMqO5QB=R~j8E$aAh&tZ4JYibOCrVd3(`c4PgHISyMLM(TRVTMCD?`D zxXrUgbzZ|AVIyfl6;^FEtlSPOs&=6;%Pkc8-FCr|DXNl9RK37T-7dkADmb`M+aL=w z=C)v$cO)7*-9z3WYP=;K)rVW3+<^CKPVK_AOk8JzH4q#`;#e zy>v@UbRP!;=m8&FS=8&Ht;eEA3kwlBYT~Y9^5lYI-gA|dEFaHjUnP+RVD5< z@=3*PzUnf0N?OWK?X*{7RW}`K ze&fE%rDEjMC1T``DBtk-)%?R#@P%TWcDkU|=tXH4lti}Q=9w!hoJ`OZ3n03jVTD6U zI62p%DG3w{D?AJ~)m)pV*eQZcsnEPZF}oI2T*DwuHxzVgO35%*U}7#!@eX4i6D!aZ zX&4httVB}+!&sGxc{HVA7^^oiucm|;7KEBc6BMbmFe;kTM4h5KS3=shL6q07DXk_} zB{-tZtcgQ83j2Tpen3;YC=HZTCZ+RplzL4WG$}oaTrr01P~xBCG+?f9hS4xXa3RIA zSp!6_R*oF+6dZ>G=a<*dR7D^Ttt_M}{Uhfut#?fKplQuvAl*$S0rbi1hRUtIuQ&nk;iB zhbR@SQ`qN-=}b0aaDR>a5iJP z=wW~^Y&OPn!qB7D@oE7|n&P3XQ4{EL4YH0J0MnK5GX5I@W)#Urq@{U5nL`c{9Qzv? z8VwuHW*EAp>`%?`QVkj1w!%lJxZUKK?s@3?C?I^#orZ~1gMPbUX@fpkGjZo3L3?Q8 z&SXitKc|Of+TG}ZBLhpbC-+=pDVt^#8_g(jRv(CmKG1a|^T;=lxW`saB1Ox#cslZj zQJI^0ae`EDlSST_?9?q(vs+08^$qVc05W=$mJE5?q@M*wyx6yTVoheB3&Y}<<3 zgyVrQZ|NbCwX0S(Vlt{Q@G$HK*dExubRu9|VCiI?fc4-Uxegm1)b&9gJlHJ!BW?bt zu1l~(pMVG3cvsh*$U3%rWcG9GM>%ikI$E)341OE%X5ApCpL=X_DO|&M3_IYTt-E9?CK)wPq&7iS8GP2eq`W4Vf9ocxt@%o-_m-~H1a3V@ zUa!d;b%)1LoggXC3v$? z+>Qh9EXr1y+^=2bm|=LSnlV<6tGZ3r*A?-n?vMj@Gc9Myg}S<&24jS!pwwdus&LZP zqm?y47S}%;eA@6z@OHvmkAs?Cp{!GY&&jYy`8gTRy$QYy*B+}cqd-n9&1kVCypTk- zLpqd0c!sS!trQ4Y4-j7(SAdxGv22t4i#bc9J^A3vPL9jVOHZ~nSrA7~+%waEo(*gLJ$}rGE|U4C&3!+mGnG3-%AfyHb_>q>chV;w7{Toyfr$mhYEO*q znw-hUY#aJ4{9twL?=MbDge94q)>vl6zO`u}!Qvs`*t(Tsf8M$;H?+v;W1+bXauA2! z1Ep25ml_vZ=ne3~cgt{Vi{)-ZwX1@x|K2U$i(BIMTl8jEzN6@oo8_(@kF(3-4t8}+ z-C35~Zr(HZnel%j81Y>aS-*21y9UDGg875skNG1>WI|{e1-FGR;tm>HysIpa|5YJ5 o@JdnYV6~wX!Y{m{Sw1E&A1Zdtdfots?OSBgi=$(MhinP|2BEmaWB>pF delta 3149 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 VCLN&r7Tjyt^SD3G&K|h_e*pHA*`@#h delta 11230 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 diff --git a/Release/include/XNCore/XNDDSInterface.h b/Release/include/XNCore/XNDDSInterface.h index 22f3dde..416640e 100644 --- a/Release/include/XNCore/XNDDSInterface.h +++ b/Release/include/XNCore/XNDDSInterface.h @@ -39,13 +39,14 @@ public: * @param varNames: 变量名列表 * @return: 变量名到数据的映射 */ - std::unordered_map getStringData(std::vector varNames); + std::unordered_map + getStringData(const std::vector &varNames); /** * @brief 批量设置指定变量的数据 * @param data: 变量名到数据的映射 */ - void setDataByString(std::unordered_map data); + void setDataByString(const std::unordered_map &data); protected: /** @@ -54,7 +55,7 @@ protected: * @return 字节数组 */ template - XNByteArray getByteArray(eprosima::fastcdr::optional data) + XNByteArray getByteArray(const eprosima::fastcdr::optional &data) { XNByteArray result(getTypeSize()); @@ -74,7 +75,7 @@ protected: } } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } return result; @@ -108,7 +109,7 @@ protected: setByteArrayFromStdArray(data.value(), thisArray); } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } } @@ -125,10 +126,13 @@ protected: for (std::size_t i = 0; i < N; ++i) { if constexpr (std::is_arithmetic_v) { std::memcpy(result.data() + i * getTypeSize(), &data[i], getTypeSize()); - } else { + } else if constexpr (is_std_array_v) { XNByteArray subArray = getByteArrayFromStdArray(data[i]); std::memcpy(result.data() + i * getTypeSize(), subArray.data(), getTypeSize()); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } @@ -149,9 +153,12 @@ protected: for (std::size_t i = 0; i < N; ++i) { if constexpr (std::is_arithmetic_v) { std::memcpy(&data[i], byteArray.data() + i * getTypeSize(), getTypeSize()); - } else { + } else if constexpr (is_std_array_v) { XNByteArray subArray(byteArray.data() + i * getTypeSize(), getTypeSize()); setByteArrayFromStdArray(data[i], subArray); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } } @@ -162,7 +169,7 @@ protected: * @return: 数据(字符串格式) */ template - std::string getString(eprosima::fastcdr::optional data) + std::string getString(const eprosima::fastcdr::optional &data) { if constexpr (std::is_arithmetic_v) { if (data) { @@ -177,6 +184,9 @@ protected: T zero = {}; return getStringFromStdArray(zero); } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } return std::string(); } @@ -206,6 +216,9 @@ protected: T temp; setStdArrayFromString(temp, items, 0); data = temp; + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } @@ -215,7 +228,7 @@ protected: * @return: 数据(字符串格式) */ template - std::string getStringFromStdArray(std::array data) + std::string getStringFromStdArray(const std::array &data) { std::stringstream ss; for (std::size_t i = 0; i < N; ++i) { @@ -223,8 +236,11 @@ protected: ss << ","; if constexpr (std::is_arithmetic_v) { ss << data[i]; - } else { + } else if constexpr (is_std_array_v) { ss << getStringFromStdArray(data[i]); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } return ss.str(); @@ -257,59 +273,92 @@ protected: start_pos = setStdArrayFromString(data[i], value, start_pos + i); } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } } catch (const std::exception &e) { - throw std::runtime_error("Error parsing element " + std::to_string(i) + ": " - + e.what()); + throw std::runtime_error("无法解析第 " + std::to_string(i) + + " 个元素: " + e.what()); } } return start_pos + N; } template - void assign_value_get(eprosima::fastcdr::optional &data, T2 &model_data) + void assign_value_get(const eprosima::fastcdr::optional &data, T2 &model_data) { if (data) { auto temp = data.value(); if constexpr (std::is_arithmetic_v) { + static_assert(std::is_arithmetic_v, "模板参数T2必须是算术类型"); + static_assert(std::is_convertible_v, "模板参数T1必须可以转换为T2类型"); model_data = temp; } else if constexpr (is_std_array_v) { size_t arraySize = array_size_v; for (size_t i = 0; i < arraySize; ++i) { - auto temp2 = temp[i]; - if constexpr (std::is_arithmetic_v) { + auto temp2 = temp[i]; + using array_type = typename T1::value_type; + if constexpr (std::is_arithmetic_v) { model_data[i] = temp2; - } else if constexpr (is_std_array_v) { - size_t arraySize2 = array_size_v; - for (size_t j = 0; j < arraySize2; ++j) { - model_data[i][j] = temp2[j]; + } else if constexpr (is_std_array_v) { + size_t arraySize2 = array_size_v; + using sub_array_type = typename array_type::value_type; + if constexpr (std::is_arithmetic_v) { + for (size_t j = 0; j < arraySize2; ++j) { + model_data[i][j] = temp2[j]; + } + } else { + static_assert(std::is_arithmetic_v, + "模板参数T1是std::array类型时,它的数组嵌套不能超过两层"); } + } else { + static_assert(std::is_arithmetic_v + || is_std_array_v, + "模板参数T1是std::array类型时,它的value_" + "type必须是算术类型或std::array类型"); } } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1必须是算术类型或std::array类型"); } } } template - void assign_value_set(eprosima::fastcdr::optional &data, T2 &model_data) + void assign_value_set(eprosima::fastcdr::optional &data, const T2 &model_data) { if constexpr (std::is_arithmetic_v) { + static_assert(std::is_arithmetic_v, "模板参数T2必须是算术类型"); + static_assert(std::is_convertible_v, "模板参数T2必须可以转换为T1类型"); data = model_data; } else if constexpr (is_std_array_v) { T1 temp; size_t arraySize = array_size_v; + using array_type = typename T1::value_type; for (size_t i = 0; i < arraySize; ++i) { - if constexpr (std::is_arithmetic_v) { + if constexpr (std::is_arithmetic_v) { temp[i] = model_data[i]; - } else if constexpr (is_std_array_v) { - size_t arraySize2 = array_size_v; - for (size_t j = 0; j < arraySize2; ++j) { - temp[i][j] = model_data[i][j]; + } else if constexpr (is_std_array_v) { + size_t arraySize2 = array_size_v; + using sub_array_type = typename array_type::value_type; + if constexpr (std::is_arithmetic_v) { + for (size_t j = 0; j < arraySize2; ++j) { + temp[i][j] = model_data[i][j]; + } + } else { + static_assert(std::is_arithmetic_v, + "模板参数T1是std::array类型时,它的数组嵌套不能超过两层"); } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1是std::array类型时,它的value_" + "type必须是算术类型或std::array类型"); } } data = temp; + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1必须是算术类型或std::array类型"); } } @@ -330,10 +379,10 @@ protected: #define MAP_DATA_FUNC(NAME) \ getDataFunction[#NAME] = [this]() { return getString(data.NAME()); }; \ - setDataFunction[#NAME] = [this](std::string value) { \ + setDataFunction[#NAME] = [this](const std::string &value) { \ setDataFromString(out_data.NAME(), value); \ }; \ getByteArrayFunction.push_back([this]() { return getByteArray(data.NAME()); }); \ - setByteArrayFunction.push_back([this](XNByteArray byteArray, uint32_t &pos) { \ + setByteArrayFunction.push_back([this](const XNByteArray &byteArray, uint32_t &pos) { \ setByteArray(out_data.NAME(), byteArray, pos); \ }); diff --git a/XNCore/XNDDSInterface.cpp b/XNCore/XNDDSInterface.cpp index 4ee56aa..1f58b51 100644 --- a/XNCore/XNDDSInterface.cpp +++ b/XNCore/XNDDSInterface.cpp @@ -64,7 +64,7 @@ void XNDDSInterface::setDataByUDPPackage(const XNByteArray &package) } std::unordered_map -XNDDSInterface::getStringData(std::vector varNames) +XNDDSInterface::getStringData(const std::vector &varNames) { std::unordered_map result; @@ -82,7 +82,7 @@ XNDDSInterface::getStringData(std::vector varNames) return result; } -void XNDDSInterface::setDataByString(std::unordered_map data) +void XNDDSInterface::setDataByString(const std::unordered_map &data) { std::lock_guard lock(outDataMutex); clearOutData(); diff --git a/XNCore/XNDDSInterface.h b/XNCore/XNDDSInterface.h index 22f3dde..571e108 100644 --- a/XNCore/XNDDSInterface.h +++ b/XNCore/XNDDSInterface.h @@ -39,13 +39,14 @@ public: * @param varNames: 变量名列表 * @return: 变量名到数据的映射 */ - std::unordered_map getStringData(std::vector varNames); + std::unordered_map + getStringData(const std::vector &varNames); /** * @brief 批量设置指定变量的数据 * @param data: 变量名到数据的映射 */ - void setDataByString(std::unordered_map data); + void setDataByString(const std::unordered_map &data); protected: /** @@ -54,7 +55,7 @@ protected: * @return 字节数组 */ template - XNByteArray getByteArray(eprosima::fastcdr::optional data) + XNByteArray getByteArray(const eprosima::fastcdr::optional &data) { XNByteArray result(getTypeSize()); @@ -74,7 +75,7 @@ protected: } } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } return result; @@ -108,7 +109,7 @@ protected: setByteArrayFromStdArray(data.value(), thisArray); } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } } @@ -125,10 +126,13 @@ protected: for (std::size_t i = 0; i < N; ++i) { if constexpr (std::is_arithmetic_v) { std::memcpy(result.data() + i * getTypeSize(), &data[i], getTypeSize()); - } else { + } else if constexpr (is_std_array_v) { XNByteArray subArray = getByteArrayFromStdArray(data[i]); std::memcpy(result.data() + i * getTypeSize(), subArray.data(), getTypeSize()); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } @@ -149,9 +153,12 @@ protected: for (std::size_t i = 0; i < N; ++i) { if constexpr (std::is_arithmetic_v) { std::memcpy(&data[i], byteArray.data() + i * getTypeSize(), getTypeSize()); - } else { + } else if constexpr (is_std_array_v) { XNByteArray subArray(byteArray.data() + i * getTypeSize(), getTypeSize()); setByteArrayFromStdArray(data[i], subArray); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } } @@ -162,13 +169,13 @@ protected: * @return: 数据(字符串格式) */ template - std::string getString(eprosima::fastcdr::optional data) + std::string getString(const eprosima::fastcdr::optional &data) { if constexpr (std::is_arithmetic_v) { if (data) { return std::to_string(data.value()); } else { - return std::to_string(0); + return "Unknown"; } } else if constexpr (is_std_array_v) { if (data) { @@ -177,6 +184,9 @@ protected: T zero = {}; return getStringFromStdArray(zero); } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } return std::string(); } @@ -206,6 +216,9 @@ protected: T temp; setStdArrayFromString(temp, items, 0); data = temp; + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } @@ -215,7 +228,7 @@ protected: * @return: 数据(字符串格式) */ template - std::string getStringFromStdArray(std::array data) + std::string getStringFromStdArray(const std::array &data) { std::stringstream ss; for (std::size_t i = 0; i < N; ++i) { @@ -223,8 +236,11 @@ protected: ss << ","; if constexpr (std::is_arithmetic_v) { ss << data[i]; - } else { + } else if constexpr (is_std_array_v) { ss << getStringFromStdArray(data[i]); + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "T 必须是算术类型或std::array类型"); } } return ss.str(); @@ -257,59 +273,92 @@ protected: start_pos = setStdArrayFromString(data[i], value, start_pos + i); } else { static_assert(std::is_arithmetic_v || is_std_array_v, - "Type must be arithmetic or std::array"); + "T 必须是算术类型或std::array类型"); } } catch (const std::exception &e) { - throw std::runtime_error("Error parsing element " + std::to_string(i) + ": " - + e.what()); + throw std::runtime_error("无法解析第 " + std::to_string(i) + + " 个元素: " + e.what()); } } return start_pos + N; } template - void assign_value_get(eprosima::fastcdr::optional &data, T2 &model_data) + void assign_value_get(const eprosima::fastcdr::optional &data, T2 &model_data) { if (data) { auto temp = data.value(); if constexpr (std::is_arithmetic_v) { + static_assert(std::is_arithmetic_v, "模板参数T2必须是算术类型"); + static_assert(std::is_convertible_v, "模板参数T1必须可以转换为T2类型"); model_data = temp; } else if constexpr (is_std_array_v) { size_t arraySize = array_size_v; for (size_t i = 0; i < arraySize; ++i) { - auto temp2 = temp[i]; - if constexpr (std::is_arithmetic_v) { + auto temp2 = temp[i]; + using array_type = typename T1::value_type; + if constexpr (std::is_arithmetic_v) { model_data[i] = temp2; - } else if constexpr (is_std_array_v) { - size_t arraySize2 = array_size_v; - for (size_t j = 0; j < arraySize2; ++j) { - model_data[i][j] = temp2[j]; + } else if constexpr (is_std_array_v) { + size_t arraySize2 = array_size_v; + using sub_array_type = typename array_type::value_type; + if constexpr (std::is_arithmetic_v) { + for (size_t j = 0; j < arraySize2; ++j) { + model_data[i][j] = temp2[j]; + } + } else { + static_assert(std::is_arithmetic_v, + "模板参数T1是std::array类型时,它的数组嵌套不能超过两层"); } + } else { + static_assert(std::is_arithmetic_v + || is_std_array_v, + "模板参数T1是std::array类型时,它的value_" + "type必须是算术类型或std::array类型"); } } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1必须是算术类型或std::array类型"); } } } template - void assign_value_set(eprosima::fastcdr::optional &data, T2 &model_data) + void assign_value_set(eprosima::fastcdr::optional &data, const T2 &model_data) { if constexpr (std::is_arithmetic_v) { + static_assert(std::is_arithmetic_v, "模板参数T2必须是算术类型"); + static_assert(std::is_convertible_v, "模板参数T2必须可以转换为T1类型"); data = model_data; } else if constexpr (is_std_array_v) { T1 temp; size_t arraySize = array_size_v; + using array_type = typename T1::value_type; for (size_t i = 0; i < arraySize; ++i) { - if constexpr (std::is_arithmetic_v) { + if constexpr (std::is_arithmetic_v) { temp[i] = model_data[i]; - } else if constexpr (is_std_array_v) { - size_t arraySize2 = array_size_v; - for (size_t j = 0; j < arraySize2; ++j) { - temp[i][j] = model_data[i][j]; + } else if constexpr (is_std_array_v) { + size_t arraySize2 = array_size_v; + using sub_array_type = typename array_type::value_type; + if constexpr (std::is_arithmetic_v) { + for (size_t j = 0; j < arraySize2; ++j) { + temp[i][j] = model_data[i][j]; + } + } else { + static_assert(std::is_arithmetic_v, + "模板参数T1是std::array类型时,它的数组嵌套不能超过两层"); } + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1是std::array类型时,它的value_" + "type必须是算术类型或std::array类型"); } } data = temp; + } else { + static_assert(std::is_arithmetic_v || is_std_array_v, + "模板参数T1必须是算术类型或std::array类型"); } } @@ -330,10 +379,10 @@ protected: #define MAP_DATA_FUNC(NAME) \ getDataFunction[#NAME] = [this]() { return getString(data.NAME()); }; \ - setDataFunction[#NAME] = [this](std::string value) { \ + setDataFunction[#NAME] = [this](const std::string &value) { \ setDataFromString(out_data.NAME(), value); \ }; \ getByteArrayFunction.push_back([this]() { return getByteArray(data.NAME()); }); \ - setByteArrayFunction.push_back([this](XNByteArray byteArray, uint32_t &pos) { \ + setByteArrayFunction.push_back([this](const XNByteArray &byteArray, uint32_t &pos) { \ setByteArray(out_data.NAME(), byteArray, pos); \ }); diff --git a/XNInterfaceGenServer/DDSInterfaceGen.cpp b/XNInterfaceGenServer/DDSInterfaceGen.cpp index 142aa1a..ddf3e53 100644 --- a/XNInterfaceGenServer/DDSInterfaceGen.cpp +++ b/XNInterfaceGenServer/DDSInterfaceGen.cpp @@ -85,9 +85,10 @@ bool DDSInterfaceGen::generateDDSInterfaceHpp(const std::string &nameSpace, hppFile << "\t\t" << "std::lock_guard lock(outDataMutex);" << std::endl; hppFile << "\t\t" << "clearOutData();" << std::endl; for (const auto &interface : interfaceData) { - hppFile << "\t\t" << "assign_value_set(data." << interface.interfaceName + hppFile << "\t\t" << "assign_value_set(out_data." << interface.interfaceName << "(), model_data->" << interface.interfaceName << ");" << std::endl; } + hppFile << "\t\t" << "sendOutData();" << std::endl; hppFile << "\t" << "}" << std::endl; // 11. 写入私有成员变量 hppFile << "" << "protected:" << std::endl; diff --git a/XNModels/CMakeLists.txt b/XNModels/CMakeLists.txt new file mode 100755 index 0000000..9ba1279 --- /dev/null +++ b/XNModels/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.16) + +project(XNModels) + +add_subdirectory(XNATA04DataProcessor) +add_subdirectory(XNAerodynamics) +add_subdirectory(XNGroundHandling) +add_subdirectory(XNWeightBalance) \ No newline at end of file diff --git a/XNMonitorServer/XNMonitorInterface.cpp b/XNMonitorServer/XNMonitorInterface.cpp index a9c8acc..8bf231d 100644 --- a/XNMonitorServer/XNMonitorInterface.cpp +++ b/XNMonitorServer/XNMonitorInterface.cpp @@ -392,10 +392,6 @@ void XN_StopDataMonitor(const char *structName, const int structNameLen, char *e } std::string structNameStr(structName, structNameLen); DataMonitorFactory::ReleaseInstance(structNameStr); - if (errorMsg && errorMsgSize > 0) { - strncpy(errorMsg, "Data Monitor Stopped Successfully", errorMsgSize - 1); - errorMsg[errorMsgSize - 1] = '\0'; - } return; } diff --git a/XNSimHtml/components/data-monitor.js b/XNSimHtml/components/data-monitor.js index 2e2b89a..a510390 100644 --- a/XNSimHtml/components/data-monitor.js +++ b/XNSimHtml/components/data-monitor.js @@ -26,6 +26,8 @@ class DataMonitor extends HTMLElement { this.dragStartWidth = 0; this._colWidthInited = false; this._resizeEventBinded = false; + this.monitorId = `data_monitor_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; // 添加监控器ID + this.dataUpdateTimer = null; // 数据更新定时器 } connectedCallback() { @@ -73,11 +75,25 @@ class DataMonitor extends HTMLElement { /** * @description 从localStorage获取当前选择的配置 - * @returns {Object} 包含plane和configurationId的对象 + * @returns {Object} 包含plane、configurationId和domainId的对象 */ getCurrentSelection() { const selection = localStorage.getItem('xnsim-selection'); - return selection ? JSON.parse(selection) : { plane: '', configurationId: '' }; + + if (!selection) { + return { plane: '', configurationId: '', domainId: '' }; + } + + try { + const parsedSelection = JSON.parse(selection); + return { + plane: parsedSelection.plane || '', + configurationId: parsedSelection.configurationId || '', + domainId: parsedSelection.domainId || '' + }; + } catch (error) { + return { plane: '', configurationId: '', domainId: '' }; + } } /** @@ -156,12 +172,231 @@ class DataMonitor extends HTMLElement { ModelStructName: item.ModelStructName, InjectValue: '', Drawing: false, + isMonitoring: false, color: this.getRandomColor() }); this.renderTable(); } } + /** + * @description 初始化DDS监控服务 + * @returns {Promise} 初始化是否成功 + */ + async initializeDDSMonitor() { + try { + // 获取当前选择的配置 + const selection = this.getCurrentSelection(); + const { domainId } = selection; + if (!domainId) { + throw new Error('未找到有效的域ID,请确保已选择构型并等待构型加载完成'); + } + + // 检查DDS监控状态 + const statusResponse = await fetch('/api/dds-monitor/status'); + if (!statusResponse.ok) { + throw new Error(`获取DDS监控状态失败: ${statusResponse.status} ${statusResponse.statusText}`); + } + const statusData = await statusResponse.json(); + + // 如果未初始化,则初始化 + if (!statusData.isInitialized) { + const initResponse = await fetch('/api/dds-monitor/initialize', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + domainId, + monitorId: this.monitorId + }) + }); + + if (!initResponse.ok) { + const errorData = await initResponse.json(); + throw new Error(`初始化DDS监控失败: ${errorData.error || initResponse.statusText}`); + } + } + + return true; + } catch (error) { + throw error; + } + } + + /** + * @description 按结构体名称分组获取接口数据 + * @returns {Object} 按结构体名称分组的接口数据 + */ + getGroupedInterfaces() { + return this.tableData.reduce((groups, row) => { + if (!groups[row.ModelStructName]) { + groups[row.ModelStructName] = []; + } + groups[row.ModelStructName].push(row.InterfaceName); + return groups; + }, {}); + } + + /** + * @description 估算数据缓冲区大小 + * @param {Array} interfaceNames - 接口名称数组 + * @returns {number} 估算的缓冲区大小(字节) + */ + estimateBufferSize(interfaceNames) { + // 基础开销:JSON格式的开销(括号、引号、逗号等) + const baseOverhead = 100; + + // 每个接口的估算大小 + const interfaceSize = interfaceNames.reduce((total, name) => { + // 接口名称长度 + 引号 + 冒号 + const nameOverhead = name.length + 4; + // 假设每个数据值平均长度为50字节(包括数字、字符串等) + const estimatedValueSize = 50; + // 逗号分隔符 + const separatorSize = 1; + + return total + nameOverhead + estimatedValueSize + separatorSize; + }, 0); + + // 添加一些额外的缓冲空间(20%) + const safetyMargin = Math.ceil((baseOverhead + interfaceSize) * 0.2); + + // 确保返回的大小是4KB的倍数,并设置最小值为8KB + const minSize = 8192; + const size = Math.max(minSize, Math.ceil((baseOverhead + interfaceSize + safetyMargin) / 4096) * 4096); + + return size; + } + + /** + * @description 启动数据更新定时器 + */ + startDataUpdateTimer() { + if (this.dataUpdateTimer) { + clearInterval(this.dataUpdateTimer); + } + + this.dataUpdateTimer = setInterval(async () => { + try { + const groupedInterfaces = this.getGroupedInterfaces(); + + // 对每个结构体启动监控并获取数据 + for (const [structName, interfaceNames] of Object.entries(groupedInterfaces)) { + try { + // 启动数据监控 + const startResponse = await fetch('/api/data-monitor/start', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ structName }) + }); + + if (!startResponse.ok) { + throw new Error(`启动数据监控失败: ${structName}`); + } + + // 获取监控数据 + const interfaceNamesStr = JSON.stringify(interfaceNames); + // 估算所需的缓冲区大小 + const bufferSize = this.estimateBufferSize(interfaceNames); + + const infoResponse = await fetch(`/api/data-monitor/info?structName=${encodeURIComponent(structName)}&interfaceName=${encodeURIComponent(interfaceNamesStr)}&bufferSize=${bufferSize}`); + + if (!infoResponse.ok) { + throw new Error(`获取监控数据失败: ${structName}`); + } + + const responseData = await infoResponse.json(); + + if (!responseData.success) { + throw new Error(`获取监控数据失败: ${responseData.message || '未知错误'}`); + } + + if (!responseData.data) { + throw new Error(`获取监控数据失败: 返回数据为空`); + } + + // 更新表格数据 + this.tableData.forEach(row => { + if (row.ModelStructName === structName && responseData.data[row.InterfaceName]) { + row.monitorData = responseData.data[row.InterfaceName]; + } + }); + } catch (structError) { + console.error(`处理结构体 ${structName} 时出错:`, structError); + // 继续处理其他结构体 + continue; + } + } + + // 更新表格显示 + this.renderTable(); + } catch (error) { + console.error('数据更新失败:', error); + // 如果发生错误,停止定时器 + this.stopDataUpdateTimer(); + // 更新UI状态 + const globalMonitorBtn = this.shadowRoot.getElementById('globalMonitorBtn'); + const statusIndicator = this.shadowRoot.getElementById('statusIndicator'); + const statusText = this.shadowRoot.getElementById('statusText'); + + if (globalMonitorBtn) { + globalMonitorBtn.textContent = '开始监控'; + globalMonitorBtn.classList.remove('monitoring'); + } + if (statusIndicator) { + statusIndicator.classList.remove('active'); + statusIndicator.classList.add('error'); + } + if (statusText) { + statusText.textContent = '监控错误'; + } + + // 清空所有监控数据 + this.tableData.forEach(row => { + row.isMonitoring = false; + row.monitorData = ''; + }); + + this.renderTable(); + alert(`数据监控发生错误: ${error.message}`); + } + }, 1000); // 每秒更新一次 + } + + /** + * @description 停止数据更新定时器,并通知后端停止监控所有相关结构体 + */ + async stopDataUpdateTimer() { + // 先清理前端定时器 + if (this.dataUpdateTimer) { + clearInterval(this.dataUpdateTimer); + this.dataUpdateTimer = null; + } + // 收集所有正在监控的结构体名(去重) + const monitoringStructs = Array.from(new Set( + this.tableData + .filter(row => row.isMonitoring) + .map(row => row.ModelStructName) + )); + // 并发调用后端接口,通知停止监控 + try { + await Promise.all( + monitoringStructs.map(structName => + fetch('/api/data-monitor/stop', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ structName }) + }) + ) + ); + } catch (error) { + console.error('停止后端监控时发生错误:', error); + } + } + /** * @description 渲染表格内容 */ @@ -172,15 +407,14 @@ class DataMonitor extends HTMLElement { ${row.InterfaceName} ${row.ModelStructName} - + ${row.monitorData || ''} - - - - + + + @@ -214,6 +448,7 @@ class DataMonitor extends HTMLElement { this.updateChart(); }; }); + this.shadowRoot.querySelectorAll('.delete-btn').forEach(btn => { btn.onclick = (e) => { const idx = parseInt(btn.getAttribute('data-index')); @@ -329,12 +564,81 @@ class DataMonitor extends HTMLElement { box-sizing: border-box; } + .toolbar { + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 16px; + background: #fff; + border-radius: 8px; + box-shadow: 0 2px 8px rgba(0,0,0,0.06); + margin-bottom: 16px; + } + + .toolbar-left { + display: flex; + align-items: center; + gap: 12px; + } + + .toolbar-right { + display: flex; + align-items: center; + gap: 12px; + } + + .monitor-status { + display: flex; + align-items: center; + gap: 8px; + font-size: 14px; + color: #666; + } + + .status-indicator { + width: 8px; + height: 8px; + border-radius: 50%; + background: #ccc; + } + + .status-indicator.active { + background: #52c41a; + } + + .status-indicator.error { + background: #ff4d4f; + } + + .global-monitor-btn { + padding: 6px 16px; + border: none; + border-radius: 4px; + background: #1890ff; + color: white; + cursor: pointer; + font-size: 14px; + transition: all 0.3s; + } + + .global-monitor-btn:hover { + background: #40a9ff; + } + + .global-monitor-btn.monitoring { + background: #ff4d4f; + } + + .global-monitor-btn.monitoring:hover { + background: #ff7875; + } + .monitor-container { background-color: white; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); padding: 16px; - height: 100%; + height: calc(100% - 72px); box-sizing: border-box; display: flex; gap: 16px; @@ -611,7 +915,26 @@ class DataMonitor extends HTMLElement { .th-resize.active::after { background: #1890ff; } + .monitor-btn.monitoring { + background: #ff4d4f; + color: #fff; + } + .action-btn:disabled { + opacity: 0.5; + cursor: not-allowed; + } +
+
+ +
+
+
+
+ 未监控 +
+
+