[已答复] matlab串口通讯数据采集的问题

[复制链接]
xiaohedongliu 发表于 2009-5-25 18:20:49
现在打算做一个界面,用来做下位机数据采集的现实。就是将数据采集过来显示在GUI的文本框中,如何实现?
通过查找资料,发现有两种方式,查询方式和中断方式,查询方式不是很好用,占用很大内存,现在用中断方式。具体程序如下:
GUI上按钮程序:
global sout;
global s;%声明串口属性为全局变量
s.bytesavailablefcnmode='byte';%声明中断方式为字节型
s.bytesavailablecount=23;%缓冲区字节数为23则产生中断
[email=s.bytesavailablefcn=@instrcallback;%]s.bytesavailablefcn=@instrcallback;%[/email]中断调用instrcallback函数
其中instrcallback函数在matlab/toolbox/matlab/iofun/strumenty/instrcallback将中断调用函数修改为:
global s;%声明串口属性为全局变量
global sout;
sout=fread(s,23);%读缓冲区中23位数据
现在如何把读取的数据动态的显示到文本框中呢?
在按钮后面加上:
set(handles.edit1,'string',mat2str(sout));是无法显示的
通过实验证明回调函数中是读取到数据了,但是在GUI现实编程的的时候总是不存在,为什么呢?有没有高手详细解答

[ 本帖最后由 mooni 于 2009-5-25 19:20 编辑 ]

17 条回复


阿加特V 发表于 2009-5-25 20:25:27
做的同样的东西,中断我还不懂,但数据的动态显示吗,我用昨天刚在论坛问过,在大量查找下基本解决了初步的问题,你看看那个   
[讨论结束] Matlab中用串口接收数据,如何在text中实时更新哪? New  

顺便说下,你用的中断对我很有帮助,谢谢了

xiaohedongliu 发表于 2009-5-26 08:55:11
谢谢了,我再去尝试一下,你的方式是查询方式,就是一直工作不停,中断方式是设置缓冲区字节数,当达到这个字节数就产生中断,进入中断函数,在中断函数实现对缓冲区数据的读取,但是这个时侯如何传递给GUI的text显示就出现问题,这个时侯是两个文件的传递问题,我再去试试。

a浪迹天涯 发表于 2009-5-26 09:42:08
串口程序的实现在MATLAB中难度很大,建议楼主不要去尝试了。其中涉及到混合编程,数据交互的同步等问题。还有就是可参考的资料不多。
如果楼主想挑战一下那是可以的,MATLAB可以实现。

xiaohedongliu 发表于 2009-5-26 09:46:20
那应该怎么去做呢?现在时回调函数可以读取串口中的数据,就是怎么把回调函数中的数据在GUI中动态的显示出来就出现问题了。不知道怎么去做才好,要不用其他方式也好,刚才看了一种定时器中断方式,可好似定时器还没有用过呢!谢谢朋友的回复!

yuejun666 发表于 2009-7-10 22:48:26

学习了

学习了,好贴

888888 发表于 2009-7-11 10:14:33
能不能把你的程序分享下啊,我也要做一个测试系统,有很多问题啊,想向你学习
ych@cqu.edu.cn

sunnywhu 发表于 2009-7-11 16:53:34
不知道 USB 是否也可以用这样的方式实现。。

qweok 发表于 2009-7-11 18:37:12
谢谢了,我再去尝试一下

qweok 发表于 2009-7-11 18:38:23
谢谢了,我再去尝试一下

lsajohn 发表于 2009-9-9 10:40:33

学习

正在学习中,我的问题也是显示不了。
  fread是以二进制方式读取串口数据吧?但是显示是字符串形式,是不是需要转换呢?
  bytesavailablefcn=@instrcallback,instrcallback是系统默认的回调函数,如果将它改为自己的函数,可以吗?需要做什么修改呢?

mingyuexin1984 发表于 2009-9-9 11:15:22
这样尝试一下:
a=fread(scom,n,'uchar');
b=char(a' );
set(handles.edit,'string',b);

fengqiang306 发表于 2009-9-10 11:51:32
在按钮后面加上:
set(handles.edit1,'string',mat2str(sout));是无法显示的
这句应该放在回调函数里面,同时在按钮程序里加上:
global hedit1;
hedit1 = findobj('tag','edit1');
回调函数里这样:
global hedit1;
set(hedit1,'string',mat2str(sout));

zqflcxm 发表于 2009-9-14 18:48:49
感谢您的分享,我现在正想从与串口相连的传感器上采集数据,可是怎么也不能实现,能把您的程序让我分享吗?zqflcxm@sohu.com       感激不尽!!!!

lsajohn 发表于 2009-9-22 11:09:57

~~

这种中断方式好像一定要串口接收到了你定义的字节数才会调用中断的。你可以定义一个终止符来调用中断。

ssswyh 发表于 2010-2-1 16:30:27
用str2num函数可以不?实现char 到数值的转换

小小小帅哥 发表于 2015-4-13 16:24:55
我现在也在做一个界面,用来做下位机数据采集的现实,希望能得到你的帮助,

zhangjuan14 发表于 2021-6-10 14:36:20
您这边现在实现动态显示数据了?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表