Simulink implementation of Matlab Code
조회 수: 1 (최근 30일)
이전 댓글 표시
I am trying to implement the following frame generation code in simulink. In summary the code does the following:
- Reads excel spreadsheet (which contains two columns, 1)time stap, 2)flight number)
- Starts a cycle, using the while statement, this is to mimic the passage of time
- Converts the two inputs into binary, concatenates them together and adds them to a frame (array)
- Every 10 cycles a new frame is created into which more inputs are add
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%555
clc;
%Initialisation of variables
x_count=1;
y_count=1;
frame=[];
t=readtable('Depart.csv');
A=table2array(t);
cycle_count=1;
start=610;
index=int64(A(x_count,1));
frame_index=1;
filename='Write_To.csv';
%this is the time cycle which runs from 6am to 11:30pm and increases by one
%minute every cycle. Starting at 601 to allign with cycle_count (which
%starts at 1 as well)
for time=601:2330
time;
cycle_count;
%The reason for using a while loop here is because multiple
%flights occure at the stame time.
while index<=time
%Table extraction (bit containting: time and flight no.)
x=de2bi(int64(A(x_count,1)), 24);
y=int64(A(x_count,2));
y_shift=bitshift(y,12);
d=de2bi(y_shift, 24);
final=x+d;
%adds the binary values of the x and y data to the frame
%sequencially
for i=1:length(final)
%adds single bit to the frame
frame(frame_index)=final(i);
frame_index=frame_index+1;
end
%Update variables
x_count=x_count+1;
index=int64(A(x_count,1));
end
%If the count has reached 10 we are going to reset the frame to
%be empty
if cycle_count==10
time
disp('Printing frame at end of cycle');
frame
disp('Resetting cycle count');
frame=[];
frame_index=1;
end
if cycle_count==10
cycle_count=1;
else
cycle_count=cycle_count+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The trouble that I am having with this is that I cannot simply copy and paste this code into a matlab function block in simulink.
The main problem at the moment is how to store multiple values in a frame in simulink, not just the latest input. Would implementing this using a Matlab System block in simulink work? If so how would I write it?
Hopefully this makes sense.
Thanks
댓글 수: 0
답변 (1개)
Samatha Aleti
2020년 1월 30일
According to my understanding you want to store the output value “final” at each time step in an array instead of just saving the recent value, inside a MATLAB block function. One of the ways to do this is to define “frame” as “persistent” in the MATLAB block function as follows:
function [count] = fcn(in, count)
count = count + 1;
persistent frame
if isempty(frame)
frame = in;
else
frame = [frame, in];
end
% reset
if count == 10
count = 1;
frame = [];
end
end
Hope this helps!
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Simulink Functions에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!