Senvion Plugin with Config Files
This plugin will read from the Senvion IEC 61850 Server, and send the data to the Ardexa cloud. It can be used to discover data, and also log data to the local device, and send it to the Ardexa cloud. This plugin works by using configuration files to control the names of variables, tables and sources.
Configuration of the Ardexa Edge Device
Ensure you have read a copy of the manufacturer's operating and safety manual. Please review the manual for safety instructions. Ardexa uses the IEC 61850 server to read live and historical data. The IEC 61850 Server is read via a the Ardexa IEC 61850 plugin
. The IEC data is available from a default TCP Port 102
on the IP address for which the IEC Server is located. Ardexa needs to know the IP address of the IEC server for every WEC (Wind Turbine) and PMU (Grid Station), as below. Once the Ardexa edge device is installed on the plant's network, verify that it can "ping" every IEC Server using the following command in the REMOTE SHELL (replace the IP address with the IP address of your IEC Server):
Also, check that the TCP Port for IEC Server is open for every WEC and PMU. You can do this using the REMOTE SHELL, using the nmap command as follows.
Please don't forget to send to Ardexa:
Clear photographs of the installation
The IP address for every IEC Server on each WEC and PMU. That is; an IP address for every grid station and wind turbine.
The userid of the IEC Server
The password of the IEC Server. Please note that multiple logins with the same user name is not possible.
The quantity and model numbers of all wind turbines at the park
Data Discovery
The plugin can be used to discover data, in particular:
All the devices, nodes and datasets on the IEC Server.
devices
,nodes
anddatasets
are the way data is organised in IEC servers.All the fields within those datasets, and/or
A sample of the data within those fields
The following sections detail how to undertake data discovery.
Discovering Datasets
A IEC 61850 Server hosts data in a Senvion wind turbine. Data is organised in device(s), node(s) and dataset(s). A number of fields are then hosted within a dataset. The IEC Server does not have tables
per se, but to remain consistent with the other wind plugins, we have made tables = datasets, for this plugin. This hierarchy is shown below.
In order to list all the dataset names, the following command can be executed either on the REMOTE SHELL, or the via the plugin RUN DISCOVERY function. To run a discovery via the plugin's RUN DISCOVERY function, do the following:
Ensure the
{CONFIG_FILE}
has the correct credentials to connect to the server. This{CONFIG_FILE}
must be formatted as follows:
IP Address
This is the IP address of the IEC server (Mandatory) ..something like:192.168.1.2
The
user
is the username supplied by the Senvion manager, as is the password. Please note that multiple logins with the same user name is not possible.
Ensure the
Output config file
is set toshow_tables
. The SHOW_TABLES_FILE file is an empty file that ends withshow_tables
(with this exact name - path does not matter). The IEC Server does not havetables
per se, but to remain consistent with the other wind plugins, we have made tables = datasets, for this plugin.Select
RUN DISCOVERY
.
This will then show a list of datasets, which should look like this:
The equivalent REMOTE SHELL command to view all the database tables is:senvion_iec61850_ardexa discover data {CONFIG_FILE} {SHOW_TABLES_FILE}
. The CONFIG_FILE is the location of the file containing the credentials. The SHOW_TABLES_FILE file is an empty file that ends with show_tables
(with this exact name - path does not matter)
Discovering Fields
In order to list all the field names within a dataset, the following command can be executed either on the REMOTE SHELL, or the via the plugin RUN DISCOVERY function. To run a discovery via the plugin's RUN DISCOVERY function, do the following:
Ensure the
{CONFIG_FILE}
has the correct credentials to connect to the server.Ensure the
{SHOW_DATASET_FIELDS}
file is an empty file that ends withshow_fields
(with this exact name - path does not matter).Ensure you complete the variables;
--device
,--node
and--dataset
. These must be completed, and the values can be obtained from the output ofDiscovering Datasets
discussed above.Select
RUN DISCOVERY
The output of this command will show all the fields in the specified database table, along with a sample of the rows in the table. For some of the tables, the fields will also details the name and units of the fields. This will be something like:
Here is another example from the ActValues
dataset:
The equivalent REMOTE SHELL command to view all the database tables is:senvion_iec61850_ardexa discover fields {CONFIG_FILE} {SHOW_DATASET_FIELDS} --device {DEVICE} --node {NODE} --dataset {DATASET}
. The CONFIG_FILE is the location of the file containing the credentials. The TABLE_NAME is an empty file that ends with show_tables
(with this exact name - path does not matter). Ensure you complete the variables; --device
, --node
and --dataset
. These must be completed, and the values can be obtained from the output of Discovering Datasets
discussed above.
For example: senvion_iec61850_ardexa discover fields /opt/ardexa/config/senvion-iec61850-ardexa/testonly.config_file --device IECDeviceControlMe --node LLN0 --dataset ActValues
Discovering Data Using Custom Mapping File
The primary purpose of a configuration file driven plugin is to provide as much flexibility as possible when defining what to capture and what to call each field. This plugin is able to read a mapping file to undertaken one or more of the following tasks:
Only collecting required variables and ignoring anything else.
Renaming all or selected variables to something else.
Scaling variables.
Changing units.
Sending data to customised tables and sources in the Ardexa cloud.
The mapping file is a comma separated file containing 11 items as follows:
Ardexa Table. This is the name of the Ardexa table, where the data will be copied.
Ardexa Source. This is the Ardexa source name given to the data. Note that Senvion IEC servers have 1 source per IP address. So there is no need to include the "native source name"
Ardexa Variable Name. This is the name given to the variable as it will appear in the Ardexa cloud.
IEC Device. This is the device that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Node. This is the node that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Dataset. This is the dataset that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Source. This is the source name in the IEC server. Bear in mind there is 1 source per IP address in a Senvion server. Use the
discover fields
item discussed previously to find the name. This name is not case sensitive.IEC Field Name. The name of the required variable in the GE table. Use the
discover fields
item discussed previously to find the name. This name is not case sensitive.Type. The Ardexa variable type. Can be one of
decimal
,int
,keyword
ordate
Units. The units if the variable. May be empty.
Scale. The scale of the variable. May be empty
Here is an example of a mapping file:
Note:
Anything starting with
#
is a comment and can be ignored.If timestamp need to be included, then use either
timestamp
.Note that the
Events
(LOG BOOK) dataset is not yet included in this output.
The above mapping file will produce the following output:
The equivalent REMOTE SHELL command to view all the database tables is:senvion_iec61850_ardexa discover data {CONFIG_FILE} {MAPPING_FILE} --device {DEVICE} --node {NODE} --dataset {DATASET}
. The CONFIG_FILE is the location of the file containing the credentials. The MAPPING_FILE is the location of the mapping file discussed above. Ensure you complete the variables; --device
, --node
and --dataset
. These must be completed, and the values can be obtained from the output of Discovering Datasets
discussed above.
For example: senvion_iec61850_ardexa discover data /opt/ardexa/config/senvion-iec61850-ardexa/testonly.config_file /opt/ardexa/config/senvion-iec61850-ardexa/full_mapping.csv --device IECDeviceControlMe --node LLN0 --dataset ActValues
Discovering Data Using Custom "Per Source" Files
Instead of using a single mapping file (as discussed above), a separate file for each "source" can be used in conjunction with the file system to produce the desired table/source names. If the "mapping file" argument ends with the (exact) name per_source
(an empty file with this exact name, path does not matter), then the plugin will recursively look for files in the directory /opt/ardexa/config/senvion-iec61850-ardexa/per-source
. The file structure is very similar to that used in /opt/ardexa/logs
, where the first directory is the Ardexa Table
, and any subsequent directories, plus the file name (minus the extension) will form the Ardexa Source Name
. For example, take the following file structure:
This file structure will produce one source (WEA1/turbine1
) that will log data to the Ardexa table called test_senvion_per_source
. The contents of the file is the same as the single mapping file, minus the "Table" and "Source Name" fields.
Ardexa Variable Name. This is the name given to the variable as it will appear in the Ardexa cloud.
IEC Device. This is the device that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Node. This is the node that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Dataset. This is the dataset that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering Fields
IEC Source. This is the source name in the IEC server. Bear in mind there is 1 source per IP address in a Senvion server. Use the
discover fields
item discussed previously to find the name. This name is not case sensitive.IEC Field Name. The name of the required variable in the GE table. Use the
discover fields
item discussed previously to find the name. This name is not case sensitive.Type. The Ardexa variable type. Can be one of
decimal
,int
,keyword
ordate
Units. The units if the variable. May be empty.
Scale. The scale of the variable. May be empty
Here is an example of two mapping files:
turbine1.csv
Note:
Anything starting with
#
is a comment and can be ignored.
The above "per source" mapping files will produce the following output. Notice the table and source names.
The equivalent REMOTE SHELL command to view all the database tables is:senvion_iec61850_ardexa discover data {CONFIG_FILE} {MAPPING_FILE} --device {DEVICE} --node {NODE} --dataset {DATASET}
. The CONFIG_FILE is the location of the file containing the credentials. The MAPPING_FILE argument must ends with the name per_source
(an empty file with this exact name, path does not matter), then the plugin will recursively look for files in the directory /opt/ardexa/config/ge-wind-odbc-ardexa/per-source
. Ensure you complete the variables; --device
, --node
and --dataset
. These must be completed, and the values can be obtained from the output of Discovering Datasets
discussed above.
For example: senvion_iec61850_ardexa discover data /opt/ardexa/config/senvion-iec61850-ardexa/testonly.config_file /opt/ardexa/config/senvion-iec61850-ardexa/per_source --device IECDeviceControlMe --node LLN0 --dataset ActValues
Remember that the per-source directory must be created, as follows: mkdir -p /opt/ardexa/config/ge-wind-odbc-ardexa/per-source
. Then create directories and files as required, and in accordance with the discussion above.
A Special Note on Using the "Per Source" feature in Senvion Plants
Senvion Plants are configured to collect data from an IP address per turbine. This means that without some form of control, the per-source feature will try and collect from all sources. In order to prevent this behaviour and collect only from the required source, use the --required_source
argument as shown below. This will ensure only the required sources are collected. Make sure the source is enclosed in quotes, especially if there are spaces in the source name.
For example: senvion_iec61850_ardexa discover data /opt/ardexa/config/senvion-iec61850-ardexa/testonly.config_file /opt/ardexa/config/senvion-iec61850-ardexa/per_source --required_source 'WEA 05-301441'
"Per Source" Mapping Generator
As discussed above, mapping files allow as much flexibility as possible. There is a very high probability that most of the time, the same OEM input field will need to be to mapped to the same output field name (such as an IEC name), for all the turbines at a site. To assist with this repetitive process, the plugin includes a generate
sub-command that will accept a template
CSV file, which describes the general mapping and applies it to any turbines that can be automatically discovered. The template file for a per source
generate command will look a "mapping" file discussed above, except that the first 2 columns (table and source) have been removed. Please note: At this stage the Events
(LOG BOOK) dataset is not yet included in this output.
This is an example "per source" mapping file:
The equivalent REMOTE SHELL command to generate the "per source" mappings files is:senvion_iec61850_ardexa generate {CONFIG_FILE} {PER_SOURCE MAPPING FILE} {TABLE NAME}
. The CONFIG_FILE is the location of the file containing the credentials. The MAPPING_FILE is the per source mapping file. The "TABLE NAME" is the name of the Ardexa table, where the events will be sent.
For example: senvion_iec61850_ardexa generate /opt/ardexa/config/senvion-iec61850-ardexa/testonly.config_file /opt/ardexa/config/senvion-iec61850-ardexa/oem-to-iec-test_v1.csv --table wind_iec_600s --device IECDeviceControlMe --node LLN0 --dataset ActValues
Running this command will create the following directories and files.
The data can then be discovered using the section titled Discovering Data Using Custom "Per Source" Files
above, to display the data
Log
Logging data to the cloud can be enacted via the Ardexa Front End. The equivalent REMOTE SHELL command is:senvion_iec61850_ardexa log {CONFIG_FILE} {PER_SOURCE_FILE or MAPPING FILE}
. The CONFIG_FILE is the location of the file containing the credentials. The MAPPING_FILE argument must ends with the name per_source
(an empty file with this exact name, path does not matter), then the plugin will recursively look for files in the directory /opt/ardexa/config/senvion-iec61850-ardexa/per-source
. Otherwise, if a MAPPING FILE is used, it will use that log data
For example: senvion_iec61850_ardexa log /opt/ardexa/config/senvion-iec61850-ardexa/task/testonly.config_file /opt/ardexa/config/senvion-iec61850-ardexa/per_source
Was this helpful?