搜索
bottom↓
回复: 42

用MATLAB开发的上位机

[复制链接]

出0入0汤圆

发表于 2009-6-5 19:24:25 | 显示全部楼层 |阅读模式
没试过吧?呵呵!这是我很久之前写串口通信程序时编的,网上这些资料很少,我是看着MATLAB的帮助文档自己一点点写的,虽然最后放弃了matlab上位机程序的方案,但是还是整理了一下之前的一些收获,写下以下的说明。
编译环境:MATLAB 2009a
1 打开GUIDE工具,点击红圈中的GUIDE图标。
      
(原文件名:1.jpg)      
2 直接利用默认设置点OK即可   
         
(原文件名:2.jpg)      

3 在控件篮拖拽控件到如下图的形式

(原文件名:3.jpg)
   
4   进行控件设置,右击控件点“Property Inspector",如图

(原文件名:7.jpg)

一般仅设置Tag选项和String选项。其中String选项在按钮控件中就是GUI显示时的字符。Tag属性较为重要,在GUI编程时控件的索引主要利用Tag选项的属性并且在GUI生成回调函数时候也是由Tag属性的值命名的。这里将“打开串口”按钮控件的String设置为“打开串口”,tag设置为pb_OpenSerialPort。               
    具体控件的设置和关于GUI的编程还是看下帮助(截图部分)或找本这方面的书看一下。

