public void UpdateServerData(NodeData data, NodeData quality, bool updateQuality, NodeData time, bool updateTimestamp) { DataAttribute da = (DataAttribute)data.SCLServerModelObject; IedServer iedSvr = GetIedServer(); if (da != null && iedSvr != null) { iedSvr.LockDataModel(); if (quality != null && updateQuality) { DataAttribute daq = (DataAttribute)quality.SCLServerModelObject; if (daq != null) { daq.UpdateValue(iedSvr, quality.DataValue); } } if (time != null && updateTimestamp) { DataAttribute dat = (DataAttribute)time.SCLServerModelObject; time.DataValue = DateTime.Now; if (dat != null) { dat.UpdateValue(iedSvr, Util.GetTimeInMs()); } } da.UpdateValue(iedSvr, data.DataValue); iedSvr.UnlockDataModel(); } }
void InitializeValues(NodeBase nb) { if (nb.isLeaf() && (nb is NodeData && !(nb is NodeDO))) { NodeData nd = nb as NodeData; if (nd.SCLServerModelObject != null) { // Initial value exist (from SCL file) DataAttribute da = (DataAttribute)nd.SCLServerModelObject; if (nd.DataValue != null) { da.UpdateValue(server, nd.DataValue); } nd.DataType = (scsm_MMS_TypeEnum)da.GetMmsValueType(); logger.LogDebug("InitializeValues: " + nd.IecAddress + ", Type: " + nd.DataType.ToString()); } /*else * { * NodeBase arr = nd.findArray(); * if (arr != null) * { * if (arr is NodeData) * { * // Array in Attribute * DataAttribute da = (DataAttribute)arr.SCLServerModelObject; * } * else * { * // Array in DataObject * } * } * }*/ } else { foreach (NodeBase child in nb.GetChildNodes()) { // Recursion InitializeValues(child); } } }