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
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
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 };
00059
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
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 }