利用visual basic 实现无线通讯

上传人:kms****20 文档编号:41338278 上传时间:2018-05-29 格式:DOC 页数:9 大小:34.50KB
返回 下载 相关 举报
利用visual basic 实现无线通讯_第1页
第1页 / 共9页
利用visual basic 实现无线通讯_第2页
第2页 / 共9页
利用visual basic 实现无线通讯_第3页
第3页 / 共9页
利用visual basic 实现无线通讯_第4页
第4页 / 共9页
利用visual basic 实现无线通讯_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《利用visual basic 实现无线通讯》由会员分享,可在线阅读,更多相关《利用visual basic 实现无线通讯(9页珍藏版)》请在金锄头文库上搜索。

1、利用利用 VisualVisual BasicBasic 实现无线通讯实现无线通讯利用 Visual Basic 实现无线通讯姜棣昭(中科院空间中心) 一、 概述Visual Basic 是 Mcrosoft 公司推出的强有力的系列开发软件之一,而且以其实用、方便、快捷、开发周期短、广泛而强大的功能越来越被广大编程人员所亲赖,广为流传,似乎有些专业的编程人员放弃了 Visaul C+ 而改用了 Visaul Basic 之类的 RAD 编程工具,尽管 Visaul C+在灵活性、代码紧凑、运行速度快及底层开发等方面Visaul Basic 无法比拟的,但编写 C+应用程序过长的调试和开发周期确

2、实有点不适应当今的应用程序开发环境。在 Visaul Basic 开发工具中提供了大量的控件(或称控制、组件)供编程人员使用,可以方便的利用这些组件中的属性、方法、语言等以事件驱动方式开发应用程序,还可以利用 WINDOWS SDK 中的API 中的应用程序接口等工具开发应用程序。VB 还自带一个控件开发软件包 CDK,利用 CDK 可以开发自己需要的 Controls 。在通讯问题中我们可以使用 VB 提供的通讯控件或调用 WINDOWS API 通讯函数。二、 VB 串行通讯利用 VB 开发通信程序主要的方法有两种,一是利用 VB 本身提供的控件(CONTRALS) ,另一种方法是利用 W

3、INDOWS API 应用程序接口,WINDOWS API 主要提供了三个动态连接库KERNEL.EXE、USER.EXE、GDI.EXE 供开发人员调用,其中KERNEL.EXE 主要包括一些底层操作函数,完成一些资源管理、任务、内存等操作,USER.EXE 包含了一些与 WINDOWS 管理有关的函数,如通讯、菜单、消息、光标、插入符、计时器以及绝大多数非显示函数,GDI.EXE 图形设备接口库,主要内容为与设备输出有关的函数。和串口通讯有关系的函数BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、GetCommError、GetCom

4、mState、WriteComm、ReadComm、SetCommState、CloseComm 等均在 Windowssystem 子目录下的 USER.EXE 动态连接库中,在 VB 调用之前应该先在全局变量定义处声明 API 通讯函数、定义常量。在我们的实践中,用 VB 控件实现通讯的方法比调用 SDK 的 API 动态连接库的方法更加方便、快捷,而且用较少的代码可以实现相同的功能,这就是用 VB 控件实现通讯的优点所在,下面主要介绍一下利用 VB 控件实现无线通讯的问题。在 VB 的控件工具箱中,提供了一个使用非常方便的串行通讯控件MSComm,它全面的提供了使用 RS-232 串行通

5、讯上层开发的所有细则,它既可以使用查询方式又可以使用事件驱动方式来完成串行通讯。在 MSCOMM 控件中提供了一系列的编程要素,这些编程要素有属性、事件和函数,利用这些要素编程,可以实现几乎全部的串行通讯功能。在 VB 中提供了 30 多个属性、一个事件和两个函数,其中主要的属性为CommPort、Settings、PortOpen、InBufferSize、OutBufferSize、InBufferCount、OutBufferCount、Break、InputLen、SThreshold、Rthreshold、RTSEnable、CommEvent、ParityReplace、NullD

