串口接收数据超过timeout,想通过catch语句重设timeout时间,再次监听串口数据为什么不可以
时间: 2023-12-08 14:06:01 浏览: 26
在catch语句中重设Timeout时间后,再次调用读取串口数据的函数是可以的。但是需要注意的是,在catch块中重设Timeout的值并不能影响已经创建的串口对象的Timeout属性,因为catch块中创建的是一个新的局部变量,而不是原来的串口对象。因此,你需要在catch块中关闭并删除原来的串口对象,然后重新创建一个新的串口对象,并设置新的Timeout值,最后再打开串口来实现重新监听串口数据。下面是一个示例代码,它演示了如何在catch块中重新设置Timeout值并重新监听串口数据:
```
port = 'COM1'; % 串口号
s = serial(port); % 创建串口对象
s.Timeout = 5; % 设置串口对象的Timeout属性为5秒
try
fopen(s); % 打开串口
data = fread(s, 100); % 读取100个字节的数据
catch ME
if strcmp(ME.identifier, 'MATLAB:serial:fread:unsuccessfulRead')
% 如果捕获到超时错误,就重新设置Timeout值并重新监听串口数据
fprintf('没有在Timeout时间内接收到数据\n');
fclose(s); % 关闭串口
delete(s); % 删除串口对象
s = serial(port); % 创建新的串口对象
s.Timeout = 10; % 设置新的Timeout值为10秒
fopen(s); % 打开串口
data = fread(s, 100); % 重新读取100个字节的数据
else
% 如果捕获到其他错误,就抛出异常
rethrow(ME);
end
end
fclose(s); % 关闭串口
delete(s); % 删除串口对象
```
在上面的示例代码中,我们首先创建了一个串口对象s,并设置其Timeout属性为5秒。然后在try块中打开串口并读取100个字节的数据,如果捕获到超时错误,就在catch块中重新设置Timeout值为10秒,并重新创建一个新的串口对象s,并打开串口重新读取数据。最后在finally块中关闭和删除串口对象。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)