Versions Compared

Key

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

Overview

Device Points Devices Points (Reference) represent specific data elements (like within field devices, mapping PLC registers, I/O values, or variables) within a Node, which represents a connected device. By binding device points to tags in the software, they provide granular access to device data for both monitoring and control, enabling seamless data exchange between the platform and field devicesand variables to platform tags for monitoring and control.

Device Points provide:

  • Register-to-tag mapping
  • Data type conversion
  • Read/write access control
  • Scaling and modifiers
  • Dynamic addressing
  • Import capabilities

Each point links a specific device address to a tag, enabling data exchange between field devices and the platform.

On this page:

Table of Contents
maxLevel

3

2
minLevel2
indent10px
excludeSteps
stylenone

Creating Device Points

  1. Navigate to Unified Namespace → Tags
  2. Copy tags to be mapped
  3. Go to Devices → Points
  4. Paste copied tags
  5. Configure point properties

Point Properties

PropertyDescriptionExample
TagNameAssociated platform tagTag.Temperature01
NodeParent device nodePLC_Line1
AddressDevice register/location40001, DB100.DBW10
DataTypeData formatNative, Int32, Float
ModifiersByte order adjustmentsSwapBytes, SwapWords
AccessTypeRead/Write permissionsReadWrite, ReadOnly
ScalingValue transformationDiv:10, Add:32

Address Configuration

Static Addressing

Protocol-specific formats:

  • Modbus: 40001, 30001, 10001
  • ControlLogix: Controller.Tag[0]
  • Siemens: DB100.DBW10
  • OPC: ns=2;s=Channel.Device.Tag

Dynamic Addressing

Change addresses at runtime:

csharp

// Retrieve point configuration
DataTable dt

Adding and Editing Device Points

Device Points define specific values for each node that can be accessed using tags. The number of Device Points you can configure is related to the product model configured for the solution and your software license.

To configure Device Points, follow these steps:

  1. Access Unified Namespace / Tags.
  2. Copy the tags to be used.
  3. Access Devices / Points.
  4. Paste the copied tags.
  5. Double-click the property you wish to edit on the row corresponding to the tag you want to modify.

Image Removed

Device Points Properties

The following table describes each available property you can configure when configuring a Device point. If a property column is not visible on the grid, enable it by right-clicking the grid header and selecting it from the list.

Column

Description

TagName

The associated tag name. The three dots button "..." allows you to select an existing tag from a list.

Node

Defines the associated node for this Device Point.

Address

Defines the register address, which is based on the PLC and protocol for this data Point and Tag.

DataType

Defines the data type to be used. Most protocols should use the native option since the protocol will automatically handle the data conversion. Selecting a different data type overrides the defaults. Some options may not apply to the selected node. DataTypes can be copied from a spreadsheet or edited after you add the Point.

Modifiers

Select the options you want if the PLC uses a different byte order. You can change the position bit, byte, Word, or Dword of the communicated data.

AccessType

Select the access type for this data Point. You can define and configure the access types.

→ Read more about Devices AccessTypes (Reference).

Scaling

This property manipulates the Tag value when the data is read in the Equation option, it has 2 options:

  • Div: The system will divide the register value by what you enter here. 

  • Add: The system will add the amount you enter here as an offset of the result of the division.

For a write operation, the calculations are the opposite. The system will multiply by the Div value, then subtract the Add value.

Dynamic Address Configuration

Everything in the Device configuration, from the Node to address and Tag mapping, can be changed online using scripts. 

The following example outlines a process for configuring dynamic addresses using MQTT telegrams.

Dynamic Address example

The address format is `/topic/@Tag.gateway/data`, where `@Tag.gateway` will be replaced with specific values. The MQQT telegrams are received on topics like the ones below:

  • /topic/gateway/data:
  • /topic/gatewayX/data
  • /topic/gatewayY/data
  • /topic/gatewayZ/data:

You need to configure the Points that will be used. Access Devices → Points to configure points defining their names, Node, Tags, and Address. 

To use the Dynamic Address through scrips, your code will need to execute the following steps:

  1. First, it needs to retrieve the data of the desired point from the database using the GetDataTable method.
  2. Then, you will update the Address field of the retrieved data row with a new address formed by concatenating Group , @Tag.Gateway , and /Device .
  3. After performing the changes, your code will update the database with the new row data using UpdateDataRows.

The system will log an error if any error occurs during the updating process. Otherwise, it applies the changes to the database.

The following code presents an example of changing the Address for the desired point.