6、iscard 等。控件 MSComm 提供了一个事件 OnComm,该事件可以截取串口的任何消息,转入事件处理程序。WINDOWS 操作系统的运行机制为事件驱动,在 VB 编程中事件驱动方式同样是软件运行的主要方式之一,当没有事件发生时程序可能处于某一循环、等待或任务状态当事件发生时,程序转入事件处理程序。每个控件下都有一些事件供程序员使用,MSCOMM 控件中 OnComm 事件是唯一的,OnComm 可以扑获通讯时发生的串口事件和错误信息,当有串口事件或错误发生时,VB 会立刻触发一个 OnComm 事件,程序就会自动转入 OnComm 事件处理程序中。CommEvent 属性是 OnCo

7、mm 事件的指示器,该属性在设计时不能使用,在程序运行时为只读,CommEvent 属性存有最近的事件或错误的数值代码,可以在程序中随时读取 CommEvent 属性值来了解通讯的状况,OnComm 事件是和 CommEvent 属性密切相关、一起使用,当任何一个 OnComm 事件或错误发生时,都会使得 CommEvent 属性值改变,在 OnComm 事件处理过程中,可以通过判断 CommEvent 属性值,对于不同的属性值转入不同的事件处理过程,一般采用的办法是 SELECT CASE.END SELECT。由于在无线通讯中没有使用有线MODEM,CommEvent 属性涉及到的有线 M

8、ODEM 的属性数值代码和本项目无关。三、 无线传输接口和协议在我们的项目中用 Intel 586/120 的 PC 机为上位机,通讯程序使用VB 开发的,用 8031 单片机做 CPU、 AD574 作数据采集的下位机,上位机作数据接收和数据处理中心站,下位机实时采集数据之后,进行简单的数据平均计算,当收到上位机发来的发送指令之后,开始向上位机发送数据。上位机无线通讯接口使用的是一块插在 ISA 扩展槽中的无线 MODEM ZX-02,无线 MODEM 与 KENWOOD 公司的 TK-378 无线对讲机相连,数字信号通过无线 MODEM 调制成为音频信号之后,送到 TK-378 无线对讲机

9、上的 MIC 口。下位机有一台外置无线 MODEM ZX-01,单片机的数字信号经过串口送入无线 MODEM,MODEM 对信号进行调制后送入 KENWOOD TK-378 无线对讲机上,接收数据的方式与上述相同,由 TK-378 收到信号后,经无线 MODEM 将音频信号解调为数字信号进入计算机或单片机处理。由于在我们的通讯网络中,并非点对点的通讯,而是一点对多点的广播式的通讯方式,因此,我们在通讯协议中曾加站点识别码,每个站有自己特定的识别码,给下位机编码可以保证网络通讯的有序性。由于无线通讯可能会有空间的燥声干扰,因此,我们采取了多项抗干扰措施,首先是包头识别码,在发送了传输命令之后,下

10、位机开始以打包的形式传输数据,每一包都有一个包头和包尾识别码,假如识别码有误,这一次的传输为不正常数据处理。打包发送另外一个原因是 TK-270 对讲机连续发送数据的时间不能超过一分钟,超过一分钟就会自动中断发送,因此,当数据较多时不打包连续发送的时间就会超过一分钟,发送数据中断。在下位机中有 32KB 的 NVRAM,可以保存 32KB 的数据该数据可以由上位机发送清除命令的方法清楚掉,当 32KB 满了以后,最早放入的数据就会丢掉,由于我们的采样速率不高,在慢采的情况下,两天的时间才能存满,这样不论上位机或下位机出现断电、死机等问题,数据不会丢失掉。在发送过程中,由于干扰的原因数据传输出现

