Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Complete field reference for JSON-based configuration import and export.
ReferenceSolutionDevOps → Git Integration | JSON Specification

Info

JSON Import/Export Specification (Reference): Detailed field-level documentation for programmatic configuration of all object types via JSON files. Essential for MCP tools, CI/CD pipelines, and external integrations. Format version 1.1.


Overview

This specification documents the JSON format used for:

  • Git export/import operations
  • MCP (Model Context Protocol) tool integration
  • CI/CD pipeline automation
  • External system integration
  • Bulk configuration management

Key Principle: Import and Export use the same JSON format. The only difference is that import ignores metadata sections.

Table of Contents
maxLevel2
minLevel2
excludeOverview
stylenone
classon-this-page
printablefalse



JSON Structure

Standard Format (v1.1)

Every JSON file follows this fourthree-section structure:

json

{
  "ObjectIdentification": {
    "Module": "Uns",
    "TableType": "UnsTags",
    "TableGroupSolutionName": "ObjectsMyProject"
  },
  "VersionInfoExportMetadata": {
    "TableVersionIDExportDate": 15"2026-01-16T10:30:00Z",
    "SolutionVersionIDExportUser": 245"john.doe",
    "SolutionNameExportProduct": "MyProjectFrameworX",
  },
  "ExportMetadataExportProductVersion": {
    "ExportDate": "2026-01-16T10:30:00Z",
    "ExportUser": "john.doe",
    "ExportProduct": "Designer",
    "ExportProductVersion": "10"10.1.1.1011",
    "ExportFormat": "1.01"
  },
  "Data": [
    { /* object 1 */ },
    { /* object 2 */ }
  ]
}

Section Details


SectionRequired for ImportDescription
ObjectIdentificationNo
Module
TableType and
table identification
source solution
VersionInfoExportMetadataNoExport audit
ExportMetadataNo
Version tracking metadata
Export audit information
DataYesArray of configuration objects

Note: The Data section is always an array, even for single-object exports.

Minimal Import Format

For import operations, only the Data array is required:

json

{
  "Data": [
    { "Name": "Tag1", "Type": 153"Double" }
  ]
}

Import Behavior

Fields Ignored on Import

These fields are auto-generated and ignored during import:

FieldReason
IDAuto-assigned unique identifier
VersionIDAuto-incremented on changeDateCreatedSet to import timestampDateModified
Set to import timestamp
XRefInfoCross-reference data rebuilt
LockStateLock status reset
ContentsRun
LockOwner
Runtime counter
Lock owner reset
BuildRequiredBuild flag resetBuildNumberBuild identifier reset

Import Rules

ScenarioBehavior
Name doesn't existObject created
Name already existsSkipped (no error)
Pre-defined objectSkipped (cannot modify)
Missing required fieldError
Invalid referenceError
Invalid enum valueError

Pre-defined Objects (Cannot Import)

These system objects cannot be created or modified via import:

ModulePre-defined Objects
DevicesAll Protocols, AccessTypes (Read, Write, ReadWrite)
AlarmsGroups (Critical, Warning, AuditTrail)
HistorianStorageLocation (Default), HistorianTable (Table1)
DatasetsDBs (TagHistorian, AlarmHistorian, RuntimeUsers, Retentive)
SecurityUsers (Administrator, Guest), Permissions (24 built-in)

Import Order Dependencies

When importing related objects, order matters:

  1. Independent objects first: Tags, Channels, AlarmGroups, StorageLocations, DatasetDBs
  2. Dependent objects after: Nodes→Channels, Points→Nodes+Tags, AlarmItems→Tags+Groups, HistorianTags→Tags+Tables

Tag Types Reference

Built-in Type IDs

Type NameType ID.NET TypeRange/Notes
Digital151Int320 or 1
Integer152Int32±2,147,483,647
Double153Double±1.79×10³??
Text154StringUnicode, 2GB max
DateTime155DateTimeOffsetYear 0001-9999
Long156Int64±9.2×10¹?
Decimal157Decimal28-29 significant digits
TimeSpan158TimeSpanDays to milliseconds
Timer162Int32Multiple timer modes
Counter163Int32Up/down counting
DataTable164DataTableIn-memory table
Image165Byte[]Binary content
Guid166Guid128-bit unique ID
Json167StringJSON with parsing
Reference170DynamicTag reference