Code Blockstring error; DataTable dt_DevicePoints
 = TK.ProjectDB.GetDataTable("DevicesPoints", 
    "TagName='Tag.
Tag01.Velocidade
Temperature'");
DataRow[] rows = new DataRow[1]; rows[0]

// Update address
DataRow row = dt
_DevicePoints
.Rows[0];
@Info.Trace(rows[0]["Address"].ToString()); rows[0][
row["Address"] = "Group01/" + @Tag.Gateway + "/Device01";
 

@Info.Trace(rows[0]["Address"].ToString());       rows[0].AcceptChanges()
row.AcceptChanges();

// Apply changes
string error;
TK.ProjectDB.UpdateDataRows("DevicesPoints", 
rows
row, out error);
      if (String.IsNullOrEmpty(error) == false) {    @Info.Trace("Error changing tag address: " + error); } else {    @Info.Trace("Applying Devices Changes - begin");    TK.ProjectDB.ApplyProjectChanges();    @Info.Trace("OK!"); }

Code Breakdown

To make it easier for you to understand the above example, next you find additional explanations related to core operations.

In the code block below, the first parameter identifies the Points table from which data is retrieved. In this case, the second parameter refers to the specific column used for filtering data, the Tag Name column. This column is used to identify the tag configured within the Points table. For instance, the tag Tag.Tag01.Velocity  is retrieved in this example.

TK.ProjectDB.ApplyProjectChanges();

Data Types

Native Type

Default - protocol handles conversion automatically

Override Types

TypeDescriptionUse Case
BooleanSingle bitDigital I/O
Int1616-bit signedAnalog values
Int3232-bit signedCounters
Float32-bit floatingMeasurements
Double64-bit floatingPrecision values
StringText dataMessages

Modifiers

Byte Order Adjustments

ModifierDescriptionWhen to Use
SwapBytesReverse byte orderBig/Little endian mismatch
SwapWordsReverse word order32-bit value issues
SwapDWordsReverse double word64-bit value issues
BitIndexExtract specific bitPacked boolean values

Scaling Configuration

Read Operations

Tag Value = (Device Value / Div) + Add

Write Operations

Device Value = (Tag Value - Add) * Div

Examples

Temperature scaling:

  • Device: 0-1000 (tenths of degree)
  • Div: 10, Add: 0
  • Result: 0-100.0 degrees

Offset correction:

  • Device: 0-100
  • Div: 1, Add: -50
  • Result: -50 to 50

Access Types

Configure read/write behavior:

  • ReadWrite - Full bidirectional
  • ReadOnly - Monitor only
  • WriteOnly - Control only
  • OnDemand - Manual trigger

See → Devices AccessTypes for detailed configuration


Dynamic Address Example

MQTT Topic Routing

csharp

public void UpdateMQTTAddress(string tagName, string gateway)
{
    string error;
    
    // Get point configuration
    DataTable dt
Code BlockDataTable dt_DevicePoints
 = TK.ProjectDB.GetDataTable("DevicesPoints", 
        $"TagName='
Tag.Tag01.Velocity
{tagName}'");

The following code enables you to choose the new desired address. The string type tag @Tag.Gateway will receive a different name in the example.

Code Blockrows[0]

    
    if (dt.Rows.Count > 0)
    {
        // Update address with gateway
        DataRow row = dt.Rows[0];
        row["Address"] = $"
Group01/"+@Tag.Gateway+"/Device01";

The following line of code updates the Address internally in the system.

Code Block
/topic/{gateway}/data";
        row.AcceptChanges();
        
        // Apply to project
        TK.ProjectDB.UpdateDataRows("DevicesPoints", 
rows

            new DataRow[] { row }, out error);

If no error occurs in the update, you can apply the change to the project using the code below. From then on, the Address will use the new value previously entered on the script.

Code Block
TK.ProjectDB.ApplyProjectChanges();

Importing Device Points from PLC addresses

Additionally, you can simplify the creation of Device Points with various methods for automatic data configuration import.

→ Read more about Importing PLC Addresses.


        
        if (string.IsNullOrEmpty(error))
        {
            TK.ProjectDB.ApplyProjectChanges();
            @Info.Trace($"Address updated: {row["Address"]}");
        }
        else
        {
            @Info.Trace($"Error: {error}");
        }
    }
}

Importing Points

Import Methods

  • PLC program files (L5K, TIA)
  • OPC browsing
  • CSV/Excel files
  • Online discovery

See → Importing PLC Addresses for procedures


Performance Optimization

Efficient Configuration

  • Group consecutive registers
  • Use block reads when possible
  • Minimize individual points
  • Optimize polling rates

Address Optimization

Good: 40001-40010 (block read)
Poor: 40001, 40003, 40005 (individual reads)

Best Practices Checklist

  •  Group Related Points - Organize by function
  •  Use Native Types - Let protocol handle conversion
  •  Document Addresses - Include descriptions
  •  Test Scaling - Verify calculations
  •  Plan Access Types - Minimize unnecessary writes
  •  Validate Imports - Check addressing after import
  •  Monitor Point Count - Stay within license limits

Troubleshooting

Point not updating:

  • Verify node connection
  • Check address format
  • Review access type
  • Test with OPC client

Wrong values:

  • Check data type match
  • Verify byte order
  • Review scaling settings
  • Test without modifiers

Write failures:

  • Confirm write access
  • Check PLC program
  • Verify address writable
  • Review error logs

Import issues:

  • Validate source file
  • Check address format
  • Review tag mapping
  • Test with sample

Diagnostics

Monitor point communication:

csharp

// Get point status
bool quality = @Tag.Temperature.Quality == 192;

// Check last update
DateTime timestamp = @Tag.Temperature.TimeStamp;

// Monitor errors
string lastError = @Device.Point["Temperature"].LastError;

// Communication statistics
int readCount = @Device.Point["Temperature"].ReadCount;
int writeCount = @Device.Point["Temperature"].WriteCount;




In this section...

Page Tree
root@parent
spaces93DRAF

In this section:

Page Tree
rootV10:@parent
spacesV10