【发布时间】:2017-03-26 02:47:49
【问题描述】:
我是 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 中使用这个值。我将每 100 毫秒获取一次数据,或者您可以说我的采样频率为 10 赫兹。任何帮助将不胜感激。
我的主要目标是设计最适合我的应用的数字滤波器。
提前致谢。
【问题讨论】:
-
阅读这些链接,如果它在您的情况下不起作用,请告诉我们:)
-
Okies 根据您的链接,我制作了一个 ts 对象,并用我的值和日期向量填充它。然后我在simulink中导入了它。这么好。现在如何将这些数据连续发送到 simulink ?在 matlab 中,我的数据被填充到时间序列的 ts 对象中。关于循环模拟的任何想法,以便数据更改是实时的!!!
-
我修改后的代码 s = serial('COM4'); set(s,'BaudRate',115200,'DataBits',8,'StopBits',1,'Parity','None','Timeout',1);开放(S);请求 = uint8(hex2dec(['01';'03';'00';'00';'00';'02';'C4';'0B'])); ts = timeseries('mySeries'); datetime.setDefaultFormats('default','dd-MM-yyyy hh:mm:ss.SSS') while(1) fwrite(s, request); outdec = fread(s,9); y = typecast(uint8([outdec(7) outdec(6) outdec(5) outdec(4)]),'int32'); x = 日期时间; z = datevec(datetime('now')); ts =时间序列(y,z); disp([datestr(x) [' ',num2str(y)]]);结束