UserType IDs

UserType references use IDs starting at 201:

  • First UserType created: ID 201
  • Second UserType: ID 202
  • And so on...

To reference a UserType in JSON: "Type": 201

TableType Reference

Valid TableType values for the ObjectIdentification section:

UNS Module

TableTypeObjectDescription
UnsTagsTagProcess variables
UnsUserTypesUserTypeData structure templates
UnsEnumerationsEnumerationValue-to-text mappings
UnsTagProvidersTagProviderExternal data connections
UnsAssetTreeAssetFolderFolder organization

Devices Module

TableTypeObjectDescription
DevicesProtocolsProtocolBuilt-in drivers (read-only)
DevicesChannelsChannelProtocol instances
DevicesNodesNodeDevice addresses
DevicesPointsPointTag-to-address mappings
DevicesAccessTypesAccessTypeRead/write behavior

Alarms Module

TableTypeObjectDescription
AlarmsGroupsAlarmGroupAlarm behavior settings
AlarmsItemsAlarmItemAlarm definitions
AlarmsAreasAlarmAreaHierarchy organization

Historian Module

TableTypeObjectDescription
HistorianStorageLocationsStorageLocationDatabase connections
HistorianTablesHistorianTableStorage rules
HistorianTagsHistorianTagTag assignments

Datasets Module

TableTypeObjectDescription
DatasetsDBsDatasetDBDatabase connections
DatasetsQueriesDatasetQuerySQL statements
DatasetsTablesDatasetTableDirect table mappings
DatasetsFilesDatasetFileFile I/O definitions

Scripts Module

TableTypeObjectDescription
ScriptsTasksScriptTaskTriggered code blocks
ScriptsClassesScriptClassReusable libraries
ScriptsExpressionsScriptExpressionOne-line calculations
ScriptsReferencesScriptReferenceExternal DLL references

Reports Module

TableTypeObjectDescription
ReportsFormsReportFormDocument templates
ReportsWebDataWebDataJSON/XML data objects

Security Module

TableTypeObjectDescription
SecurityUsersSecurityUserUser accounts
SecurityPermissionsSecurityPermissionPermission flags
SecurityPoliciesSecurityPolicyLogin/session rules
SecuritySecretsSecuritySecretProtected credentials

Displays Module

TableTypeObjectDescription
DisplaysDisplayUI screens
LayoutsLayoutFrame organization
ImagesImageImported graphics
SymbolsSymbolReusable components

Object Reference Formats

When JSON fields reference other objects, use these formats:

Reference ToFormatExample
Tag (root)Tag.{name}"Tag.Temperature"
Tag (nested)Tag.{path}.{name}"Tag.Line1.Tank1.Level"
ChannelChannel.{name}"Channel.ModbusPLC1"
NodeNode.{name}"Node.PLC1"
AccessTypeAccessType.{name}"AccessType.Read"
AlarmGroupAlarm.Group.{name}"Alarm.Group.Critical"
AlarmAreaAlarm.Area.{name}"Alarm.Area.Plant1"
HistorianTableHistorian.Table.{name}"Historian.Table.Table1"
StorageLocationHistorian.StorageLocation.{name}"Historian.StorageLocation.Default"
DatasetDBDB.{name}"DB.TagHistorian"

UNS Objects

Tag (UnsTags)

json


Fields Filtered from Export

These fields are excluded from export files to reduce size:

Compiled/Binary Data:

FieldReason
ContentsRunCompiled .NET assembly
WebContentsRunWeb/WASM compiled version
BuildMessagesSerialized build errors
WebBuildMessagesWeb build errors


Build Results:

FieldReason
BuildStatusBuild result
BuildErrorsBuild error count
BuildMessageBuild error text
BuildRequiredBuild flag
BuildNumberBuild identifier


Calculated Fields:

FieldReason
LinesCalculated from Contents
LengthCalculated from Contents
CanBePortableCalculated property
StringsExtracted strings
DriverVersionSystem-assigned


Conditional:

FieldRule
TypeKept only for UnsTags and UserType tables


Import Rules


ScenarioBehavior
Name doesn't existObject created
Name already existsSkipped (no error)
Pre-defined objectSkipped (cannot modify)
Missing required fieldError
Invalid referenceError
Invalid enum valueError

Pre-defined Objects (Cannot Import)

These system objects cannot be created or modified via import:

ModulePre-defined Objects
DevicesAll Protocols, AccessTypes (Read, Write, ReadWrite)
AlarmsGroups (Critical, Warning, AuditTrail)
HistorianStorageLocation (Default), HistorianTable (Table1)
DatasetsDBs (TagHistorian, AlarmHistorian, RuntimeUsers, Retentive)
SecurityUsers (Administrator, Guest), Permissions (24 built-in)


Import Order Dependencies

When importing related objects, order matters:

  1. Independent objects first: Tags, Channels, AlarmGroups, StorageLocations, DatasetDBs
  2. Dependent objects after: Nodes→Channels, Points→Nodes+Tags, AlarmItems→Tags+Groups, HistorianTags→Tags+Tables

Tag Types Reference

Built-in Types


Type NameString ValueType ID.NET TypeRange/Notes
Digital"Digital"151Int320 or 1
Integer"Integer"152Int32±2,147,483,647
Double"Double"153Double±1.79×10³??
Text"Text"154StringUnicode, 2GB max
DateTime"DateTime"155DateTimeOffsetYear 0001-9999
Long"Long"156Int64±9.2×10¹?
Decimal"Decimal"157Decimal28-29 significant digits
TimeSpan"TimeSpan"158TimeSpanDays to milliseconds
Timer"Timer"162Int32Multiple timer modes
Counter"Counter"163Int32Up/down counting
DataTable"DataTable"164DataTableIn-memory table
Image"Image"165Byte[]Binary content
Guid"Guid"166Guid128-bit unique ID
Json"Json"167StringJSON with parsing
Reference"Reference"170DynamicTag reference

UserType References

To reference a UserType in JSON, use the UserType name:

json

"Type": "LabelingMachine"

Enumeration Values Reference

Domain


String ValueDescription
"Server"Server-side execution
"Client"Client-side execution

Visibility


String ValueDescription
"Private"Not visible externally
"Protected"Visible to solution
"Public"Fully visible

Retentive


String ValueDescription
"None"Not retentive
"ValueOnly"Value persisted
"Properties"Value and properties persisted
"PropertiesOnly"Only properties persisted

Script Code Language


String ValueDescription
"VB.NET"Visual Basic .NET
"CSharp"C#
"Python"Python

TableType Reference

Valid TableType values:

UNS Module


TableTypeObjectDescription
UnsTagsTagProcess variables
UnsUserTypesUserTypeData structure templates
UnsEnumerationsEnumerationValue-to-text mappings
UnsTagProvidersTagProviderExternal data connections
UnsAssetTreeAssetFolderFolder organization

Devices Module


TableTypeObjectDescription
DevicesProtocolsProtocolBuilt-in drivers (read-only)
DevicesChannelsChannelProtocol instances
DevicesNodesNodeDevice addresses
DevicesPointsPointTag-to-address mappings
DevicesAccessTypesAccessTypeRead/write behavior

Alarms Module


TableTypeObjectDescription
AlarmsGroupsAlarmGroupAlarm behavior settings
AlarmsItemsAlarmItemAlarm definitions
AlarmsAreasAlarmAreaHierarchy organization

Historian Module


TableTypeObjectDescription
HistorianStorageLocationsStorageLocationDatabase connections
HistorianTablesHistorianTableStorage rules
HistorianTagsHistorianTagTag assignments

Datasets Module


TableTypeObjectDescription
DatasetsDBsDatasetDBDatabase connections
DatasetsQueriesDatasetQuerySQL statements
DatasetsTablesDatasetTableDirect table mappings
DatasetsFilesDatasetFileFile I/O definitions

Scripts Module


