Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
ERR FAILED to create connections 'error message'

Known issues

...

Use of new I/O interfaces not possible because of unresolved connections

If in a project there are unresolved connections, the migration cannot be done.

...

Contrastingly, in the next image, all connections are resolved.

...

To correct unresolved connections, connections can be deleted manually, or RT-LAB API can be used to do a clean up, from RT-LAB python consoleIn the migration report, you will find datapoints of connections which cannot be resolved.

In case of DNP3 Slave the best things to do is

  1. Export connections by using RT-LAB API

Code Block
languagepy
r.OpenProject('projectName')
r.ExportConnections('connections.csv')
  1. Separate exported files in 2 files

    1. One for DNP3 Slave connections

    2. One for the other connections

Code Block
languagepy
Separate connections.csv file in r.DeleteConnectionstwo files: 
- connections_dnp3_slave_connections.csv
- connections_wo_dnp3_slave_connections.csv
  1. Remove all existing connections in the Project

Code Block
languagepy
r.DeleteConnection('*','*')
  1. Import files containing all connections except the one related to DNP3 Slave

Code Block
languagepy
r.ImportConnections('connections_wo_dnp3_slave_connections.csv')
Note

If you have LabVIEW panels please, open them before doing those steps.

The ImportConnections call will output an error, listing all unresolved connections.

...

  1. Update and import DNP3 Slave connections

Path has change from ‘DNP3 Slave/Analog inputs/Analog input 0’ to 'DNP3 Slave/Slaves/Slave_1/Analog inputs/Analog input 0'

Update all path and use CreateConnection RtlabApi call to create connections with new path

Example:

  • Content of connections_dnp3_slave_connections.csv

Code Block
languagepy
Connection Type,Datapoint 1: Primary ID,Datapoint 1: Secondary ID,Datapoint 1: Type,Datapoint 2: Primary ID,Datapoint 2: Secondary ID,Datapoint 2: Type
Model <--> IO,Analog_to_master[0],multi_drv/SS_DNP3/sm_dnp3_slave/Analog_to_master/OpOutput/port1[0],signal (out),DNP3 Slave/Analog inputs/Analog input 0,DNP3 Slave/Analog inputs/348F0769-87DB-469D-8CE2-D3F1763B995B,in
Model <--> IO,Analog_to_master[1],multi_drv/SS_DNP3/sm_dnp3_slave/Analog_to_master/OpOutput/port1[1],signal (out),DNP3 Slave/Analog inputs/Analog input 1,DNP3 Slave/Analog inputs/CACBB340-0117-4AC5-9385-29A621D4E2AC,in
Model <--> IO,Binary_to_master[0],multi_drv/SS_DNP3/sm_dnp3_slave/Binary_to_master/OpOutput/port1[0],signal (out),DNP3 Slave/Binary inputs/Binary input 0,DNP3 Slave/Binary inputs/DE660488-BA57-4916-84B7-6740AB557979,in
Model <--> IO,Binary_to_master[1],multi_drv/SS_DNP3/sm_dnp3_slave/Binary_to_master/OpOutput/port1[1],signal (out),DNP3 Slave/Binary inputs/Binary input 1,DNP3 Slave/Binary inputs/7898A36B-1C49-4318-916A-86E9DBB557FD,in
Model <--> IO,Binary_from_master[0],multi_drv/SS_DNP3/sm_dnp3_slave/Binary_from_master/In1/Value[0],parameter (in/out),DNP3 Slave/Binary outputs/Binary output 0,DNP3 Slave/Binary outputs/B64579C4-7995-4D9E-B861-BD6089F7CBC5,out
Model <--> IO,Binary_from_master[1],multi_drv/SS_DNP3/sm_dnp3_slave/Binary_from_master/In1/Value[1],parameter (in/out),DNP3 Slave/Binary outputs/Binary output 1,DNP3 Slave/Binary outputs/13C5944F-01E1-4CA1-A16B-DB36C18088D4,out
Model <--> IO,Analog_from_master[0],multi_drv/SS_DNP3/sm_dnp3_slave/Analog_from_master/In1/Value[0],parameter (in/out),DNP3 Slave/Analog outputs/Analog output 0,DNP3 Slave/Analog outputs/46D11140-359A-4763-922D-F79825342B69,out
Model <--> IO,Analog_from_master[1],multi_drv/SS_DNP3/sm_dnp3_slave/Analog_from_master/In1/Value[1],parameter (in/out),DNP3 Slave/Analog outputs/Analog output 1,DNP3 Slave/Analog outputs/A120F4DF-F4C4-4B37-9469-1332D6CE29B6,out
  • New files generated dnp3_connections_path_updated.csv

Take 3rd column (Datapoint 1: Secondary ID)

Take 5th column (Datapoint 2: Primary ID)

Add in the column containing path of IOs Slaves/Slave_1 if your data points are related to Slave_1 of DNP3 Slave configurations

...

Code Block
languagepy
multi_drv/SS_DNP3/sm_dnp3_slave/Analog_to_master/OpOutput/port1[0],DNP3 Slave/Slaves/Slave_1/Analog inputs/Analog input 0
multi_drv/SS_DNP3/sm_dnp3_slave/Analog_to_master/OpOutput/port1[1],DNP3 Slave/Slaves/Slave_1/Analog inputs/Analog input 1
multi_drv/SS_DNP3/sm_dnp3_slave/Binary_to_master/OpOutput/port1[0],DNP3 Slave/Slaves/Slave_1/Binary inputs/Binary input 0
multi_drv/SS_DNP3/sm_dnp3_slave/Binary_to_master/OpOutput/port1[1],DNP3 Slave/Slaves/Slave_1/Binary inputs/Binary input 1
multi_drv/SS_DNP3/sm_dnp3_slave/Binary_from_master/In1/Value[0],DNP3 Slave/Slaves/Slave_1/Binary outputs/Binary output 0
multi_drv/SS_DNP3/sm_dnp3_slave/Binary_from_master/In1/Value[1],DNP3 Slave/Slaves/Slave_1/Binary outputs/Binary output 1
multi_drv/SS_DNP3/sm_dnp3_slave/Analog_from_master/In1/Value[0],DNP3 Slave/Slaves/Slave_1/Analog outputs/Analog output 0
multi_drv/SS_DNP3/sm_dnp3_slave/Analog_from_master/In1/Value[1],DNP3 Slave/Slaves/Slave_1/Analog outputs/Analog output 1
  • Create new connections

From python command line in RT-LAB

Code Block
languagepy
import csv
r.OpenProject('projectName')
with open(r'<absolute_file_path>/dnp3_connections_path_updated.csv') as connections_file:
    reader = csv.reader(connections_file)
    pathA=[]
    pathB=[]
    for connections in reader:
        pathA.append(connection[0])
        pathB.append(connection[1])    
    r.CreateConnection(pathA, pathB)