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

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

View File

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

View File

@ -3,6 +3,10 @@
"*.cpp": "cpp",
"functional": "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 <XNCore/XNModelManager.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_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_output)
XN_PUBLISHTOPIC(XNSim::ATA04::Aerodynamics_heartbeat)
XN_SUBSCRIBETOPIC(XNSim::ATA04::Aerodynamics_input, &XNAerodynamics::OnInput)
XN_REGISTER_PARTICIPANT_END(XNAerodynamics)
XNAerodynamics::XNAerodynamics(QObject *parent)
: XNModelObject(*new XNAerodynamicsPrivate(this), parent)
XNAerodynamics::XNAerodynamics() : XNModelObject(new XNAerodynamicsPrivate())
{
}
@ -20,28 +19,26 @@ XNAerodynamics::~XNAerodynamics()
{
}
XNAerodynamics::XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent)
: XNModelObject(dd, parent)
XNAerodynamics::XNAerodynamics(PrivateType *p) : XNModelObject(p)
{
}
void XNAerodynamics::OnInitialize()
void XNAerodynamics::Initialize(uint32_t initialType, uint32_t threadID)
{
Q_D(XNAerodynamics);
XNModelObject::OnInitialize();
T_D();
XNModelObject::Initialize(initialType, threadID);
if (d->_dynamicLib) {
d->_fun = reinterpret_cast<FunctionType>(
d->_dynamicLib->resolve("_Z27SACSCAerodynamicsEntryPointP20ComacDataStructure_S"));
d->_fun = (FunctionType)dlsym(d->_dynamicLib, d->_entryPointName.c_str());
if (!d->_fun) {
LOG_WARNING("Failed to resolve SACSCAerodynamicsEntryPoint");
}
}
}
void XNAerodynamics::OnPrepareForExecute()
void XNAerodynamics::PrepareForExecute()
{
Q_D(XNAerodynamics);
XNModelObject::OnPrepareForExecute();
T_D();
XNModelObject::PrepareForExecute();
d->_data.aero_model_heartbeat = 0;
d->_data.input_aero = new input_aero_S;
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()
{
Q_D(XNAerodynamics);
T_D();
XNModelObject::StepUpdate();
if (d->_fun) {
QMutexLocker locker(&d->_mutex);
std::lock_guard<std::mutex> locker(d->_mutex);
d->_fun(&d->_data);
}
OnOutput();
@ -69,7 +66,7 @@ void XNAerodynamics::StepUpdate()
void XNAerodynamics::OnOutput()
{
Q_D(XNAerodynamics);
T_D();
//DDS心跳发布
XNSim::ATA04::Aerodynamics_heartbeat 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)
{
Q_D(XNAerodynamics);
QMutexLocker locker(&d->_mutex);
T_D();
std::lock_guard<std::mutex> locker(d->_mutex);
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();
}

View File

@ -7,20 +7,19 @@ class XNAerodynamicsPrivate;
class XNAERODYNAMICS_EXPORT XNAerodynamics : public XNModelObject
{
Q_OBJECT
Q_DISABLE_COPY(XNAerodynamics)
Q_DECLARE_PRIVATE(XNAerodynamics)
XN_METATYPE(XNAerodynamics, XNModelObject)
XN_DECLARE_PRIVATE(XNAerodynamics)
XN_DECLARE_DDS()
public:
explicit XNAerodynamics(QObject *parent = nullptr);
XNAerodynamics();
virtual ~XNAerodynamics();
protected:
XNAerodynamics(XNAerodynamicsPrivate &dd, QObject *parent = nullptr);
XNAerodynamics(PrivateType *p);
public slots:
virtual void OnInitialize() override;
virtual void OnPrepareForExecute() override;
public:
virtual void Initialize(uint32_t initialType, uint32_t threadID) override;
virtual void PrepareForExecute() override;
public:
virtual void StepUpdate() override;
@ -30,4 +29,4 @@ private:
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
#define XNAERODYNAMICS_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(XNAERODYNAMICS_LIBRARY)
#define XNAERODYNAMICS_EXPORT Q_DECL_EXPORT
# define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
#else
#define XNAERODYNAMICS_EXPORT Q_DECL_IMPORT
# define XNAERODYNAMICS_EXPORT __attribute__((visibility("default")))
#endif
#endif // XNAERODYNAMICS_GLOBAL_H

View File

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