TableTypeObjectDescription
ScriptsTasksScriptTaskTriggered code blocks
ScriptsClassesScriptClassReusable libraries
ScriptsExpressionsScriptExpressionOne-line calculations
ScriptsReferencesScriptReferenceExternal DLL references

Reports Module


TableTypeObjectDescription
ReportsFormsReportFormDocument templates
ReportsWebDataWebDataJSON/XML data objects

Security Module


TableTypeObjectDescription
SecurityUsersSecurityUserUser accounts
SecurityPermissionsSecurityPermissionPermission flags
SecurityPoliciesSecurityPolicyLogin/session rules
SecuritySecretsSecuritySecretProtected credentials

Displays Module


TableTypeObjectDescription
DisplaysDisplayUI screens
LayoutsLayoutFrame organization
ImagesImageImported graphics
SymbolsSymbolReusable components

Object Reference Formats

When JSON fields reference other objects, use these formats:

Reference ToFormatExample
Tag (root)Tag.{name}"Tag.Temperature"
Tag (nested)Tag.{path}.{name}"Tag.Line1.Tank1.Level"
ChannelChannel.{name}"Channel.ModbusPLC1"
NodeNode.{name}"Node.PLC1"
AccessTypeAccessType.{name}"AccessType.Read"
AlarmGroupAlarm.Group.{name}"Alarm.Group.Critical"
AlarmAreaAlarm.Area.{name}"Alarm.Area.Plant1"
HistorianTableHistorian.Table.{name}"Historian.Table.Table1"
StorageLocationHistorian.StorageLocation.{name}"Historian.StorageLocation.Default"
DatasetDBDB.{name}"DB.TagHistorian"



UNS Objects

Tag (UnsTags)

json

