PLCnext API Documentation 23.6.0.37
ProgramComponentBase.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8#include "Arp/System/Acf/ComponentBase.hpp"
9#include "Arp/System/Acf/IApplication.hpp"
10#include "Arp/Plc/Commons/Esm/IProgramComponent.hpp"
11#include "Arp/Plc/Commons/Esm/ProgramProviderBase.hpp"
12#include "Arp/Plc/Commons/Meta/IMetaComponent.hpp"
13#include "Arp/Plc/Commons/Meta/DataInfoProvider.hpp"
14
15namespace Arp { namespace Plc { namespace Commons { namespace Esm
16{
17
18using namespace Arp;
19using namespace Arp::System::Acf;
20using namespace Arp::Plc::Commons::Meta;
21
23{
24public: // construction/destruction
26 ProgramComponentBase(const char* libraryNamespace, ProgramProviderBase& programProvider);
28 ~ProgramComponentBase(void) = default;
29
30public: // IComponent operations
31 void Initialize(void);
32 void SetupConfig(void);
33 void ResetConfig(void);
34
35public: // IMetaComponentBase operations
36 IProgramProvider& GetProgramProvider(bool useBackgroundDomain)override;
37 IDataInfoProvider& GetDataInfoProvider(bool useBackgroundDomain)override;
38 IDataNavigator* GetDataNavigator(void)override;
39
40protected: // virtual operation to override
41 virtual void RegisterComponentPorts(void);
42
43private:
44 void OnProgramAdded(IProgram::Ptr programPtr);
45 void OnProgramRemoved(IProgram::Ptr programPtr);
46
47
48private: // deleted methods
50 ProgramComponentBase(const ProgramComponentBase& arg) = delete;
52 ProgramComponentBase& operator=(const ProgramComponentBase& arg) = delete;
53
54protected: // fields
55 DataInfoProvider dataInfoProvider;
56
57private: // fields
58 ProgramProviderBase& programProvider;
59};
60
62// inline methods of class ProgramComponentBase
63
64
66{
67 return this->programProvider;
68}
69
70
71
73{
74 return useBackgroundDomain ? this->dataInfoProvider.GetBackgroundProvider() : this->dataInfoProvider;
75}
76
78{
79 return nullptr;
80}
81
82
83}}}} // end of namespace Arp::Plc::Commons::Esm
Interface to realizes an access to a plc program provider.
Definition: IProgramComponent.hpp:18
Interface to realizes an program provider.
Definition: IProgramProvider.hpp:17
std::shared_ptr< IProgram > Ptr
Shared pointer type of IProgram.
Definition: IProgram.hpp:22
Definition: ProgramComponentBase.hpp:23
ProgramComponentBase(const char *libraryNamespace, ProgramProviderBase &programProvider)
Constructs an ProgramComponentBase instance.
IDataInfoProvider & GetDataInfoProvider(bool useBackgroundDomain) override
Gets the IDataInfoProvider of this component.
Definition: ProgramComponentBase.hpp:72
~ProgramComponentBase(void)=default
Destructs this instance and frees all resources.
IProgramProvider & GetProgramProvider(bool useBackgroundDomain) override
Returns the program provider of this component.
Definition: ProgramComponentBase.hpp:65
IDataNavigator * GetDataNavigator(void) override
Gets the specialized IDataNavigator of this component.
Definition: ProgramComponentBase.hpp:77
Definition: ProgramProviderBase.hpp:16
Provides information of component root variables
Definition: DataInfoProvider.hpp:36
IDataInfoProvider & GetBackgroundProvider(void)
Returns an IDataInfoProvider for the background domain
Interface to provide information about component roots
Definition: IDataInfoProvider.hpp:18
Interface for all components providing meta data
Definition: IMetaComponent.hpp:20
Namespace for the Meta component
Definition: ArrayDimension.hpp:15
This is the namespace of the Application Component Framework.
Definition: ComponentBase.hpp:13
Root namespace for the PLCnext API