opcua_helpers.h
Go to the documentation of this file.
00001 
00023 #include "ros_opcua_msgs/Address.h"
00024 #include "ros_opcua_msgs/TypeValue.h"
00025 
00026 #include <opc/ua/node.h>
00027 #include <opc/ua/protocol/string_utils.h>
00028 
00030 
00031 std::map<int, std::string> _TypeToStringMap = {
00032 //     {0, "null"},
00033     {1, "bool"},
00034     {2, "int8"},
00035     {3, "uint8"},
00036     {4, "int16"},
00037     {5, "uint16"},
00038     {6, "int32"},
00039     {7, "uint32"},
00040     {8, "int64"},
00041     {9, "uint64"},
00042     {10, "float32"},
00043     {11, "float64"},
00044     {12, "string"},
00045 //     {13, "date_time"},
00046 //     {14, "guid"},
00047 //     {15, "byte_string"},
00048 //     {16, "xml_element"},
00049 //     {17, "id"},
00050 //     {18, "expanded_node_id"},
00051 //     {19, "status_code"},
00052 //     {20, "qualified_name"},
00053 //     {21, "localized_text"},
00054 //     {22, "extenstion_object"},
00055 //     {23, "data_value"},
00056 //     {24, "OpcUa::Variant"},
00057 //     {25, "diagnostic_info"}
00058 };
00059 
00065 //OpcUa::NodeID convertAddressToNodeID(const ros_opcua_msgs::Address address) {
00066 //
00067 //    if (address.id_type == "num") {
00068 //        return OpcUa::NumericNodeID(address.id_num, address.namespace_index);
00069 //    }
00070 //    else if (address.id_type == "str") {
00071 //        return OpcUa::StringNodeID(address.id_str, address.namespace_index);
00072 //    }
00073 //    else if (address.id_type == "guid") {
00074 //        return OpcUa::GuidNodeID(OpcUa::ToGuid(address.id_guid), address.namespace_index);
00075 //    }
00076 //    else {
00077 //        ROS_ERROR("OPC-UA client node %s: ID type %s does not exist!!", ros::this_node::getName().c_str(), address.id_type.c_str());
00078 //        throw std::exception();
00079 //    }
00080 //}
00081 
00087 //ros_opcua_msgs::Address convertNodeIDToAddress(const OpcUa::NodeID nodeID) {
00088 //
00089 //    ros_opcua_msgs::Address address;
00090 //    address.namespace_index = nodeID.GetNamespaceIndex();
00091 //
00092 //    if (nodeID.IsInteger()) {
00093 //        address.id_type = "num";
00094 //        address.id_num = nodeID.GetIntegerIdentifier();
00095 //    }
00096 //    else if (nodeID.IsString()) {
00097 //        address.id_type = "str";
00098 //        address.id_str = nodeID.GetStringIdentifier();
00099 //    }
00100 //    else if (nodeID.IsGuid()) {
00101 //        address.id_type = "guid";
00102 //        address.id_guid = OpcUa::ToString(nodeID.GetGuidIdentifier());
00103 //    }
00104 //    else {
00105 //        ROS_ERROR("OPC-UA client node %s: ID type %s does not exist!!", ros::this_node::getName().c_str(), address.id_type.c_str());
00106 //        throw std::exception();
00107 //    }
00108 //
00109 //    return address;
00110 //}
00111 
00112 // OpcUa::NodeID convertAddressToString(const ros_opcua_msgs::Address address) {
00113 //        
00114 //     std::stringstream stream;
00115 //     
00116 //     stream << "ns=" << address.namespace_index << ";";
00117 //     
00118 //     if (address.id_type == "num") {
00119 //         stream << "i=" << address.id_num << ";";
00120 //     }
00121 //     else if (address.id_type == "str") {
00122 //         stream << "s=" << address.id_str << ";";
00123 //     }
00124 //     else if (address.id_type == "guid") {
00125 //         stream << "g=" << address.id_guid << ";";
00126 //     }
00127 //     else {
00128 //         ROS_ERROR("OPC-UA client node %s: ID type %s does not exist!!", ros::this_node::getName().c_str(), req.node.id_type.c_str());
00129 //         throw std::exception("Read above!");
00130 //     }
00131 //     
00132 //     return stream.str();
00133 // }
00134 
00140 ros_opcua_msgs::TypeValue convertVariantToTypeValue(const OpcUa::Variant& variant) {
00141     
00142     ros_opcua_msgs::TypeValue typeValue;
00143     
00144     typeValue.type = _TypeToStringMap[(int)variant.Type()];
00145     
00146     if (typeValue.type == "bool") {
00147         typeValue.bool_d = (bool)variant;
00148     }
00149     else if (typeValue.type == "int8") {
00150         typeValue.int8_d = (int8_t)variant;
00151     }
00152     else if (typeValue.type == "uint8") {
00153         typeValue.uint8_d = (uint8_t)variant;
00154     }
00155     else if (typeValue.type == "int16") {
00156         typeValue.int16_d = (int16_t)variant;
00157     }
00158     else if (typeValue.type == "uint16") {
00159         typeValue.uint16_d = (uint16_t)variant;
00160     }
00161     else if (typeValue.type == "int32") {
00162         typeValue.int32_d = (int32_t)variant;
00163     }
00164     else if (typeValue.type == "uint32") {
00165         typeValue.uint32_d = (uint32_t)variant;
00166     }
00167     else if (typeValue.type == "int64") {
00168         typeValue.int64_d = (int64_t)variant;
00169     }
00170     else if (typeValue.type == "uint64") {
00171         typeValue.uint64_d = (uint64_t)variant;
00172     }
00173     else if (typeValue.type == "float") {
00174         typeValue.float_d = (float)variant;
00175     }
00176     else if (typeValue.type == "double") {
00177         typeValue.double_d = (double)variant;
00178     }
00179     else if (typeValue.type == "string") {
00180         typeValue.string_d = std::string(variant);
00181     }
00182     else {
00183         typeValue.type = "Unknown";
00184     }
00185     
00186     return typeValue;    
00187 }
00188 
00194 OpcUa::Variant convertTypeValueToVariant(ros_opcua_msgs::TypeValue& typeValue)
00195 {
00196     OpcUa::Variant variant;
00197 
00198     if (typeValue.type == "bool") {
00199         variant = bool(typeValue.bool_d);
00200     }
00201     else if (typeValue.type == "int8") {
00202         variant = typeValue.int8_d;
00203     }
00204     else if (typeValue.type == "uint8") {
00205         variant = typeValue.uint8_d;
00206     }
00207     else if (typeValue.type == "int16") {
00208         variant = typeValue.int16_d;
00209     }
00210     else if (typeValue.type == "uint16") {
00211         variant = typeValue.uint16_d;
00212     }
00213     else if (typeValue.type == "int32") {
00214         variant = typeValue.int32_d;
00215     }
00216     else if (typeValue.type == "uint32") {
00217         variant = typeValue.uint32_d;
00218     }
00219     else if (typeValue.type == "int64") {
00220         variant = typeValue.int64_d;
00221     }
00222     else if (typeValue.type == "uint64") {
00223         variant = typeValue.uint64_d;
00224     }
00225     else if (typeValue.type == "float") {
00226         variant = typeValue.float_d;
00227     }
00228     else if (typeValue.type == "double") {
00229         variant = typeValue.double_d;
00230     }
00231     else if (typeValue.type == "string") {
00232         variant = typeValue.string_d;
00233     }
00234 
00235     return variant;
00236 }


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Sat Jun 8 2019 18:24:56