- 06 Sep 2021
- 6 Minutes to read
-
Contributors
-
Print
-
DarkLight
-
PDF
Collector Rockwell
- Updated on 06 Sep 2021
- 6 Minutes to read
-
Contributors
-
Print
-
DarkLight
-
PDF
The purpose of this article is to serve as a reference for the Rockwell collector part of the full Data Collection Module documentation
Prerequisites
A Starter package (SiteManager + accounts A Rockwell CIP capable device, (Only Rockwell 1769 model PLC supported.)
SiteManager 15xx or 35xx with version 9.2, 9.2c, 9.4 or higher. It does not work on 9.3 or the initial release of 9.4

Rockwell Limitations
The limitations of the Rockwell collector are:
- Only the following SiteManager models are supported: SM-E 6311, SM 35xx, SM 15xx
- Only Control Logix-class PLCs using the AB-EIP protocol are supported
- The IP address/hostname is not taken over from the agent config right now, so CollectorIPAddr is mandatory
- SampleDataType "string" and "data" are unsupported
- OnlySaveOnChanged is unsupported (so, ChangeLimit isn't either)
- None of these sample limitation options are supported: SampleLowerLimit, SampleUpperLimit, SampleLimitDiscard, SampleLimitAlarm
- Aggregation are not yet fully supported. The supported values for the Function parameter are "max", "min", "avg", "mavg", "derived", "compute". Thus, "eventcompute" is not supported.
- Reading large amounts of data needs optimization
Config main
The Config main (array of objects, mandatory) contain the following fields:
Function | Type | Importance | Description |
---|---|---|---|
ConfigName | string | mandatory | Unique name for this configuration file. Follows the rules for names. |
ConfigDescription | string | optional | text describing this configuration. |
CheckpointInterval | integer == 0 or >= 60 | optional | The interval with which all data from the internal datasample cache is saved to disk. This more unstable (power) the SiteManager, the more often data should be saved. Saving it often, however will also cost performance and wear on the hard-disk/flash. A value of 0 means, never checkpoint, otherwise it means interval in seconds between saves. If not specified the value 15 * 60 (15 minutes) is used. |
AlarmsSaved | integer >= 4 | optional | The number of alarms saved in the store-and-forward database. If this values is not specified, it will default to 32. |
WaitForNTP | boolean | optional | Synchronize DCM data collection with NTP time. If this parameter is true, all DCM collectors will not begin collecting data until NTP is enabled and configured and NTP has synchronized date/time. If not specified, the value is true. |
Since the JSON format itself doesn't define a comment notation, DCM accepts a fieldname comment with any type of value in any section.
Example of comment
"Comment": "Example of a comment for use in any section.":
Collector main
The Collectors (array of objects, mandatory) list elements contain the following fields:
Function | Type | Importance | Description |
---|---|---|---|
CollectorName | string | mandatory | Unique name (within this confguration file) of a device to collect data from. (This is the name used in the agent configuration.) Follows the normal rules for names. |
CollectorDesription | string | optional | Description of this collector. (For your use, no system function.) |
CollectorIPAddr | string | mandatory | Default IP address (or DNS name) for the device to be polled. The agent Target IP address must match this. |
CollectorPortno | integer > 0 and < 65535 | mandatory | Default port number for the device to be polled. The agent Target Port Number must match this. |
Alias | string | optional | This is the CollectorName of another collector, from which, all the parameters (expect CollectorName , CollectorDescription , CollectorIPAddr and CollectorPortno ) are copied. An alias cannot refer to another alias. |
Protocol | string-enum | mandatory | The protocol used to collect data. Currently 3 possible values exist: "OPC-UA/TCP", "Modbus/TCP", "Http/GET" and "Simulator". |
ConnectRetryMin | integer > 0 | mandatory | Minimum number of seconds before trying to reestablish a connection to the device being sampled. An exponential backoff algorithm is used to retry establishment of a connection, starting after ConnectRetryMin and increasing to ConnectRetryMax. |
ConnectRetryMax | integer > 0 | mandatory | Maximum number of seconds before trying to reestablish a connection to the device being sampled. |
RockwellAccess | Object | optional | Collection of parameters needed to access a given Rockwell PLC. |
SamplePoints | Array of objects | mandatory | List of samples to be collected, possibly aggregated, and stored in the Store'n'Forward database. |
RockwellAccess
The RockwellAccess objects contains the following elements:
Function | Type | Importance | Description |
---|---|---|---|
RockwellPath | string | mandatory | The path of the device to connect to- e.g, "1,0". |
RockwellTimeout | integer > 0 | optional | Connect and read timeout (in milliseconds) for all tags of this collector. If not present, the value 500 is used. |
RockwellTags | Array of objects | mandatory | List of the tags to be fetched if the Protocol is "Rockwell". |
RockwellTags
The RockwellTags objects contains the following elements:
Function | Type | Importance | Description |
---|---|---|---|
RockwellTagName | string | mandatory | The Rockwell tag name to fetch data from. Tag names are not case-sensitive, and they may contain the characters a-Z, 0-9, colons, dots or blanks- e.g. "PROGRAM:INV.SEC". It is possible to fetch a full tag at once if all elements have the same RockwellElementSize/datatype, and a matching RockwellElementCount is given. Additionally, individual elements can be addressed directly by using a zero-based array syntax. e.g, "PROGRAM:INV.SEC[0]" will read the first element of the tag while "PROGRAM:INV.SEC[2]" will read the third. |
RockwellID | integer >= 0 | mandatory | Is a unique ID (within this Collectors element) for this entry. (Used by the SamplePoints entries.) |
RockwellElementSize | integer > 0 | mandatory | The size of one element of the tag, in bytes. For instance, When one is reading a tag composed of bytes, then a size of 1 is used, and when one is reading a tag composed of "uint64", the size is 8. See SampleDataType for the different sizes. |
RockwellElementCount | integer > 0 | optional | The amount of elements that should be fetched. Each element's size will be RockwellElementSize. The default is 1. |
RockwellSampleInterval | integer > 0 | mandatory | Number of seconds between each collection of data using this Rockwell collector. |
Samplepoint
The SamplePoints objects contains the following elements:
Function | Type | Importance | Description |
---|---|---|---|
SampleName | string | mandatory | Name of this sampled value (sometimes called a tagname). Follows the normal rules for names. |
SampleDescription | string | optional | Is a text description of this sample value. |
SampleUnit | string | optional | Is a description of the unit of measurement for this sample. |
SampleGroup | string | optional | Designates (in some datasrvs) that all samplepoints in that group should be handled (displayed) together. The DCM system itself places no meaning on this group affiliation. |
SamplesSaved | integer > 0 | mandatory | Is the number of values collected that is saved as minimum in the Store'n'Forward database. If set to 0, the Samplepoint isn't stored in the S'n'F database, and thus not delivered to cloud, but can be used for aggregations. |
OnlySaveOnChanged | bool | optional | Control if new sample values should only be saved to the store-and-forward database if the values have changed since last sample. If not set, it is false. |
SampleDataType | string-enum | mandatory | The type of data collected. The possible values are: "bool" (1 bit), "sbyte" (8 bit signed), "byte" (8 bit unsigned), "int16" (16 bit signed), "uint16" (16 bit unsigned), "int32" (32 signed), "uint32" (32 bit unsigned), "int64" (64 bit signed), "uint64" (64 bit unsigned), "float" (32 bit), "double" (64 bit), "string" (variable text up to 24575 bytes: includes terminating NUL), "data" (variable variable data up to 24575 bytes). |
SampleLowerLimit | integer/double | optional | The lower limit for the collected data. If the collected data value is less than SampleLowerLimit, it is evaluated in accordance to SampleLimitDiscard and SampleLimitAlarm. |
SampleUpperLimit | integer/double | optional | The upper limit for the collected data. If the collected data value is more than SampleUpperLimit, it is evaluated in accordance to SampleLimitDiscard and SampleLimitAlarm. |
SampleLimitDiscard | bool | maybe-optional | Checks if a sample limit violation results in the sample value being discarded. Mandatory if either SampleLowerLimit or SampleUpperLimit is present. |
SampleLimitAlarm | bool | maybe-optional | Checks if a sample limit violation generates an alarm. Mandatory if either SampleLowerLimit or SampleUpperLimit is present. |
ModbusValue | Object | maybe-optional | Description of how to extract a collected data value from a FC collected value. Mandatory if the protocol type is "Modbus/TCP". |
RockwellValues
The RockwellValue object contains the following elements:
Function | Type | Importance | Description |
---|---|---|---|
RockwellIDREF | integer >= 0 | mandatory | This is a reference to one of the RockwellIDs used in RockwellTags. |
RockwellOffset | integer >= 0 | optional | Start index from which to extract values from a tag. For example if a tag "MACHINE:SENSOR:1" with a RockwellElementCount of 6 is read, then an offset of 2 would use the third element of the tag as sample value. |
{
"CollectorName": "AB-PLC",
"CollectorIPAddr": "123.123.123.123",
"CollectorPortno": "123",
"CollectorDescription": "Rockwell EIP",
"Protocol": "Rockwell",
"ConnectRetryMin": 2,
"ConnectRetryMax": 240,
"RockwellAccess": {
"RockwellTags": [
{
"RockwellTagName": "PROGRAM: INV.SEC",
"RockwellID": 1,
"RockwellElementSize": 2,
"RockwellSampleInterval": 15
}
],
"RockwellPath": "1,0"
},
"SamplePoints": [
{
"SampleName": "Test001",
"SampleDescription": "Counter",
"SamplesSaved": 10,
"SampleDataType": "int16",
"RockwellValue": {
"RockwellIDREF": 1,
"RockwellOffset": 0
}
}
]
}
Here is a second example configuration using a Controllogix L18ERM PLC with tags located in Controller Tags Scope:
{
"CheckpointInterval": 600,
"Collectors": [
{
"CollectorDescription": "SDCM Internal Simulation Server",
"CollectorName": "DCCsim",
"Protocol": "Simulator",
"SamplePoints": [
{
"SampleDataType": "double",
"SampleDescription": "SDCM simulation of sine curve",
"SampleLimitAlarm": true,
"SampleLimitDiscard": false,
"SampleLowerLimit": -1000,
"SampleName": "sine",
"SampleUpperLimit": 1000,
"SamplesSaved": 300,
"SimulatorData": {
"SimulatorFunction": "sine",
"SimulatorIncValue": 100,
"SimulatorInitValue": 1000,
"SimulatorSampleInterval": 1
}
}
]
},
{
"CollectorName": "L18ERM",
"CollectorIPAddr": "10.100.10.5",
"CollectorPortno": 44818,
"CollectorDescription": "My first Rockwell1",
"Protocol": "Rockwell",
"ConnectRetryMin": 2,
"ConnectRetryMax": 240,
"RockwellAccess": {
"RockwellTags": [
{
"RockwellTagName": "sine_wave",
"RockwellID": 2,
"RockwellElementSize": 4,
"RockwellElementCount": 1,
"RockwellSampleInterval": 1
}
],
"RockwellPath": "1,0"
},
"SamplePoints": [
{
"SampleName": "sine_wave",
"SampleDescription": "Sine Wave",
"SamplesSaved": 10,
"SampleDataType": "float",
"RockwellValue": {
"RockwellIDREF": 2
}
}
]
}
],
"ConfigDescription": "Test configuration for SDCC with SIMs only",
"ConfigName": "SDCC_SIM",
"DataServers": [
{
"ConnectRetryMax": 12,
"ConnectRetryMin": 2,
"DatasrvName": "DCC",
"DatasrvProtocol": "SCI/SPD",
"SCISPDParams": {
"DevCertName": "DCC Certificate",
"DevPkeyName": "DCC Private Key",
"PushInterval": 1,
"RootCAName": "DCC CA Certificate",
"SCIServerAddr": "dcm-dcc.secomea.com",
"SPDPort": 443,
"Security": "TLS1.2"
}
}
],
"WaitForNTP": false
}