Allen-Bradley API Reference
Allen-Bradley connector programming specifications
FairCom provides specific API actions to configure the Allen-Bradley connector. Be sure to enable the Allen-Bradley service before requesting data from an Allen-Bradley service.
Request examples
Note
The FairCom createInput JSON action is used to define the specifics of a connector device and the desired data.
Minimal request
{ "api":"hub", "action":"createInput", "params":{ "inputName":"abTest1", "serviceName":"ab", "tableName":"abTable1", "settings":{ "dataCollectionIntervalMilliseconds":5000, "dataReadingTimeoutMilliseconds":5000, "plcAddress":"192.142.100.22", "plcType":"controllogix", "propertyMapList":[ { "tagPath":"1,0", "tagName":"temperature", "tagType":"float32", "propertyPath":"temperature" } ] } }, "requestId":"00000004", "authToken": "replaceWithAuthTokenFromCreateSession" }
{ "api":"hub", "action":"createInput", "params":{ "inputName":"abTest1", "serviceName":"ab", "dataPersistenceStrategy": "onChange", "dataCollectionIntervalMilliseconds": 500, "immediatelyCollectDataOnStart": true, "dataCollectionBufferCount": 2, "tableName":"abTable1", "settings":{ "plcAddress":"192.142.100.22", "plcType":"controllogix", "propertyMapList":[ { "tagPath":"1,0", "tagName":"scada", "tagElementCount":10, "tagType":"int32", "propertyPath":"scada" }, { "tagPath":"1,0", "tagName":"temperature", "tagType":"float32", "propertyPath":"temperature" }, { "tagPath":"1,0", "tagName":"message", "tagType":"string", "tagSize":20, "propertyPath":"message" } ] } }, "requestId":"00000004", "authToken": "replaceWithAuthTokenFromCreateSession" }
{ "create_ts":"2023-09-19T20:37:12.678Z", "scada0":10, "scada1":20, "scada2":30, "scada3":40, "scada4":50, "scada5":60, "scada6":70, "scada7":80, "scada8":90, "scada9":100, "temperature":86.230003356933594, "message":"AB rocks " }
The Maximal request configures the Allen-Bradley connector to collect data from a ControlLogix PLC at address 192.142.100.22
every 5 seconds. It collects data from 3 tag addresses named "scada", "temperature", and "message"
. If it cannot read the tags within 1 second, it returns a timeout error.
In this example, the connector retrieved ten 32-bit integers from the PLC starting at the "scada"
tag address and added each integer to the generated JSON as a separate property named "scadaN"
where N
is the zero-based array index number. In the PLC, the "scada"
tag had an array containing the following ten integer values: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
. The generated JSON included the corresponding ten properties: "scada0":10, "scada1":20, "scada2":30, "scada3":40, "scada4":50, "scada5":60, "scada6":70, "scada7":80, "scada8":90, "scada9":100
.
The connector also retrieved one Floating point number from the PLC starting at the tag address "temperature"
and added it to the generated JSON as a property named "temperature"
. Because the connector retrieved only one value, it did not append an index number to the end of the "temperature"
property name. In the PLC, the "temperature"
tag was a floating-point number 86.230003356933594. The generated JSON included the corresponding property "temperature":86.230003356933594
.
The connector then retrieved a 20-byte string from the PLC starting at the tag address "message"
and added it to the generated JSON as a property named "message"
. Because the connector retrieved only one value, it did not append an index number to the end of the "message"
property name. In the PLC, the "message"
tag was the 20-byte string "AB rocks "
. The generated JSON included the corresponding property "message":"AB rocks "
.
The connector receives the collected JSON data in the source_payload
field of a JSON document, and inserts it in a record in the "abTable1"
table.
"tagName" options
If you want to read an array starting in the middle, add the first position inside square brackets as part of the tag name.
For example, the following request values would generate the following retrieved data.
Request values
{ "tagPath":"1,0", "tagName":"scada[4]", "tagElementCount":3, "tagType":"int32", "propertyPath":"scada" }
Retrieved data
{ "create_ts":"2023-09-26T19:01:39.714Z", "scada0":50, "scada1":60, "scada2":70 }
In this example, the "scada"
tag represents an array in the PLC containing the following ten integer values: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
. The tag array is zero-based.
The first element is [0] so "tagName": "scada[4]"
collects data at the 5th item in the array, which has the value of 50. Specifying "tagElementCount": 3
collects 3 items from the array.
The connector generates JSON containing the properties "scada0":50, "scada1":60, and "scada2":70
. These properties correspond to the properties named "scada4":50, "scada5":60, and "scada6":70
in the results from the Maximal example.
A response to a request is "0" when successful. A non-zero value response indicates an error occurred.
{ "result": {}, "requestId": "00000007", "errorCode": 0, "errorMessage": "" }
Not yet available.
API Reference for Allen-Bradley connector
The "params"
property is an object that contains an action's parameters. Each action defines its own required and optional properties. See System limits for a comprehensive look at property requirements and limitations.
Note
See createInput for "params"
properties that are common to all connectors.
"params"
properties summaryProperty | Description | Default | Type | Limits (inclusive) | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
(optional) specifies the number of times the collector retrieves and caches data from the device before writing the data to the integration table |
| integer |
| |||||||||||||||||
(optional) specifies the number of milliseconds to wait until reading PLC data again. For example, |
| integer | 0 and negative values are invalid. | |||||||||||||||||
(optional) specifies when the connector writes collected data to the specified table |
| string |
| |||||||||||||||||
(optional) configures the input to collect data immediately when the server or connector starts. This occurs even if the data persistence strategy is to collect data changes |
| Boolean |
| |||||||||||||||||
serviceName | specifies which type of input to create |
| string |
| ||||||||||||||||
settings | specifies properties needed to configure the data source of the input |
| array of objects | |||||||||||||||||
| (optional) specifies the timeout in milliseconds while connecting and reading data from the PLC. |
| int32 | 0 and negative values are invalid. | ||||||||||||||||
| specifies the IP address or hostname and optional port from the PLC, in the format |
| string | Examples:
| ||||||||||||||||
| specifies the type of the PLC |
| string |
| ||||||||||||||||
| specifies which data the connector requests and where to put it in the generated JSON. |
| array of objects | |||||||||||||||||
| specifies the JSON path in the JSON document where the connector puts the data it collects. It is the tag name of the data being collected |
| string | |||||||||||||||||
| (optional) specifies the number of elements in the tag. All tags are treated as arrays. Tags that are not arrays are considered to have a length of one element. |
| int32 | 0 and negative values are invalid. | ||||||||||||||||
| specifies the full name of a tag, such as For CIP-based PLCs, use the format
Examples: PCCC-based PLC examples include |
| string | |||||||||||||||||
| (optional) specifies additional connection information with the format
| "1,0" | string | String with the format | ||||||||||||||||
| specifies the binary format of the PLC data represented by the tag. |
| string |
| ||||||||||||||||
| specifies the buffer size in bytes to handle tag data. If not specified, the buffer size is defined based on the For string Let the server define this property. and set it yourself only when necessary. | Optional - depending on the | Integer | 0, 1, 2, 4 or 8 |
The "dataCollectionBufferCount"
property specifies the number of times the collector retrieves and caches data from the device before writing the data to the integration table.
This option combines multiple data collection events and inserts them into the integration table as one MQTT message.
If this value is more than 1
, the connector converts each set of collected data into a JSON object and adds the object to an array inside a JSON document. When the count is reached, the connector writes the JSON document to the source_payload
field of a record it inserts into the integration table.
The "dataCollectionIntervalMilliseconds"
property schedules the connector to collect data periodically using the specified number of milliseconds. It defaults to 10000
, which is ten seconds. It must be an integer number >= 1
.
The "dataPersistenceStrategy"
property controls when a connector writes collected data to a record in the input table specified by "tableName"
. It is an optional string enum property with two values: "onSchedule"
and "onChange"
. The default value when the property is omitted or set to null
is "onSchedule"
.
The
"onSchedule"
setting causes the connector to persist each collected value, which occurs on the schedule set by the"dataCollectionIntervalMilliseconds"
property. This setting is useful for continuously collecting device data for trend analysis and machine learning.The
"onChange"
setting causes the connector to collect data on the schedule set by the"dataCollectionIntervalMilliseconds"
property, but it only persists data when it changes. This allows the connector to detect and store data changes as events, such as alerts and status updates. This setting greatly reduces data storage for infrequently changing telemetry, such as changes to a temperature sensor.Note
The connector misses events when its data collection schedule is not frequent enough to see data changes. Thus, the
"onChange"
setting makes a polling protocol, such as Modbus, behave like a push protocol, but it is not a push protocol like MQTT.
The "immediatelyCollectDataOnStart"
property controls how a connector first collects data after being started.
When
true
, it immediately collects and stores data and thereafter collects data according to the strategy specified in"dataPersistenceStrategy"
. In other words, it ignores the"dataPersistenceStrategy"
for the initial data collection event and unconditionally stores the first set of data it collects. This setting allows subscribers to receive an initial data collection message each time the server or connector starts, which is useful for systems that display live status information.When
false
, which is the default, it collects data according to the strategy specified in"dataPersistenceStrategy"
. For example, when the"dataPersistenceStrategy"
is"onChange"
, the connector collects data on a schedule and persists it only when the data changes - even after a restart.
params.settings.plcType property values
Value | Note |
---|---|
controllogix | The tag is in a Control Logix-class PLC. Includes Logix, CompactLogix, Contrologix. |
plc5 | The tag is in a PLC/5 PLC. |
slc500 | The tag is in a SLC 500 PLC. |
logixpccc | The tag is in a Control Logix-class PLC using the PLC/5 protocol. |
micro800 | The tag is in a Micro800-class PLC. |
micrologix | The tag is in a Micrologix PLC. |
omron-njnx | The tag is in an Omron NJ/NX PLC. |
The "propertyPath"
property is a required string that specifies the JSON Path in the JSON document where the connector puts the data it collects. It is the tag name of the data being collected. You can use this property to take collected data and store it in any location in the JSON document generated by the connector. For example, the setting "propertyPath": "temperature"
causes the server to take a value it collects, such as 20.1
, and store it in a "temperature"
property, such as { "temperature": 20.1 }
.