Simulation with Device Driver Blocks
External Mode
External mode enables Simulink® on your host computer to communicate with the deployed model on your hardware board during runtime. It also provides an easy way to visualize the outputs of sources and show the effects of sink blocks in real-time.
External mode creates a communication service on the host computer and hardware board. The two services establish a communication channel between the Simulink engine and generated code deployed on the hardware board. The communication service isolates the model process on the hardware board from the code and from the transport layer that formats, transmits, and receives the data packets. The communication service on the host computer receives the data packets through the transport layer and updates the Simulink model display. The diagram shows the connection that the external mode communication service creates between Simulink on the host computer and the deployed code on the hardware board.
By executing simple models containing your device driver blocks in external mode, you can directly observe the data from the hardware board.
For more detailed information on external mode simulation, see External Mode Simulations for Parameter Tuning, Signal Monitoring, and Code Execution Profiling (Simulink Coder).
Normal Mode
In normal mode, the Simulink model operates entirely in simulation, and the C/C++ device driver
code in the MATLAB System block never executes. However, Simulink models typically require source blocks to produce either artificially
generated or previously recorded data during simulation. The use of simulated data
allows for improved algorithm development, testing, and debugging prior to deploying
the model to the hardware board. Device driver sink blocks do not require any
modification to operate in a normal mode simulation and assume the behavior of a
Terminator block. In contrast, the device driver source blocks
require modification of the stepImpl
method to emit data either
generated during runtime or retrieved from the base MATLAB® workspace when the model is in simulation.
Data Generation at Runtime
The following code shows an example of how to modify the
stepImpl
method so that the device driver block returns a
randomly generated logical value at each simulation time step.
methods(Access=protected) ... function stepImpl(obj,u) %#ok<INUSD> if isempty(coder.target) % Generate random data during simulation y = rand > 0.5; else % Call C-function implementing device output coder.ceval('writeDigitalPin', 9, u); end end ... end
The stepImpl
method is modified to execute code when
coder.target
returns empty. The empty value indicates that
the model is not deployed to hardware.
Data Retrieval from MATLAB Workspace
In many cases, device driver source blocks that emit randomly generated data is insufficient to accurately evaluate models in simulation. They require data that was either previously captured or generated.
To achieve this behavior, the stepImpl
method can be modified
to retrieve a data variable from the MATLAB workspace as follows:
properties (Access = private) Count = 1 end
methods(Access=protected) ... function stepImpl(obj,u) %#ok<INUSD> if isempty(coder.target) % Generate random data during simulation x = evalin('base','x'); y = x(obj.Count); obj.Count = obj.Count + 1; if obj.Count > numel(x) obj.Count = 1; end else % Call C-function implementing device output coder.ceval('writeDigitalPin', 9, u); end end ... end
Connected I/O
Normal mode simulation with Communicate with Hardware Using Connected IO bridges the gap between simulation and code generation by enabling Simulink to communicate with the hardware before deploying the model on the hardware. Connected I/O enables you to modify your model design and monitor the effect of the modified design using the peripheral data from the hardware in a near real-time environment. You are not required to deploy the model on the hardware to monitor the effect of the modified design, which accelerates the simulation process. This Simulink (software)-Arduino® (hardware) interaction is available in normal mode simulation only when you enable Connected I/O.
By executing simple models containing your device driver blocks in Connected I/O, you can directly observe the data from the hardware board. The device driver blocks require modifications to accept and output data when the model is in simulation.
For more detailed information on how to execute models containing device driver blocks in Connected I/O, see Measure Servo Motor Shaft Angle Using a Device Driver Block in Connected I/O.
Other Simulation Modes
Other simulation modes available, such as accelerator mode and rapid accelerator mode, compile and execute the C/C++ code included in the device driver block. In these simulation modes, the C/C++ headers must be modified to include empty macros.
See Also
Create a Digital Write Block | Create a Digital Read Block | Sharing Device Driver Blocks with Other Users