Kshitij Singh answered .
2025-08-19 00:38:13
Running Simulink with sim command has its limitations compared to set_param and vice versa, and I understand why you might want to use set_param. If you call set_param(gcs, 'SimulationCommand', 'start') from an mfile, the code will initialize and run the current Simulink model. Then mfile will continue to run regardless of the Simulink simulation status.
Here is a scenario:
We want to pause the mfile. It should remain paused until, let us say, Simulink pauses with an Assertationblock. Then the mfile continues to run.
Solution:
We put these lines after set_param(gcs, 'SimulationCommand', 'start') in our m-file
%This is to create a java robot. we will use it in Simulink to write codes in the command line later.
robot = java.awt.Robot;
%This will initiate the Debugging mode. mfile will be paused until we exit the debugging mode
keyboard
Now the mfile will be paused. We want to exit the debugging mode when the Simulink finishes. We can exit the debugging mode by clicking on the respective button in the Editor tab or by writing dbcont in the command line. Of course, we want to automize it. If we put dbcont in callbacks of our Simulink model, we will get an error because the Simulink model is not in the debugging mode, but our mfile is. Here is where the robot comes in handy! We will let the robot write the code in the command line for us!
We put these lines in the assertation block parameters:
commandwindow; set_param(gcs, 'SimulationCommand', 'pause')
We put these lines in the PauseFcn callback of our model :
robot.keyPress (java.awt.event.KeyEvent.VK_D);
robot.keyRelease (java.awt.event.KeyEvent.VK_D);
robot.keyPress (java.awt.event.KeyEvent.VK_B);
robot.keyRelease (java.awt.event.KeyEvent.VK_B);
robot.keyPress (java.awt.event.KeyEvent.VK_C);
robot.keyRelease (java.awt.event.KeyEvent.VK_C);
robot.keyPress (java.awt.event.KeyEvent.VK_O);
robot.keyRelease (java.awt.event.KeyEvent.VK_O);
robot.keyPress (java.awt.event.KeyEvent.VK_N);
robot.keyRelease (java.awt.event.KeyEvent.VK_N);
robot.keyPress (java.awt.event.KeyEvent.VK_T);
robot.keyRelease (java.awt.event.KeyEvent.VK_T);
robot.keyPress (java.awt.event.KeyEvent.VK_ENTER);
robot.keyRelease (java.awt.event.KeyEvent.VK_ENTER);
when the assertation fails, commandwindow command will put the cursor in the command line. set_param(gcs, 'SimulationCommand', 'pause') command will pause our Simulink model and call the PauseFcn callback of the Simulink model, and the codes in the PauseFcn will run. The code block in the PauseFcn will call the java robot, which will write dbcont command in the command line and press enter for us!
!!!!!!!!!!!!!!!!!!!!! Important to note: This code depends on the keystrokes of your keyboard and the placement of the cursor! If let us say you press a key while the Simulink is paused and the robot is typing, it will interfere with the operation!!!!!!!!!!!!!!!!!!!!!!!!
Not satisfied with the answer ?? ASK NOW