Allen-Bradley Logix 5000 Devices
The Logix 5000 series PLCs from Allen-Bradley are supported via EtherNet/IP connections. This device uses Logix tags to identify data objects in the PLC and supports browsing of the PLC namespace.
During a browse operation, I/O Items are created automatically, but they can also be created manually if the tag name and structure definition is known in advance.
| Multiple Allen-Bradley datasource objects under a single Node are supported. However, they cannot communicate with the PLC (same or different devices) concurrently. Their read and write operations will be serialized and executed sequentially. We recommend to use multiple Nodes to connect to multiple Allen-Bradley devices. |
Supported Data Types
AspenTech Inmation can access tags based on atomic data types (also called elementary data types) or compound data types, such as arrays, predefined structures and user-defined structures (UDTs).
Atomic Data Types
The following atomic data types are supported:
| Data Type | Description | Normalized Type | Range |
|---|---|---|---|
BOOL |
Single bit value |
VT_BOOL |
0 or 1 |
SINT |
Signed 8-bit integer value |
VT_I1 |
-128 … 127 |
USINT |
Unsigned 8-bit integer value |
VT_UI1 |
0 … 255 |
INT |
Signed 16-bit integer value |
VT_I2 |
-32,768 … 32,767 |
UINT |
Unsigned 16-bit integer value |
VT_UI2 |
0 … 65,535 |
WORD |
16-bit boolean array |
VT_BOOL | VT_ARRAY |
0 or 1 at each array position |
DINT |
Signed 32-bit integer value |
VT_I4 |
-2,147,483,648 … 2,147,483,647 |
UDINT |
Unsigned 32-bit integer value |
VT_UI4 |
0 … 4,294,967,295 |
DWORD |
32-bit boolean array |
VT_BOOL | VT_ARRAY |
0 or 1 at each array position |
LINT |
Signed 64-bit integer value to store date and time values |
VT_I8 |
Valid Date/Time range is from 1/1/1970 12:00:00 AM coordinated universal time (UTC) to 1/1/3000 12:00:00 AM UTC. Time resolution is in microseconds. |
ULINT |
Unsigned 64-bit integer value |
VT_UI8 |
0 … 18,446,744,073,709,551,615 |
LWORD |
64-bit boolean array |
VT_BOOL | VT_ARRAY |
0 or 1 at each array position |
REAL |
32-bit IEEE single-precision floating point value |
VT_R4 |
\$-3.40282347E^38...-1.17549435E^-38\$ (negative values) 0 \$1.17549435E^-38...3.40282347E^38\$ (positive values) |
LREAL |
64-bit IEEE double-precision floating point value |
VT_R8 |
\$-1.7976931348623157E^308 ... -2.2250738585072014E^−308\$ (negative values) 0 \$2.2250738585072014E^−308 ... 1.7976931348623157E^308\$ (positive values) |
| The LINT date type represents timestamps with microsecond resolution, whereas AspenTech Inmation timestamps have millisecond resolution (with a bigger valid range). To not lose precision, the normalized data type is VT_I8 instead of VT_DATA which is used for timestamps with millisecond resolution. |
Structures
Structures are supported in a generic way if structure definitions are available (see the Load Tag Info property). The value of an IO Item pointing to a structure tag is encoded as a JSON string according to the structure type definition.
Some predefined Logix structures are handled in a special way.
| Structure | Definition | Description | Normalized Type |
|---|---|---|---|
STRING |
STRING ::= SEQUENCE OF {
DINT LEN;
SINT[82] DATA;
}
|
String data types hold up to 82 ASCII characters and AspenTech Inmation automatically deduces the string length for the string value of the IO item. |
VT_BSTR |
STRING_16 |
STRING_16 ::= SEQUENCE OF {
DINT LEN;
SINT[16] DATA;
}
|
String data types hold up to 16 ASCII characters and AspenTech Inmation automatically deduces the string length for the string value of the IO item. |
VT_BSTR |
STRING_32 |
STRING_32 ::= SEQUENCE OF {
DINT LEN;
SINT[32] DATA;
}
|
String data types hold up to 32 ASCII characters and AspenTech Inmation automatically deduces the string length for the string value of the IO item. |
VT_BSTR |
Custom structures whose definition match the predefined STRING structure except for the DATA array length are treated the same way as the predefined string structures. The tag value will be a regular string instead of a JSON string containing the structure member values.
Arrays
Arrays of both atomic data types and structures are supported. Tag arrays can be one-, two-, or three-dimensional. A one-dimensional array has a normalized AspenTech Inmation type of VT_ARRAY combined with the array element data type. A two- or three-dimensional array is represented as a JSON string which encodes the data as JSON arrays.
Browsing and Manual I/O Item Creation
Tags of a Logix 5000 PLC can be browsed and created in the I/O model automatically.
Manual creation of I/O Items requires knowledge of the Logix tag name and potentially its
structure definition. For simple cases, the ItemID is just the tag name in case of
global tags, or the tag name prefixed with the program name: [program name:]<tag name>.
For example, I/O Items can be created using the following Lua scripting Mass configuration example:
syslib.mass({
{
class = syslib.model.classes.IoItem,
operation = syslib.model.codes.MassOp.UPSERT,
path = "/Home/Europe/Germany/Cologne/Logix5000/Var1",
ObjectName = "Var1",
ItemID = "Var1",
IoType = syslib.model.codes.IoTypeMode.IOITEMTYPEPLCAB_CIP
}
})
For a detailed description of the ItemID syntax, see the Allen-Bradley Logix 5000 ItemID section.
| Manually created I/O Items will initially display a red "bad" state after creation. Disabling and re-enabling the PLC Datasource will reload the PLC project, updating the symbolic links of the tags and the I/O Item will enter a green "good" state. |
Writing to Tags
Writing to tags directly is supported for atomic data types and the predefined or custom string structures. If the new string value is larger then the DATA array count, the value is truncated. For custom string structures, the DATA field is written first and the LEN field second. If writing to LEN fails, an error is logged, but the DATA field keeps the newly written character data.
Arrays and non-string structures can be written to by creating IO-Item objects which address atomic structure members or a single array element. Using the Allen-Bradley Logix 5000 ItemID syntax allows objects to address individual atomic members or elements.