总第206期2011年第8期舰船电子工程Ship Electr onic EngineeringV o l.31No.8187基于LabVIEW和单片机的串行无线遥控系统设计*高顺凯1)杨国志2)(海装武汉局1)武汉430064)(海军工程大学2)武汉430033)摘要文章基于L abV IEW与单片机的串口通讯,进而通过单片机实时控制无线电发射系统,设计了无线遥控系统。
介绍了虚拟仪器技术在串口通讯中的应用,提出了具体方案并给出了串口硬件连接图和发射系统原理图,最后使用G语言LabV IEW和C语言分别开发了相应的上位机和下位机程序进行实验。
实验结果表明,该系统具有良好的人机界面,而且便于进行维护和功能扩充,具有很强的实用性。
关键词无线遥控;L abVI EW;单片机中图分类号T P274Wire less Rem o te Contr ol System Design B ase d on Lab VI E W an d SCMG a o Shunkai1)Y ang G uozhi2)(Wuhan M ilitary Representative Bur eau of Nav y Equipment Depar tment1),W uhan430064)(N aval U niversity o f Eng ineer ing2),W uhan430033)A bstract A wireless remo te contro l system w as desig ned based o n the ser ial communicat ion of L abV IEW and Supply Chain M anagement(SCM),then t hr ough SCM contro l radio tr ansmitt er sy st em rea-l time.V ir tual inst rument technolog y ap-plication in serial communication w as intro duced,the specific pro gr am w as put forw ard and the diag ram of ser ial hardw are co nnectio n and launch system schematics w as g iv en,and finally using the G language L abVI EW and C lang uage dev elo p the co rr esponding upper and lo wer machine to make ex periment.T he results show that the sy stem has a go od inter face,and ease of maintenance and function expansion,w ith stro ng practical.Key Words w ir eless r emote contr ol,L abV IEW,SCMClass Nu mber T P2741引言虚拟仪器软件LabVIEW是美国NI公司(N a-tional Instruments Co.Ld.)研制的一种叫G语言的图形化程序设计语言[1]。
它基于高效率图形化应用开发环境,将简单易用的图形化开发方式和灵活强大的编程语言优势结合起来。
LabVIEW的程序称为VI,它包括三个部分:程序前面板、框图程序和图标/连接器[2]。
程序前面板用于设置输入数值和观察输出量,用于模拟真实仪表的前面板。
每一个程序前面板都对应着一段框图程序。
框图程序用LabVIEW 图形编程语言编写,可以把它理解成传统程序的源代码。
框图程序由端口、节点、图框和连线构成。
其中端口被用来同程序前面板的控制和显示传递数据,节点被用来实现函数和功能调用,图框被用来实现结构化程序控制命令,而连线代表程序执行过程中的数据流,定义了框图内的数据流动方向。
图标/连接器是子V I被其它VI调用的接口。
图标是子VI在其他程序框图中被调用的节点表现形式;而连接器则表示节点数据的输入/输出口,就像函数的参数。
用户必须指定连接器端口与前面板的控制和显示相互对应。
LabVIEW的VI是层次化和模块化的,可以作为其他程序的子程序,被其*收稿日期:2011年2月21日,修回日期:2011年3月23日作者简介:高顺凯,男,工程师,研究方向:舰船总体设计研究。
188高顺凯等:基于LabV IEW和单片机的串行无线遥控系统设计总第206期他程序调用。
当一个VI被其他程序调用时,称之为是Sub VI,在开放大型项目时可以把任务分成很多个子VI,每个子VI的任务还可以分的更低。
最后通过设计,完成每个子VI的功能,最后将之逐步的组合成能完成实际任务的程序。
串行通信是通过计算机的串口(即通用COM 口),这是常用的一种通信方式。
介于现在笔记本电脑没有串口,所以本设计使用了U SB转串口的转换器。
串行通信有不同的通信协议,常用的是RS232协议,此协议定义了串口的电气特性,机械特性以及功能特性等[3]。
本文用STC89S51RC+单片机与电脑进行串口的通信。
2LabV IEW的串口通信设计编程2.1VISA简介LabVIEW提供了功能强大的VISA库。
V I-SA(Virtual Instrument Softw are Architectur e))虚拟仪器软件规范,是用于仪器编程的标准I/O函数库及其相关规范的总称。
VISA库驻留于计算机系统中,完成计算机与仪器之间的连接,用以实现对仪器的程序控制,其实质是用于虚拟仪器系统的标准的API。
VISA本身不具备编程能力,它是一个高层API,通过调用底层驱动程序来实现对仪器的编程,与其他现存的I/O接口软件相比,VISA 的I/O控制功能具有如下几个特点[4]:适用于各种仪器类型(如V XI仪器、GPIB仪器、RS-232串行仪器、消息基器件、寄存器器件、存储器器件等仪器);适用于各种硬件接口类型;适用于单、多处理器结构或分布式网络结构;适用于多种网络机制。
VISA的I/O软件库的源程序是唯一的,其与操作系统及编程语言无关,只是提供了标准形式的API 文件作为系统的输出。
2.2串口通讯函数本文用到的主要的串口通讯函数调用路径为: Functions>Instr um ent I/O>VISA>VISA Ad-v anced>Serial中。
主要函数节点如下:1)VISA Configure Serial Port节点该节点主要用于串口的初始化。
主要参数意义如下:VISA resource name:VISA资源名称,本文指串口号。
baud rate:波特率,默认为9600。
data bits:一帧信息中的位数,LabVIEW中允许5~8位数据,默认值为8位。
sto p bits:一帧信息中的停止位的位数,可为1位、1位半或2位。
Par ity:奇偶校验设置。
可为无校验、奇校验或偶校验。
flow control:该参数数据类型为簇,用于串行通讯中的握手方式。
2)VISA Read节点该节点为串口读子VI,为本文中的主要节点,将串口中的数据读出,然后利用LabVIEW的强大数据处理功能对其进行分析处理。
参数by te count用于设置所要读的字符数。
由于LabVIEW的串行通讯子VI只允许对字符串的读写,因此本文中在进行数据处理时,必须要实现字符串与数字之间的正确转换。
此外,若要读入当前串口中的所有字符,则要执行/VISA Bytes at Serial Por t0子VI,用以确定将要读入的确切的字节数,然后将其输出作为VISA Read节点的输入即可。
3)VISA Wr ite节点该节点为串口写子VI,用于向指定串口发送数据,是遥控系统控制信号输出的主要途径。
然后利用LabVIEW的强大数据处理功能对其进行分析处理。
参数w rite buffer用于将写入缓冲区的数据写入VISA reso urce name指定的设备或接口中。
与串口读取时相同,需要将发送数据编码并转化为字符串格式后写入缓存区。
下位机通过对接收到的字符串按照规则解码,可以得到上位机的发送数据。
4)VISA Clo se节点该节点用于将VISA r esource nam e指定的VISA资源关闭,防止程序关闭后端口继续被占用。
本文所用LabVIEW串口通讯程序的波特率为9600,无奇偶校验,8位数据位,1位停止位,禁止软、硬件握手。
2.3遥控系统界面及串口通讯程序根据串口通讯函数的相关功能,编写上位机LabVIEW的G代码程序,实现串口通讯以及遥控系统界面。
其程序框图和系统界面分别如图1、2所示。
3硬件系统原理及设计ST C89S51RC+单片机内部有一个功能很强2011年第8期舰船电子工程189的全双工串行口[5],该串行口有4种工作方式,波特率可用软件设置,由片内的定时器/计数器产生,接收、发送均可触发中断系统,使用十分方便。
有两个物理上独立的接收、发送缓冲器SBUF,对外也有两条独立的收、发信号线RXD(P3.0)和TXD (P3.1)。
图1串口通讯后面板程序框图图2 遥控系统界面本文采用RS232串行接口标准,在电气特性上,RS232采用负逻辑,要求高低两信号间有较大的幅度,标准为:逻辑/10在-5V~-15V 之间,逻辑/00在+5V~+15V 之间,通常采用-10V 左右为逻辑1,+10V 左右为逻辑0。
由于M CS -51系统的信号输入输出为TT L 电平,逻辑1为3.8V 左右,逻辑0为0.4V 左右,因此,必须外接电路实现T TL 电平到RS232电平的转换[6]。
本文采用MAX232E 实现此转换。
单片机发射实物图如图3所示。
图3 发射器实物图4 软件系统设计下面给出单片机软件部分的主要程序。
波特率设置为9600,用定时器1产生波特率,串口设置串行工作方式,无奇偶校验。
#include <at89x51.h>#define XT A L 11059200//CU P 晶振频率11.0592M H Z #define baudr ate 9600//通信波特率v oid main(v oid){ unsig ned char c;T M O D =0x20;//定时器1工作于8位自动重载模式,用于产生波特率 T H 1=(unsig ned cha r)(256-(XT A L /(32L *12L *baudr ate)));T L 1=(unsigned cha r)(256-(X T A L /(32L *12L*baudr ate)));//定时器赋初值190高顺凯等:基于LabV IEW和单片机的串行无线遥控系统设计总第206期SCON=0x50;//串行参数设置P CO N=0x00;//串行参数设置T R1=1;IE=0x00;//禁止任何中断P0=0x00;//发射信号端口初始化w hile(1){w hile(RI==0);//单片机等待数据接收RI=0;//接收到数据以后R I清空,为下一次接收数据做准备c=SBU F;//从缓冲区中把接收的字符放入c中delay(100);//程序的运行检测,一直闪亮显示说明正常P1=0xF F;//端口初始化delay(200);//延时P1=0x00;//硬件扫描显示sw itch(c){case01:P0=0x01;delay(20);P0=0x00; br eak;//发送数据后马上清空case02:P0=0x02;delay(20);P0=0x00;break;case03:P0=0x04;delay(20);P0=0x00;break;case04:P0=0x08;delay(20);P0=0x00;break;default:P0=0x00;break;}delay(20);//延时以取得信号P0=0x00;//没有接收到信号时端口清空SBU F=c;//要发送的字符放入缓冲区w hile(T I==0);//单片机等待返回数据T I=0;//返回数据后清空,为下一次接收数据做准备}}下位机经过初始化进入w hile循环,在该循环中等待上位机LabV iew发送相关的信号,接收到信号以后复位单片机接收标志位,对接收到的数据进行分析,然后从指定端口发送一定形式的输出信号。