Simulink Real-Time 2020b. How do I monitor/log a signal in my application using App Designer?

4 views (last 30 days)
Matteo Pellegri
Matteo Pellegri on 4 Oct 2021
Commented: Matteo Pellegri on 4 Oct 2021
Hi,
I am trying to monitor a signal in my real-time application on Speedgoat using App Designer. I am trying to recreate a similar function to the one included in slrtExplorer but so far I have been unsuccessful. I am not able to use the suggested fucntions such as ConnectScalar, getCallbackDataForSignal and so on.
Does anyone know how to do it? Is there an example that is not the invertedPendulum that I can use as a reference?.
Thanks for the help!

Answers (1)

Diego Kuratli
Diego Kuratli on 4 Oct 2021
In R2021b, the code required for binding signals and parameters have been reduced. There is a simple example in the documentation:
If possible, I would recommend to move to R2021b.
For R2020b, this video might help:
  1 Comment
Matteo Pellegri
Matteo Pellegri on 4 Oct 2021
Hi Diego, thanks for the reply.
I am aware of the improvement of 2021b but for now I am not able to move to 2021b.
I watched that video already and the problem is that connectScalar/connectLine are usfeul if you are monitoring a small amount of variables and it seems that I am not able to use the data I am logging with those functions. Furthermore adding programmatically the components and linking them seems way too complex for what I am trying to achieve.
The current workaround I implementes is the following
function setupInstrumentation(app)
% create instrumentation object
hInst = slrealtime.Instrument(mldatx);
%% Add signals and connections
hInst.addSignal({'block/signalName'}, 1);
%add callback
app.hInst.connectCallback(@app.updateCallback);
end
function updateCallback(app,instObj,eventData)
curr_time = eventData.AcquireGroupData.Time;
if ~isempty(curr_time)
aGData = eventData.AcquireGroupData.Data;
[~,cv_data] = instObj.getCallbackDataForSignal(eventData,'block/signalName',1);
app.edit.Value = double(cv_data(end)); %edit field (numeric) is not happy with anything but double
else
%do nothing
end
end
% Button pushed function: LogMessagesButton
function StartLogMessage(app, event)
selectedTargetName = app.getSelectedTargetName();
tg = slrealtime(selectedTargetName);
tg.removeAllInstruments;
app.setupInstrumentation;
% Clear previous data
app.hInst.clearScalarAndLineData;
% Validate and add instrumentation to target
tg.addInstrument(app.hInst);
end
It seems to work. Do you see anything wrong with this?
Thanks again!

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!