Example #1
0
        /// <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++;
                            }
                        }
                    }
                }
            }
        }
Example #2
0
        /// <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;
                }
            }
        }