(原文件名:4.jpg)
这里对我即将用的功能简述一下,MALTAB的GUI主要由两个文件,当设置好GUIDE时点击保存,这时将在当前路径自动产生两个名字相同的文件,但扩展标识符不同,一个为.fig文件,一个为.m文件,.fig主要是GUI图形文件,和GUIDE设计的图像相同,.m文件为程序文件,所有事件响应和计算功能都在这里实现。
     MATLAB的按钮以及各种控件事件响应是依靠一种叫做回调函数(Callback Function)来实现的(我理解为和Visual C++中的消息映射,C#中的异步委托事件响应一种原理),自动生成的M文件中已经自动做好回调函数的名称和参数了,我们需要做的就是在其中添加你要进行的处理。
     例如:我们要在鼠标单击按钮“打开串口”时进行一系列的串口初始化动作,这时右键单击“打开串口按钮”如图

(原文件名:5.jpg)

则MALAB会自动转向相应的M文件的回调函数的位置。如图

(原文件名:6.jpg)
这里,因为该按钮的Tag为"pb_OpenSerialPort",则GUIDE自动生成的回调函数名即为pb_OpenSerialPort_Callback,函数有三个参数,


hObject是当前控件对象,即打开串口按钮对象(面向对象技术中的概念),索引或设置当前对象(打开串口按钮对象)时只需要引用hObject就可以了。例如:改变当前控件的可见性,只需调用 set(hObject,'Visable','off');打开串口对象在单击该按钮时即会隐藏。
eventdata我暂时没有用到,所以暂且不管他
handles我理解是整个GUI界面的索引句柄,所有GUI界面上的控件都可以通过他来索引,几乎有全局作用域,例如在打开串口按钮的回调中要将关闭串口按钮显示出来,可以这样调用              set(handles.pb_CloseSerialPort,'Visable','on');就可以了!
这里handles还有一个作用就是在不同控件间进行参数传递,只要对handle的成员变量进行赋值就可以了。当然后面要调用一下guidata(hObject, handles);将变量保存。
例如打开串口按钮里面有个数据10需要关闭串口按钮调用可以这样写。
        %打开串口按钮回调函数中
        handles.double_vir=10;
        guidata(hObject, handles);
        %关闭串口按钮回调函数中
        a=handles.double_vir;
5 进行串口设置,参看如下图中的MATLAB帮助

(原文件名:8.jpg)
串口初始化(主要在打开串口按钮的回调函数中),包括COM端口,BaudRate,DataBits,StopBits
Bytes available事件设置,主要触发串口响应Bytes available事件的条件。
BytesAvailableFcn Specify the M-file callback function to execute when a specified number of bytes is available in the input buffer, or a terminator is read,即指定当一个确定数量的字节数据(由BytesAvailableFcnCount属性设置)存在输入缓冲区时或一个结束符被读到时执行的m文件的回调函数。
BytesAvailableFcnCount    Specify the number of bytes that must be available in the input buffer to generate a bytes-available event.指定产生bytes-available事件串口输入缓冲区必须存在的字节数。
BytesAvailableFcnMode    Specify if the bytes-available event is generated after a specified number of bytes is available in the input buffer, or after a terminator is read。指定是由串口输入缓冲区指定数量的字节数产生bytes-available事件还是由读到结束符产生bytes-available事件。(本文选择byte)
串口初始化代码: 复制内容到剪贴板
代码:
%%%COM端口初始化
o_SerialPort=serial(string_Select_COM);
set(o_SerialPort,'BaudRate',double_Baud);%%%Baud初始化
set(o_SerialPort,'DataBits',double_DataBit);%%%设置数据长度
set(o_SerialPort,'StopBits',double_StopBits);%%%设置停止位长度
set(o_SerialPort,'InputBufferSize',1024000);%%%设置输入缓冲区大小为1M
%%%串口事件回调设置
o_SerialPort.BytesAvailableFcnMode='byte';
o_SerialPort.BytesAvailableFcnCount=10; %输入缓冲区存在10个字节触发回调函数
o_SerialPort.BytesAvailableFcn={@EveBytesAvailableFcn,handles};%回调函数的指定
fopen(o_SerialPort);%打开串口
%这时在M文件中添加回调函数
function EveBytesAvailableFcn( t,event,handles )
fread(o_SerialPort,10)% 在串口输入缓冲区中读取十个字节
%其他数据处理及文字显示
end6  最终实现界面及测试响应
   我用两台计算机,将串口_交叉相连,一台收一台发,最终得出下面测试结果,用一台机器的话将串口的2、3脚短接就可以了!


(原文件名:9.jpg)


(原文件名:10.jpg)
   
其他的上我的博客上看吧!实在懒得再编辑了!
http://blog.sina.com.cn/s/blog_4b94ff130100e7wt.html

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-6-5 20:31:09 | 显示全部楼层
matlab也能做上位机?赞!

出0入0汤圆

发表于 2009-6-5 21:20:36 | 显示全部楼层
赞一个~楼主牛人

出0入0汤圆

发表于 2009-6-20 16:34:19 | 显示全部楼层
厉害。matlab我也学过,只是皮毛。。高手哇

出0入0汤圆

发表于 2009-6-20 16:36:59 | 显示全部楼层
好久没用matlab了。顶楼主

出0入0汤圆

发表于 2009-6-20 17:34:53 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2010-1-7 18:22:11 | 显示全部楼层
谢谢了。
参考使用。

出0入0汤圆

发表于 2010-3-17 22:30:36 | 显示全部楼层
delephi怎么调用VB谢谢程序
对VB的文本框  text   combo   command
进行调用,谢谢各位啊

出0入0汤圆

发表于 2010-3-17 23:45:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-18 00:00:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-1 09:56:56 | 显示全部楼层
记号,以后会用上

出0入0汤圆

发表于 2010-7-12 09:19:31 | 显示全部楼层

出0入0汤圆

发表于 2010-7-12 16:30:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-13 13:47:22 | 显示全部楼层

出0入0汤圆

发表于 2010-7-13 15:23:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-8 21:02:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-27 19:01:05 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-17 20:54:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-18 10:11:05 | 显示全部楼层
拜读。

出0入0汤圆

发表于 2010-9-29 18:17:13 | 显示全部楼层
这个以前我也研究过!使用MATLAB自带的串口模块,功能上有很大的局限性。具体是什么我也忘了,因为公司禁止了usb而没办法COPY我的程序。所以MATLAB川口通讯实际上使用较多的是activex。这样编程感觉回到了VB。

出0入0汤圆

发表于 2011-11-5 13:56:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-17 16:42:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-17 17:38:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-17 19:26:56 | 显示全部楼层
我也试过用Matlab调试串口,但是不知道如何枚举串口号。只能通过软件猜测本机有那些串口号。感觉很局限,不好用。

出0入0汤圆

发表于 2011-11-17 19:31:06 | 显示全部楼层
请问楼主:
串口初始化中
o_SerialPort=serial(string_Select_COM);
“string_Select_COM”从哪里来的?
是通过Text控件手动输入的吗?

出0入0汤圆

发表于 2011-11-26 10:09:18 | 显示全部楼层
顶一下,对matlab也想一试。

出0入0汤圆

发表于 2011-12-19 18:54:10 | 显示全部楼层
matlab

出0入0汤圆

发表于 2011-12-19 21:12:10 | 显示全部楼层
高手 学习

出0入0汤圆

发表于 2011-12-19 22:29:42 | 显示全部楼层
新鲜

出0入0汤圆

发表于 2011-12-20 11:37:13 | 显示全部楼层
牛人,顶一个。

出0入0汤圆

发表于 2011-12-20 17:43:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-1 11:10:56 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2012-3-1 12:09:19 | 显示全部楼层
学习matlab一定要详细读它的帮助手册!我以前学了好长时间的matlab,感觉这个软件是在是非常的强大!

出0入24汤圆

发表于 2012-3-1 12:45:19 | 显示全部楼层
Mark!

出0入0汤圆

发表于 2012-3-6 20:33:59 | 显示全部楼层
最近正用上位机 可是不会编呀 学习了

出0入0汤圆

发表于 2012-3-7 08:36:33 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-3-7 09:01:27 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2012-8-7 23:01:14 | 显示全部楼层
一个牛字了得

出0入0汤圆

发表于 2012-8-7 23:04:32 | 显示全部楼层
matlab也能做上位机,第一次知道,学习了~~

出0入0汤圆

发表于 2012-8-7 23:39:51 | 显示全部楼层
赞一个~~~~

出0入0汤圆

发表于 2012-12-6 21:51:33 | 显示全部楼层
强大啊,学习了

出0入0汤圆

发表于 2013-5-19 10:18:20 | 显示全部楼层
多谢楼主分享、、、、

出0入0汤圆

发表于 2013-9-13 00:05:47 | 显示全部楼层
都是强人啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表