PLCnext API Documentation 25.0.2.69
DataManager.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/Base/Core/PimplPtr.hxx"
9#include "Arp/Io/Commons/IoBuffer.hpp"
10#include "Arp/Plc/Meta/Commons/DataType.hpp"
11#include "Arp/Plc/Meta/Commons/Io/PortDefinition.hpp"
12#include <vector>
13
14// forwards
15namespace Arp::Io::Commons::Data
16{
17class BufferInfo;
18} // end of namespace Arp::Io::Commons::Data
19
20namespace Arp::Io::Commons
21{
22
58class ARP_EXPORT DataManager
59{
60public: // Impl forward declaration
61 class Impl;
62
63public: // usings
66 using ArrayDimensions = Arp::Plc::Meta::Commons::Io::PortDefinition::ArrayDimensions;
67
68public: // canonical construction/destruction/assignment
69 DataManager(const DataManager& arg) = delete;
70 DataManager(DataManager&& arg)noexcept;
71 DataManager& operator=(const DataManager& arg) = delete;
74
75public: // construction
76 DataManager(const String& componentName, Endianness defaultEndianness);
77
78public: // setter/getter operations
79 Endianness GetDefaultEndianness(void)const;
80 bool IsPlcRunning(void)const;
81
82public: // operations
83 IoBuffer::Ptr GetSystemIoBuffer(const String& bufferName);
84 bool TryGetSystemIoBuffer(const String& bufferName, IoBuffer::Ptr& result);
85 IoBuffer::Ptr GetPlcIoBuffer(const String& bufferName, bool isChanging = false);
86 bool TryGetPlcIoBuffer(const String& bufferName, IoBuffer::Ptr& result, bool isChanging = false);
87 IoBuffer::Ptr CreateSystemIoBuffer(const BufferInfo& bufferInfo);
88 IoBuffer::Ptr CreatePlcIoBuffer(const BufferInfo& bufferInfo, bool isChanging = false);
89
90public: // operations for status variables
91 void RegisterStatusVariable(const String& name, DataType dataType);
92 void RegisterStatusVariable(const String& name, DataType dataType, const ArrayDimensions& dimensions);
93 void RegisterBitStatusVariable(const String& name, uint32 bitOffset);
94 byte* GetStatusVariableAddress(const String& name)const;
95
96public: // Impl operations
97 Impl& GetImpl(void);
98 const Impl& GetImpl(void)const;
99
100private: // Impl usings
101 using Pimpl = PimplPtr<Impl>;
102
103private: // Impl fields
104 Pimpl pimpl;
105};
106
107} // end of namespace Arp::Io::Commons::Io
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 is used to store and to manage fieldbus frame buffer objects.
Definition: DataManager.hpp:59
DataManager & operator=(DataManager &&arg) noexcept
Default move-assignment operator.
~DataManager(void)
Default destructor.
DataManager(DataManager &&arg) noexcept
Default move constructor.
This class is used to store buffer parameters which are be used to create io buffer objects.
Definition: BufferInfo.hpp:19
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
DataType
This enum represents the data type of a variable.
Definition: DataType.hpp:15