11、错误,上位机不给下位机发送清楚命令,数据保存在 NVRAM 中,下次上位机发送传输命令之后,这些数据还会重新发送到上位机来,这样可以避免了线路带来的数据损失,从下位机向上位机传送的代码有 ASCII 码和 BCD 码,测量数据部分用的是 BCD 码主要是为了节省资源,由上位机向下位机发送的命令均为 ASCII 码。我们还对字段长度和包的长度作了规定,一个字段有多少个字节,一包有多少个字段组成,如果数据最后不够一整包,也按照整字段的格式作为半包发送过来。考虑到下位机的分散性,可能固定在偏远、不宜接近的地带,用上位机对下位机发送校时命令并校时的方法来统一网络时间。由于我们使用的无线 MODEM 所

12、限,传输速率只能达到 2400BPS,而在我们的使用中 1200BPS、N PARITY、8 DATA、1 STOP 为较稳定状态。上位机向下位机发送的命令有校时命令并校时、请内存命令、发送数据命令、快采命令和慢采命令等。发送命令有两种发送方式,即手动方式和自动方式,自动方式是由定时器来完成的。在无线通讯过程中,除了规定合理的协议之外,为了保证通讯的正确性,在数据发送时适当的增加延时是必要的,当速度较慢的计算机向速度较快的计算机发送数据时应适当的增加延时。四、 应用实例由于该项目的软件源代码较长,我们只拿出和串口通讯有关的程序片段来供大家参考。在我们的工作中实践了三种通讯方式,即查询方式、事件

13、驱动方式、事件驱动转查询方式,这三种方式各有利敝,查询方式有方便可靠的特点,可利用协议或设定时钟进入和退出查询状态,但不是资源的有效利用方式,事件触发方式对于定长通讯非常有效,但定长通讯在有些场合不实用,事件驱动转查询方式既有事件驱动的特点又有转查询方式特点,可以说是集二者之长,有效利用资源。下面着重介绍事件驱动转查询方式。首先在公共模块中定义和 ONCOMM 有关的参数:Global Const MSCOMM_EV_RECEIVE = 2收到 Rthreshold 个字符。该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。Global Const MSCOMM_ER_RXOVE

14、R = 1008接受缓冲区溢出。接收缓冲区没有空间。Global Const MSCOMM_ER_TXFULL = 1010 传输缓冲区已满。传输字符时传输缓冲区已满在启动过程中对串口和输入输出缓冲区初始化:Sub Form_Load ()comm1.Settings = “1200,n,8,1“ 设定波特率 1200bps,无校验,8位数据位,1 位停止位comm1.CommPort = 1 串口 1comm1.InputLen = 1 一次从输入缓冲区中读取一个字符comm1.InBufferSize = 512 定义输入缓冲区为 512 字节(bytes)comm1.InBufferCo

15、unt = 0 清空输入缓冲区comm1.OutBufferCount = 0 清空输出缓冲区comm1.PortOpen = True 启动串口End Sub下面是发送数传命令的子过程,启动该过程由一个定时器控制:Sub sample_data ()comm1.RTSEnable = True 将 Modem 的 PTT 置高,同时打开对讲机Call time_delay 适当延时comm1.Output = “*TRNS“ + Chr$(13) 发送命令Do 该循环用来检测命令是否全部发送完毕Loop Until comm1.OutBufferCount = 0Call time_dela

16、y 适当延时comm1.RTSEnable = False 将 Modem 的 PTT 置低,将对讲机改为接受状态comm1.InBufferCount = 0 清空接收缓冲区 comm1.RThreshold = 1 设定 RThreshold = 1,等待出发 OnComm 事件End Sub在 OnComm 编写接收和处理代码:Sub Comm1_OnComm ()Select Case comm1.CommEventCase MSCOMM_ER_RXOVER 接收缓冲区溢出。可插入相应的代码Case MSCOMM_ER_TXFULL 传输缓冲区已满。可插入处理代码Case MSCOMM_ER_RECEIVE 收到 1 个字符,可进入以下处理过程comm1.RThreshold = 0 不再响应 OnComm 事件,转入查寻方式接收ii = 0iii = 0: sinn = Chr$(42): sinn1 = Chr$(42) 初始化变量Doduration = Timer + .2 设定超时退出的时间值iii = iii + 1sinn1 = sinnD

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号