EtherIP South Plugin¶
The foglamp-south-etherip plugin is a south plugin that supports PLC Tags read operation for Allen Bradley/Rockwell PLCs. This is based on libplctag and API level details can be read at wiki
Configuration Parameters¶
An EtherIP south service is added in the same way as any other south service in FogLAMP,
Select the South menu item
Click on the + icon in the top right
You will be presented with the following page
Select etherip from the plugin list
Enter a name for your etherip service
Click Next
You will be presented with the following configuration page
Asset Name: This is the name of the asset that will be used for the data read by this service. This will be used either as a prefix for the asset name, if a unique asset is created for each PLC tag or as the actual asset name if a single reading is created. If the asset names are given in the PLC map then this option will be ignored.
Reading Structure: This option controls the way in which the readings will be structured within FogLAMP. Three options are available; “Reading per asset”, “Reading per PLC tag” or “Single Reading”.
- Reading per asset
One reading will be created for each distinct asset defined in the PLC map.
- Reading per PLC tag
A separate reading will be created for each PLC tag read from the PLC.
- Single Reading
All PLC tags will be read and added to a single asset.
Timeout (ms): The request timeout when communicating with a PLC device. Default value is 5000 (milliseconds). Set this timeout value suitably based on number of tags to read/write and network conditions/RTT/latency, etc.
Error Handling: This option controls the behaviour when an error is encountered reading data from the PLC.
- Only return data if all data is available
Data is returned if all the tags have been read without error from PLC device.
- Return subset of data in case of error
Data is returned only for the tags that are read successfully, error is logged for the tags which have error during reading from PLC device.
PLC IP Address: This is the IP Address of the PLC Tags server, Default value 127.0.0.1
PLC: This is the type of the PLC from which the user wants to read the tags, Default value controllogix, the following have been supported:
Allen-Bradley ControlLogix & CompactLogix PLCs
Allen-Bradley Micro8x0 PLCs
Rockwell/Allen-Bradley PLCs accessed over a DH+ bridge (i.e. a LGX chassis with a DHRIO module) such as PLC/5, SLC 500 and MicroLogix
Omron NX/NJ series PLCs as for Allen-Bradley Micro8x0
Path: This is the slot/rack(e.g. 0,1) to use to connect to your PLCTags device. This attribute is required for CompactLogix/ControlLogix tags and for tags using a DH+ protocol bridge (i.e. a DHRIO module) to get to a PLC/5, SLC 500, or MicroLogix PLC on a remote DH+ link. The attribute is ignored if it is not a DH+ bridge route, but will generate a warning if debugging is active. Note that Micro8x0 connections must not have a path attribute.
Tags to read: The map defines which PLCTags user wants to read. The map is a complex JSON object which is described in more detail below.
Tags to write: The map defines which PLCTags user wants to write to. The map is a complex JSON object which is described in more detail below.
Map¶
The map of tags to read/write is a JSON object with a single array tags, each element of this array is a JSON object that defines a single item of data that will be stored in FogLAMP or written as set-point control. These objects support a number of properties and values, these are
Property |
Description |
---|---|
name |
The name of the PLCTag that we are reading/writing. In case of read, this becomes the name of the datapoint with the asset. |
type |
The datatype of the PLCTag that we are reading/writing. |
program |
This defines the scope of the PLCTag that we are reading/writing, possible values being Program level scope or Global/Controller level scope. The Program name needs to be specified here if it is a tag with program level scope. For global/controller level tags ‘program’ attribute in map can be omitted or set to JSON null value or empty. |
A number of different types are supported by the plugin, these map to the underlying types that are supported by the various PLCs. The table below lists the types that are currently supported within the plugin.
Type |
Description |
---|---|
BOOL |
A single bit boolean field |
BIT |
A single bit field |
BYTE |
An 8 bit unsigned integer value |
WORD |
A 16 bit unsigned integer value |
DWORD |
A 32 bit unsigned integer value |
INT8 |
An 8 bit signed integer value |
INT16 |
A 16 bit signed integer value |
INT32 |
A 32 bit signed integer value |
INT64 |
A 64 bit signed integer value |
INT |
A 16 bit signed integer value |
USINT |
An 8 bit unsigned integer value |
UINT |
A 16 bit unsigned integer value |
UDINT |
A 32 bit unsigned integer value |
SINT |
An 8 bit signed integer value |
DINT |
A 32 bit signed integer value |
UINT8 |
An 8 bit unsigned integer value |
UINT16 |
A 16 bit unsigned integer value |
UINT32 |
A 32 bit unsigned integer value |
UINT64 |
A 64 bit unsigned integer value |
FLOAT32 |
A 32 bit floating point number |
FLOAT64 |
A 64 bit floating point number |
REAL |
A 32 bit floating point number |
LREAL |
A 64 bit floating point number |
STRING |
An ASCII string value |
SHORT STRING |
An ASCII string value |
Example JSON Map¶
In this example we will assume we have a Micro8x0 PLC and we want to read one tag with name Tag1, type UINT32 and having global/controller level scope. Also we want to write to a tag with name Tag2, type UDINT and having global/controller level scope.
The Tags to read Map attribute for this example would be as follow:
{
"tags": [
{
"name": "Tag1",
"type": "UINT32",
"program": "",
"asset": "Asset",
"datapoint": "Datapoint"
}
]
}
name : The name of the tag to be read.
type : The data type of the tag to be read.
program : The program name, to be left blank if Global scoped program.
asset : The asset name to be associated with the reading corresponding to the tag value being read.
datapoint : The datapoint name to be associated with the reading corresponding to the tag value being read.
The Tags to write Map attribute for this example would be as follow:
{
"tags": [
{
"name": "Tag2",
"type": "UDINT",
"program": ""
}
]
}
name : The name of the tag to be written.
type : The data type of the tag to be written.
program : The program name, to be left blank if Global scoped program.
Note
It is extremely important that the map be correctly configured with the correct type for each tag that is read. FogLAMP has no way to verify the type that the user requests is the type defined in the PLC, if the type configured for a tag is incorrect then the values read may be meaningless.
See Also¶
foglamp-filter-breakover - Filter to forecast the possibility of a breakover.
foglamp-south-ABB - A south plugin to pull data from the ABB cloud
foglamp-south-Beckhoff - A Beckhoff ADS data ingress plugin for FogLAMP, this monitors Beckhoff PLCs and returns the state of internal variables within the PLC
foglamp-south-ModbusC - A FogLAMP south plugin that implements modbus-tcp and modbus-rtu
foglamp-south-S7 - A south plugin that uses the S7 Communications protocol to read data from a Siemens S7 series PLC.
foglamp-south-dnp3 - A south plugin for FogLAMP that implements the DNP3 protocol
foglamp-south-opcua - A FogLAMP south service that pulls data from an OPC-UA server
foglamp-south-s2opcua - An OPC UA south plugin based on the Systerel S2OPC OPC UA Toolkit. This plugin offers similar functionality to the foglamp-south-opcua plugin but also offers data encryption and authentication.