...
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
Export connections by using RT-LAB API
Code Block | ||
---|---|---|
| ||
r.OpenProject('projectName') r.ExportConnections('connections.csv') |
Separate exported files in 2 files
One for DNP3 Slave connections
One for the other connections
Code Block | ||
---|---|---|
| ||
Separate connections.csv file in r.DeleteConnectionstwo files: - connections_dnp3_slave_connections.csv - connections_wo_dnp3_slave_connections.csv |
Remove all existing connections in the Project
Code Block | ||
---|---|---|
| ||
r.DeleteConnection('*','*') |
Import files containing all connections except the one related to DNP3 Slave
Code Block | ||
---|---|---|
| ||
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.
...
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
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) |