Versions Compared

Key

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

Page Content

Table of Contents
minLevel1
maxLevel6
include
outlinefalse
indent
styledefault
excludePage Content
typelist
class
printablefalse

...

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:

  1. Compile your project if it has not been compiled previously.

  2. Close your project.

  3. Right-click on the project and select the "Try new I/O interfaces" option.

    2-19-2024 3-22-10 PM.pngImage Removed

  4. Follow the steps in the migration wizard.

    1. Data point tree and IO assignment:

      image-20240301-160231.pngImage Removed

    2. Connections overview:

      image-20240301-160319.pngImage Removed

    3. Migration impact:

      image-20240301-160534.pngImage Removed

There you have it; your project has been successfully migrated into Dashboards.automatically when a project is opened.

  1. 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.

  1. Close the older RT-LAB version and start using the newer RT-LAB version.

  2. Open your Workspace

  3. Open your project

  4. Follow the migration wizard instructions

    image-20241217-224246.pngImage Addedimage-20241217-224332.pngImage Addedimage-20241217-224431.pngImage Added


    Don’t worry, your project will be backed up in case you want to use with older RT-LAB versions

    image-20241217-224732.pngImage Added

  5. Your project now can be used with the new I/O Interfaces!

    image-20241217-225101.pngImage Added

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,

  • (tick) Functionality of the Recorder remains the same.

  • (tick) 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.

  • (tick) Configuration view of IO Interfaces remains in RT-LAB.

  • (minus) Aliases are no more supported.

  • (tick) All RT-LAB API calls remain compatible.

    • (warning) GetConnectionsDescriptions GetConnectionsDescription return may differ

      • For IO data points:

        • (minus) Field name is no longer present.

        • (plus) Field alias has been added, it is the IO data point UI name.

      • For model data points:

        • (minus) Field level, alias and name are no more present.

  • (star) Connections configuration:

    • (plus) Can be done via Dashboards

    • (minus) 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.

...

  1. The folder located at <Project Path>/configurations

  2. The file located at <Project Path>/Controller.log

  3. 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

  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 two files: 
- r.DeleteConnectionsconnections_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)