MATLAB Command Line
Click to copy the following command line to the clipboard. Then paste it in the MATLAB Command Window:
quarc_intermediate_server_mixed_types_demo; quarc_intermediate_client_mixed_types_demoQUARC Intermediate Communications Mixed Types Demo
This example consists of two Simulink models; a server and a client. It demonstrates how to use the Intermediate Communications blockset from the QUARC Targets Library to establish a connection between two Simulink models and to pass mixed data types between the client and server using only a single Stream Read and Stream Write block. This example makes use of Simulink Bus objects. For a detailed description of these models and how they operate, please refer to the Intermediate Communications section of the QUARC documentation.
Configuring the Demonstration
To set up the demonstration, double-click on the Stream Answer block in the quarc_intermediate_server_mixed_types_demo.mdl model and on the Stream Call block in the quarc_intermediate_client_mixed_types_demo.mdl model and make sure the URI upon which to listen parameter of Stream Answer block is the same as the URI of host to which to connect parameter of the Stream Call block.
Demonstration
Building, deploying and starting the models
Refer to One Step Process in QUARC Basic Procedures to build, deploy and start each model.
Note that the order in which you start the models is not important. However, in practical situations, the server side should always be running before the client starts.
In the case of using UDP as the communication protocol, it's necessary to start the server prior to the client. The reason is UDP does not establish a connection between client and server, and server relies on the IP address of its received packages to communicate. When the client is started, it sends a data package to the server, and because of its blocking design, it waits for a reply from the server which has not been started yet. In the other hand, when the server is started, it waits for a package from the client to know the IP address of the client. Therefore, both parties wait for each other, and no data is communicated.
This problem can be solved when the client is running on Windows. The solution is to add
in front of the client URI. In this case, when server is unreachable an error signal is created internally, and the client tries to send the starting data package again. Therefore, when the server is started, it eventually receives a data package from the client making it leave its listening state, and start the communication.Running the model
Double-click on the "Plot Received Data" subsystem in the quarc_intermediate_server_mixed_types_demo.mdl model. Next, double-click on each of the three Scope blocks to open the associated plots.
The "Time" Scope will display the time sent by the client as a ramp. The "Signals" Scope will show three sine waves of amplitude 1, 2 and 3. Finally the "Pulse" Scope will depict a pulse train between 0 and 1 volts. The client model sends these values to the server.
The data types of the signals are shown so that it is clear that mixed data types are being sent and received. The time is sent as a double, the sine waves as single-precision floating-point and the pulse train as a boolean value.
Stopping the models
Refer to One Step Process in QUARC Basic Procedures to stop each model.
Miscellaneous
To see the BusObject
used to define the bus carrying the mixed data types, open the
Simulink Bus Editor by selecting button inside the
gallery on the MODELING tab.
The dialog shown below will appear.
The BusObject
in the Bus Editor is a variable in the MATLAB workspace. It is an instance of the
Simulink.Bus
class and was created using the Bus Editor. Refer to the Simulink help for
details on using the
MATLAB Command Line
Click to copy the following command line to the clipboard. Then paste it in the MATLAB Command Window:
qc_open_library('bus_editor')
To make sure that this BusObject
variable is always available when the Simulink diagram
needs it, even when the clear
command has been executed, the BusObject
was
saved in a MAT file using the save
command. It is stored in the quarc_intermediate_mixed_types_demo.mat
file in the same folder as the Simulink models. This MAT-file is then loaded every time the diagram is updated
or code is built by putting the load
command in the model's InitFcn
callback.
View the model's InitFcn
callback by selecting button inside the
gallery on the MODELING tab.
Then select the Callbacks
tab and click on the
InitFcn
callback. The Model Properties dialog is depicted below.
The expression which(bdroot)
returns the full path to the Simulink
model itself. The fileparts
command is then used to get the folder
in which the Simulink model resides from that path. Thus, the expression:
fullfile(fileparts(which(bdroot)), 'quarc_intermediate_mixed_types_demo.mat')
is the full path to the MAT-file containing the BusObject
variable. The
load
command is issued for this path to load this variable into the
MATLAB workspace. Since the InitFcn
callback is executed each time the
Simulink diagram is updated, the BusObject
variable will be loaded into
the MATLAB workspace every time the model is built or started (even in normal
simulation). The same command is placed in the PreLoadFcn
callback
so that the bus object is defined as soon as the model is loaded.
Of course, that means if you change the BusObject
you need
to save it to this MAT file before using the Simulink diagram again. Otherwise
the contents of the MAT file will be loaded and override your changes!
Running the example on a different target
To run the example on a different target, refer to the instructions on the Running QUARC Examples on Remote Targets page.
If the quarc_intermediate_server_mixed_types_demo.mdl and the quarc_intermediate_client_mixed_types_demo.mdl model are being run on different targets, then the URI of the Stream Call block in the client model should use the host name or IP address of the machine running the server for the hostname of its URI. For example, if the server is running on a machine with IP address 192.168.0.16 and the URI of the Stream Answer block in the server model is tcpip://localhost:18000, then the URI of the Stream Call block in the client model should be tcpip://192.168.0.16:18000.
Copyright ©2024 Quanser Inc. This page was generated 2024-10-17. Submit feedback to Quanser about this page.
Link to this page.