{
  "Data": [
    {
      "Name": "Temperature",
      "Type": "Double",
      "Path": "\\Line1\\Tank1",
      "Description": "Tank temperature sensor",
      "Array": 0,
      "StartValue": "25.0",
      "Min": "0",
      "Max": "100",
      "Units": "°C",
      "Format": "N1",
      "Domain": "Server",
      "Visibility": "Public",
      "Retentive": "None",
      "DateCreated": "2026-01-16T10:30:00Z",
      "DateModified": "2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
NameYesstringUnique tag name
TypeYesstringType name (see Tag Types Reference)
PathNostringFolder path (backslash-separated)
DescriptionNostringDocumentation (max 1024 chars)
ArrayNointArray size (0=scalar, N=array[0..N])
StartValueNostringInitial value at startup
MinNostringMinimum allowed value
MaxNostringMaximum allowed value
UnitsNostringEngineering units label
FormatNostringDisplay format (N0, N2, etc.)
DomainNostring"Server" or "Client"
VisibilityNostring"Private", "Protected", or "Public"
RetentiveNostring"None", "ValueOnly", "Properties", "PropertiesOnly"
DateCreatedNostringCreation timestamp (ISO 8601)
DateModifiedNostringLast modification timestamp (ISO 8601)

AssetFolder (UnsAssetTree)

json

{
  "Data": [
    {
      "Name": "Line1",
      "Path": "",
      "LinkedProvider": "",
      "Alias": "",
      "Visibility": "Public",
      "DateCreated": "2026-01-16T10:30:00Z",
      "DateModified": "2026-01-16T10:30:00Z"
    },
    {
      "Name": "Tank1",
      "Path": "\\Line1",
      "LinkedProvider": "",
      "Alias": "Primary Tank",
      "Visibility": "Public",
      "DateCreated": "2026-01-16T10:30:00Z",
      "DateModified": "2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
NameYesstringFolder name
PathNostringParent path (empty=root)
LinkedProviderNostringTagProvider link
AliasNostringDisplay name override
VisibilityNostring"Private", "Protected", or "Public"

Devices Objects

Channel (DevicesChannels)

json

{
  "Data": [
    {
      "Name": "ModbusPLC1{
  "Data": [
    {
      "Name": "Temperature",
      "Type": 153,
      "Path": "\\Line1\\Tank1",
      "Description": "Tank temperature sensor",
      "ArrayProtocol": 0"Modbus",
      "StartValuePrimaryStation": "25.0192.168.1.10:502",
      "MinBackupStation": "0",
      "MaxTimeout": "100"3000,
      "UnitsRetries": "°C"3,
      "FormatEnabled": "N1"true,
      "DomainDescription": 0 "Main Modbus PLC",
      "Visibility": 2  "DateCreated": "2026-01-16T10:30:00Z",
      "RetentiveDateModified": 0"2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
NameYesstring
Unique tag
Channel name
Type
ProtocolYes
int
string
Type ID (see Tag Types Reference)Path
Protocol name (Modbus, OPCUA, etc.)
PrimaryStationYesstringConnection string
BackupStationNostring
Folder path (backslash-separated)
Redundant connection
TimeoutNointTimeout in milliseconds
Retries
Description
No
stringDocumentation (max 1024 chars)Array
intRetry count
EnabledNo
intArray size (0=scalar, N=array[0..N])
boolActive state
Description
StartValue
Nostring
Initial value at startupMinNostringMinimum allowed valueMaxNostringMaximum allowed valueUnitsNostringEngineering units labelFormatNostringDisplay format (N0, N2, etc.)DomainNoint0=Server, 1=ClientVisibilityNoint0=Private, 1=Protected, 2=PublicRetentiveNoint0=None, 1=ValueOnly, 2=Properties, 3=PropertiesOnly
AssetFolder (UnsAssetTree
Documentation

PrimaryStation Formats by Protocol:

ProtocolFormatExample
Modbus TCPIP:Port192.168.1.10:502
Modbus RTUCOM:Baud:Parity:Data:StopCOM1:9600:N:8:1
OPC UAopc.tcp://host:portopc.tcp://server:4840
MQTTmqtt://host:portmqtt://broker:1883
Siemens S7IP:Rack:Slot192.168.1.20:0:1
AB ControlLogixIP:Slot192.168.1.30:0


Node (DevicesNodes)

json

{
  "Data": [
    {
      "Name": "Line1PLC1",
      "PathChannel": "Channel.ModbusPLC1",
      "LinkedProviderPrimaryStation": "1",
      "AliasBackupStation": "",
      "Visibility": 2
    },
    {
      "Name": "Tank1",
      "Path": "\\Line1"Enabled": true,
      "LinkedProviderDescription": "Main PLC unit 1",
      "AliasDateCreated": "Primary Tank2026-01-16T10:30:00Z",
      "VisibilityDateModified": 2"2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
NameYesstring
Folder
Node name
Path
Channel
No
YesstringParent
path (empty=root)
channel reference
PrimaryStationYesstringDevice address
BackupStation
LinkedProvider
Nostring
TagProvider link
Redundant address
Alias
EnabledNo
stringDisplay name overrideVisibility
boolActive state
DescriptionNo
int0=Private, 1=Protected, 2=Public

Devices Objects

Channel (DevicesChannels
stringDocumentation

Point (DevicesPoints)

json

{
  "Data": [
    {
      "NameNode": "ModbusPLC1Node.PLC1",
      "ProtocolTag": "ModbusTag.Line1.Tank1.Temperature",
      "PrimaryStationAddress": "192.168.1.10:502HR100",
      "BackupStationAccessType": "",
      "Timeout": 3000AccessType.Read",
      "RetriesEnabled": 3true,
      "EnabledDateCreated": true"2026-01-16T10:30:00Z",
      "DescriptionDateModified": "Main Modbus PLC2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
Name
NodeYesstring
Channel nameProtocolYesstringProtocol name (Modbus, OPCUA, etc.)PrimaryStationYesstringConnection stringBackupStationNostringRedundant connectionTimeoutNointTimeout in millisecondsRetriesNointRetry count
Parent node reference
TagYesstringTag reference
AddressYesstringDevice address
AccessTypeNostringDefault: Read
EnabledNoboolActive state
DescriptionNostringDocumentation

PrimaryStation Address Formats by Protocol:

ProtocolFormat
Example
Examples
Modbus
TCPIP:Port192.168.1.10:502Modbus RTUCOM:Baud:Parity:Data:StopCOM1:9600:N:8:1OPC UAopc.tcp://host:portopc.tcp://server:4840MQTTmqtt://host:portmqtt://broker:1883Siemens S7IP:Rack:Slot192.168.1.20:0:1AB ControlLogixIP:Slot192.168.1.30:0

Node (DevicesNodes)

json

Type+OffsetHR100, IR50, C10, DI200
OPC UANodeIdns=2;s=Tag1, ns=2;i=1001
Siemens S7DB.Offset.TypeDB1.DBD0, DB1.DBX0.0
AB ControlLogixTagNameProgram:MainProgram.Tag1



Alarms Objects

AlarmItem (AlarmsItems)

json

{
  "Data": [
    {
      "Tag": "Tag.Line1.Tank1.Temperature",
      "Group": "Alarm.Group.Critical",
      "Area": "Alarm.Area.Plant1",{
  "Data": [
    {
      "NameCondition": "PLC1GreaterThan",
      "ChannelSetpoint": "Channel.ModbusPLC190",
      "PrimaryStationMessage": "1Tank temperature high: {0}°C",
      "BackupStationPriority": 800,
  ""    "Enabled": true,
      "EnabledDateCreated": true"2026-01-16T10:30:00Z",
      "DescriptionDateModified": "Main PLC unit 12026-01-16T10:30:00Z"
    }
  ]
}
FieldRequiredTypeDescription
NameYesstringNode name
ChannelYesstringParent channel reference
PrimaryStationYesstringDevice address
BackupStationNostringRedundant address
EnabledNoboolActive state
DescriptionNostringDocumentation
Point (DevicesPoints

  ]
}


FieldRequiredTypeDescription
TagYesstringMonitored tag reference
GroupYesstringAlarm group reference
ConditionYesstringTrigger condition
SetpointYesstringThreshold value
MessageYesstringAlarm message ({0}=tag value)
AreaNostringAlarm area reference
PriorityNointPriority override
EnabledNoboolActive state

Condition Values:

String ValueDescription
"GreaterThan"Value > Setpoint
"LessThan"Value < Setpoint
"GreaterOrEqual"Value >= Setpoint
"LessOrEqual"Value <= Setpoint
"Equal"Value == Setpoint
"NotEqual"Value != Setpoint
"HiHi"High-high limit
"Hi"High limit
"Lo"Low limit
"LoLo"Low-low limit



Historian Objects

HistorianTag (HistorianTags)

json

{
  "Data": [
    {
      "NodeTag": "Node.PLC1Tag.Line1.Tank1.Temperature",
      "TagHistorianTable": "TagHistorian.Line1Table.Tank1.TemperatureTable1",
      "AddressDeadband": "0.5",
      "HR100Enabled": true,
       "AccessType": "AccessType.Read"DateCreated": "2026-01-16T10:30:00Z",
      "EnabledDateModified": true"2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequired
TypeDescriptionNodeYesstringParent node referenceTagYesstringTag referenceAddressYesstringDevice addressAccessTypeNostringDefault: ReadEnabledNoboolActive state

Address Formats by Protocol:

ProtocolFormatExamples
ModbusType+OffsetHR100, IR50, C10, DI200
OPC UANodeIdns=2;s=Tag1, ns=2;i=1001
Siemens S7DB.Offset.TypeDB1.DBD0, DB1.DBX0.0
AB ControlLogixTagNameProgram:MainProgram.Tag1

Alarms Objects

AlarmItem (AlarmsItems
TypeDescription
TagYesstringTag to historize
HistorianTableYesstringStorage table reference
DeadbandNostringLogging deadband
EnabledNoboolActive state

Scripts Objects

ScriptTask (ScriptsTasks)

json

{
  "Data": [
    {
      "Name": "ServerStartup",
      "Code": "CSharp",
      {"Domain": "Server",
      "TagTrigger": "Tag.Line1.Tank1.Temperature",
      "GroupInitialState": "Alarm.Group.Critical"0,
      "AreaDescription": "Alarm.Area.Plant1",
      "ConditionNamespaceDeclarations": ">90",
      "MessageContents": "Tank temperature high: {0}°C// C# startup code\n@Info.Trace(\"Server started\");",
      "DateCreated": "Priority": 8002026-01-16T10:30:00Z",
      "EnabledDateModified": true"2026-01-16T10:30:00Z"
    }
  ]
}
FieldRequiredTypeDescription
TagYesstringMonitored tag reference
GroupYesstringAlarm group reference
ConditionYesstringTrigger condition
MessageYesstringAlarm message ({0}=tag value)
AreaNostringAlarm area reference
PriorityNointPriority override
EnabledNoboolActive state

Condition Syntax:

ConditionTriggers When
>90Value greater than 90
<10Value less than 10
>=100Value greater or equal to 100
==1Value equals 1
!=0Value not equal to 0
HI:90High limit at 90
LO:10Low limit at 10
HIHI:95High-high limit at 95
LOLO:5Low-low limit at 5

Historian Objects

HistorianTag (HistorianTags)

json


FieldRequiredTypeDescription
NameYesstringTask name
CodeYesstringLanguage: "VB.NET", "CSharp", "Python"
DomainNostring"Server" or "Client"
TriggerNostringTrigger expression
InitialStateNointInitial state
DescriptionNostringDocumentation
NamespaceDeclarationsNostringAdditional namespaces
ContentsYesstringScript code

ScriptExpression (ScriptsExpressions)

json

{
  "Data": [
    {
      "Name": "TotalFlow",
      "Expression": "Tag.Flow1 + Tag.Flow2 + Tag.Flow3",
      "TargetTag": "Tag.TotalFlow",{
  "Data": [
    {
      "TagTriggerTag": "Tag.Line1.Tank1.TemperatureFlow1",
      "HistorianTableEnabled": "Historian.Table.Table1"true,
      "DeadbandDateCreated": "0.52026-01-16T10:30:00Z",
      "EnabledDateModified": true"2026-01-16T10:30:00Z"
    }
  ]
}


FieldRequiredTypeDescription
NameYesstringExpression name
Expression
Tag
Yesstring
Tag to historizeHistorianTable
Calculation formula
TargetTagYesstring
Storage table referenceDeadband
Result destination tag
TriggerTagNostring
Logging deadband
Tag that triggers recalculation
EnabledNoboolActive state

Scripts Objects

ScriptTask (ScriptsTasks)

json

{
  "Data": [
    {
      "Name": "ServerStartup",
      "Code": 2,
      "WhileRunning": false,
      "Execution": 1,
      "Contents": "// C# startup code\n@Info.Trace(\"Server started\");"
    }
  ]
}
FieldRequiredTypeDescription
NameYesstringTask name
CodeYesintLanguage: 0=VB.NET, 2=C#, 4=Python
WhileRunningNoboolRun in loop
ExecutionNoint0=Server, 1=Client
ContentsYesstringScript code

ScriptExpression (ScriptsExpressions)

json


Common Patterns

Creating a Complete Device Communication Setup

Import order matters - create objects in dependency order:

Step 1: Create Tags

json

{ "Data": [{ "Name": "TankLevel", "Type": "Double", "Path": "\\Process" }] }

Step 2: Create Channel

json

{ "Data": [{ "Name": "ModbusCh1", "Protocol": "Modbus", "PrimaryStation": "192.168.1.10:502" }] }

Step 3: Create Node

json

{{
  "Data": [
    {
      "Name": "TotalFlowPLC1",
      "ExpressionChannel": "Tag.Flow1 + Tag.Flow2 + Tag.Flow3Channel.ModbusCh1",
      "TargetTagPrimaryStation": "Tag.TotalFlow",
1" }] }

Step 4: Create Point

json

{ "Data": [{ "Name      "TriggerTag": "Tag.Flow1Point1",
      "Enabled": true
    }
  ]
}
FieldRequiredTypeDescription
NameYesstringExpression name
ExpressionYesstringCalculation formula
TargetTagYesstringResult destination tag
TriggerTagNostringTag that triggers recalculation
EnabledNoboolActive state

Common Patterns

Creating a Complete Device Communication Setup

Import order matters - create objects in dependency order:

Step 1: Create Tags

json

Node": "Node.PLC1", "Tag": "Tag.Process.TankLevel", "Address": "HR100" }] }

Bulk Tag Creation

json

{
  { "Data": [
    { "Name": "TankLevelMotor1_Speed", "Type": 153"Double", "Path": "\\ProcessMotors", "Units": "RPM" }] }

Step 2: Create Channel

json

,
    { "DataName": [{"Motor1_Current", "NameType": "ModbusCh1Double", "ProtocolPath": "Modbus\\Motors", "PrimaryStationUnits": "192.168.1.10:502A" }] }

Step 3: Create Node

json

{ "Data": [,
    { "Name": "PLC1Motor1_Running", "ChannelType": "Channel.ModbusCh1Digital", "PrimaryStationPath": "1\\Motors" }] }

Step 4: Create Point

json

{ "Data": [,
    { "NodeName": "Node.PLC1Motor2_Speed", "TagType": "Tag.Process.TankLevelDouble", "AddressPath": "HR100\\Motors" }] }

Bulk Tag Creation

json

{
  "Data": [, "Units": "RPM" },
    { "Name": "Motor1Motor2_SpeedCurrent", "Type": 153"Double", "Path": "\\Motors", "Units": "RPMA" },
    { "Name": "Motor1Motor2_CurrentRunning", "Type": 153"Digital", "Path": "\\Motors", "Units": "A" },
    { "Name": "Motor1_Running", "Type": 151, "Path": "\\Motors" },
    { "Name": "Motor2_Speed", "Type": 153, "Path": "\\Motors", "Units": "RPM" },
    { "Name": "Motor2_Current", "Type": 153, "Path": "\\Motors", "Units": "A" },
    { "Name": "Motor2_Running", "Type": 151, "Path": "\\Motors" }
  ]
}

Validation Rules

Name Validation

  • Must be unique within object type
  • Alphanumeric plus underscore
  • Cannot start with number
  • Max length: 256 characters
  • Case-sensitive

Required Fields by Object

ObjectRequired Fields
TagName, Type
ChannelName, Protocol, PrimaryStation
NodeName, Channel, PrimaryStation
PointNode, Tag, Address
AlarmItemTag, Group, Condition, Message
HistorianTagTag, HistorianTable
DatasetQueryName, DatasetDB, Contents
ScriptTaskName, Code, Contents

See Also

  • Git Integration and Export Reference — Export configuration
  • Object Model Quick Reference — Object overview
  • UNS Tags Reference — Tag details
  • ]
    }

    Validation Rules

    Name Validation

    • Must be unique within object type
    • Alphanumeric plus underscore
    • Cannot contain dashes (reserved for expressions)
    • Cannot start with number
    • Max length: 256 characters
    • Case-sensitive

    Required Fields by Object

    ObjectRequired Fields
    TagName, Type
    ChannelName, Protocol, PrimaryStation
    NodeName, Channel, PrimaryStation
    PointNode, Tag, Address
    AlarmItemTag, Group, Condition, Setpoint, Message
    HistorianTagTag, HistorianTable
    DatasetQueryName, DatasetDB, Contents
    ScriptTaskName, Code, Contents


    Summary of v1.1 Format Changes


    Aspectv1.0v1.1
    Sections4 (ObjectIdentification, VersionInfo, ExportMetadata, Data)3 (ObjectIdentification, ExportMetadata, Data)
    ObjectIdentificationModule, TableType, TableGroupTableType, SolutionName
    VersionInfoTableVersionID, SolutionVersionID, SolutionNameRemoved
    Folder structureHierarchical by moduleFlat, single folder
    File namingPath-based{TableType}.json or {TableType}-{Name}.json
    Enum fieldsNumeric IDsString values
    Data formatArray or single objectAlways array
    Type fieldAll objectsOnly UnsTags and UserType tables
    Filtered fieldsNoneID, XRefInfo, LockState, ContentsRun, BuildMessages, etc.
    DateCreated/DateModifiedIn Data objectsKept in Data objects
    Devices Module Reference — Device communication