PLCnext API Documentation 26.6.0.38
IoComponentBase.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Base/Core/PimplPtr.hxx"
9#include "Arp/Base/Core/Endianness.hpp"
10#include "Arp/Base/Acf/Commons/ComponentBase.hpp"
11#include "Arp/Plc/Domain/Commons/IPlcComponent.hpp"
12#include "Arp/Plc/Meta/Commons/IIoMetaComponent.hpp"
13
14namespace Arp::Io::Commons::Configuration
15{
16// forwards
17class TicConfiguration;
18}
19
20namespace Arp::Io::Commons
21{
22// forwards
23class IoLibraryBase;
24class DataManager;
25
26// type imports
33
51class ARP_EXPORT IoComponentBase
52 : public ComponentBase
53 , public IPlcComponent
54 , public IIoMetaComponent
55{
56public: // Impl forward declaration
57 class Impl;
58
59public: // usings
61
62public: // construction
64 IoLibraryBase& library,
65 const String& fullName,
66 Endianness endianness = Endianness::Current,
67 uint32 startOrderOffset = 0);
68
69 // canonical construction/destruction/assignment
70 IoComponentBase(const IoComponentBase& arg) = delete;
71 IoComponentBase(IoComponentBase&& arg)noexcept;
72 IoComponentBase& operator=(const IoComponentBase& arg) = delete;
73 IoComponentBase& operator=(IoComponentBase&& arg)noexcept;
74 ~IoComponentBase(void)override;
75
76public: // setter/getter operations
77 Endianness GetDefaultEndianness(void)const;
78
79public: // IComponent operations
80 void Initialize(void)final;
81 void SubscribeServices(void)final;
82 void LoadSettings(const String& settingsPath)final;
83 void SetupSettings(void)final;
84 void PublishServices(void)final;
85 void LoadConfig(void)final;
86 void SetupConfig(void)final;
87 void ResetConfig(void)final;
88 void Dispose(void)final;
89 void PowerDown(void)final;
90
91public: // IPlcComponent operations
92 DcgResultInfo LoadPlc(bool isChanging)final;
93 DcgResultInfo SetupPlc(bool isChanging, PlcStartKind startKind)final;
94 void StartPlc(PlcStartKind startKind)final;
95 void StopPlc(void)final;
96 void ResetPlc(bool isChanging, bool onError)final;
97 void UnloadPlc(bool isChanging, bool onError)final;
98
99public: // IIoMetaComponent operations
100 VariableRegistry& GetVariableRegistry(void)final;
101
102protected: // getter/setter
103 DataManager& GetDataManager(void);
104
105public: // operations
106 DcgResultInfo Setup(const TicConfiguration& configuration, bool isChanging = false);
107
108protected: // Templated operations to override for specialized IComponent implementations
109 virtual void InitializeInternal(void);
110 virtual void SubscribeServicesInternal(void);
111 virtual void LoadSettingsInternal(const String& settingsPath);
112 virtual void SetupSettingsInternal(void);
113 virtual void PublishServicesInternal(void);
114 virtual void LoadConfigInternal(void);
115 virtual void SetupConfigInternal(void);
116 virtual void ResetConfigInternal(void);
117 virtual void DisposeInternal(void);
118 virtual void PowerDownInternal(void);
119
120protected: // Templated operations for specializing IPlcComponent operations
121 virtual DcgResultInfo LoadPlcInternal(bool isChanging);
122 virtual DcgResultInfo SetupPlcInternal(bool isChanging, PlcStartKind startKind);
123 virtual void StartPlcInternal(PlcStartKind startKind);
124 virtual void StopPlcInternal(void);
125 virtual void ResetPlcInternal(bool isChanging, bool onError);
126 virtual void UnloadPlcInternal(bool isChanging, bool onError);
127
128public: // Impl operations
129 Impl& GetImpl(void);
130 const Impl& GetImpl(void)const;
131
132private: // Impl usings
133 using Pimpl = PimplPtr<Impl>;
134
135private: // Impl fields
136 Pimpl pimpl;
137};
138
139} // end of namespace Arp::Io::Commons::Io
Use this class as base class of all Acf components.
Definition: ComponentBase.hpp:20
Adapter class to implement PImpl idiom.
Definition: PimplPtr.hxx:15
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
This class reads and stores a complete Tic hierarchy defined by a Tic links file.
Definition: TicConfiguration.hpp:38
This class is used to store and to manage fieldbus frame buffer objects.
Definition: DataManager.hpp:59
This class shall be used as a base class for all IO components.
Definition: IoComponentBase.hpp:55
~IoComponentBase(void) override
The default destructor.
Base class for libraries of IO components
Definition: IoLibraryBase.hpp:18
This class is used to return the result of a PLC operation concerning download-changes (Dcg).
Definition: DcgResultInfo.hpp:21
This is the most important interface of the PLC domain. It is used to load and unload the PLC project...
Definition: IPlcComponent.hpp:29
Interface for all components providing IO related meta data
Definition: IIoMetaComponent.hpp:24
This class is used to register IO variables
Definition: VariableRegistry.hpp:21
std::uint32_t uint32
The Arp unsigned integer type of 4 byte size.
Definition: PrimitiveTypes.hpp:33
Namespace for interface types of the IO domain
PlcStartKind
Determines which kind of start operation is initiated using PlcManager::StartPlc(PlcStartKind startKi...
Definition: PlcStartKind.hpp:18
DcgResult
The result of a PLC download-changes operation.
Definition: DcgResult.hpp:19