Matlab 将工作区值导入Simulink

Matlab 将工作区值导入Simulink,matlab,simulink,Matlab,Simulink,我对matlab是新手。在在线搜索的帮助下,我编写了MODBUS RTU代码,以从我的设备获取数据。我想将这些数据导入simulink,以便进行进一步的DSP分析。下面是我从串口获取MODBUS RTU数据的matlab代码 instrreset; clear all; close all; clc; s = serial('COM4'); set(s,'BaudRate',115200, 'DataBits',8, 'StopBits',1,

我对matlab是新手。在在线搜索的帮助下,我编写了MODBUS RTU代码,以从我的设备获取数据。我想将这些数据导入simulink,以便进行进一步的DSP分析。下面是我从串口获取MODBUS RTU数据的matlab代码

instrreset;
clear all; 
close all; 
clc; 

s = serial('COM4');    
set(s,'BaudRate',115200,
      'DataBits',8,
      'StopBits',1,
      'Parity','None','Timeout',1);
fopen(s);

request = uint8(hex2dec(['01'; '03'; '00'; '00'; '00'; '02'; 'C4'; '0B']));
ts = timeseries('mySeries'); % Updated
while(1)
    fwrite(s, request);    
    outdec = fread(s,9);
    y = typecast(uint8([outdec(7) outdec(6) outdec(5) outdec(4)]),'int32');
    z = datevec(datetime('now')); % Updated
    ts = timeseries(y, z); % Updated
    disp(y);
end

fclose(s);
delete(s);
clear s
disp('STOP')
在while循环中,我连续获取变量y中的modbus值。现在我想要simulink中的这个值。我的数据采集是每100ms一次,或者你可以说我的采样频率是10hz。。任何帮助都将不胜感激

我的主要目标是设计最适合我的应用的数字滤波器


提前感谢。

您真的应该将其作为m代码S函数编写,在block MDL初始化函数期间执行(一次性)设置代码;block mdlTerminate函数中的(一次性)终止代码;以及mdlUpdate函数中循环的内容。Simulink将在模型的每个时间步查询/读取COM端口

但是,如果希望由MATLAB代码驱动,则需要强制Simulink模型更新
while
循环中的
From Workspace
块。假设块中变量的名称为
ts
,则执行以下操作即可:

set_param(NameOfFromWorkspaceBlockAsString,'VariableName','ts');
这将迫使模型每次查找变量
ts
,并从该变量(您刚刚更新的)中获取值

然而,我怀疑使用
fromworkspace
块是否正确。该块使用变量中的时间来确定何时应在模型中使用该值。由于
现在
大约为736779.5,因此在使用数据之前,您的模型必须运行一段时间

我怀疑您真的只想使用
常量
块,并将常量的值更改为
y
的新值(不包括时间戳)。
尽管根据我的第一条评论,正确的方法是使用S函数。

阅读这些链接,如果在您的情况下不起作用,请告诉我们:)好的,根据您的链接,我制作了一个ts对象,我正在用我的值和日期向量填充它。然后我在simulink中导入了它。就这么好。现在,如何将数据连续发送到simulink?在matlab中,我的数据填充在ts对象中,即timeseries。任何关于循环模拟的想法,以便数据更改是实时的!!!我的修改代码s=串行('COM4');设置(s,'BaudRate',115200,'DataBits',8,'StopBits',1,'Parity','None','Timeout',1);福彭(s);request=uint8(hex2dec(['01';'03';'00';'00';'00';'02';'C4';'0B']);ts=时间序列(“mySeries”);datetime.setDefaultFormats('default','dd-MM-yyyy hh:MM:ss.SSS'),而(1)fwrite(s,请求);outdec=fread(s,9);y=类型转换(uint8([outdec(7)outdec(6)outdec(5)outdec(4)]),'int32');x=日期时间;z=datevec(datetime('now'));ts=时间序列(y,z);disp([datestr(x)['',num2str(y)]);Simulink附带了很多演示。在命令行中键入
sfundemos
;打开m代码S功能演示;查看模板和各种示例。