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):
ping -c 1 192.168.1.2Also, 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.
nmap -sS -p 102 192.168.1.2Please 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,nodesanddatasetsare 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.
Device
└── Node
└── Dataset1
└── Field 1
└── Field 2
└── Dataset2
└── Field 1
└── Field 2
...etc ....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: 10.64.16.20
user: iec.smith
passwd: MyPassword
IP AddressThis is the IP address of the IEC server (Mandatory) ..something like:192.168.1.2The
useris 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 fileis 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 havetablesper 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:
For device: IECDeviceControlMe
Node: LLN0
IEC Datasets:
ActValues
DP
HistValues
StatValues
Node: WALM1
IEC Datasets:
EventsThe 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,--nodeand--dataset. These must be completed, and the values can be obtained from the output ofDiscovering Datasetsdiscussed 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:
Sample of the Events IEC Dataset on Device: IECDeviceControlMe and Node: WALM1. Source: WEA 11-123456
stVal stVal_str comego comego_str idx idx_str Timestamp
------- ------------------ -------- ------------ ----- --------- -------------------------
0 Initialization 0 come 0 first 2024-10-04 21:00:00+00:00
220 Unknown 1 go 1 follow 2024-10-04 21:00:00+00:00
0 Initialization 1 go 1 follow 2024-10-04 05:00:01+00:00
220 Unknown 0 come 0 first 2024-10-04 05:00:01+00:00
0 Initialization 0 come 0 first 2024-10-03 21:00:00+00:00
220 Unknown 1 go 1 follow 2024-10-03 21:00:00+00:00
0 Initialization 1 go 1 follow 2024-10-03 05:00:01+00:00
220 Unknown 0 come 0 first 2024-10-03 05:00:01+00:00
0 Initialization 0 come 0 first 2024-10-02 21:00:00+00:00
220 Unknown 1 go 1 follow 2024-10-02 21:00:00+00:00
210 Mains operation 2 state 2 state 2024-10-02 13:48:23+00:00
200 Mains run-up 2 state 2 state 2024-10-02 13:47:53+00:00
190 Mains connection 2 state 2 state 2024-10-02 13:47:52+00:00
180 Run-up 2 state 2 state 2024-10-02 13:45:42+00:00
130 Automatic start-up 2 state 2 state 2024-10-02 13:45:01+00:00
0 Initialization 1 go 1 follow 2024-10-02 13:45:01+00:00
9210 Unknown 0 come 0 first 2024-10-02 13:45:01+00:00
60 Brake program 52 2 state 2 state 2024-10-02 11:00:00+00:00
0 Initialization 0 come 0 first 2024-10-02 11:00:00+00:00
9210 Unknown 1 go 1 follow 2024-10-02 11:00:00+00:00
210 Mains operation 2 state 2 state 2024-10-02 10:37:43+00:00
200 Mains run-up 2 state 2 state 2024-10-02 10:37:13+00:00Here is another example from the ActValues dataset:
Sample of the ActValues IEC Dataset on Device: IECDeviceControlMe and Node: LLN0. Source: WEA 11-123456
Name Value Quality Timestamp Units Multiplier
------------------- ------------------------- --------- ------------------------- ------- ------------
WTUR1.W 2868.37451171875 0 2024-10-05 03:24:03+00:00 kW 1
WTUR1.VAr 22.470943450927734 0 2024-10-05 03:24:03+00:00 kvar 1
WTUR1.VA 2868.3828125 0 2024-10-05 03:24:03+00:00 kVA 1
WTUR1.TotWh 45728500.0 0 2024-10-05 03:24:02+00:00 kWh 1
WTUR1.TotVArh 5311372.0 0 2024-10-05 03:22:32+00:00 kvarh 1
WTUR1.DmdWh 342584.0 0 2024-10-03 11:14:47+00:00 kWh 1
WTUR1.DmdVArh 4756185.0 0 2024-10-04 21:50:25+00:00 kvarh 1
WTUR1.TurSt Normal operation 0 2024-10-02 13:48:23+00:00 1
WROT1.RotSpd 0.16960002481937408 0 2024-10-05 03:24:03+00:00 rots/s 1
WROT1.HubTmp 15.0 0 2024-10-05 03:24:03+00:00 °C 1
WROT1.PtAngValBl1 9.5 0 2024-10-05 03:24:03+00:00 ° 1
WROT1.PtAngValBl2 9.5 0 2024-10-05 03:24:03+00:00 ° 1
WROT1.PtAngValBl3 9.5 0 2024-10-05 03:24:03+00:00 ° 1
WROT1.RotBrgTmp 24.600000381469727 0 2024-10-05 03:24:03+00:00 °C 1
WTRM1.TrmTmpShfBrg1 63.349998474121094 0 2024-10-05 03:24:03+00:00 °C 1
WTRM1.TrmTmpShfBrg2 71.44999694824219 0 2024-10-05 03:24:03+00:00 °C 1
WTRM1.TrmTmpGbxOil 56.599998474121094 0 2024-10-05 03:24:03+00:00 °C 1
WTRM1.GbxSpd 20.472349166870117 0 2024-10-05 03:24:03+00:00 rots/s 1
WGEN1.Spd 20.47117042541504 0 2024-10-05 03:24:03+00:00 rots/s 1
WGEN1.GnTmpSta 115.3499984741211 0 2024-10-05 03:24:03+00:00 °C 1The 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 FieldsIEC Node. This is the node that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering FieldsIEC Dataset. This is the dataset that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering FieldsIEC 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 fieldsitem 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 fieldsitem discussed previously to find the name. This name is not case sensitive.Type. The Ardexa variable type. Can be one of
decimal,int,keywordordateUnits. 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:
# Ardexa Table[0], Ardexa Source [1], Ardexa Variable Name [2], IEC Device [3], IEC Node [4], IEC Dataset [5], IEC Source [6], IEC Field Name [7], Type [8], Units [9], Scale [10]
senvion_test, turbine1, WTUR1_W_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.W, decimal, W, 1000
senvion_test, turbine1, WTUR1_VAr_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.VAr, decimal, var, 1000
senvion_test, turbine1, WTUR1_VA_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.VA, decimal, VA, 1000
senvion_test, turbine1, WTUR1_TotWh_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.TotWh, decimal, Wh, 1000
senvion_test, turbine1, WTUR1_TurSt, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.TurSt, keyword, , 1
senvion_test, turbine1, WROT1_PtAngValBl1_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl1, decimal, °, 1
senvion_test, turbine1, WROT1_PtAngValBl2_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl2, decimal, °, 1
senvion_test, turbine1, WROT1_PtAngValBl3_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl3, decimal, °, 1
senvion_test, turbine1, WROT1_RotSpd_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.RotSpd, decimal, rots/s, 1
senvion_test, turbine1, WROT1_HubTmp_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.HubTmp, decimal, °C, 1
senvion_test, turbine1, WROT1_RotBrgTmp_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.RotBrgTmp, decimal, °C, 1
senvion_test, turbine1, WTRM1_TrmTmpShfBrg1_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpShfBrg1, decimal, °C, 1
senvion_test, turbine1, WTRM1_TrmTmpShfBrg2_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpShfBrg2, decimal, °C, 1
senvion_test, turbine1, WTRM1_TrmTmpGbxOil_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpGbxOil, decimal, °C, 1 Note:
Anything starting with
#is a comment and can be ignored.If timestamp need to be included, then use either
timestamp.
The above mapping file will produce the following output:
Table senvion_test
Source turbine1
WTUR1_W_avg(decimal:W) 1.42689e+06
WTUR1_VAr_avg(decimal:var) 14676.7
WTUR1_VA_avg(decimal:VA) 1.4269e+06
WTUR1_TotWh_avg(decimal:Wh) 4.57615e+10
WTUR1_TurSt(keyword) Normal operation
WROT1_PtAngValBl1_avg(decimal:°) 0.49
WROT1_PtAngValBl2_avg(decimal:°) 0.49
WROT1_PtAngValBl3_avg(decimal:°) 0.5
WROT1_RotSpd_avg(decimal:rots/s) 0.168333
WROT1_HubTmp_avg(decimal:°C) 19
WROT1_RotBrgTmp_avg(decimal:°C) 27.7
WTRM1_TrmTmpShfBrg1_avg(decimal:°C) 63.25
WTRM1_TrmTmpShfBrg2_avg(decimal:°C) 69.25
WTRM1_TrmTmpGbxOil_avg(decimal:°C) 55.8 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:
/opt/ardexa/config/senvion-iec61850-ardexa/per-source
└── test_senvion_per_source
├── WEA1
└── turbine1.csv
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 FieldsIEC Node. This is the node that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering FieldsIEC Dataset. This is the dataset that needs to be queried to get the variable. This name IS case sensitive. See the output from
Discovering FieldsIEC 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 fieldsitem 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 fieldsitem discussed previously to find the name. This name is not case sensitive.Type. The Ardexa variable type. Can be one of
decimal,int,keywordordateUnits. 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
# Ardexa Variable Name [2], IEC Device [3], IEC Node [4], IEC Dataset [5], IEC Source [6], IEC Field Name [7], Type [8], Units [9], Scale [10]
WTUR1_W_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.W, decimal, W, 1000
WTUR1_VAr_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.VAr, decimal, var, 1000
WTUR1_VA_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.VA, decimal, VA, 1000
WTUR1_TotWh_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.TotWh, decimal, Wh, 1000
WTUR1_TurSt, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTUR1.TurSt, keyword, , 1
WROT1_PtAngValBl1_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl1, decimal, °, 1
WROT1_PtAngValBl2_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl2, decimal, °, 1
WROT1_PtAngValBl3_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.PtAngValBl3, decimal, °, 1
WROT1_RotSpd_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.RotSpd, decimal, rots/s, 1
WROT1_HubTmp_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.HubTmp, decimal, °C, 1
WROT1_RotBrgTmp_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WROT1.RotBrgTmp, decimal, °C, 1
WTRM1_TrmTmpShfBrg1_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpShfBrg1, decimal, °C, 1
WTRM1_TrmTmpShfBrg2_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpShfBrg2, decimal, °C, 1
WTRM1_TrmTmpGbxOil_avg, IECDeviceControlMe, LLN0, ActValues, WEA 11-123456, WTRM1.TrmTmpGbxOil, decimal, °C, 1 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.
Table test_senvion_per_source
Source WEA1/turbine1
WTUR1_W_avg(decimal:W) 1.74315e+06
WTUR1_VAr_avg(decimal:var) 10742.7
WTUR1_VA_avg(decimal:VA) 1.74315e+06
WTUR1_TotWh_avg(decimal:Wh) 4.57672e+10
WTUR1_TurSt(keyword) Normal operation
WROT1_PtAngValBl1_avg(decimal:°) 0.99
WROT1_PtAngValBl2_avg(decimal:°) 0.99
WROT1_PtAngValBl3_avg(decimal:°) 1
WROT1_RotSpd_avg(decimal:rots/s) 0.168333
WROT1_HubTmp_avg(decimal:°C) 18
WROT1_RotBrgTmp_avg(decimal:°C) 26.35
WTRM1_TrmTmpShfBrg1_avg(decimal:°C) 63.35
WTRM1_TrmTmpShfBrg2_avg(decimal:°C) 70.2
WTRM1_TrmTmpGbxOil_avg(decimal:°C) 56.75 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.
This is an example "per source" mapping file:
# Source Name [0], Ardexa Variable Name [1], IEC Device [2], IEC Node [3], IEC Dataset [4], IEC Field Name [5], Type [6], Units [7], Scale [8]
${turbine}, WTUR1_W_avg, IECDeviceControlMe, LLN0, ActValues, WTUR1.W, decimal, W, 1000
${turbine}, WTUR1_VAr_avg, IECDeviceControlMe, LLN0, ActValues, WTUR1.VAr, decimal, var, 1000
${turbine}, WTUR1_VA_avg, IECDeviceControlMe, LLN0, ActValues, WTUR1.VA, decimal, VA, 1000
${turbine}, WTUR1_TotWh_avg, IECDeviceControlMe, LLN0, ActValues, WTUR1.TotWh, decimal, Wh, 1000
${turbine}, WTUR1_TurSt, IECDeviceControlMe, LLN0, ActValues, WTUR1.TurSt, keyword, , 1
${turbine}, WROT1_PtAngValBl1_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.PtAngValBl1, decimal, °, 1
${turbine}, WROT1_PtAngValBl2_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.PtAngValBl2, decimal, °, 1
${turbine}, WROT1_PtAngValBl3_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.PtAngValBl3, decimal, °, 1
${turbine}, WROT1_RotSpd_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.RotSpd, decimal, rots/s, 1
${turbine}, WROT1_HubTmp_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.HubTmp, decimal, °C, 1
${turbine}, WROT1_RotBrgTmp_avg, IECDeviceControlMe, LLN0, ActValues, WROT1.RotBrgTmp, decimal, °C, 1
${turbine}, WTRM1_TrmTmpShfBrg1_avg, IECDeviceControlMe, LLN0, ActValues, WTRM1.TrmTmpShfBrg1, decimal, °C, 1
${turbine}, WTRM1_TrmTmpShfBrg2_avg, IECDeviceControlMe, LLN0, ActValues, WTRM1.TrmTmpShfBrg2, decimal, °C, 1
${turbine}, WTRM1_TrmTmpGbxOil_avg, IECDeviceControlMe, LLN0, ActValues, WTRM1.TrmTmpGbxOil, decimal, °C, 1 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.
/opt/ardexa/config/senvion-iec61850-ardexa/per-source
└── wind_iec_600s
├── turbine1.csvThe 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
Log Book
To record log book data, Please define a mapping file similar to below,
# Ardexa Table[0] , Ardexa Source [1], Ardexa Variable Name [2], IEC Device [3] , IEC Node [4], IEC Dataset [5], IEC Source [6], IEC Field Name [7], Type [8], Units [9], Scale [10]
senvion_test_logbook, WEA 11-123456 , stVal , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , stVal , int , , 1
senvion_test_logbook, WEA 11-123456 , stVal_str , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , stVal_str , keyword , , 1
senvion_test_logbook, WEA 11-123456 , comego , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , comego , int , , 1
senvion_test_logbook, WEA 11-123456 , comego_str , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , comego_str , keyword , , 1
senvion_test_logbook, WEA 11-123456 , idx , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , idx , int , , 1
senvion_test_logbook, WEA 11-123456 , idx_str , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , idx_str , keyword , , 1
senvion_test_logbook, WEA 11-123456 , Timestamp , REguardControlBWEC, WALM1 , Events , WEA 11-123456 , Timestamp , date , , 1The discovery output for the above mapping file will be:
Table senvion_test_logbook
Source WEA 11-123456
stVal(integer) 220
stVal_str(keyword) Unknown
comego(integer) 1
comego_str(keyword) go
idx(integer) 1
idx_str(keyword) follow
Timestamp(date) 2025-08-27T20:00:00ZThe discover data and log commands works as usual for data from the turbine. Any new event will be logged to the logbook table as long as they are logged in a sufficient frequency. Here, it is recommended to configure the logbook task to run every 1m.
Example command to discover data and log are shown below
senvion_iec61850_ardexa discover data '/path/to/config_file.config_file' '/path/to/mapping_file.csv'senvion_iec61850_ardexa log '/path/to/config_file.config_file' '/path/to/mapping_file.csv'Last updated
Was this helpful?