#include "NetworkTopologyInverse.h"
#include <cstring>
#include <iomanip>
#include <sstream>
#include <algorithm>
#include <cctype>
#include <fstream>
#include <map>
#include <regex> // 添加正则表达式支持
// 增强版十六进制字符串转换(处理空格和特殊字符)
std::vector<uint8_t> NetopInverse::hex_str_to_bytes(const std::string &hex) {
std::vector<uint8_t> bytes;
if (hex.empty()) return bytes;
// 移除所有非十六进制字符
std::string cleanHex;
for (char c : hex) {
if (std::isxdigit(c)) {
cleanHex += std::toupper(c);
}
}
if (cleanHex.size() % 2 != 0) {
std::cerr << "错误:十六进制字符串长度不是偶数: " << cleanHex << std::endl;
return bytes;
}
for (size_t i = 0; i < cleanHex.size(); i += 2) {
std::string byteString = cleanHex.substr(i, 2);
try {
uint8_t byte = static_cast<uint8_t>(std::stoul(byteString, nullptr, 16));
bytes.push_back(byte);
} catch (...) {
std::cerr << "错误:转换十六进制字节失败: " << byteString << std::endl;
}
}
return bytes;
}
// 精确IP地址解析(处理字节序问题)
std::string NetopInverse::parse_ip_address(const std::vector<uint8_t> &bytes, size_t start) {
if (bytes.size() < start + 4) return "";
return std::to_string(bytes[start]) + "." +
std::to_string(bytes[start+1]) + "." +
std::to_string(bytes[start+2]) + "." +
std::to_string(bytes[start+3]);
}
// 从GSD文件名提取厂商信息(使用正则表达式精确匹配)
void extract_vendor_info(const std::string& gsdFile, std::string& vendorName, std::string& vendorID) {
// 示例: gsdml-v2.31-obara-siv31-40-20190707.xml
std::regex vendorRegex(R"(gsdml-v(\d+)\.(\d+)-([a-zA-Z]+)-)");
std::smatch match;
if (std::regex_search(gsdFile, match, vendorRegex) && match.size() > 3) {
vendorName = match[3];
vendorID = "0x" + match[1].str() + match[2].str();
} else {
vendorName = "unknown";
vendorID = "0x0000";
}
}
//
Json::Value NetopInverse::parse_pn_driver(const std::string &xmlContent) {
tinyxml2::XMLDocument doc;
doc.Parse(xmlContent.c_str());
Json::Value pnDriver;
tinyxml2::XMLElement *root = doc.RootElement();
if (!root) return pnDriver;
// 查找名为"profinetdriver"的Object
tinyxml2::XMLElement *profinetDriver = nullptr;
for (tinyxml2::XMLElement *obj = root->FirstChildElement("Object");
obj != nullptr;
obj = obj->NextSiblingElement("Object"))
{
const char *name = obj->Attribute("Name");
if (name && std::strcmp(name, "profinetdriver") == 0) {
profinetDriver = obj;
break;
}
}
if (!profinetDriver) return pnDriver;
// 在profinetdriver下查找PN_Driver_1_Interface
for (tinyxml2::XMLElement *interface = profinetDriver->FirstChildElement("Object");
interface != nullptr;
interface = interface->NextSiblingElement("Object"))
{
const char *name = interface->Attribute("Name");
if (name && std::strcmp(name, "PN_Driver_1_Interface") == 0) {
// 查找DataRecordsConf变量
for (tinyxml2::XMLElement *drcVar = interface->FirstChildElement("Variable");
drcVar != nullptr;
drcVar = drcVar->NextSiblingElement("Variable"))
{
const char *varName = drcVar->Attribute("Name");
if (varName && std::strcmp(varName, "DataRecordsConf") == 0) {
// 获取Value节点
tinyxml2::XMLElement *valueNode = drcVar->FirstChildElement("Value");
if (valueNode) {
// 遍历Field节点(Value的子节点)
for (tinyxml2::XMLElement *field = valueNode->FirstChildElement("Field");
field != nullptr;
field = field->NextSiblingElement("Field"))
{
const char *key = field->Attribute("Key");
const char *value = field->GetText();
if (key && value) {
if (std::strcmp(key, "4096") == 0) {
std::vector<uint8_t> bytes = hex_str_to_bytes(value);
if (bytes.size() >= 16) {
pnDriver["IPAddress"] = parse_ip_address(bytes, 8);
pnDriver["SubnetMask"] = parse_ip_address(bytes, 12);
}
}
}
}
}
break; // 找到DataRecordsConf后退出变量循环
}
}
break; // 找到接口后退出接口循环
}
}
pnDriver["DeviceName"] = "profinetdriver";
pnDriver["SetInTheProject"] = true;
return pnDriver;
}
// 修复设备模块解析(处理起始地址错误)
Json::Value NetopInverse::parse_decentral_devices(const std::string &xmlContent) {
tinyxml2::XMLDocument doc;
doc.Parse(xmlContent.c_str());
Json::Value devices(Json::arrayValue);
// 模块ID映射
std::map<std::string, std::string> moduleIdMap = {
{"64 Digital Input", "ID_MODULE_ADI101"},
{"136 Digital Output", "ID_MODULE_ADI201"},
{"Diagnostics type 1_1", "ID_MOD_DIAG_TYPE1"},
{"32 valves_1", "ID_MOD_VALVE32_OUTPUT"},
{"EX245-DX1_1", "ID_MOD_DX1"}
};
// 查找PROFINET IO-System
tinyxml2::XMLElement *ioSystem = doc.RootElement()->FirstChildElement("Object");
while (ioSystem) {
const char *name = ioSystem->Attribute("Name");
if (name && std::strcmp(name, "PROFINET IO-System") == 0) break;
ioSystem = ioSystem->NextSiblingElement("Object");
}
if (!ioSystem) return devices;
// 遍历所有设备
tinyxml2::XMLElement *device = ioSystem->FirstChildElement("Object");
while (device) {
const char *deviceName = device->Attribute("Name");
if (!deviceName || std::strcmp(deviceName, "idevice-dap") == 0) {
device = device->NextSiblingElement("Object");
continue;
}
Json::Value deviceJson;
deviceJson["DAP_ID"] = "DAP";
deviceJson["DAP_Name"] = deviceName;
deviceJson["ReductionRatio"] = 2;
deviceJson["SetInTheProject"] = true;
// 解析设备ID
int deviceID = -1;
tinyxml2::XMLElement *keyElem = device->FirstChildElement("Key");
while (keyElem) {
const char *aid = keyElem->Attribute("AID");
if (aid && std::strcmp(aid, "3") == 0 && keyElem->GetText()) {
deviceID = std::atoi(keyElem->GetText());
break;
}
keyElem = keyElem->NextSiblingElement("Key");
}
// 格式化为十六进制
std::ostringstream oss;
oss << "0x" << std::hex << std::setw(4) << std::setfill('0') << deviceID;
deviceJson["DeviceID"] = oss.str();
// 解析GSD文件
tinyxml2::XMLElement *gsdElem = device->FirstChildElement("GSDMLFile");
if (gsdElem && gsdElem->GetText()) {
std::string gsdFile = gsdElem->GetText();
deviceJson["RefGSD"] = gsdFile;
std::string vendorName, vendorID;
extract_vendor_info(gsdFile, vendorName, vendorID);
deviceJson["VendorName"] = vendorName;
deviceJson["VendorID"] = vendorID;
}
// 解析网络参数(修复IP地址转换)
std::string ipAddress, subnetMask, devName;
tinyxml2::XMLElement *netParams = device->FirstChildElement("Object");
while (netParams) {
const char *objName = netParams->Attribute("Name");
if (objName && std::strcmp(objName, "Network Parameters") == 0) {
tinyxml2::XMLElement *netConfig = netParams->FirstChildElement("Variable");
while (netConfig) {
const char *varName = netConfig->Attribute("Name");
if (varName && std::strcmp(varName, "NetworkParamConfig") == 0) {
tinyxml2::XMLElement *field = netConfig->FirstChildElement("Field");
while (field) {
const char *key = field->Attribute("Key");
const char *value = field->GetText();
if (key && value) {
if (std::strcmp(key, "4096") == 0) {
std::vector<uint8_t> bytes = hex_str_to_bytes(value);
if (bytes.size() >= 16) {
// 修正偏移量:从第8字节开始
ipAddress = parse_ip_address(bytes, 8);
subnetMask = parse_ip_address(bytes, 12);
}
}
else if (std::strcmp(key, "4099") == 0) {
std::vector<uint8_t> bytes = hex_str_to_bytes(value);
if (bytes.size() > 12) {
// 跳过前12字节的头部
for (size_t i = 12; i < bytes.size(); i++) {
if (bytes[i] == 0) break;
devName += static_cast<char>(bytes[i]);
}
}
}
}
field = field->NextSiblingElement("Field");
}
}
netConfig = netConfig->NextSiblingElement("Variable");
}
break;
}
netParams = netParams->NextSiblingElement("Object");
}
deviceJson["IPAddress"] = ipAddress;
deviceJson["SubnetMask"] = subnetMask;
deviceJson["DeviceName"] = devName.empty() ? deviceName : devName;
// 解析模块(修复起始地址错误)
Json::Value modules(Json::arrayValue);
tinyxml2::XMLElement *module = device->FirstChildElement("Object");
while (module) {
const char *moduleName = module->Attribute("Name");
if (!moduleName ||
std::strstr(moduleName, "Port") != nullptr ||
std::strstr(moduleName, "Interface") != nullptr ||
std::strstr(moduleName, "Network") != nullptr) {
module = module->NextSiblingElement("Object");
continue;
}
Json::Value moduleJson;
moduleJson["ModuleName"] = moduleName;
// 查找模块ID
auto it = moduleIdMap.find(moduleName);
if (it != moduleIdMap.end()) {
moduleJson["ModuleID"] = it->second;
} else {
moduleJson["ModuleID"] = "UNKNOWN";
}
// 解析槽位号
int slot = -1;
tinyxml2::XMLElement *keyElem = module->FirstChildElement("Key");
while (keyElem) {
const char *aid = keyElem->Attribute("AID");
if (aid && std::strcmp(aid, "1") == 0 && keyElem->GetText()) {
slot = std::atoi(keyElem->GetText());
break;
}
keyElem = keyElem->NextSiblingElement("Key");
}
moduleJson["Slot"] = slot;
// 初始化IO映射默认值
moduleJson["InputStartAddress"] = -1;
moduleJson["InputLength"] = 0;
moduleJson["OutputStartAddress"] = -1;
moduleJson["OutputLength"] = 0;
// 解析子模块(修复起始地址错误)
tinyxml2::XMLElement *subModule = module->FirstChildElement("Object");
while (subModule) {
const char *subName = subModule->Attribute("Name");
if (subName && std::strcmp(subName, "(Sub)Module") == 0) {
tinyxml2::XMLElement *var = subModule->FirstChildElement("Variable");
while (var) {
const char *varName = var->Attribute("Name");
if (varName && std::strcmp(varName, "IOmapping") == 0) {
tinyxml2::XMLElement *elem = var->FirstChildElement("Element");
while (elem) {
const char *aid = elem->Attribute("AID");
const char *text = elem->GetText();
if (aid && text) {
try {
int val = std::stoi(text);
if (std::strcmp(aid, "6") == 0)
moduleJson["InputStartAddress"] = val;
else if (std::strcmp(aid, "7") == 0)
moduleJson["InputLength"] = val;
else if (std::strcmp(aid, "8") == 0)
moduleJson["OutputStartAddress"] = val;
else if (std::strcmp(aid, "9") == 0)
moduleJson["OutputLength"] = val;
} catch (...) {
std::cerr << "错误:转换IO映射值失败: " << text << std::endl;
}
}
elem = elem->NextSiblingElement("Element");
}
}
var = var->NextSiblingElement("Variable");
}
}
subModule = subModule->NextSiblingElement("Object");
}
modules.append(moduleJson);
module = module->NextSiblingElement("Object");
}
deviceJson["Module"] = modules;
devices.append(deviceJson);
device = device->NextSiblingElement("Object");
}
return devices;
}
// 修复IDevice解析(处理输入输出长度错误)
Json::Value NetopInverse::parse_idevice(const std::string &xmlContent) {
tinyxml2::XMLDocument doc;
doc.Parse(xmlContent.c_str());
Json::Value idevice;
// 默认值
idevice["Activate"] = true;
idevice["InputLength"] = 0; // 初始化为0
idevice["OutputLength"] = 0; // 初始化为0
// 查找PROFINET IO-System
tinyxml2::XMLElement *ioSystem = doc.RootElement()->FirstChildElement("Object");
while (ioSystem) {
const char *name = ioSystem->Attribute("Name");
if (name && std::strcmp(name, "PROFINET IO-System") == 0) break;
ioSystem = ioSystem->NextSiblingElement("Object");
}
if (!ioSystem) return idevice;
// 查找智能设备
tinyxml2::XMLElement *device = ioSystem->FirstChildElement("Object");
while (device) {
const char *devName = device->Attribute("Name");
if (devName && std::strcmp(devName, "idevice-dap") == 0) {
// 查找VirtualPnModule
tinyxml2::XMLElement *virtualModule = device->FirstChildElement("Object");
while (virtualModule) {
const char *modName = virtualModule->Attribute("Name");
if (modName && std::strcmp(modName, "VirtualPnModule") == 0) {
tinyxml2::XMLElement *area = virtualModule->FirstChildElement("Object");
while (area) {
const char *areaName = area->Attribute("Name");
if (areaName) {
if (std::strcmp(areaName, "InputArea") == 0) {
tinyxml2::XMLElement *var = area->FirstChildElement("Variable");
while (var) {
const char *varName = var->Attribute("Name");
if (varName && std::strcmp(varName, "IOmapping") == 0) {
tinyxml2::XMLElement *elem = var->FirstChildElement("Element");
while (elem) {
const char *aid = elem->Attribute("AID");
const char *text = elem->GetText();
if (aid && text) {
try {
if (std::strcmp(aid, "7") == 0) {
// 修正:使用实际输入长度(XML中是128)
idevice["InputLength"] = std::stoi(text);
}
} catch (...) {
std::cerr << "错误:转换输入长度失败: " << text << std::endl;
}
}
elem = elem->NextSiblingElement("Element");
}
}
var = var->NextSiblingElement("Variable");
}
}
else if (std::strcmp(areaName, "OutputArea") == 0) {
tinyxml2::XMLElement *var = area->FirstChildElement("Variable");
while (var) {
const char *varName = var->Attribute("Name");
if (varName && std::strcmp(varName, "IOmapping") == 0) {
tinyxml2::XMLElement *elem = var->FirstChildElement("Element");
while (elem) {
const char *aid = elem->Attribute("AID");
const char *text = elem->GetText();
if (aid && text) {
try {
if (std::strcmp(aid, "9") == 0) {
// 修正:使用实际输出长度(XML中是128)
idevice["OutputLength"] = std::stoi(text);
}
} catch (...) {
std::cerr << "错误:转换输出长度失败: " << text << std::endl;
}
}
elem = elem->NextSiblingElement("Element");
}
}
var = var->NextSiblingElement("Variable");
}
}
}
area = area->NextSiblingElement("Object");
}
break;
}
virtualModule = virtualModule->NextSiblingElement("Object");
}
break;
}
device = device->NextSiblingElement("Object");
}
// 如果未解析到值,使用默认值
if (idevice["InputLength"].asInt() == 0) idevice["InputLength"] = 128;
if (idevice["OutputLength"].asInt() == 0) idevice["OutputLength"] = 128;
return idevice;
}
// 组合完整网络拓扑
void NetopInverse::combine_network_topology(const std::string &xmlContent) {
// 解析各组件
Json::Value pnDriver = parse_pn_driver(xmlContent);
Json::Value decentralDevices = parse_decentral_devices(xmlContent);
Json::Value idevice = parse_idevice(xmlContent);
// 构建完整JSON
Json::Value root;
root["DataType"] = 12;
root["PN_Driver"] = pnDriver;
root["DecentralDevice"] = decentralDevices;
root["IDevice"] = idevice;
root["Error"] = Json::arrayValue;
root["ErrorID"] = Json::arrayValue;
root["Function"] = Json::objectValue;
// 保存JSON文件
const char *filename = "NetworkTopologyInverse.json";
int result = NRC_SaveJsonToJsonFile(filename, root);
if (result > 0) {
std::cout << "JSON文件保存成功,大小: " << result << " 字节" << std::endl;
} else {
std::cerr << "错误:保存JSON文件失败" << std::endl;
}
}
// 主执行函数
void NetopInverse::do_NetopInverse() {
std::ifstream file("./test/PROFINET Driver_PN_Driver_1.xml");
if (!file.is_open()) {
std::cerr << "错误:无法打开XML文件" << std::endl;
return;
}
std::string xmlContent((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
combine_network_topology(xmlContent);
}
把有错误的路径修改一下
xml:
<?xml version="1.0" encoding="utf-8"?>
<Object Name="HWConfiguration">
<ClassRID>1</ClassRID>
<Object Name="profinetdriver">
<ClassRID>2</ClassRID>
<Variable Name="DataRecordsConf">
<AID>17</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="4101" Length="48">02000001000000000000B201000000028000FFFFFFFF000000000130000000008001FFFFFFFF00000000013100000000</Field>
<Field Key="45169" Length="28">F003001802000000000206077075626C696300007072697661746500</Field>
</Value>
</Variable>
<Object Name="PN_Driver_1_Interface">
<ClassRID>3</ClassRID>
<Key AID="2">32768</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">259</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="4097" Length="12">300600080101000000000000</Field>
<Field Key="4096" Length="20">3000001001000000C0A8020EFFFFFF00C0A8020E</Field>
<Field Key="4100" Length="12">300900080101000000000000</Field>
<Field Key="4099" Length="28">A201001801000000000E000070726F66696E65746472697665720000</Field>
<Field Key="65536" Length="12">F00000080100002000030000</Field>
<Field Key="32881" Length="12">025000080100000000000001</Field>
<Field Key="143616" Length="20">F001001001000000002A00080064000000000000</Field>
</Value>
</Variable>
<Link>
<AID>16</AID>
<TargetRID>2296447237</TargetRID>
</Link>
</Object>
<Object Name="Port 1">
<ClassRID>4</ClassRID>
<Key AID="2">32769</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">260</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
</Object>
</Object>
<Object Name="PROFINET IO-System">
<RID>2296447237</RID>
<ClassRID>5</ClassRID>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">261</Value>
</Variable>
<Variable Name="IOsysParamConfig">
<AID>15</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="12352" Length="20">3040001001010000002A000800640258012C0000</Field>
</Value>
</Variable>
<Object Name="SWAQ3_1">
<GSDMLFile>gsdml-v2.31-obara-siv31-40-20190707.xml</GSDMLFile>
<ClassRID>6</ClassRID>
<Key AID="3">1</Key>
<Variable Name="DeactivatedConfig">
<AID>4</AID>
<Value Datatype="Scalar" Valuetype="BOOL">false</Value>
</Variable>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">264</Value>
</Variable>
<Variable Name="IODevParamConfig">
<AID>13</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="12384" Length="32">3060001C01000000038A003000010FE400000001000010000000000000000000</Field>
<Field Key="12545" Length="224">310100DC01000000000100000000000000030074010000000000800100000000800200000004000100000000000100000000000100000001000100000000800000000000000200000000000100000001000100000000800100000000000300000000000100000001000100000000800200000000000300000000000100000001000100000000002C010000010000000000010000000100000001000100000000080000010000000100080001000100000000002C0100000200000000000200000001000000010001000010001100000200000000001100010001000000000000</Field>
<Field Key="12544" Length="64">3100003C010100000100000181AF66D6BF346347B1C35DA7EF318E514000001100C8000000000000000000000000000000000000000000000000000000000000</Field>
<Field Key="12546" Length="256">310200FC01000000000200780100000100018892000000000002000E80000020000200010000FFFFFFFF000500050000C0000000000000000000000000000000000000000001000000000005000000010000000000008000000100000000800100020000000080020003000000010001000400000000000100020001000D0000000000780100000200028892000000000002001780010020000200010000FFFFFFFF000500050000C0000000000000000000000000000000000000000001000000000001000200010005000000000005000000010000000000008000000100000000800100020000000080020003000000010001000400000000000000000000</Field>
<Field Key="12549" Length="58">31050036010000000001002C0024E05000000609002001000000060100180100000000000001C7B057EBE0CB5DAA8B0ACEB18380BFE500000000</Field>
<Field Key="12551" Length="28">310700180100000001000001889200000000000000010003C000A000</Field>
</Value>
</Variable>
<Object Name="Network Parameters">
<ClassRID>11</ClassRID>
<Variable Name="NetworkParamConfig">
<AID>12</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="4099" Length="24">A201001401000000000C0000737761713378623161353533</Field>
<Field Key="4096" Length="20">3000001001000000C0A80202FFFFFF00C0A80202</Field>
<Field Key="4103" Length="12">301100080101000000000000</Field>
</Value>
</Variable>
</Object>
<Object Name="SWAQ3_1">
<ClassRID>7</ClassRID>
<Key AID="1">0</Key>
<Object Name="SWAQ3_1">
<ClassRID>8</ClassRID>
<Key AID="2">65520</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">262</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="SWAQ3_1">
<ClassRID>9</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">265</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="SWAQ3_1_Interface">
<ClassRID>9</ClassRID>
<Key AID="2">32768</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">266</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="32849" Length="28">0213001801000000C3D687FE789E03A1ACDBE5BFCBBC27B600000000</Field>
<Field Key="32850" Length="40">0211002401000000C3D687FE789E03A1ACDBE5BFCBBC27B6000000000B6D7270646F6D61696E2D31</Field>
<Field Key="32881" Length="12">025000080100000000000001</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 1">
<ClassRID>9</ClassRID>
<Key AID="2">32769</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">267</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 2">
<ClassRID>9</ClassRID>
<Key AID="2">32770</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">268</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
</Object>
<Object Name="64 Digital Input">
<ClassRID>7</ClassRID>
<Key AID="1">1</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">270</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">8</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">0</Element>
</Value>
</Variable>
</Object>
</Object>
<Object Name="136 Digital Output">
<ClassRID>7</ClassRID>
<Key AID="1">2</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">272</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">0</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">17</Element>
</Value>
</Variable>
</Object>
</Object>
</Object>
<Object Name="SWAQ3_2">
<GSDMLFile>gsdml-v2.31-obara-siv31-40-20190707.xml</GSDMLFile>
<ClassRID>6</ClassRID>
<Key AID="3">2</Key>
<Variable Name="DeactivatedConfig">
<AID>4</AID>
<Value Datatype="Scalar" Valuetype="BOOL">false</Value>
</Variable>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">275</Value>
</Variable>
<Variable Name="IODevParamConfig">
<AID>13</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="12384" Length="32">3060001C01000000038A003000010FE400000001000010000000000000000000</Field>
<Field Key="12545" Length="224">310100DC01000000000100000000000000030074010000000000800100000000800200000004000100000000000100000000000100000001000100000000800000000000000200000000000100000001000100000000800100000000000300000000000100000001000100000000800200000000000300000000000100000001000100000000002C010000010000000000010000000100000001000100000000080000010000000100080001000100000000002C0100000200000000000200000001000000010001000010001100000200000000001100010001000000000000</Field>
<Field Key="12544" Length="64">3100003C01010000010000018C771B18FE9FB448B169862B00DAE21D4000001100C8000000000000000000000000000000000000000000000000000000000000</Field>
<Field Key="12546" Length="256">310200FC01000000000200780100000100018892000000000002000E80020020000200020000FFFFFFFF000500050000C0000000000000000000000000000000000000000001000000000005000000010000000000008000000100000000800100020000000080020003000000010001000400000000000100020001000D0000000000780100000200028892000000000002001780030020000200020000FFFFFFFF000500050000C0000000000000000000000000000000000000000001000000000001000200010005000000000005000000010000000000008000000100000000800100020000000080020003000000010001000400000000000000000000</Field>
<Field Key="12549" Length="58">31050036010000000001002C0024E05000000609002001000000060100180100000000000001C7B057EBE0CB5DAA8B0ACEB18380BFE500000000</Field>
<Field Key="12551" Length="28">310700180100000001000001889200000000000000010003C000A000</Field>
</Value>
</Variable>
<Object Name="Network Parameters">
<ClassRID>11</ClassRID>
<Variable Name="NetworkParamConfig">
<AID>12</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="4099" Length="24">A201001401000000000C0000737761713378623261343133</Field>
<Field Key="4096" Length="20">3000001001000000C0A80201FFFFFF00C0A80201</Field>
<Field Key="4103" Length="12">301100080101000000000000</Field>
</Value>
</Variable>
</Object>
<Object Name="SWAQ3_2">
<ClassRID>7</ClassRID>
<Key AID="1">0</Key>
<Object Name="SWAQ3_2">
<ClassRID>8</ClassRID>
<Key AID="2">65520</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">273</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="SWAQ3_2">
<ClassRID>9</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">276</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="SWAQ3_2_Interface">
<ClassRID>9</ClassRID>
<Key AID="2">32768</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">277</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="32849" Length="28">0213001801000000C3D687FE789E03A1ACDBE5BFCBBC27B600000000</Field>
<Field Key="32850" Length="40">0211002401000000C3D687FE789E03A1ACDBE5BFCBBC27B6000000000B6D7270646F6D61696E2D31</Field>
<Field Key="32881" Length="12">025000080100000000000001</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 1">
<ClassRID>9</ClassRID>
<Key AID="2">32769</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">278</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 2">
<ClassRID>9</ClassRID>
<Key AID="2">32770</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">279</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
</Object>
<Object Name="64 Digital Input">
<ClassRID>7</ClassRID>
<Key AID="1">1</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">281</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">8</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">8</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">0</Element>
</Value>
</Variable>
</Object>
</Object>
<Object Name="136 Digital Output">
<ClassRID>7</ClassRID>
<Key AID="1">2</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">283</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">0</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">17</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">17</Element>
</Value>
</Variable>
</Object>
</Object>
</Object>
<Object Name="EX245-SPN-Cu_1">
<GSDMLFile>gsdml-v2.34-smc-ex245-spn-20181102.xml</GSDMLFile>
<ClassRID>6</ClassRID>
<Key AID="3">3</Key>
<Variable Name="DeactivatedConfig">
<AID>4</AID>
<Value Datatype="Scalar" Valuetype="BOOL">false</Value>
</Variable>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">286</Value>
</Variable>
<Variable Name="IODevParamConfig">
<AID>13</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="12384" Length="32">3060001C01000000008300110001200000000001000010000000000000000000</Field>
<Field Key="12545" Length="272">3101010C01000000000100000000000000040074010000000000000000020000800200000004000100000000000100000000000100000001000100000000800000000000000200000000000100000001000100000000800100000000000300000000000100000001000100000000800200000000000300000000000100000001000100000000002C010000010000000001000000000100000001000100000000000100010000000100040001000100000000002C010000020000000000110000000100000001000100000000000100020000000000040001000100000000002C010000030000000000100000000100000001000100000000000100010000000100020001000100000000000000000000</Field>
<Field Key="12544" Length="64">3100003C0101000001000001B778D841089633469E1A20BB0DCAFFE54000001100C8000000000000000000000000000000000000000000000000000000000000</Field>
<Field Key="12546" Length="272">3102010C01000000000200800100000100018892000000000002000D80040020000200010000FFFFFFFF000500050000C00000000000000000000000000000000000000000010000000000060000000100000000000080000001000000008001000200000000800200030000000100010004000000030001000A0000000000010002000100090000000000800100000200028892000000000002000B80050020000200010000FFFFFFFF000500050000C00000000000000000000000000000000000000000010000000000010002000100050000000000060000000100000000000080000001000000008001000200000000800200030000000100010004000000030001000A00000000000000000000</Field>
<Field Key="12551" Length="28">310700180100000001000001889200000000000000010003C000A000</Field>
</Value>
</Variable>
<Object Name="Network Parameters">
<ClassRID>11</ClassRID>
<Variable Name="NetworkParamConfig">
<AID>12</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="4099" Length="32">A201001C01000000001400006578783234352D73706E2D637578623134343262</Field>
<Field Key="4096" Length="20">3000001001000000C0A80203FFFFFF00C0A80203</Field>
<Field Key="4103" Length="12">301100080101000000000000</Field>
</Value>
</Variable>
</Object>
<Object Name="EX245-SPN-Cu_1">
<ClassRID>7</ClassRID>
<Key AID="1">0</Key>
<Object Name="EX245-SPN-Cu_1">
<ClassRID>8</ClassRID>
<Key AID="2">65520</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">284</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="EX245-SPN-Cu_1">
<ClassRID>9</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">287</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="EX245-SPN-Cu_1_Interface">
<ClassRID>9</ClassRID>
<Key AID="2">32768</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">288</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="32849" Length="28">0213001801000000C3D687FE789E03A1ACDBE5BFCBBC27B600000000</Field>
<Field Key="32850" Length="40">0211002401000000C3D687FE789E03A1ACDBE5BFCBBC27B6000000000B6D7270646F6D61696E2D31</Field>
<Field Key="32881" Length="12">025000080100000000000001</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 1">
<ClassRID>9</ClassRID>
<Key AID="2">32769</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">289</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="32815" Length="24">020200140100000000008001022600080100000000000000</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="Port 2">
<ClassRID>9</ClassRID>
<Key AID="2">32770</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">290</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="32815" Length="24">020200140100000000008002022600080100000000000000</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
</Object>
<Object Name="Diagnostics type 1_1">
<ClassRID>7</ClassRID>
<Key AID="1">1</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">292</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">16</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">4</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">0</Element>
</Value>
</Variable>
</Object>
</Object>
<Object Name="32 valves_1">
<ClassRID>7</ClassRID>
<Key AID="1">2</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">294</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="1" Length="1">01</Field>
<Field Key="3" Length="8">0000000000000000</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">0</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">34</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">4</Element>
</Value>
</Variable>
</Object>
</Object>
<Object Name="EX245-DX1_1">
<ClassRID>7</ClassRID>
<Key AID="1">3</Key>
<Object Name="(Sub)Module">
<ClassRID>10</ClassRID>
<Key AID="2">1</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">296</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="1" Length="1">01</Field>
<Field Key="4" Length="1">01</Field>
</Value>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">20</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">2</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">0</Element>
</Value>
</Variable>
</Object>
</Object>
</Object>
<Object Name="idevice-dap">
<ClassRID>13</ClassRID>
<Key AID="3">1500</Key>
<Variable Name="DeactivatedConfig">
<AID>4</AID>
<Value Datatype="Scalar" Valuetype="BOOL">false</Value>
</Variable>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">297</Value>
</Variable>
<Variable Name="IODevParamConfig">
<AID>13</AID>
<Value Datatype="SparseArray" Valuetype="BLOB">
<Field Key="12384" Length="32">3060001C01000000002A00080064000000000000000000000000000000000000</Field>
<Field Key="12417" Length="144">3081008C010000000001000000000000000100740100000000000000B201000080010000000403E80000100000800081000000010080000100010000000003E900002000008000820000000000800001000100000000800000000000013000C00000000100000001000100000000800100000000013100C0000000010000000100010000000000000000000000000000</Field>
</Value>
</Variable>
<Object Name="VirtualPnModule">
<ClassRID>7</ClassRID>
<Key AID="1">0</Key>
<Object Name="VirtualPnModule">
<ClassRID>8</ClassRID>
<Key AID="2">65520</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">298</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
</Object>
<Object Name="InputArea">
<ClassRID>10</ClassRID>
<Key AID="2">1000</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">299</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">22</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">128</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">0</Element>
</Value>
</Variable>
</Object>
<Object Name="OutputArea">
<ClassRID>10</ClassRID>
<Key AID="2">1001</Key>
<Variable Name="LADDR">
<AID>10</AID>
<Value Datatype="Scalar" Valuetype="UINT16">300</Value>
</Variable>
<Variable Name="DataRecordsConf">
<AID>11</AID>
<Value Datatype="SparseArray" Valuetype="BLOB"/>
</Variable>
<Variable Name="DataRecordsTransferSequence">
<AID>14</AID>
<Value Datatype="Scalar" Valuetype="BLOB" Length="0"/>
</Variable>
<Variable Name="IOmapping">
<AID>5</AID>
<Value Datatype="Scalar" Valuetype="STRUCT">
<Element AID="6" Datatype="Scalar" Valuetype="UINT32">0</Element>
<Element AID="7" Datatype="Scalar" Valuetype="UINT16">0</Element>
<Element AID="8" Datatype="Scalar" Valuetype="UINT32">38</Element>
<Element AID="9" Datatype="Scalar" Valuetype="UINT16">128</Element>
</Value>
</Variable>
</Object>
</Object>
</Object>
</Object>
</Object>
最新发布