在VB下实现无线通信的方法
- 格式:doc
- 大小:30.50 KB
- 文档页数:7
蓝牙GPS实验定位系统的VB编程VB编程相关日志(1 2009-11-25 01:35:09 阅读220 评论0 字号:大中小订阅一、蓝牙GPS定位系统的基本概念所谓的GPS全称是Global Position System,中文是全球定位系统。
GPS是美国国防部陆海空三军联合研制的第二代卫星导航定位系统,自1973年到1993年,GPS全球定位系统的建立经历了近20年,耗资过百亿美元;整个定位系统主要是通过围绕在地球表面的24颗人造卫星来实现全天候、全球性和高精度的连续定位的,这24颗卫星分六条轨道围绕在地球表面,每条轨道上有四颗卫星。
通过GPS的定位功能就能知道您当前处于地球上的具体位置,该具体位置是用一组经纬度和海拔高度数据信息来表现出来的。
GPS基本原理是定位卫星由地面站不断进行跟踪、调控和定位,并与地面站进行数据交换,从而确定卫星的空间位置,组织成空间定位数据发送给GPS接收机。
GPS接收机分别从三颗以上的导航卫星上接收定位信号,经过计算机计算后得到地面定位数据,理论上三颗卫星可以测定经纬度数据,四颗卫星就可以得到高精度数据,连续测定还可以计算出速度、方向等数据。
导航和定位是两个概念。
定位是确定位置信息,而导航是在定位的基础上进一步结合电子地图技术,提供给用户附近地理信息,供用户在运动过程中确定运行方向。
智能导航系统可以通过在电子地图上预设目标,由系统自动规划最优运动路线,并通过导航指令指导用户或自动控制运动物体到达目的地。
Bluetooth(蓝牙)概念最早由爱立信公司在1995年提出,逐渐被人们接受并广为设计用于各类民用电子设备、IT外设的数据通讯中。
蓝牙规范采用2.4GHz的微波工作频段,以1Mbps的速度在10米甚至100米距离内高速传输。
基于蓝牙规范的蓝牙技术通过缩短通信的持续时间来增强信号传输的稳定性和可靠性。
同时,蓝牙技术还采用多种技术减少信号出错并对信号进行错误校正,以进一步增强信号传输抗干扰能力和稳定性。
vb建无线wifi热点(附图)本程序是利用vb读写文件来实现的,再通过调用计算机中的explorer运行新建的文件,程序思想是通过dos命令建立虚拟无线热点,因此你的计算机必须要求带无线网卡,如果你的计算机有无线网卡但不能运行,请尝试升级网卡驱动。
由于运行当中会调用explorer程序,和某些计算机病毒的投放方法有所相同,所以程序在运行时会引起一些安全软件的误判。
程序运行时会在C:\Users\Administrator\Documents目录下生成文件。
原程序已上传到我的百度网盘上/netdisk/singlepublic?fid=52019_1022037011还有许多不足,希望大家指出改进!程序源码如下:Public a As Integer, e As Integer, f As Integer, b As String, c As String, d As StringPrivate Sub Command2_Click()b = Text1.Textc = Text2.Textd = "netsh wlan set hostednetwork mode=allow"If b = "" Or c = "" ThenMsgBox "请填写新建无线网络名称或密码!", 48, "错误!"ElseIf Len(c) = 8 ThenOpen "C:\Users\Administrator\Documents\wifibuild.bat" For Output As #1Print #1, "netsh wlan set hostednetwork mode=allow", "ssid="; b, "key="; cPrint #1, "netsh wlan start hostednetwork"Close #1Shell "explorer.exe " & "C:\Users\Administrator\Documents\wifibuild.bat", 1Label5.Caption = "已连接"Timer1.Enabled = TrueElseMsgBox "密码长度应为8位!", 48, "错误!"End IfEnd IfEnd SubPrivate Sub Command3_Click()If Dir("C:\Users\Administrator\Documents\wifibuild.bat") <> "" ThenOpen "C:\Users\Administrator\Documents\wifiend.bat" For Output As #1Print #1, "netsh wlan set hostednetwork mode=disallow"Shell "explorer.exe " & "C:\Users\Administrator\Documents\wifiend.bat", 1Close #1Timer1.Enabled = FalseElseMsgBox "您还没有创建wifi热点!", 48, "错误!"End IfEnd SubPrivate Sub Form_Load()a = 0e = 0f = 0End SubPrivate Sub Form_Unload(Cancel As Integer)If Dir("C:\Users\Administrator\Documents\wifibuild.bat") <> "" Then Kill "C:\Users\Administrator\Documents\wifibuild.bat"End IfIf Dir("C:\Users\Administrator\Documents\wifiend.bat") <> "" Then Kill "C:\Users\Administrator\Documents\wifiend.bat"End IfEnd SubPrivate Sub Option1_Click()Text2.PasswordChar = ""End SubPrivate Sub Option2_Click()Text2.PasswordChar = "*"End SubPrivate Sub Timer1_Timer()r: a = a + 1If a = 60 Thene = e + 1a = -1GoTo rEnd IfIf e = 60 Thenf = f + 1e = 0End IfLabel6.Caption = f & "小时" & e & "分钟" & a & "秒"End Sub附图:1.未连接2.已连接3.4.打开网络和共享中心——》更改适配器设置,会发现多了个无线网络连接25.设置宽带共享之后你就可以用你的手机连接你的电脑共享网络上网,再也不怕月末流量报警了有木有!注意:程序运行点击创建wifi时会出现如下情况点允许执行就行了,我试过用cmd.exe直接打开新建的文件,好像不行,所以只能用explorer 了。
摘要当今社会,采用无线通信技术的工控产品很多,有的采用扩频通信原理;有的采用RF调频通信原理。
根据发射功率的不同,无线通信的距离也各不相同。
也有很多公司开发出了应用于不同场合的无线数传模块,大大方便了无线通信测控系统的设计,可以减少有线设备在连线上的麻烦,同时也可以节省空间,故障检修方便,必定会成为未来工业现场的一个发展方向同时也给使用者带来了极大的方便。
无线通信网络,由于其特有的非接线通信方式的优点,广泛应用于特定地理位置(如山区、油田和水利设施等)的现场遥测遥控领域。
尤其在分布距离较远且数据传输量不大时,无线通信控制网络的优势更为明显。
因此研究无线通信在工业控制中设备的连接、通信协议、数据采集等技术的应用具有相当重要的现实意义。
本实验可以实现多种液体的混合,包括其中每种液体的配比,混合液的搅拌时间,固定混合液的总质量,超过固定值后液体即可停止注入,混合液的排放,及相关数据的采集和保存,同时也可调用根据经验已经保存的混合液的配比。
它基于牛顿工控模块搭建实现的,其中包括无线收发模SST900EXT、单路模拟量输入模块7012,、数字量模块7044、模拟量输出模块7021、液体混合实验箱。
在PC机上使用vb编程软件编制上位机界面,无线模块与上位机通过RS-232方式连接,其他设备通过简单的连线整个模拟液体混合控制系统的搭建,此系统关键字:无线通信,牛顿工控模块,液体混合控制系统。
目录1基础知识 (1)1.1牛顿模块的概述 (1)1.2 牛顿-7000系列模块的特点 (1)2系统设计 (2)2.1设计原理 (2)2.2设计方案 (2)2.3 设计流程图 (2)3硬件设计 (4)3.1试验箱介绍 (4)3.2 牛顿工控模块搭建 (4)3.3 液体混合控制原理图 (5)3.4实验连线图 (6)4 软件设计 (7)4.1 VB简介 (7)4.2 登陆界面、主界面、数据显示及采集界面设计 (8)4.3 各个功能模块设计 (10)4.31模拟进料通道和搅拌模块 (10)4.32 数据输入及选择模块 (10)4.33 显示及输出模块 (11)4.34 基本设置模块 (11)5 调试及运行结果 (12)5.1调试 (12)5.2 运行结果 (12)6总结 (13)7 参考文献 (14)1基础知识1.1牛顿模块的概述牛顿-7000是远程数据采集模块,提供了A/D,D/A,DI/DO,Timer/Counter(定时器、计数器)以及其它一些便携功能模块,赚为工业现场数据采集与控制而设计。
在VB中使用Winsock实现通信2007-12-11 10:08:35|最近刚接触VB,学习了用Winsock创建聊天应用程序。
下面的实例分别用TCP协议和UDP协议实现通讯。
1. 选择通讯协议的标准在使用WinSock控件时,可以使用的协议包括TCP和UDP。
两种协议之间的重要区别在于它们的连接状态:a).TCP协议控件是基于连接的协议,可以将它同电话系统相比。
在开始数据传输之前,用户必须先建立连接。
b).UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接。
2. Winsock控件使用TCP协议如果应用程序要使用TCP协议,那么首先必须决定应用程序是服务器还是客户端。
如果要创建一个服务器端,那么应用程序需要“监听”指定的端口。
当客户端提出连接请求时,服务器端能够接受请求并建立连接。
在连接建立之后,客户端与服务器端可以自由地互相通讯。
2.1 TCP服务器端窗体设计:为窗体添加如下的代码:Private Sub Form_Load()'设置本地端口号为6000Winsock1.LocalPort = 6000'打开监听Winsock1.ListenEnd SubPrivate Sub Winsock1_ConnectionRequest(ByVal RequestID As Long) Dim myStr As String'如果当前状态处于连接状态,则先关闭连接,再接收新的请求If Winsock1.State <> sckClosed ThenmyStr = MsgBox("客户请求建立连接,是否允许?", vbOKCancel) If myStr = vbOK Then'关闭连接Winsock1.Close'接收客户请求,建立连接Winsock1.Accept RequestIDWinsock1.SendData "接收"MsgBox "与客户建立了新连接"End IfEnd IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim myStr As String'调用GetData方法接收数据Winsock1.GetData myStrText2.Text = myStrEnd SubPrivate Sub Winsock1_Close()Winsock1.CloseWinsock1.ListenMsgBox "与客户断开连接"End SubPrivate Sub Text1_Change()'当服务器端的文本框中的内容发生变化时,使用SendData方法发送信息Winsock1.SendData Text1.TextEnd Sub2.2 TCP客户端窗体设计:为窗体添加如下代码:Private Sub Form_Load()Text1 = "192.168.1.22"Text2 = 6000End SubPrivate Sub Command1_Click()If Winsock1.State = sckClosed Then'设置服务器的IP地址Winsock1.RemoteHost = Trim(Text1.Text)'设置服务器的端口号Winsock1.RemotePort = Trim(Text2.Text)'发出连接请求Winsock1.ConnectEnd IfEnd SubPrivate Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim myStr As String'调用GetData方法接收数据Winsock1.GetData myStrText4.Text = myStrOption1.Value = TrueEnd SubPrivate Sub Winsock1_Close()Winsock1.CloseOption2.Value = TrueEnd SubPrivate Sub Text3_Change()'当txtSend控件的内容发生变化时,调用SendData将信息传送给主机Winsock1.SendData Text3.TextEnd Sub2.3 运行方法1)同时运行服务器端程序和客户端程序,得到两个示意图(略)2)在客户端程序的界面中单击“连接”按钮,此时,服务器端程序显示“客户请求建立连接,是否允许?”3)单击“确定”,客户端的连接状态会变成“连接”状态,此时,两端已建立起连接。
摘要:本文给出了一种以数传电台为通讯媒体,由控制中心PC机和多个AT89C51单片机系统组成的远程无线通信系统,重点介绍了利用VB实现PC机与多个单片机控制系统远程无线通讯程序设计方法,实现了PC机对多个远端单元的实时控制与管理。
关键词:Visual Basic、串行通讯、数传电台、单片机、远程控制1 引言随着现代电子与信息技术的不断发展,计算机与单片机控制系统之间的远程无线通讯技术得到了广泛的应用,而数传电台目前已发展成为远程无线通信的一种重要工具,它使用灵活、性价比高,环境适应能力强,非常适用于大范围、分散控制系统及在恶劣环境中,不适于铺设有线网络的实时监控系统,数传电台已成功应用于电力设备监控、计算机实时监控与数据采集(SCADA)以及实时交易数据遥测遥控等领域。
同时VB6.0具有界面友好、编程简便高效、数据处理及驱动底层硬件功能强等优点,成为许多用户开发PC 机与单片机串行通信程序的首选工具。
本文以美国MDS OEM EL705数传电台为通讯媒体,利用VB6.0的通讯控件MSComm实现了控制中心PC机与多个远端AT89C51单片机控制系统之间远程无线通讯,实现了控制中心PC机对多个远端单元的实时控制与管理,并应用于工程设计中,通过实际应用,取得了满意的效果。
2 系统的组成及工作原理2.1系统的组成系统由控制中心和多个远端单元RTU(Remote Terminal Unit)组成。
控制中心主要由上位机PC和数传电台组成,各远端单元由数传电台、AT89C51单片机系统及现场设备组成,各远端单元根据实际需要分布在距控制中心一定距离的范围内,控制中心及远端单元结构分别如图1、图2所示。
2.2工作原理控制中心作为系统的数据终端设备DTE(Data Terminal Equipment),负责实现对远端单片机系统的实时控制与管理,打印单片机系统工作状态信息、自检信息、记录报表信息及远程单片机系统故障报警信息等,并可通过局域网与其它PC机进行信息传递。
1.MSComm控件两种处理通讯的⽅式 MSComm控件提供下列两种处理通讯的⽅式:事件驱动⽅式和查询⽅式。
1.1 事件驱动⽅式 事件驱动通讯是处理串⾏端⼝交互作⽤的⼀种⾮常有效的⽅法。
在许多情况下,在事件发⽣时需要得到通知,例如,在串⼝接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上⼀个字符到达或⼀个变化发⽣时。
在这些情况下,可以利⽤ MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。
OnComm 事件还可以检查和处理通讯错误。
所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。
在编程过程中,就可以在OnComm事件处理函数中加⼊⾃⼰的处理代码。
这种⽅法的优点是程序响应及时,可靠性⾼。
每个MSComm 控件对应着⼀个串⾏端⼝。
如果应⽤程序需要访问多个串⾏端⼝,必须使⽤多个 MSComm 控件。
1.2 查询⽅式 查询⽅式实质上还是事件驱动,但在有些情况下,这种⽅式显得更为便捷。
在程序的每个关键功能之后,可以通过检查CommEvent 属性的值来查询事件和错误。
如果应⽤程序较⼩,并且是⾃保持的,这种⽅法可能是更可取的。
例如,如果写⼀个简单的电话拨号程序,则没有必要对每接收⼀个字符都产⽣事件,因为等待接收的字符是调制解调器的“确定”响应。
2.MSComm 控件的常⽤属性 MSComm 控件有很多重要的属性,但⾸先必须熟悉⼏个属性。
CommPort 设置并返回通讯端⼝号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停⽌位。
PortOpen 设置并返回通讯端⼝的状态。
也可以打开和关闭端⼝。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写⼀个字符串。
下⾯分别描述: CommPort属性:设置并返回通讯端⼝号。
语法 mPort[value ] (value ⼀整型值,说明端⼝号。
目录一无线通信网络简介 (2)二无线通信平台的VB控制系统实验 (3)1 实验目的 (3)2 实验仪器 (3)3 实验内容 (3)4实验电路 (3)5 实验步骤 (4)三基于无线通信平台的VB温度PID控制系统硬件设计 (5)1系统硬件设计 (5)2系统界面设计 (5)3 数据采集与显示程序设计 (6)4 系统控制方法设计 (9)四系统运行结果与分析 (19)1 系统运行结果 (19)2 分析改进措施 (20)五参考文献 (20)一 无线通信网络简介Visual Basic (VB )是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。
从任何标准来说,VB 都是世界上使用人数最多的语言——不仅是盛赞VB 的开发者还是抱怨VB 的开发者的数量。
它源自于BASIC 编程语言。
VB 拥有图形用户界面(GUI )和快速应用程序开发(RAD )系统,可以轻易的使用DAO 、RDO 、ADO 连接数据库,或者轻松的创建ActiveX 控件。
程序员可以轻松的使用VB 提供的组件快速建立一个应用程序。
无线通信(Wireless Communication )是利用电磁波信号可以在自由空间中传播的特性进行信息交换的一种通信方式,近些年信息通信领域中,发展最快、应用最广的就是无线通信技术。
无线通信网络,由于其特有的非接线通信方式的优点,广泛地应用于特定的地理位置(如山区、油田和水利设施等)的现场遥测遥控领域。
尤其在分布距离较远且数据传输量不大时,无线通信控制网络的优势更为明显。
典型无线通信网络分布式控制系统见图1所示图1.无线通信控制网络图1中,采用台湾威达(ICP )无线通信模块SST900EXT,通信距离1km;波特率最大19200;232/485通信接口。
PC COM 口 无线模块 232232 测控对象无线模块+控制模块 测控对象无线模块+控制模块二 无线通信平台的VB 控制系统实验1 实验目的1)掌握电热炉温度控制的原理及方法。
1.引言目前已经有多种主流的网络通信软件,也有很多种制作网络聊天室的方法。
而使用VB制作是最为简单易行的。
使用VB实现网络通信方法大同小异,本次制作参考的文献资料基本方法基本都是使用Winsock控件编写服务器端、客户端通信程序,实现了对基于TCP /IP协议的、面向连接的流方式套接字网络通信程序设计。
本次设计同样使用了VB 中的Winsock 控件完成了本次网络通信软件的设计制作,实现了两台计算机之间的通信初步实现服务器和客户端的通信和实现客户端之间的通信。
2.Winsock控件介绍Winsock控件对用户来说是不可见的,它提供了访问TCP 和UDP 网络服务的方便途径。
为编写客户或服务器应用程序,不必了解TCP 的细节或调用低级的Winsock APIs。
通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。
打开Visual Basic6.0,点击“工程”→“部件”,弹出对话框,选择Microsoft Winsock Control 6.0 。
这时在工具箱中会多一个控件,这就是Winsock控件,现在就可以开始使用它进行设计编程。
Winsock控件的常用属性:BytesReceived属性(接受数据的字节数),LocalHostName属性(本地主机名称),LocalIP属性(本地主机IP),LocalPort属性(本地主机端口),RemoteHost属性(远程主机名称),State属性(Winsock控件)(网络状态【连接、未连接】),Protocol属性(值为0-sckTCPProtocol 时使用TCP/ IP 协议,为1-sckUDPProtocol 时使用UDP 协议),Name属性(控件的名称),RemotePort属性(ActiveX控件)(远程主机端口),Object属性。
Winsock控件的常用方法:Accept方法(接受TCP连接请求),Bind方法,Close方法(关闭TCP连接),Listen方法(监听TCP数据),PeerData方法(获得数据),SendData方法(传输数据),GetData方法(获得数据)Winsock控件的常用事件:Close事件(关闭连接),ConnectionRequest事件(连接请求),DataArrival事件(数据到达),SendComplete事件(数据传输完毕),SendProgress事件(数据传输中),Error事件(发生错误),Connect事件(建立连接)。
在VB下实现无线通信的方法一、VB串行通信利用VB开发通信程序主要的方法有两种:一是利用VB本身提供的控件(CONTRALS);另一种方法是利用Windows API应用程序接口。
Windows API 主要提供了三个动态连接库(KERNEL.EXE、USER.EXE、GDI.EXE)供开发人员调用,其中KERNEL.EXE 主要包括一些底层操作函数,完成一些资源管理、任务、内存等操作;USER.EXE包含了一些与Windows管理有关的函数,如通信、菜单、消息、光标、插入符、计时器以及绝大多数非显示函数;GDI.EXE 图形设备接口库,主要内容为与设备输出有关的函数。
和串口通信有关系的函数BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、GetCommError、GetCommState、WriteComm、ReadComm、SetCommState、CloseComm等均在\Windows\system 子目录下的USER.EXE动态连接库中,在VB调用之前应该先在全局变量定义处声明API 通信函数、定义常量。
在VB的控件工具箱中,提供了一个使用非常方便的串行通信控件MSComm,它提供了一个事件OnComm,该事件可以截取串口的任何消息,转入事件处理程序。
OnComm事件是唯一的,OnComm可以捕获通信时发生的串口事件和错误信息,当有串口事件或错误发生时,VB会立刻触发一个OnComm事件,程序就会自动转入OnComm事件处理程序中。
CommEvent 属性是OnComm事件的指示器,该属性在设计时不能使用,在程序运行时为只读,CommEvent 属性存有最近的事件或错误的数值代码,可以在程序中随时读取CommEvent 属性值来了解通信的状况,OnComm事件是和CommEvent属性密切相关、一起使用,当任何一个OnComm 事件或错误发生时,都会使得CommEvent属性值改变,在OnComm事件处理过程中,可以通过判断CommEvent属性值,对于不同的属性值转入不同的事件处理过程,一般采用的办法是SELECT CASE.......END SELECT。
由于在无线通信中没有使用有线Modem,CommEvent 属性涉及到的有线Modem的属性数值代码和本项目无关。
二、无线传输接口和协议用Intel 586/120的PC机为上位机,通信程序用VB开发,用8031单片机作CPU、AD574作数据采集的下位机,上位机作数据接收和数据处理中心站,下位机实时采集数据之后,进行简单的数据平均计算,当收到上位机发来的发送指令之后,开始向上位机发送数据。
上位机无线通信接口使用的是一块插在ISA扩展槽中的无线Modem ZX-02,无线Modem与Kenwood公司的TK-378无线对讲机相连,数字信号通过无线Modem调制成为音频信号之后,送到TK-378无线对讲机上的MIC口。
下位机有一台外置无线Modem ZX-01,单片机的数字信号经过串口送入无线Modem,Modem对信号进行调制后送入Kenwood TK-378无线对讲机上,接收数据的方式与上述相同,由TK-378收到信号后,经无线Modem将音频信号解调为数字信号进入计算机或单片机处理。
由于在通信网络中,并非点对点的通信,而是一点对多点的广播式的通信方式,因此,我们在通信协议中增加站点识别码,给下位机编码可以保证网络通信的有序性。
由于无线通信可能会有空间的燥声干扰,因此,采取了多项抗干扰措施,首先是包头识别码,在发送了传输命令之后,下位机开始以打包的形式传输数据,每一包都有一个包头和包尾识别码,假如识别码有误,这一次的传输为不正常数据处理。
打包发送另外一个原因是TK-270对讲机连续发送数据的时间不能超过一分钟,超过一分钟就会自动中断发送,因此,当数据较多时不打包连续发送的时间就会超过一分钟,发送数据中断。
在下位机中有32KB的NVRAM,可以保存32KB的数据。
该数据可以由上位机发送清除命令的方法清除掉,当32KB满了以后,最早放入的数据就会丢掉,由于采样速率不高,在慢采的情况下,两天的时间才能存满,这样不论上位机或下位机出现断电、死机等问题,数据不会丢失掉。
由于使用的无线Modem所限,传输速率只能达到2400bps,而在我们的使用中1200bps、N Parity、8 DATA、1 STOP为较稳定状态。
上位机向下位机发送的命令有校时命令、请求内存命令、发送数据命令、快采命令和慢采命令等。
发送命令有两种发送方式,即手动方式和自动方式,自动方式是由定时器来完成的。
三、应用实例由于该项目的软件源代码较长,我们只拿出和串口通信有关的程序片段来供大家参考。
在我们的工作中实践了三种通信方式,即查询方式、事件驱动方式、事件驱动转查询方式。
这三种方式各有利弊,查询方式方便可靠,可利用协议或设定时钟进入和退出查询状态,但不是资源的有效利用方式;事件触发方式对于定长通信非常有效,但定长通信在有些场合不实用;事件驱动转查询方式既有事件驱动的特点又有转查询方式特点,可以说是集二者之长,有效利用资源。
下面着重介绍事件驱动转查询方式。
首先在公共模块中定义和ONCOMM有关的参数:Global Const MSCOMM_EV_RECEIVE = 2‘收到Rthreshold 个字符。
该事件将持续产生直到用Input 属性从接收缓冲区中删除数据。
Global Const MSCOMM_ER_RXOVER = 1008‘接受缓冲区溢出,接收缓冲区没有空间。
Global Const MSCOMM_ER_TXFULL = 1010 ‘传输缓冲区已满。
传输字符时传输缓冲区已满。
在启动过程中对串口和输入输出缓冲区初始化:Sub Form_Load ()comm1.Settings = "1200,n,8,1" 设定波特率1200bps,无校验,8位数据位,1位停止位mPort = 1 串口1comm1.InputLen = 1 一次从输入缓冲区中读取一个字符comm1.InBufferSize = 512 定义输入缓冲区为512字节(bytes)comm1.InBufferCount = 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_delay适当延时comm1.RTSEnable = False 将Modem的PTT置低,将对讲机改为接受状态comm1.InBufferCount = 0 清空接收缓冲区comm1.RThreshold = 1 设定RThreshold = 1,等待出发OnComm事件End Sub在OnComm编写接收和处理代码:Sub Comm1_OnComm ()Select Case mEventCase 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 = sinnDo 该循环判断输入缓冲区是否有数据或是否超时'dummy% = DoEvents()Loop Until comm1.InBufferCount >= 1 Or Timer >= durationIf Timer >= duration Theniii = iii - 1overtime = True 确定超时退出,并非正常退出Exit DoEnd Ifsinn = comm1.Input 正常退出,取值付给sinnIf header_er = 0 ThenGoTo test_headerEnd IfIf Asc(sinn) > 175 Or Asc(sinn) < 160 Then 判断包头是否正确iii = 0GoTo station_number_er 包头不正确,丢掉该数据End Iftest_header:header_er = 0 包头正确,接受到包头,header_er=0ssin(iii) = sinn 'put date into string dimantionstation_number = Asc(ssin(1))package_number = Asc(ssin(2))sentence_number = Asc(ssin(3))last_character = Asc(ssin(iii))station_number_er: Loop Until sinn1 = Chr$(10) andsinn = Chr$(13) 当收到正确的包尾0A,0D后退出If overtime = True Then 如果超时非正常退出overtime = Falsecomm1.RThreshold = 1 重新启动OnComm事件,等待接收下一包timer6_wait.Enabled = TrueGoTo endsubEnd If以下是接收数据正确以后的数据处理程序,包括解码和计算。
If package_number = 1 Then 如果接收数据正确,而且是最后一包timer2_sample.Enabled = True 启动控制数传命令定时器comm1.RTSEnable = True 置PTT为高comm1.OutBufferCount = 0 清空输出缓冲区Call time_delay适当延时comm1.Output = "*MACK" + Chr$(13)发送清内存命令Do检测是否发送完毕Loop Until comm1.OutBufferCount = 0Call time_delay 适当延时comm1.RTSEnable = False 置PTT为低End IfIf package_number > 1 Then 如果不是最后一包comm1.RThreshold = 1启动OnComm准备接收下一包timer6_wait.Enabled = TrueEnd Ifendsub: header_er = 1: comm1.InBufferCount = 0'empty inbuffer protect from bed data on the inbufferEnd SelectEnd Sub。