public CreateTag ( string tagName, UnderlyingSystemDataType dataType, UnderlyingSystemTagType tagType, string engineeringUnits, bool writeable ) : void | ||
tagName | string | Name of the tag. |
dataType | UnderlyingSystemDataType | Type of the data. |
tagType | UnderlyingSystemTagType | Type of the tag. |
engineeringUnits | string | The engineering units. |
writeable | bool | if set to |
return | void |
/// <summary> /// Finds a block. /// </summary> /// <param name="blockId">The block identifier.</param> /// <returns>The block.</returns> public UnderlyingSystemBlock FindBlock(string blockId) { UnderlyingSystemBlock block = null; lock (m_lock) { // check for invalid name. if (String.IsNullOrEmpty(blockId)) { return(null); } // look for cached block. if (m_blocks.TryGetValue(blockId, out block)) { return(block); } // lookup block in database. string blockType = null; int length = blockId.Length; for (int ii = 0; ii < s_BlockDatabase.Length; ii++) { blockType = s_BlockDatabase[ii]; if (length >= blockType.Length || blockType[length] != '/') { continue; } if (blockType.StartsWith(blockId)) { blockType = blockType.Substring(length + 1); break; } blockType = null; } // block not found. if (blockType == null) { return(null); } // create a new block. block = new UnderlyingSystemBlock(); // create the block. block.Id = blockId; block.Name = blockId; block.BlockType = blockType; m_blocks.Add(blockId, block); // add the tags based on the block type. // note that the block and tag types used here are types defined by the underlying system. // the node manager will need to map these types to UA defined types. switch (block.BlockType) { case "FlowSensor": { block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Analog, "liters/sec", false); block.CreateTag("Online", UnderlyingSystemDataType.Integer1, UnderlyingSystemTagType.Digital, null, false); break; } case "LevelSensor": { block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Analog, "liters", false); block.CreateTag("Online", UnderlyingSystemDataType.Integer1, UnderlyingSystemTagType.Digital, null, false); break; } case "Controller": { block.CreateTag("SetPoint", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); block.CreateTag("Output", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); block.CreateTag("Status", UnderlyingSystemDataType.Integer4, UnderlyingSystemTagType.Enumerated, null, false); break; } case "CustomController": { block.CreateTag("Input1", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Input2", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Input3", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Output", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); break; } } } // return the new block. return(block); }
/// <summary> /// Finds a block. /// </summary> /// <param name="blockId">The block identifier.</param> /// <returns>The block.</returns> public UnderlyingSystemBlock FindBlock(string blockId) { UnderlyingSystemBlock block = null; lock (m_lock) { // check for invalid name. if (String.IsNullOrEmpty(blockId)) { return null; } // look for cached block. if (m_blocks.TryGetValue(blockId, out block)) { return block; } // lookup block in database. string blockType = null; int length = blockId.Length; for (int ii = 0; ii < s_BlockDatabase.Length; ii++) { blockType = s_BlockDatabase[ii]; if (length >= blockType.Length || blockType[length] != '/') { continue; } if (blockType.StartsWith(blockId)) { blockType = blockType.Substring(length+1); break; } blockType = null; } // block not found. if (blockType == null) { return null; } // create a new block. block = new UnderlyingSystemBlock(); // create the block. block.Id = blockId; block.Name = blockId; block.BlockType = blockType; m_blocks.Add(blockId, block); // add the tags based on the block type. // note that the block and tag types used here are types defined by the underlying system. // the node manager will need to map these types to UA defined types. switch (block.BlockType) { case "FlowSensor": { block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Analog, "liters/sec", false); block.CreateTag("Online", UnderlyingSystemDataType.Integer1, UnderlyingSystemTagType.Digital, null, false); break; } case "LevelSensor": { block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Analog, "liters", false); block.CreateTag("Online", UnderlyingSystemDataType.Integer1, UnderlyingSystemTagType.Digital, null, false); break; } case "Controller": { block.CreateTag("SetPoint", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Measurement", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); block.CreateTag("Output", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); block.CreateTag("Status", UnderlyingSystemDataType.Integer4, UnderlyingSystemTagType.Enumerated, null, false); break; } case "CustomController": { block.CreateTag("Input1", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Input2", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Input3", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, true); block.CreateTag("Output", UnderlyingSystemDataType.Real4, UnderlyingSystemTagType.Normal, null, false); break; } } } // return the new block. return block; }