/// <summary> /// Creates OPC server child nodes. /// </summary> private void CreateChildNodes(FolderState rootFolder) { foreach (ILineContext lineContext in commContext.GetCommLines()) { List <DeviceLogic> devices = new List <DeviceLogic>(); devices.AddRange(deviceFilter == null ? lineContext.SelectDevices() : lineContext.SelectDevices(d => deviceFilter.Contains(d.DeviceNum))); if (devices.Count > 0) { FolderState lineFolder = CreateFolder(rootFolder, CommUtils.GetLineLogFileName(lineContext.CommLineNum, ""), lineContext.Title); foreach (DeviceLogic deviceLogic in devices) { FolderState deviceFolder = CreateFolder(lineFolder, CommUtils.GetDeviceLogFileName(deviceLogic.DeviceNum, ""), deviceLogic.Title); DeviceVars deviceVars = new DeviceVars(); varByDevice[deviceLogic.DeviceNum] = deviceVars; if (deviceLogic.DeviceTags.FlattenGroups) { foreach (TagGroup tagGroup in deviceLogic.DeviceTags.TagGroups) { CreateDeviceTagNodes(deviceFolder, deviceLogic, tagGroup, deviceVars); } } else { int groupNum = 1; foreach (TagGroup tagGroup in deviceLogic.DeviceTags.TagGroups) { FolderState groupFolder = CreateFolder(deviceFolder, "group" + groupNum.ToString("D3"), tagGroup.Name); CreateDeviceTagNodes(groupFolder, deviceLogic, tagGroup, deviceVars); groupNum++; } } } } } }
/// <summary> /// Creates OPC server nodes that correspond to device tags. /// </summary> private void CreateDeviceTagNodes(FolderState folder, DeviceLogic deviceLogic, TagGroup tagGroup, DeviceVars deviceVars) { string pathPrefix = CommUtils.GetDeviceLogFileName(deviceLogic.DeviceNum, "."); foreach (DeviceTag deviceTag in tagGroup.DeviceTags) { if (!string.IsNullOrEmpty(deviceTag.Code)) { BaseDataVariableState variable = CreateVariable(folder, pathPrefix, deviceTag); variable.OnSimpleWriteValue = OnSimpleWriteValue; VarItem varItem = new VarItem { Variable = variable, DeviceTag = deviceTag, DeviceNum = deviceLogic.DeviceNum }; deviceVars[deviceTag.Code] = varItem; varByPath[variable.NodeId.ToString()] = varItem; } } }