43 bool connect(
const std::string& addr );
44 bool connect(
const std::string& addr,
const std::string& user,
const std::string& pass );
45 void disconnect()
noexcept;
48 enum class VarType :
int
53 static VarType str2vtype( std::string_view s );
58 std::variant<int32_t, float> value = { 0 };
59 opcua::StatusCode status;
60 VarType type = { VarType::Int32 };
70 return std::get<VType>(value);
72 catch(
const std::bad_variant_access&) {}
78 opcua::StatusCode read(
const std::vector<opcua::ua::ReadValueId>& attrs, std::vector<ResultVar>& results);
79 opcua::StatusCode write32( std::vector<opcua::ua::WriteValue>& values );
80 opcua::StatusCode write32(
const std::string& attr, int32_t value );
81 opcua::StatusCode set(
const std::string& attr,
bool set );
82 opcua::StatusCode write(
const opcua::ua::WriteValue& writeValue );
84 static opcua::ua::WriteValue makeWriteValue32(
const std::string& name, int32_t val );
85 static opcua::ua::ReadValueId makeReadValue32(
const std::string& name );
87 void onSessionActivated(opcua::StateCallback callback)
89 client.onSessionActivated(std::move(callback));
92 void onConnected(opcua::StateCallback callback)
94 client.onConnected(std::move(callback));
97 void onSessionClosed(opcua::StateCallback callback)
99 client.onSessionClosed(std::move(callback));
102 void onDisconnected(opcua::StateCallback callback)
104 client.onDisconnected(std::move(callback));
107 void runIterate(uint16_t timeoutMilliseconds)
109 client.runIterate(timeoutMilliseconds);
112 void onInactive(opcua::InactivityCallback callback)
114 client.onInactive(std::move(callback));
117 void onSubscriptionInactive(opcua::SubscriptionInactivityCallback callback)
119 client.onSubscriptionInactive(std::move(callback));
122 opcua::ua::IntegerId createSubscription(
const opcua::SubscriptionParameters& parameters)
124 auto subscription = opcua::Subscription<opcua::Client>{client, parameters};
125 subscription.setPublishingMode(
true);
126 return subscription.subscriptionId();
129 void rethrowException()
131 auto& exceptionCatcher = opcua::detail::getExceptionCatcher(client);
132 exceptionCatcher.rethrow();
135 opcua::StatusCode subscribeDataChanges(std::vector<opcua::ua::ReadValueId>& ids,
136 std::vector<OPCUAClient::ResultVar>& results,
137 float samplingInterval,
138 float publishingInterval);
140 size_t getSubscriptionSize()
143 auto subscriptions = client.subscriptions();
144 for (
auto& sub : subscriptions) {
145 count += sub.monitoredItems().size();
150 opcua::StatusCode deleteSubscription(opcua::ua::IntegerId subId)
152 return opcua::services::deleteSubscription(client, subId);
155 inline opcua::Node<opcua::Client> createNode(opcua::ua::VariableId nodeName)
157 return opcua::Node{client, nodeName};
160 std::shared_ptr<DebugStream> log();
161 void setLog(
const std::shared_ptr<DebugStream>& dlog );
165 opcua::Client client;
166 std::shared_ptr<DebugStream> dlog;
169 void processResult(
const opcua::String& node_name,
const opcua::DataValue& in, ResultVar& out);