Synchronizing OpenFAST (standalone) with an external PLC controller

Dear OpenFAST community,

We are currently working on a wind turbine control validation setup. In previous work, we successfully ran co-simulations where OpenFAST was executed within Simulink via the FAST S-Function, and a simulated PLC as the controller. Communication between Simulink and the simulated PLC was established through OPC UA, with Simulink acting as an intermediary.

We would now like to remove the dependency on MATLAB/Simulink and run OpenFAST in standalone mode. I understand that achieving real-time synchronization may not be straightforward, but I would like to ask what the recommended approach is for synchronizing an external controller with OpenFAST under these conditions.

The key aspect in our case is that the controller is not compiled as .dll, but instead runs on a simulated or real PLC (e.g., Siemens 1200).

What would be the correct or recommended approach to implement this type of simulation? Any guidance or references to existing work in this direction would be greatly appreciated.

Best regards,

-Mario

Dear @Mario.Ruz,

The use of OpenFAST in hardware-in-the-loop (HIL) / software-in-the-loop (SIL) situations has been discussed in other forum topics:

Do any of these discussions help?

Dear @Jason.Jonkman ,

Thank you for your answer and for the provided links. I had already seen some of them, but it seems that the point we are trying to make is not directly addressed. Our main goal is to be able to use a PLC as a controller and synchronize it with OpenFAST (not real time needed at this point), as would be done when the controller is developed in Simulink.

As I understand it, OpenFAST requires the controller to be compiled, which is precisely what we would like to avoid.

Edit: What I am trying to find is the best way to make OpenFAST pause the simulation until the control signals are received, and to pause the controller as well.

Best regards,

-Mario

Dear @Mario.Ruz,

Well, the MATLAB/Simulink interface is set up so that MATLAB/Simulink is the driver and calls OpenFAST to advance a step, with control signals computed externally and sent to OpenFAST each time step. I’m sure this functionality could be adopted to your needs, with some changes, but I have not done that myself.

Best regards,

1 Like