Vestas OPCUA

Plugin to collect live data from Vestas turbines via OPCUA protocol

Vestas Turbines

The purpose of this plugin is to read data from Vestas live wind data via their OPCUA servers. For this plugin, the following fields should have these values:

Port: 62550 (usually)
Username: TakeFromCertificate
Password: <leave blank>
Suffix: /DataAccessServer
Application URI: urn:example.org:FreeOpcUa:python-opcua
Security String: Basic256,SignAndEncrypt
Private Key: See OPCUA plugin doco for how to generate and authorize
Public Key: See OPCUA plugin doco for how to generate and authorize

Usage

This plugin relies on the OPCUA plugin. Make sure you have been granted access to the OPCUA plugin. You can run a discover without a configuration file. In this case, all the variables in the Vestas OPCUA namespace are displayed in a hierarchical tree format. If the debug is run from the command line with a debug value of -v, the actual values for all the namespace nodes will also be displayed. The returned tree will look something like this:

	Name: Objects.DA namespace_index: 0. NodeID: ns=2;s=DA
		Name: Objects.DA.<PLANT_NAME> namespace_index: 0. NodeID: ns=2;s=DA.<PLANT_NAME>
			Name: Objects.DA.<PLANT_NAME>.WTG01 namespace_index: 0. NodeID: ns=2;s=DA.<PLANT_NAME>.WTG01
				Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01 namespace_index: 0. NodeID: ns=2;s=DA.<PLANT_NAME>.WTG01.WALM01
					Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmActSt namespace_index: 0. NodeID: ns=2;s=DA.<PLANT_NAME>.WTG01.WALM01.AlmActSt
						Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmActSt.Definition namespace_index: 0. NodeID: i=2366
						Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmActSt.ValuePrecision namespace_index: 0. NodeID: i=2367
					Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmFstActSt namespace_index: 0. NodeID: ns=2;s=DA.<PLANT_NAME>.WTG01.WALM01.AlmFstActSt
						Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmFstActSt.Definition namespace_index: 0. NodeID: i=2366
						Name: Objects.DA.<PLANT_NAME>.WTG01.WALM01.AlmFstActSt.ValuePrecision namespace_index: 0. NodeID: i=2367
    username: TakeFromCertificate
    password: <leave blank>

The Vestas OPCUA connection string usually has a a suffix associated with it. For example, the connection string may be something like: opc.tcp://100.127.1.220:62550/DataAccessServer, where 62550 is the TCP port. The /DataAccessServer at the end is a suffix.

The Vestas OPCUA server also requires a security string, which for Vestas will always be: Basic256,SignAndEncrypt

For the Private Key and Public Key, follow the procedure in the general OPCUA documentation to generate them. This can be done on your local machine with a Linux terminal. Once created, upload them to their respective directories in the plugin configuration menu. The certificates need to be trusted by the OPCUA server admin. To do this, run a discovery using all the parameters as above including the Private and Public Keys. You should see it fail with an error similar to Certificate not trusted. This confirms that we can reach the OPCUA server, the certificate just needs to be trusted. Inform the client when this is done and they will get the admin to trust the certificates, after which you should be able to discover data.

There is a default configuration file. This needs to be edited before being usable. The following process should be used: 1. Run a raw OPCUA discovery to get all data available on the OPCUA server. Take a copy of it and save it in a notepad document. 2. Download default configuration file, and replace the <PLANT_NAME> and the turbine names (e.g. WTG01) with the actual plant name and turbine names that can be found in the raw OPCUA discovery. 3. Upload discovery, select it in the "Discover only" config file selection, and run the discovery. 4. Use the script (get it from Ardexa Operations) to find get a list of the fields from the raw Discovery. Compare this to the list of fields from the current config using Notepad++. 5. Add any fields that are not in the configuration to the configuration file, and comment out any fields that are empty (not in the raw Discovery). 6. Name it according to the turbine type it is, re-upload the new configuration file, run a discovery, and if all is looking good, save the scenario.

As this is a rather involved process, please contact Ardexa Support if any issues are encountered.

Arguments

  • IP Address .. something like: 100.127.1.220

  • configuration File full path ... this is the config file discussed above.

  • --port This is an optional entry denoting the TCP Port of the Vestas OPCUA server. It is defaulted to 62550

  • --namespace_index. This is an optional entry only available when using discover. It is the namespace for which to discover variables. It is defaulted to 0

  • --auth_file ... this is the authentication file discussed above.

  • --app_uri. This is the suffix, which is set to a default of urn:example.org:FreeOpcUa:python-opcua

  • --suffix. This is the application URI, which is set to a default of /DataAccessServer

  • --security_str. This is the security string, which is set to a default of Basic256,SignAndEncrypt

  • --private_key. This is the private key generated above, once uploaded and selected it will show up as /opt/ardexa/config/opcua-ardexa/my_private_key.pem

  • --public_key. This is the public key generated above, once uploaded and selected it will show up as /opt/ardexa/config/opcua-ardexa/my_cert.pem

Last updated