先提交气动模型的暂时修改

This commit is contained in:
jinchao 2025-05-21 09:18:30 +08:00
parent 73d8dd7eab
commit efcc6597cb
7 changed files with 41 additions and 48 deletions

View File

@ -194,14 +194,14 @@ public:
void class ::RegisterDDSParticipant() \ void class ::RegisterDDSParticipant() \
{ \ { \
XNModelObject::RegisterDDSParticipant(); \ XNModelObject::RegisterDDSParticipant(); \
Q_D(class); \ T_D(); \
auto framework = GetFramework(); \ auto framework = GetFramework(); \
if (!framework) \ if (!framework) \
return; \ return; \
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \ XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
if (!ddsManager) \ if (!ddsManager) \
return; \ return; \
quint32 MyID = getUniqueId(); uint32_t MyID = GetUniqueId();
#define XN_PUBLISHTOPIC(topic) \ #define XN_PUBLISHTOPIC(topic) \
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID); d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
@ -215,6 +215,6 @@ public:
#define XN_MODEL_INITIALIZE(ClassName) \ #define XN_MODEL_INITIALIZE(ClassName) \
extern "C" XNModelObjectPtr Initial##ClassName() \ extern "C" XNModelObjectPtr Initial##ClassName() \
{ \ { \
ClassNamePtr obj = std::make_shared<ClassName>(); \ ClassName##Ptr obj = std::make_shared<ClassName>(); \
return obj; \ return obj; \
} }

View File

@ -194,14 +194,14 @@ public:
void class ::RegisterDDSParticipant() \ void class ::RegisterDDSParticipant() \
{ \ { \
XNModelObject::RegisterDDSParticipant(); \ XNModelObject::RegisterDDSParticipant(); \
Q_D(class); \ T_D(); \
auto framework = GetFramework(); \ auto framework = GetFramework(); \
if (!framework) \ if (!framework) \
return; \ return; \
XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \ XNDDSManagerPtr ddsManager = framework->GetDDSManager(); \
if (!ddsManager) \ if (!ddsManager) \
return; \ return; \
quint32 MyID = getUniqueId(); uint32_t MyID = GetUniqueId();
#define XN_PUBLISHTOPIC(topic) \ #define XN_PUBLISHTOPIC(topic) \
d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID); d->_dataWriters[#topic] = ddsManager->RegisterPublisher<topic##PubSubType>(#topic, MyID);
@ -215,6 +215,6 @@ public:
#define XN_MODEL_INITIALIZE(ClassName) \ #define XN_MODEL_INITIALIZE(ClassName) \
extern "C" XNModelObjectPtr Initial##ClassName() \ extern "C" XNModelObjectPtr Initial##ClassName() \
{ \ { \
ClassNamePtr obj = std::make_shared<ClassName>(); \ ClassName##Ptr obj = std::make_shared<ClassName>(); \
return obj; \ return obj; \
} }

View File

@ -3,6 +3,10 @@
"*.cpp": "cpp", "*.cpp": "cpp",
"functional": "cpp", "functional": "cpp",
"qhash": "cpp", "qhash": "cpp",
"qstringlist": "cpp" "qstringlist": "cpp",
"*.ipp": "cpp",
"*.tcc": "cpp",
"optional": "cpp",
"type_traits": "cpp"
} }
} }

View File

