Build a third-party .NET module that appears as a native TagProvider in the Unified Namespace.
Reference → Code → Extensions API → Extension Module API Reference
An Extension Module is a custom .NET assembly that FrameworX loads as a TagProvider, so a third-party system (analytics, AI, cloud service, custom logic) is browsable and read/write directly inside the Unified Namespace — no external gateway process. It is declared by a manifest whose <TagProvider> element carries IsExtensionModule="True".
The official starting point is the UnsModuleSample project shipped in the TagProviderTemplateAdvanced reference. A second project in the same reference, UnsTagDiscoverySample, demonstrates the Discovery pattern and historian access.
In this section...
Anatomy
File | Role |
|---|---|
| Manifest. Declares the provider and generates the configuration UI. |
| Static entry-point class. The methods the host calls, plus the delegate fields the host injects. |
| Per-instance worker holding the namespace and value cache. |
| One node: Name, TypeName, Min, Max, EngUnits, Description, Value, Quality, UtcTimestamp. |
The <TagProvider> element identifies the provider type; IsExtensionModule="True" is what makes it an Extension Module. The <Station><Custom> block defines the positional, semicolon-separated configuration fields shown in the Designer.
Method | Role |
|---|---|
| Split the station string into a dictionary. |
| Connection lifecycle. |
| Return the type of a node. |
| Browse the tree; returns a DataTable (schema below). |
| Register / unregister a node and its metadata. |
| Batch read: returns a bool[] plus out values, qualities, UTC timestamps. |
| Write a value to a node. |
| Optional lifecycle hooks (empty stubs in the template). |
Delegate | Role |
|---|---|
| Read / write FrameworX tags from inside the module. |
| Emit trace through the host pipeline. |
Fixed columns: Name, IsAttribute, HasChildren, HasAttributes, HasHistorian, Value, TimeStamp when includeValue, Type, Error, IsExcluded, IsHidden, IsDeleted, Separator. A branch row sets IsAttribute=false, HasChildren=true, Type="Object". A leaf row sets IsAttribute=true, Type to the node type, and fills Value/TimeStamp.
Node types use the FrameworX-internal vocabulary: Integer, Double, Text, Digital (also available: Float, Long, Short, Byte, DateTime, TextArray, Folder).
UnsModuleSample project as a starting point.AssemblyName, DefaultName, and the <Station> configuration fields.ConnectInfo and the entry-point methods in Util..config.xml in the FrameworX Bin/Protocols folder.If you need to access this API, contact us through support@tatsoft.com.
In this section...