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:
Each point links a specific device address to a tag, enabling data exchange between field devices and the platform.
Table of Contents maxLevel
2 minLevel 2 indent 10px exclude Steps style none
Property | Description | Example |
---|---|---|
TagName | Associated platform tag | Tag.Temperature01 |
Node | Parent device node | PLC_Line1 |
Address | Device register/location | 40001, DB100.DBW10 |
DataType | Data format | Native, Int32, Float |
Modifiers | Byte order adjustments | SwapBytes, SwapWords |
AccessType | Read/Write permissions | ReadWrite, ReadOnly |
Scaling | Value transformation | Div:10, Add:32 |
Protocol-specific formats:
Change addresses at runtime:
csharp
// Retrieve point configuration
DataTable dt
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:
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:
For a write operation, the calculations are the opposite. The system will multiply by the Div value, then subtract the Add value. |
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.
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:
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:
GetDataTable
method.Group
, @Tag.Gateway
, and /Device
.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.
= TK.ProjectDB.GetDataTable("DevicesPoints",
"TagName='Tag.
Tag01.VelocidadeTemperature'");
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",
rowsrow, 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!");
}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();
Default - protocol handles conversion automatically
Type | Description | Use Case |
---|---|---|
Boolean | Single bit | Digital I/O |
Int16 | 16-bit signed | Analog values |
Int32 | 32-bit signed | Counters |
Float | 32-bit floating | Measurements |
Double | 64-bit floating | Precision values |
String | Text data | Messages |
Modifier | Description | When to Use |
---|---|---|
SwapBytes | Reverse byte order | Big/Little endian mismatch |
SwapWords | Reverse word order | 32-bit value issues |
SwapDWords | Reverse double word | 64-bit value issues |
BitIndex | Extract specific bit | Packed boolean values |
Tag Value = (Device Value / Div) + Add
Device Value = (Tag Value - Add) * Div
Temperature scaling:
Offset correction:
Configure read/write behavior:
See → Devices AccessTypes for detailed configuration
csharp
public void UpdateMQTTAddress(string tagName, string gateway)
{
string error;
// Get point configuration
DataTable dt
= 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.
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.
/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(); |
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}");
}
}
}
See → Importing PLC Addresses for procedures
Good: 40001-40010 (block read)
Poor: 40001, 40003, 40005 (individual reads)
Point not updating:
Wrong values:
Write failures:
Import issues:
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;
Page Tree | ||||
---|---|---|---|---|
|
In this section:
Page Tree | ||||
---|---|---|---|---|
|