@ -2,17 +2,16 @@
#include "XNAerodynamics_p.h" #include "XNAerodynamics_p.h"
#include <XNCore/XNModelManager.h> #include <XNCore/XNModelManager.h>
#include <XNCore/XNDDSManager.h> #include <XNCore/XNDDSManager.h>
#include <QMutexLocker> #include <XNCore/XNFramework.h>
XN_DLL_INITIALIZE(XNAerodynamics) XN_MODEL_INITIALIZE(XNAerodynamics)
XN_REGISTER_PARTICIPANT_BEGIN(XNAerodynamics) XN_REGISTER_PARTICIPANT_BEGIN(XNAerodynamics)
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_output) XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_output)
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_heartbeat) XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_heartbeat)
XN_SUBSCRIBETOPIC(XNSim::ATA04::Aerodynamics_input, &XNAerodynamics::OnInput) XN_SUBSCRIBETOPIC(XNSim::ATA04::Aerodynamics_input, &XNAerodynamics::OnInput)
XN_REGISTER_PARTICIPANT_END(XNAerodynamics) XN_REGISTER_PARTICIPANT_END(XNAerodynamics)
XNAerodynamics::XNAerodynamics(QObject *parent) XNAerodynamics::XNAerodynamics() : XNModelObject(new XNAerodynamicsPrivate())
: XNModelObject(*new XNAerodynamicsPrivate(this), parent)
{ {
} }
@ -20,28 +19,26 @@ XNAerodynamics::~XNAerodynamics()
{ {
} }
XNAerodynamics::XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent) XNAerodynamics::XNAerodynamics(PrivateType *p) : XNModelObject(p)
: XNModelObject(dd, parent)
{ {
} }
void XNAerodynamics::OnInitialize() void XNAerodynamics::Initialize(uint32_t initialType, uint32_t threadID)
{ {
Q_D(XNAerodynamics); T_D();
XNModelObject::OnInitialize(); XNModelObject::Initialize(initialType, threadID);
if (d->_dynamicLib) { if (d->_dynamicLib) {
d->_fun = reinterpret_cast<FunctionType>( d->_fun = (FunctionType)dlsym(d->_dynamicLib, d->_entryPointName.c_str());
d->_dynamicLib->resolve("_Z27SACSCAerodynamicsEntryPointP20ComacDataStructure_S"));
if (!d->_fun) { if (!d->_fun) {
LOG_WARNING("Failed to resolve SACSCAerodynamicsEntryPoint"); LOG_WARNING("Failed to resolve SACSCAerodynamicsEntryPoint");
} }
} }
} }
void XNAerodynamics::OnPrepareForExecute() void XNAerodynamics::PrepareForExecute()
{ {
Q_D(XNAerodynamics); T_D();
XNModelObject::OnPrepareForExecute(); XNModelObject::PrepareForExecute();
d->_data.aero_model_heartbeat = 0; d->_data.aero_model_heartbeat = 0;
d->_data.input_aero = new input_aero_S; d->_data.input_aero = new input_aero_S;
d->_data.input_aero->l_04_i_aerocomac_ail_f8 = (double *)calloc(2, sizeof(double)); d->_data.input_aero->l_04_i_aerocomac_ail_f8 = (double *)calloc(2, sizeof(double));
@ -58,10 +55,10 @@ void XNAerodynamics::OnPrepareForExecute()
void XNAerodynamics::StepUpdate() void XNAerodynamics::StepUpdate()
{ {
Q_D(XNAerodynamics); T_D();
XNModelObject::StepUpdate(); XNModelObject::StepUpdate();
if (d->_fun) { if (d->_fun) {
QMutexLocker locker(&d->_mutex); std::lock_guard<std::mutex> locker(d->_mutex);
d->_fun(&d->_data); d->_fun(&d->_data);
} }
OnOutput(); OnOutput();
@ -69,7 +66,7 @@ void XNAerodynamics::StepUpdate()
void XNAerodynamics::OnOutput() void XNAerodynamics::OnOutput()
{ {
Q_D(XNAerodynamics); T_D();
//DDS心跳发布 //DDS心跳发布
XNSim::ATA04::Aerodynamics_heartbeat heartbeat; XNSim::ATA04::Aerodynamics_heartbeat heartbeat;
heartbeat.aero_model_heartbeat(d->_data.aero_model_heartbeat); heartbeat.aero_model_heartbeat(d->_data.aero_model_heartbeat);
@ -94,8 +91,8 @@ void XNAerodynamics::OnOutput()
void XNAerodynamics::OnInput(const XNSim::ATA04::Aerodynamics_input &input) void XNAerodynamics::OnInput(const XNSim::ATA04::Aerodynamics_input &input)
{ {
Q_D(XNAerodynamics); T_D();
QMutexLocker locker(&d->_mutex); std::lock_guard<std::mutex> locker(d->_mutex);
if (input.l_04_i_aerocomac_alpha_f8()) { if (input.l_04_i_aerocomac_alpha_f8()) {
d->_data.input_aero->l_04_i_aerocomac_alpha_f8 = input.l_04_i_aerocomac_alpha_f8().value(); d->_data.input_aero->l_04_i_aerocomac_alpha_f8 = input.l_04_i_aerocomac_alpha_f8().value();
} }

View File

@ -7,20 +7,19 @@ class XNAerodynamicsPrivate;
class XNAERODYNAMICS_EXPORT XNAerodynamics : public XNModelObject class XNAERODYNAMICS_EXPORT XNAerodynamics : public XNModelObject
{ {
Q_OBJECT XN_METATYPE(XNAerodynamics, XNModelObject)
Q_DISABLE_COPY(XNAerodynamics) XN_DECLARE_PRIVATE(XNAerodynamics)
Q_DECLARE_PRIVATE(XNAerodynamics)
XN_DECLARE_DDS() XN_DECLARE_DDS()
public: public:
explicit XNAerodynamics(QObject *parent = nullptr); XNAerodynamics();
virtual ~XNAerodynamics(); virtual ~XNAerodynamics();
protected: protected:
XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent = nullptr); XNAerodynamics(PrivateType *p);
public slots: public:
virtual void OnInitialize() override; virtual void Initialize(uint32_t initialType, uint32_t threadID) override;
virtual void OnPrepareForExecute() override; virtual void PrepareForExecute() override;
public: public:
virtual void StepUpdate() override; virtual void StepUpdate() override;
@ -30,4 +29,4 @@ private:
void OnInput(const XNSim::ATA04::Aerodynamics_input &input); void OnInput(const XNSim::ATA04::Aerodynamics_input &input);
}; };
Q_DECLARE_METATYPE(XNAerodynamics) XNCLASS_PTR_DECLARE(XNAerodynamics)

View File

@ -1,12 +1,10 @@
#ifndef XNAERODYNAMICS_GLOBAL_H #ifndef XNAERODYNAMICS_GLOBAL_H
#define XNAERODYNAMICS_GLOBAL_H #define XNAERODYNAMICS_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(XNAERODYNAMICS_LIBRARY) #if defined(XNAERODYNAMICS_LIBRARY)
#define XNAERODYNAMICS_EXPORT Q_DECL_EXPORT # define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
#else #else
#define XNAERODYNAMICS_EXPORT Q_DECL_IMPORT # define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
#endif #endif
#endif // XNAERODYNAMICS_GLOBAL_H #endif // XNAERODYNAMICS_GLOBAL_H

View File

@ -1,20 +1,15 @@
#pragma once #pragma once
#include <XNCore/XNModelObject_p.h> #include <XNCore/XNModelObject_p.h>
#include <DataModels/libSACSCAerodynamics_V2.0.3.5H/std_04_dll.h> #include <DataModels/libSACSCAerodynamics_V2.0.3.5H/std_04_dll.h>
#include <QMutex>
typedef void (*FunctionType)(ComacDataStructure_S *); typedef void (*FunctionType)(ComacDataStructure_S *);
class XNAerodynamicsPrivate : public XNModelObjectPrivate struct XNAerodynamicsPrivate : public XNModelObjectPrivate {
{
public:
Q_DECLARE_PUBLIC(XNAerodynamics)
XNAerodynamicsPrivate(XNAerodynamics *q) : XNModelObjectPrivate(q) {}
FunctionType _fun = nullptr; FunctionType _fun = nullptr;
ComacDataStructure_S _data; ComacDataStructure_S _data;
QMutex _mutex; std::string _entryPointName = "_Z27SACSCAerodynamicsEntryPointP20ComacDataStructure_S";
std::mutex _mutex;
}; };