ifw-core  5.0.0-pre2
open62541.hpp
Go to the documentation of this file.
1 
9 #ifndef CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
10 #define CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
11 
12 // System header files
13 #include <chrono>
14 #include <string>
15 #include <thread>
16 #include <mutex>
17 #include <atomic>
18 
19 // Third party headers
20 #include <log4cplus/logger.h>
21 #include <open62541.h>
22 
23 // Local header files
29 
30 
31 using namespace std::literals::chrono_literals;
32 
33 namespace protocol::opcua {
34 class IDataChangeHandler;
35 
44  UA_Client *m_client;
45  std::atomic<bool> m_connected {false};
46  std::atomic<bool> m_lost_connection {false};
47 
48  UA_StatusCode m_last_error{0};
49  UA_SecureChannelState m_last_channel_state{UA_SECURECHANNELSTATE_CLOSED};
50  UA_SecureChannelState m_channel_state{UA_SECURECHANNELSTATE_CLOSED};
51  UA_SessionState m_last_session_state{UA_SESSIONSTATE_CLOSED};
52  UA_SessionState m_session_state{UA_SESSIONSTATE_CLOSED};
53  UA_StatusCode m_last_connect_status{UA_STATUSCODE_BADCONNECTIONCLOSED};
54  UA_StatusCode m_connect_status{UA_STATUSCODE_GOOD};
55  std::mutex m_mutex;
56 };
57 
67 
68  static constexpr std::chrono::milliseconds NETWORK_TIMEOUT = 2000ms;
69 
70 
71 public:
72  Open62541();
73  virtual ~Open62541();
74 
81  virtual void Connect(const std::string& device, const std::string& address);
82 
90  virtual void Read(protocol::base::VectorVariant &params) override;
91 
99  virtual void Write(const protocol::base::VectorVariant& params) override;
100 
111  virtual void Rpc(const std::string& obj,
112  const std::string& proc,
113  const protocol::base::VectorVariant& params,
114  protocol::base::Variant& result) override;
115 
122  UA_StatusCode ResumeSubscriptions();
123 
135  virtual void StartMonitorItem(const std::string& item) override;
136 
149  virtual void StartMonitorItems(const std::vector<std::string>& item_vector) override;
150 
158  virtual void StopMonitorItem(const std::string& item) override;
159 
166  virtual void Disconnect();
167 
177  virtual void
181 
182 
186  void SetEndpoint(const std::string &endpoint);
187 
191  std::string GetEndpoint() const;
192 
198  virtual void HandleDataChange(const std::shared_ptr<MonitoredItem> monitor_item,
199  UA_DataValue* value);
204  virtual void HandleSessionChanges(bool status);
205 
209  void UpdateState(UA_SecureChannelState channel_state,
210  UA_SessionState session_state,
211  UA_StatusCode recovery_status);
212 
216  inline static std::map<std::string, std::shared_ptr<OpcuaConnection>>
218 
219 private:
220 
225  bool IsConnected(const std::string &address);
226 
231  void InactivityAcions();
232 
242  UA_StatusCode CreateSubscription(bool renew_monitor_items = false);
243 
248  void RemoveSubscription();
249 
256  void GetNodeId(std::string value, int &ns, std::string &name);
257 
264  static void InactivityCallback(UA_Client *client);
265 
271  static void StateCallback(UA_Client *client,
272  UA_SecureChannelState channelState,
273  UA_SessionState sessionState,
274  UA_StatusCode recoveryStatus);
275 
276 
277 
279  SubscriptionPtr m_subscription;
280 
282  std::string m_endpoint;
283 
284  bool m_monitoring;
285 
288  inline static std::map<std::string, std::pair<std::string, Open62541*>> m_registration_map;
289 
291  std::string m_device;
292 
294  std::map<std::string, MonitoredItemPtr> m_map_monitor_items;
295 
298 
301 
304 
306  log4cplus::Logger m_logger;
307 
308 
309 };
310 
311 } // namespace protocol::opcua
312 
313 #endif // CORE_PROTOCOL_OPEN62541_OPEN62541_HPP_
Definition: iComm.hpp:42
The IDataChangeHandler class Defines an entry point for data change notifications.
Definition: iDataChangeHandler.hpp:35
The Open62541 class.
Definition: open62541.hpp:66
static std::map< std::string, std::shared_ptr< OpcuaConnection > > m_connection_map
Definition: open62541.hpp:217
log4cplus::Logger & Logger()
Definition: defines.cpp:13
std::string Write(const char *format,...)
Create formatted string, return formatted string (C formatting convention).
std::vector< PairVariant > VectorVariant
Definition: iComm.hpp:39
boost::variant< bool, int, unsigned int, short, double, std::string > Variant
Definition: iComm.hpp:27
Definition: iDataChangeHandler.hpp:25
std::shared_ptr< Subscription > SubscriptionPtr
Definition: subscription.hpp:30
Connection Struct.
Definition: open62541.hpp:43
UA_Client * m_client
Definition: open62541.hpp:44
std::mutex m_mutex
Definition: open62541.hpp:55