} // end constructor public override int HandleReadRequests() { int count = Requests.Count; for (int i = 0; i < count; i++) { DaRequest request = (DaRequest)Requests[i]; if (request.PropertyId == 0) { // get address space element value // take the Toolkit cache value ValueQT cacheValue = null; request.AddressSpaceElement.GetCacheValue(ref cacheValue); request.Value = cacheValue; request.Result = EnumResultCode.S_OK; } else { // get property value // get the value from the address space element MyDaAddressSpaceElement element = request.AddressSpaceElement as MyDaAddressSpaceElement; if (element != null) { element.GetPropertyValue(request); } else { request.Result = EnumResultCode.E_FAIL; } // end if ... else } // end if ... else } // end for return(CompleteRequests()); } // end HandleReadRequests
} // end HandleReadRequests public override int HandleWriteRequests() { int count = Requests.Count; for (int i = 0; i < count; i++) { DaRequest request = Requests[i] as DaRequest; if (request != null) { MyDaAddressSpaceElement element = (MyDaAddressSpaceElement)request.AddressSpaceElement; if (element != null) { ValueQT valueQT = request.Value; request.Result = (EnumResultCode)element.ValueChanged(valueQT); } // end if } // end if } // end for return(CompleteRequests()); } // end HandleWriteRequests
} //end addAddressSpaceElement protected void ChangeSimulationValuesNode(MyDaAddressSpaceElement node) { System.Collections.ArrayList nodeChildren; nodeChildren = node.GetChildren(); foreach (MyDaAddressSpaceElement child in nodeChildren) { if (child.HasChildren) { ChangeSimulationValuesNode(child); } else if (child.IsChanging) { if (!ResultCode.SUCCEEDED(child.changeValue())) { Trace(EnumTraceLevel.ERR, EnumTraceGroup.ALL, "OpcServer::ChangeSimulationValuesNode", "Error in changing value. Data type unknown"); } } } } // end ChangeSimulationValuesNode
} // end parseConfigFile protected int addAddressSpaceElement() { Type dataType; EnumAccessRights accessRights; MyDaAddressSpaceElement parent; bool isChanging; bool isArray; bool hasChildren; //String tempParentID; if (m_currentLine[4] == "true") { isArray = true; } else { isArray = false; } switch (m_currentLine[2]) { case "UI1": case "BYTE": if (isArray) { dataType = typeof(System.Byte[]); } else { dataType = typeof(System.Byte); } break; case "CHAR": if (isArray) { dataType = typeof(System.SByte[]); } else { dataType = typeof(System.SByte); } break; case "UI2": case "WORD": if (isArray) { dataType = typeof(System.UInt16[]); } else { dataType = typeof(System.UInt16); } break; case "INT": if (isArray) { dataType = typeof(System.Int16[]); } else { dataType = typeof(System.Int16); } break; case "UI4": case "DWORD": if (isArray) { dataType = typeof(System.UInt32[]); } else { dataType = typeof(System.UInt32); } break; case "DINT": if (isArray) { dataType = typeof(System.Int32[]); } else { dataType = typeof(System.Int32); } break; case "REAL": case "FLOAT": if (isArray) { dataType = typeof(float[]); } else { dataType = typeof(float); } //dataType = typeof(System.Double); break; case "BOOL": if (isArray) { dataType = typeof(System.Boolean[]); } else { dataType = typeof(System.Boolean); } break; case "DATE_AND_TIME": if (isArray) { dataType = typeof(System.DateTime[]); } else { dataType = typeof(System.DateTime); } break; case "STRING": if (isArray) { dataType = typeof(System.String[]); } else { dataType = typeof(System.String); } break; case "NONE": dataType = null; break; default: dataType = null; break; } //end switch data type switch (m_currentLine[3]) { case "NONE": accessRights = EnumAccessRights.READABLE; break; case "R": accessRights = EnumAccessRights.READABLE; break; case "W": accessRights = EnumAccessRights.WRITEABLE; break; case "RW": accessRights = EnumAccessRights.READWRITEABLE; break; default: accessRights = EnumAccessRights.READABLE; break; } // end switch access rights if (m_currentLine[6] == "true") { isChanging = true; } else { isChanging = false; } if (m_currentLine[5] == "true") { hasChildren = true; } else { hasChildren = false; } m_daElement = (MyDaAddressSpaceElement)m_creator.CreateMyDaAddressSpaceElement(); m_daElement.ItemId = m_currentLine[0]; m_daElement.Name = m_currentLine[1]; m_daElement.AccessRights = accessRights; m_daElement.Datatype = dataType; m_daElement.IsChanging = isChanging; m_daElement.IoMode = EnumIoMode.REPORT; m_daElement.HasChildren = hasChildren; //determine parent if (m_currentLine[9] == "") { if (!m_daRoot.AddChild(m_daElement)) { Trace(EnumTraceLevel.ERR, EnumTraceGroup.ALL, "OpcServer::addAddressSpaceElement", "Error in adding child to root node"); return((int)EnumResultCode.E_FAIL); } } else { //tempParentID = m_currentLine[9]; //tempParentID.Replace('/', '.'); if (m_parentHash.ContainsKey(m_currentLine[9])) { parent = (MyDaAddressSpaceElement)m_parentHash[m_currentLine[9]]; if (!parent.AddChild(m_daElement)) { Trace(EnumTraceLevel.ERR, EnumTraceGroup.ALL, "OpcServer::addAddressSpaceElement", "Error in adding child to his parent"); return((int)EnumResultCode.E_FAIL); } } else { Trace(EnumTraceLevel.ERR, EnumTraceGroup.ALL, "OpcServer::addAddressSpaceElement", "Cannot find parent in hashmap"); return((int)EnumResultCode.E_FAIL); } } if (m_daElement.HasChildren) { m_parentHash.Add(m_daElement.ItemId, m_daElement); } else { if (!ResultCode.SUCCEEDED(m_daElement.SetInitialValue(m_currentLine[7], m_currentLine[8]))) { Trace(EnumTraceLevel.ERR, EnumTraceGroup.ALL, "OpcServer::parseConfigFile", "Error in setting initial value. Data type unknown"); return((int)EnumResultCode.E_FAIL); } } return((int)EnumResultCode.S_OK); } //end addAddressSpaceElement