Page Content
Table of Contents | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
What are the advantages?
Trying The new I/O interfaces allows enabling the visualization visualisation and editing new of IO connections within the new UI, offering improved scalability, performance, and an enhanced user experience.
How to update old projects to
...
new I/O interfaces
The Starting from RT-LAB 2025.1, the migration is carried out following these steps:
Compile your project if it has not been compiled previously.
Close your project.
Right-click on the project and select the "Try new I/O interfaces" option.
Follow the steps in the migration wizard.
Data point tree and IO assignment:
Connections overview:
Migration impact:
There you have it; your project has been successfully migrated into Dashboards.automatically when a project is opened.
Using your older RT-LAB version (2024.4 or older), make sure all models in the project are in a compiled/loadable state. If not, launch compilation and wait for its completion.
Info |
---|
Compiling the model is essential to ensure that all information required for automatic migration is available within the workspace. This step is very important. |
Close the older RT-LAB version and start using the newer RT-LAB version.
Open your Workspace
Open your project
Follow the migration wizard instructions
Don’t worry, your project will be backed up in case you want to use with older RT-LAB versionsYour project now can be used with the new I/O Interfaces!
Migrated project into Dashboards
Dashboards can be opened by clicking on “Dashboards” or on “Configuration” in the RT-LAB Project Explorer.
...
For more information on how to configure connections of I/O Interfaces in Dashboards, please refer to the following documentation:
Considerations
Once the project has been migrated to dashboardsDashboards,
Functionality of the Recorder remains the same.
Dynamic LabVIEW panels are still available for consultation, but do not interact with the simulation anymore. The Dashboards panels are now to be used instead of LabVIEW panels.
Configuration view of IO Interfaces remains in RT-LAB.
Aliases are no more supported.
All RT-LAB API calls remain compatible.
GetConnectionsDescriptions GetConnectionsDescription return may differ
For IO data points:
Field name is no longer present.
Field alias has been added, it is the IO data point UI name.
For model data points:
Field level, alias and name are no more present.
Connections configuration:
Can be done via Dashboards
Is no longer accessible via the Configuration panel of RT-LAB.
Migration failure
If the project migration fails, please read the <Project Path>/configurations/opalone/migration_report.log file and refer to the Known issues section.
...
The folder located at <Project Path>/configurations
The file located at <Project Path>/Controller.log
Opal Ones log files at C:/OPAL-RT/OpalOne/services/appserver/logs/appserver.log and C:/OPAL_RT/OpalOne/vX.Y.Z/server/logs/unicon.prod*.text.log
Migration report
The migration_report.log (under <Project Path>/configurations/opalone) should be generated no matter the migration failed or not.
If it’s not the case, it could be because the Controller.exe of the project was not properly closed before starting migration or if unicon.exe is not running.
...
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 two files: - r.DeleteConnectionsconnections_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) |