/// <summary> /// Get Attributes of single process device. /// </summary> /// <param name="requestAnswer">HTTP response after SPARQL request</param> /// <param name="currentObject">Current LinkdDataObject</param> /// <param name="loopcounter">Actual loop counter </param> public LinkedDataObject getSingleProcessDeviceDecoder(LinkedDataObject currentObject) { string inputHtml = getSingleProcessDeviceSPARQLRequest(currentObject.SparqlURL); // get Linked Data request string requestAnswer = getHTTPReq(preURL + System.Uri.EscapeDataString(inputHtml) + endURL); // request linked data server and get answer //Debug.Log("RequestAnswer: " + requestAnswer); XmlDocument xml = new XmlDocument(); // new xml object xml.LoadXml(requestAnswer); // translate string in xml // TODO Serialisierung? XmlNodeList dataNode = xml.SelectNodes("/table/tr/td"); // parse xml document //Debug.Log ("XMLNODELIST: " + dataNode.Item(0).InnerText); //Debug.Log ("Länge XMLNODELIST: " + dataNode.Count); // Save if ((dataNode.Count % 3) == 0) { for (int i = 0; i < dataNode.Count; i = i + 3) { currentObject.addAttribute(dataNode.Item(i).InnerText, dataNode.Item(i + 1).InnerText, dataNode.Item(i + 2).InnerText); //linkedDataModule[loopcounter] = currentObject; } ; //Debug.Log("Listenelement: " + processDevice.getLinkedDataObject()[5].getAll()); } else { Debug.Log("Error in XML!"); } return(currentObject); }
/// <summary> /// Extract und save all standard information of all ProzessDevices. /// </summary> /// <returns><c>true</c>, if all module process devices was gotten, <c>false</c> otherwise.</returns> /// <param name="requestAnswer">HTTP request in a string</param> public List <LinkedDataObject> getAllModuleProcessDevices(string module) { List <LinkedDataObject> linkedDataModule = new List <LinkedDataObject>(); // Aus Überschichtsgründen! string requestURL = getAllModuleProcessDevicesSPARQLRequest(module); string requestAnswer = getHTTPReq(preURL + System.Uri.EscapeDataString(requestURL) + endURL); XmlDocument xml = new XmlDocument(); xml.LoadXml(requestAnswer); // Alternative: xml.LoadXml(getHTTP(getAllProcessDevicesSPARQLRequest())); XmlNodeList dataNode = xml.SelectNodes("/table/tr/td"); if ((dataNode.Count % 5) == 0) { for (int i = 0; i < dataNode.Count; i = i + 5) { LinkedDataObject processDevice = new LinkedDataObject(); //Debug.Log("Setting all general variables!"); processDevice.setGeneralVariable(dataNode.Item(i).InnerText, dataNode.Item(i + 1).InnerText, dataNode.Item(i + 2).InnerText, dataNode.Item(i + 3).InnerText, dataNode.Item(i + 4).InnerText); // TODO: Backbone ausgeschlossen, da sich hier prozesselemente wiederholen: Q1 if (dataNode.Item(i + 1).InnerText != "Backbone") { linkedDataModule.Add(processDevice); } } return(linkedDataModule); } else { Debug.Log("Error in XML!"); return(linkedDataModule); } }
/// <summary> /// Build new database entry based on LinkedData and OPC UA. /// </summary> /// <returns>New database object</returns> /// <param name="ldResponse">Linked Data response object.</param> /// <param name="module">Name of the module</param> private DeviceGUI BuildDatabaseEntry(LinkedDataObject ldResponse, String module) { // Validate the Device and get the new device back. Device local = devVali.Validator(ldResponse.PlantTag, module, istNodeIds); local.LinkedData_data = ldResponse; // Safe LinkedData // Now OPC UA Data: if (istNodeIds.TagToNodeId [module].ContainsKey(ldResponse.PlantTag)) { // There are opc ua inforamtion local.InitOPCUAData(restAPI.getNode(istNodeIds.TagToNodeId [module] [ldResponse.PlantTag].Core), restAPI.getNode(sollNodeIds.SollNodeId [module] [ldResponse.PlantTag])); } else if (local.DeviceType == "Tank") { // There are opc ua information for the submoduls local.InitOPCUAData(istNodeIds, sollNodeIds, restAPI); } else { local = new HandValve(local.Tag); local.InitOPCUAData(null, null); } try { return((DeviceGUI)local); // return the object } catch (Exception e) { Debug.Log(local.LinkedData_data.PlantTag + ": TypeCast faild -> " + e.Message); DeviceGUI newLocal = new DeviceGUI(local.LinkedData_data.PlantTag); return(newLocal); } }