基于Matlab GUI的PC机与智能车的无线通信
tlab,可能会导致数据丢失等一些不必要的麻烦。将事件驱动函数写入GUI组件的M文件中,可以减少绾程的复杂性,避免一些不必要的麻烦,实现串口之间的实时通信。
4.2 设备控制工具箱介绍
Matlab设备控制工具箱主要是提供Matlab软件与各种智能仪器的直接通信功能。工具箱提供了以下功能:
①支持串行接口(RS-232/RS-422/RS-485)、GPIB接口(IEEE 488)等通信协议。
②支持IVI、VXI plugplay和Matlab设备驱动(instrument drivers),不需要学会写与设备相关的指令即能与仪器直接联通。
③传输的数据可以是文本或二进制的(数字的)。
④支持同步和异步(有阻塞或无阻塞)通信。
⑤支持基于事件的通信。
⑥新的TMTOOL图形用户接口不仅能够连接仪器、接收/发送数据,而且可以自动生成M代码文件,以加入编写的Matlab程序中。
5 基于Matlab GUI查询方式实现异步串行通信
基于Matlab查询方式的非实时串口通信虽然编程简单,对数据的调用处理也更为容易,但是只能接收一个过程的数据,这在对实时性要求较高的系统中往往不能满足设计者的需求。以下为部分通信程序代码。
6 基于Matlab中断方式实现实时串行通信
事件驱动方式的优点是程序响应及时,可靠性高。在Matlab环境下实现实时通信的中断方式,实际上就是采用事件驱动的方式实现的,类似于VB语言MSComm控件中OnComm事件的实现方法。当串口上监视到缓冲区有指定字节数目的数据可用(bytes-available event),串口接收到的数据长时间处于非激活状态(break-interrupt event),串行口引脚状态改变(pin-status event)或输出缓冲区为空(output empty eve nt)等事件发生时,Matlab会自动调用回调函数进行通信事件的处理。因此,事件驱动实质上是一种中断机制,而回调函数实质上相当于一个中断服务子程序。Matlab端实时串行通信的程序流程如图4所示。以下为两种不同的方式实现实时通信的中断机制程序。
6.1 将中断服务子程序写入GUI组件的部分M文件代码
主程序创建串口设备对象、设置串口设备属性及打开串口等初始化操作的代码与查询方式下的初始化代码相同:
6.2 通过调用修改后的instroallback.m文件实现中断
主程序:
修改instreallback(obj,evenlt)回调函数,instrcallback.m文件包含了Matlab提供的回调函数程序模板,设计者可以根据需要自行添加相应的服务程序代码。Matlab安装目录下有两个instrcallback.m文件,只需要修改\MATLAB\toolbox\matlab\iofun\@instrument目录下的instrcallback.m文件即可。另外,在修改instrcallback.m文件之前,最好对其做一个备份。在修改了instrcallback(obj,event)回调函数后,需要对其进行保存,重新启动Matlab配置该文件,才使修改后的函数生效。
图5为以下方式实现的智能车启动过程速度的实时显示,修改后的instrcallback.m文件主要程序代码如下:
实验证明,基于Matlab事件驱动实现的智能车与上位机的实时串口通信可以很好地满足智能车调试过程中的需要,且将中断服务子程序写入GUI组件和修改instrcallback.m文件两种方式的通信都稳定可靠。
结语
在Matlab环境下两种实现智能车与PC机实时通信的中断机制都能实时稳定地进行数据传输,不过将中断服务子程序写入GUI组件的方式编程简单,数据处理方便,实现更为容易,开发效率相对得到了较大的提高。实践证明,采用这种方法是可行的,它不但能够应用于本文的智能车系统,也可广泛应用在其他具有串口通信能力的仪器设备中。
- 基于Matlab的无失真模拟滤波器设计(04-19)
- 基于Matlab的IIR数字滤波器设计方法比较及应用(07-15)
- 基于Matlab的雷达系统仿真软件包设计与实现(09-16)
- 基于Matlab的FIR数字滤波器设计(10-07)
- 基于Matlab的孤立逆变电源设计方案(09-17)
- 13款逆变电源的设计技术及具体应用案例(07-07)