用Visual Basic 实现串口通信的三种方法
用VisualBasic的Communications控件实现串行通信-2019年精选文档
ations 控件实现串行通信1.引言Visual Basic (以下简称VB )是一般程序设计人员在Windows 环境下最常用的编程语言。
在 VB 中除了可以调用 API 函数,完成串行通信的任务之外,更常用、更简便的是使用 提供的Communications 控件(以下简称Comn 控件)来完成各种 串行通信任务。
2. VB 的Comr 控件2.1 Com m 控件的添加Comm 控件并不是VB 的基本控件,刚进入 VB 环境中时,在控件工具箱上是找不到 Comn 控件的,要使用它必须另行添加,添加的方法如下:用鼠标右击VB 的控件工具箱,在弹出菜单中选择"部件…"菜单项,会出现一个"部件…"对话框,勾选其中的"MicrosoftComm Control6.0"选项,在VB 的控件工具箱中会出现一个电话2.2 Comm 控件概述 Comm 控件用于进行串行通信,既可以用来提供简单的串行端口通信功能, 也可以用来创建功能完备的、 事件驱动的高级通 信工具。
Comm 空件提供了一系列标准通信命令的使用界面。
使用它用Visua Basic 的CommunicVB 机形状的控件图标,它就是进行串行通信要使用的Comr 控 件。
可以建立与串行端口的连接,通过串行端口连接到其他通信设备(如MODEM,发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。
利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等功能。
2.3 Comm 空件的重要属性1)CommPor:t 设置或返回通信端口号,其取值范围为1〜99,缺省为1。
当把这个属性设置成1,表示利用COM1 端口进行串行通信。
在程序运行时也可以读取该属性, 用来了解串行端口的使用情况。
2)Settings :用字符串的形式设置或返回串行通信的帧格式。
例如将Settings设置为"9600, n, 8, 1",表示采用的串行通信波特率是9600、无奇偶校验、数据位是8 位、 1 位停止位。
用Visual C++实现串口通讯
学校logo[请输入论文题目]专业:[请输入专业]班级:[请输入班级]学生姓名:[请输入姓名]指导教师:[请输入指导教师]完成时间:2013年3月29日用VC 6.0实现串行通信的三种方法---- 摘要:本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。
---- 在实验室和工业应用中,串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。
依据不同的条件实现对串口的灵活编程控制是我们所需要的。
---- 在光学镜片镀膜工艺中,用单片机进行多路温度数据采集控制,采集结果以串行方式进入主机,每隔10S向主机发送一次采样数据,主机向单片机发送相关的控制命令,实现串行数据接收,处理,记录,显示,实时绘制曲线。
串行通信程序开发环境为VC++ 6.0。
---- Windows下串行通信---- 与以往DOS下串行通信程序不同的是,Windows不提倡应用程序直接控制硬件,而是通过Windows操作系统提供的设备驱动程序来进行数据传递。
串行口在Win 32中是作为文件来进行处理的,而不是直接对端口进行操作,对于串行通信,Win 32 提供了相应的文件I/O函数与通信函数,通过了解这些函数的使用,可以编制出符合不同需要的通信程序。
与通信设备相关的结构有COMMCONFIG ,COMMPROP,COMMTIMEOUTS,COMSTA T,DCB,MODEMDEVCAPS,MODEMSETTINGS共7个,与通信有关的Windows API函数共有26个,详细说明可参考MSDN帮助文件。
以下将结合实例,给出实现串行通信的三种方法。
---- 实现串行通信的三种方法---- 方法一:使用VC++提供的串行通信控件MSComm 首先,在对话框中创建通信控件,若Control工具栏中缺少该控件,可通过菜单Project --> Add to Project --> Components and Control插入即可,再将该控件从工具箱中拉到对话框中。
Visual Basic 串口通讯编程
Mid:从第m 个数开始,取 n 个数。例如:s=Mid(s,2,3)即为从 s 的 第二个数开始,取三个数放回s。 Asc:返回第一个字符(包括汉字)的Ascii码。 Str:将一个数字变为字符形式 Hex:返回Ascii码的16 进制数 3、错误处理的应用 我们在程序中加入这样一条语句:On Error Resume Next。当程序运 行出现错误,比如当打开串行口1 时,该串口已被其它程序占用,程 序就会出现错误,如果开始时执行过上述语句,程序将跳过错误语句, 接着往下执行。同时,VB 置Err 标志有效。 利用Err 的值,我们可以判断一些与硬件相关的操作是否正确和有 效,以改变程序的进程。 四、界面 画出界面,控件上的字符是它们的名称。需要提请大家注意的是,串 口控件(即那个电话控件)在VB 默认的控件栏中不存在,需要以下 述方式添加,在工程菜单->部件->控件选项卡中选中 Microsoft Comm Control 5.0 复选框,其它备用控件的添加也采用 相同的方式,希望大家记住,以后将不再重复。当不再需要该控件而
Visual Basic 串口通 三、预备知识和技巧 1、串行通讯控件 Mscomm 调入Mscomm 控件:在“项目”菜单中打开“部件”子菜单, 在部件选择对话框中选择 “Microsoft comm Control 5.0”, Mscomm 控件即加入到您的控件箱中. 常用属性:Commport-通讯端口号,如串口1、串口2。Setting-返回或 设置串口参数。InputLen-从接收缓冲区读出的字符数。 InBufferSize、OutBufferSize-输入、输出缓冲区尺寸。 InBufferCount-输入缓冲区内的字符数。 常用方法:Output、Input-将发送数据发送出去和将接收数据读出。 常用事件:OnComm-无论串行口发生什么事,都会触发该事件。 2、字符处理函数 Left:取字符串的左边n 个字符。例如:s=Left(s,2) 即为取s 的左 边两个字符再放回 s。 Right:与Left 类似,取字符右边 n 个字符。
Visual_Basic串口通信实验
实验一Visual Basic串口通信实验利用Visual Basic开发串口通信程序既可以使用MSComm控件也可以调用Windows API 函数。
不过,只要MSComm可以被选用,它几乎总是我们推荐的选择,因为MSComm的功能和API调用一样好甚至比它还好且使用起来更加简单。
在本章提供的串口通信程序设计中,除了PC机与PC机串口通信外,PC机与单片机、PC机与智能仪表、PC机与PLC、PC机与GSM短信模块等串口通信任务的实现均采用MSComm控件。
1.1 PC机与PC机串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台PC机串口三线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。
1.1.1 设计目的1)掌握PC机与PC机串口通信的线路连接方法。
2)利用MSComm控件实现PC机与PC机串口通信的程序设计方法。
1.1.2 设计用软、硬件本设计用到的硬件和软件清单见表6-1。
1.1.3 硬件线路线路说明:在计算机通电前,按图1-1所示将2台PC机通过串口线连接起来:PC机A 串口COM1端口的TXD与PC机B串口COM1端口的RXD相连;PC机A串口COM1端口的RXD与PC机B串口COM1端口的TXD相连;PC机A串口COM1端口的GND与PC机B串口COM1端口的GND相连。
6.1.4 设计任务利用MSComm控件编写程序实现PC机与PC机串口通信。
216图1-1 PC机与PC机串口通信线路任务要求:两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。
实际上就是编写一个简单的双机聊天程序。
RS232串口通信技术在Visual Basic中的应用及注意问题
绘制出来。
保存所有数据,将其另存为.DXF格式数据。
3DXF数据到GIS数据的转换3.1CAD与GIS数据结构比较CAD与GIS的图形格式存在较大的差异,对它的标准没有统一的支持,这就造成数据共享具有极大的不便性。
CAD主要由线宽、颜色、线型、符号等静态图形集合了多个图层,它的图层与GIS中严密组织的图层存在较大分别,GIS的单一文件中将各种实体和元素都包含在了里面,利用各种图层和标注来描述属性数据,SuperMap中数据根据类型进行分层存储管理。
3.2转换方法SuperMap中有三种导入CAD数据的方式,也就是将CAD类型数据分别导入成复合数据集、简单数据集以及CAD数据中指定的图层。
在进行转换时,需要将绘制的DWG格式图件转化为DXF。
不管是图形的数据转换或是属性数据的转换,在转换中不管多少都会产生一些问题,如数据冗余、要素丢失、要素变形等,所以需要对SuperMap进行适当的改造。
3.3CAD中数据优化处理在CAD中进行数据的优化处理,主要包括地物编辑,如多边形经过CAD的优化处理后看不出缺口就行了,但在SuperMap中就要求多边形严格闭合。
另外还有转换要素的选择及重新分层,在CAD 中是通过各种符号和颜色来表示地物,形成不同的图层,有些对GIS有用,而有些需要筛选。
3.4GIS中数据优化处理SuperMap图形处理能力相比于CAD较弱,在进行转换时需要在CAD中进行处理后在转入,当转入SuperMap数据时,为了让图形更加美观和完善,可继续进行处理。
如将同类相邻的地物转入到CAD时,可以对其进行并等运算、逻辑运算等,使它形成一个整体。
4总结在地理信息系统中,数据是它的核心,注重对数据的处理才能得到准确完整的地理图。
为了满足用户的需求,要不断对地理信息系统进行深入的研究,为用户提供精确地、实时的地理数据。
参考文献:[1]陈浩.基于GIS的多尺度生态地理物种入侵预测建模[D].武汉大学,2010.[2]王富强.空间知识地图构建理论和方法研究[D].解放军信息工程大学,2013.[3]李三玉.GIS图形数据更新解决方案[J].现代计算机,2005,10: 109-111.摘要:本文介绍了RS232通信的基本概念以及常用通信技术。
使用Visual Basic开发通讯软件(二)
使用Visual Basic开发通讯软件(二)出处:eNet学院责任编辑:zwg[01-12-11 17:23] 作者:enet1.串口初始化、设置程序在程序初始化时,先对串口初始化。
因为使用rts/cts握手信号的硬件设备只有rts信号置为高才能接收数据,所以需将mscomm通信控件的rtsenable属性设为true。
由于modem在处于命令状态时,通过串口发送的命令以及命令结果均会回显在输入缓冲区中,因此在进入在线状态前,禁止产生ev-receive事件,避免数据误处理。
由于windows是多任务系统,在进行数据收发循环处理时,应调用doevents事件,将控制权交还系统,允许windows执行其他任务。
但应注意,在处理oncomm事件时小心使用doevents,避免系统又产生oncomm事件,造成嵌套,出现堆栈溢出错误。
sub form-load()comm1.commportκ1′com1口通信comm1.settingsκ″9600,n,8,1″′波特率9600,无校验,8位数据位1位停止位comm1.outbuffersizeκoutpack′设置输出缓冲区大小comm1.inbuffersizeκinpack′设置输入缓冲区大小comm1.inputlenκ1′每次从输入缓冲区中取一个字符comm1.rtsenableκ-1′rts信号为高comm1.rthresholdκ0′不产生mscomm-ev-receive事件comm1.portopenκ-1′打开串口cdκcomm1.cdholding′取载波检测信号线原始状态comm1.outputκ″atqov1wosoκ1&c1&d2&yowo″′初始化modemdo doeventsloopuntilcomm1.outbuffercountκ0end sub2.上位机拨号呼叫下位机subcallcom-click()comm1.outputκ″atdt″&phonnum$&chr$(13)′向modem发拨号命令do doeventsloopuntilcomm1.outbuffercountκ0end sub3.下位机modem应答,连通后开始定时传输数据下位机检测cd,判断是否连通:sub comm1-oncomm()select casecomm1.commeventcase5 ′mscomm-ev-cdtimer1.enabledκ-1′启动定时器end selectend subvb传送定长字符串,数据接收处理相对简单。
VisualBasic串口通讯调试方法
1---真理惟一可靠的标准就是永远自相符合VisualBasic串口通讯调试方法现有电子秤一台,使用串口与计算机进行通讯。
编写VB程序来访问串口,达到读取电子秤上显示的数据。
该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600、偶校验、7个数据位、2个停止位。
所有字符均发送11位ASCII码,一个起始位。
在VB中与串口通讯需要引入控件MSComm串口通讯控件(在MicrosoftCommControl6.0中)。
具体程序如下:控件简称:MSCDimOut(12)AsByte'接收var中的值DimvarAsVariant'接收MSC.input中的数值DimnReceAsInteger'计算MSC.inputbuffer的个数DimiAsInteger,jAsInteger'随即变量,计算循环PrivateSubForm_Load()ClearTextWithMSC.CommPort=1'设置Com1为通信端口2---真理惟一可靠的标准就是永远自相符合.Settings=9600,E,7,2'设置通信端口参数9600赫兹、偶校验、7个数据位、1个停止位.(这里需要进一步说明的是:.Setting=”BBBB,P,D,S”。
含义是:B:BaudRate(波特率);P:Parity(奇偶);D:DataBit;S:StopBit).InBufferSize=40'设置缓冲区接收数据为40字节.InputLen=1'设置Input一次从接收缓冲读取字节数为1.RThreshold=1'设置接收一个字节就产生OnComm事件EndWithEndSubPrivateSubClearText()Text3.Text=\Text2.Text=_x0005_Text1.Text=\EndSubPrivateSubCommand1_Click()ClearText'nRece=0'计数器清零3---真理惟一可靠的标准就是永远自相符合WithMSC.InputMode=comInputModeBinary'设置数据接收模式为二进制形式.InBufferCount=0'清除接收缓冲区IfNot.PortOpenThen.PortOpen=True'打开通信端口EndIfEndWithEndSubPrivateSubMSC_OnComm()DelayTime‘用来延续时间ClearTextWithMSCmEvent'判断通信事件CasecomEvReceive:'收到Rthreshold个字节产生的接收事件SwichVar14---真理惟一可靠的标准就是永远自相符合IfOut(1)=2Then'判断是否为数据的开始标志.RThreshold=0'关闭OnComm事件接收EndIfDoDoEventsLoopUntil.InBufferCount>=3'循环等待接收缓冲区>=3个字节'nRece=nRece+1Fori=2To12SwichVariText1.Text=Text1.Text&Chr(Out(i))NextText1.Text=LTrim(Text1.Text)Text2.Text=Text2.Text&CStr(nRece).RThreshold=1'打开MSComm事件接收CaseElse5---真理惟一可靠的标准就是永远自相符合'.PortOpen=FalseEndSelectEndWithEndSubPrivateSubDelayTime() DimbDTAsBooleanDimsPreviousAsSingle,sLastAsSinglebDT=TruesPrevious=Timer(Timer可以计算从子夜到现在所经过的秒数,在MicrosoftWindows中,Timer函数可以返回一秒的小数部分) DoWhilebDTIfTimer-sPrevious>=0.3ThenbDT=FalseLoopbDT=TrueEndSub6---真理惟一可靠的标准就是永远自相符合(通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms发送一个字节,连续读取串口数据时要在程序中添加循环等待程序)PrivateSubSwichVar(ByValnNumAsInteger)DelayTimevar=Nullvar=MSC.InputOut(nNum)=var(0)EndSub(设置接收数据模式采用二进制形式,即InputMode=comInputModeBinary,但用Input属性读取数据时,不能直接赋值给Byte类型变量,只能通过先赋值给一个Variant类型变量,返回一个二进制数据的数组,再转换保存到Byte类型数变量中。
利用Visual Basic实现串行通信技术
B 60 中通 信控件在 Wid ws 台下进 行通信软件 的开发,并 给出 了事例 的基本通 信程 序 . ac. no 平 关 键 词 :Vi a a i Mso s lB s c mmlV u c BX通 信控件 I程 序设计
中圈分类号 ;T 330 P 9 .2
文 献 标识 码 :A
统提出资源申请 要求 ( 打开 串口) ,通信完成后必须释放资源 ( 关闭串口) 。
2 RS 3 C串 口通 信接 线 方 法 ( 22 三线制 )
一
个完 整的 RS 3 C接 口有 2 -2 2 2根线 ,采 用标 准的 2 插头 5芯
P C
PC
座 ( 或者 9芯插头座 ) 5芯和 9芯的主要信号线相同。首先 ,串 。2 口传输 数据 只要 有 接收 数 据 针 脚 和 发 送针 脚就 能 实现 :同一个 串 口 的接收脚和发送脚直接 用线相连 ;两个串口相连或一个串口 多个 和 串口相连 同一对 9 针串 口和 2 针 串口, 5 均是 2 3 与 交叉相连 , 信号
Es le ’
M SCo m . m 1 DTRE b e na l =Fas l e
En I df
3 打开时 向 MO E 发出一些命令来设置有关参数 ,其 中 S = (>= ) ) DM 0 nn 1自动应答 . n为响铃次数 ; E/ 0 El关 闭/ 开 命令 字 符 回应 lO / mo e 返 回/ 打 O Ol dm 不返 回结 果 码 lMO M l关 闭 / 开 MOD M 扬 声 / 打 E 器 ,例 程 如 下 :
伊 崇信 ’ 赵
颖
卉哈尔 1 10 ) 6 0 0 (. 1齐齐哈 尔大学信息学院 计算机系.齐齐哈 尔 1 10 , .齐齐哈尔铁路运输职工大学 计算机 系.齐: 6 06 2
Visual Basic串口通信程序设计实例
第6章Visual Basic串口通信程序设计典型实例利用Visual Basic开发串口通信程序既可以使用MSComm控件也可以调用Windows API 函数。
不过,只要MSComm可以被选用,它几乎总是我们推荐的选择,因为MSComm的功能和API调用一样好甚至比它还好且使用起来更加简单。
在本章提供的串口通信程序设计中,除了PC机与PC机串口通信外,PC机与单片机、PC机与智能仪表、PC机与PLC、PC机与GSM短信模块等串口通信任务的实现均采用MSComm控件。
6.1 PC机与PC机串口通信程序设计当两台串口设备通信距离较近时,可以直接连接,最简单的情况,在通信中只需三根线(发送线、接收线、信号地线)便可实现全双工异步串行通信。
本设计通过两台PC机串口三线连接,介绍了利用API函数和MSComm控件设计串口通信程序的方法,包括字符与文件的发送与接收。
6.1.1 设计目的1)掌握PC机与PC机串口通信的线路连接方法。
2)利用MSComm控件和VB-API函数实现PC机与PC机串口通信的程序设计方法。
6.1.2 设计用软、硬件本设计用到的硬件和软件清单见表6-1。
6.1.3 硬件线路线路说明:在计算机通电前,按图6-1所示将2台PC机通过串口线连接起来:PC机A 串口COM1端口的TXD与PC机B串口COM1端口的RXD相连;PC机A串口COM1端口的RXD与PC机B串口COM1端口的TXD相连;PC机A串口COM1端口的GND与PC机B串口COM1端口的GND相连。
6.1.4 设计任务利用MSComm控件和Visual Basic API函数编写程序实现PC机与PC机串口通信。
图6-1 PC机与PC机串口通信线路任务要求:两台计算机互发字符并自动接收,如一台计算机输入字符串“Please return abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“abc123”,单击“发送字符”命令,信息返回到第一组的计算机。
VB实现串口通讯
VB实现串口通讯目前,Visual Basic (简称VB)已成为WINDOWS 系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。
VB 支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。
在VB 应用程序中可以方便地调用WINDOWS API函数,使得编程效率提高,应用功能增强。
利用VB 提供的这些功能,我们可以有三种方法完成串口通信。
一种是用VB 提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API 函数,使用WINDOWS 提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/ 输出完成,该方法简便易行,但有一定的局限性。
一、利用通信控件(MSCOMM)完成串口通信VB 提供了通信控件MSCOMM,文件名为MSCOMM. VBX。
该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以触发OnComm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问CommEvent 属性来了解通信的情况,进行收发数据的处理。
每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
1、通信控件的事件及基本属性(1)事件OnComm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。
通过对CommEvent 属性的判断可知当前的通信错误和事件,分别对每个CommEvent 值进行编程就完成了对各个错误和事件的处理。
如:CommEvent = MSCOMM—EV—SEND 表示发送事件。
这些信息可从VB 提供的常量文件CONSTANT. TXT中查出。
(2)属性CommPort :设置通信控件与哪个串口相连接,设置并返回通信口号。
Setting :设置通信的信息格式,为字符型。
顺序为:波特率、校验、数据位、停止位。
PortOpen :布尔型、开关通信口。
串口通讯方法的三种实现
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
用VisualBasic实现串口通信的三种方法
2. 利用通信控件的实例
Sub Form1 —load ()
form1. show ′设置 COM1
comm1. commport = 1
comm1. Setting = " 9600 ,o ,8 ,1" ′波特率 : 9600 奇校验 ,8
位数据 ,1 位停止位
comm1. Inputlen = 0
一 、利用通信控件( MSCOMM) 完成串口通信
VB 提供了通信控件 MSCOMM,文件名为 MSCOMM. VBX。 该控件可设置串行通信的数据发送和接收 ,对串口状态及串 行通信的信息格式和协议进行设置 。在通信过程中可以触发 OnComm 事件 ,在该事件过程进行数据检验处理及检错 ,还可 以通过编程访问 CommEvent 属性来了解通信的情况 ,进行收 发数据的处理 。每个通信控件对应一个串口 ,如果要访问多 个通信口 ,则要设计多个通信控件 。
利用 VB 提供的这些功能 ,我们可以有三种方法完成串 口通信 。一种是用 VB 提供的具有强大功能的通信控件 ;另一 种方法是调用 WINDOWS API 函数 ,使用 WINDOWS 提供的 通信函数编写移植性强的应用程序 ;第三是利用文件的输 入/ 输出完成 ,该方法简便易行 ,但有一定的局限性 。
EofChar As String 3 1
·6 ·
参数 As 类型 ]) As 类型 在声明中 :DECLARE 表示声明 DLL 中的函数 ,当声明是
不具有返回值的过程时用 SUB 关键字 ,而如果调用的函数具 有返回值 ,则必须用 FUNCTION 关键字将其声明为函数并在 声明语句的最后用 AS 指明函数返回值的类型 。LIB 关键字表 示当前声明的过程或函数是库名所指定的库中函数而非 VB 本身的函数 。库名 ,就是对应动态链接库的名称 ,其中通信函 数在 USER 库中 。ByVal 关键字将原参数数据类型一一对应到 VB 类型中 。
串口通讯方法的三种实现
串口通讯方法的三种实现串口通讯是一种常见的数据通信方式,可用于实现不同设备之间的数据传输。
下面将介绍串口通讯的三种实现方法,包括基于硬件的实现、基于API的实现和基于库函数的实现。
第一种实现方法是基于硬件的实现。
串口通信的硬件实现需要通过串口控制器和对应的串口线缆来实现。
这种方式的实现比较繁琐,需要对硬件接口有一定的了解,包括串口的引脚定义、通信协议等。
但是这种方式的性能比较稳定,适用于一些对通信速率和实时性要求较高的场景。
第二种实现方法是基于API的实现。
API是应用程序接口的缩写,是一组提供给开发人员使用的函数和数据结构。
在串口通信中,操作系统提供了一些串口通信相关的API,开发人员可以通过使用这些API来实现串口通信。
这种方式的实现相对较为简单,只需要了解相应的API函数调用方式和参数定义即可。
通过调用API函数,可以完成串口的打开、关闭、读写数据等操作。
这种方式适用于开发人员对硬件接口不熟悉或者不想过多关注底层实现的场景。
第三种实现方法是基于库函数的实现。
库函数是一组预先编译好的函数,可以直接在程序中调用。
在串口通信中,有一些开源的串口通信库,如PySerial、SerialPort等,可以帮助开发人员实现串口通信。
这种方式的实现比较方便快捷,只需要将相应的库文件引入到项目中,然后通过调用库函数来实现串口通信。
通过库函数,可以实现串口的配置、打开、关闭、读写数据等操作。
这种方式适用于多种编程语言的开发,如Python、Java、C#等。
不同的库函数提供的接口可能有所不同,但整体实现方式是相似的。
总结起来,串口通讯的实现方法有基于硬件的实现、基于API的实现和基于库函数的实现。
其中,基于硬件的实现需要了解硬件接口和通信协议,操作相对繁琐。
基于API的实现通过调用操作系统提供的API函数来实现串口通信,相对简单快捷。
基于库函数的实现通过调用开源的串口通信库函数来实现串口通信,方便灵活。
开发人员可以根据实际情况选择适合的实现方法来完成串口通信的开发。
用Visual Basic实现串口通信的三种方法
用Visual Basic实现串口通信的三种方法
赵海燕
【期刊名称】《计算机与通信》
【年(卷),期】1997(000)001
【摘要】用VisualBasic实现串口通信的三种方法赵海燕目前,VisualBasic(简称VB)已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。
VB支持面向对象的程序设计,具有结构化的事件驱...
【总页数】4页(P5-7,20)
【作者】赵海燕
【作者单位】无
【正文语种】中文
【中图分类】TP311.11
【相关文献】
1.Visual Basic操作串口通信的技术方案 [J], 王晓明
2.RS232串口通信技术在Visual Basic中的应用及注意问题 [J], 宋晶晶
3.Visual Basic串口通信中的字符模式研究 [J], 唐振;王礼鹏;何睿
4.用Visual Basic 6.O实现组态王和单片机的串口通信 [J], 宗风强;王振友
5.用VisualBasic实现串口通信的三种方法 [J], 赵海燕
因版权原因,仅展示原文概要,查看原文内容请购买。
visualbasic串口通信及编程实例
visualbasic串口通信及编程实例Visual Basic串口通信及编程实例在实际的工业控制、机器人控制、智能家居等领域中,使用串口通信是一种非常广泛的方式。
Visual Basic (VB) 是一种微软公司开发的高级编程语言,它不仅易于学习,而且拥有丰富的图形界面设计和数据处理功能。
在本篇文章中,我们将深入介绍如何使用VB实现串口通信。
1. 建立串口通信首先,我们需要在VB中创建一个新的窗口(Form),然后打开工具箱,从中拖拽出一个SerialPort(串口)控件。
在控件属性中,我们需要为其指定相关的参数,例如串口名称、波特率、数据位、停止位、校验位等。
通常情况下,这些参数需要根据硬件设备的配置来进行调整。
在VB中实现串口通信的核心部分是对于SerialPort控件的事件监控。
具体来讲,当SerialPort收到一个数据包时,它会触发一个DataReceived事件。
对于这个事件,我们可以在程序中编写回调函数进行处理。
例如:Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e AsSystem.IO.Ports.SerialDataReceivedEventArgs) HandlesSerialPort1.DataReceived'在这里实现对于数据包的解析和处理End Sub2. 数据读取和发送在SerialPort控件中,有几种方法可以实现数据的读取和发送。
下面我们将介绍其中两种方法:(1) ReadExisting这个方法可以从串口中读取所有现有的数据,例如:Dim data As String = SerialPort1.ReadExisting()(2) Write这个方法可以向串口发送数据,例如:SerialPort1.Write("Hello World")注意,这个函数只能发送字符串数据。
visual basic串口通信及测控应用实例详解光盘内容
visual basic串口通信及测控应用实例详解光盘内容Visual Basic串口通信及测控应用实例详解串口通信在测控应用领域中经常使用,可实现设备与计算机之间的数据传输与交互。
Visual Basic是一种常用的编程语言,能够方便地实现串口通信功能。
本文将以"Visual Basic串口通信及测控应用实例"为主题,详细介绍串口通信的基本原理和使用方法,并给出一个具体的实例来演示其在测控应用中的应用。
一、串口通信基础知识1. 串口通信的定义串口通信是指通过计算机上的串口与外部设备进行数据交互的过程。
常见的串口类型有RS232、RS485等。
2. 串口通信的基本原理串口通信使用了一对串行线(数据线和时钟线)来进行数据的传输。
数据通过位的形式逐个传输,根据预设的波特率和数据格式进行解析。
3. 串口通信涉及的参数串口通信涉及的参数包括波特率、数据位、停止位和校验位等。
波特率是指数据传输速率,数据位是指每个数据帧中的位数,停止位是数据帧结束的标志,校验位用来检验数据传输的正确性。
二、Visual Basic中的串口通信1. 创建串口通信对象在Visual Basic中,需要引用System.IO.Ports命名空间,并使用SerialPort类来创建串口通信对象。
例如:Imports System.IO.PortsPrivate port As SerialPort = New SerialPort()2. 设置串口参数在创建完串口通信对象后,需要设置串口的相关参数,包括端口名称、波特率、数据位、停止位和校验位等。
例如:port.PortName = "COM1"port.BaudRate = 9600port.DataBits = 8port.StopBits = StopBits.Oneport.Parity = Parity.None3. 打开和关闭串口设置完串口参数后,可以通过Open方法来打开串口,实现与外部设备的连接。
VISUAL BASIC串口通信程序设计
Visual Basic串口通信程序设计1mscomm.vbx通信控件描述mscomm.vbx通信控件可直接从vb的toolbox中加入窗体form,即可用其进行通信。
若toolbox中无此控件,则用tools的custom controls将mscomm.vbx从windows的system子目录中加入vb的toolbox中。
1.1通信方式mscomm.vbx有2种不同的方式来处理和解决各类通信软件的开发和设计问题1、事件驱动。
它与c/c++写windows软件时的窗口回调函数类似,是1种功能强大的处理问题的方法。
在实际工作中,往往要处理许多通信中的相关事件,例如:当线路数据到达本端或cd线和rts信号线状态发生变化时,要求我们使用相应的事件来跟踪和处理,该控件是使用oncomm事件来实现的,它也包括检测和处理通信错误等方面的问题,commevent值返回最近的通信事件或错误的数字代码。
通信控件详细的错误和事件举例有:mscomm-er-break收到1个break signalmscomm-er-cdto cd信号超时……mscomm-ev-cd cd信号改变……2、查询方式。
由程序设计者负责读取commevent的值并处理所发生的错误或事件。
通常简单的应用程序设计可采用这种办法。
1.2通信控件的属性利用通信控件编制通信程序,关键是准确理解设置通信控件的属性。
mscomm.vbx提供了27个关于通信控件方面的属性,例如:commport:设置或返回通信口编号。
settings:设置或返回以字符串形式出现的数据通信格式:波特率、校验、数据位和停止位。
portopen:设置或返回通信口状态(包括打开和关闭1个通信口)……3、实例本程序应用背景为dcc95型静电除尘器自动监控系统软件,解决1个pc工控机(主站)与32个单片机(子站)之间的通信问题。
主站与子站之间这总线式网络结构,采用rs-485通信标准,以问答方式进行数据通信。
vb串口通信编程
vb串口通信编程一、概述串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。
提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。
实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通讯,甚至其实现方法和C、汇编相比,要更加快捷方便。
下面,笔者就介绍一下在VB中实现串口通讯的方法。
在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控件。
我们只要通过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。
下面,笔者就简要地介绍一下MSComm控件的使用方法。
二、MSComm控件的主要属性、事件1、MSComm的属性由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。
Commport:设置通讯所占用的串口号。
如设成1(默认值),表示对Com1进行操作。
Setting:对串口通讯的相关参数。
包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。
其默认值是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。
Portopen:设置串口状态,值为True时打开串口,值为False时关闭串口。
Input:从输入寄存器读取数据,返回值为从串口读取的数据内容,同时输入寄存器将被清空。
Ouput:发送数据到输出寄存器。
InBufferCount:设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。
InputMode:设置从输入寄存器中读取数据的形式。
若值为0,则表示以文本形式读取;值为1,则表示以二进制形式读取。
OutBufferCount:设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网络用V isual Basic实现串口通信的三种方法●赵海燕目前,V isual Basic(简称V B)已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。
V B支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件。
在V B应用程序中可以方便地调用WINDOWS API 函数,使得编程效率提高,应用功能增强。
利用V B提供的这些功能,我们可以有三种方法完成串口通信。
一种是用V B提供的具有强大功能的通信控件;另一种方法是调用WINDOWS API函数,使用WINDOWS提供的通信函数编写移植性强的应用程序;第三是利用文件的输入/输出完成,该方法简便易行,但有一定的局限性。
一、利用通信控件(MSCOMM)完成串口通信V B提供了通信控件M SCOM M,文件名为M SCOM M.V BX。
该控件可设置串行通信的数据发送和接收,对串口状态及串行通信的信息格式和协议进行设置。
在通信过程中可以触发OnC omm事件,在该事件过程进行数据检验处理及检错,还可以通过编程访问C ommE vent属性来了解通信的情况,进行收发数据的处理。
每个通信控件对应一个串口,如果要访问多个通信口,则要设计多个通信控件。
1.通信控件的事件及基本属性(1)事件OnC omm:通信控件只提供了一个事件,该事件的触发可以对串口的通信事件及错误进行处理。
通过对C ommE vent属性的判断可知当前的通信错误和事件,分别对每个C om2 mE vent值进行编程就完成了对各个错误和事件的处理。
如: C ommE vent=M SCOM M—EV—SEND表示发送事件。
这些信息可从V B提供的常量文件CONST ANT.T XT中查出。
(2)属性C ommP ort:设置通信控件与哪个串口相连接,设置并返回通信口号。
S ettin g:设置通信的信息格式,为字符型。
顺序为:波特率、校验、数据位、停止位。
P ortO p en:布尔型、开关通信口。
In p utLen:从接收缓冲区读取字符个数。
In p ut,Out p ut:读取接收缓冲区或写入发送缓冲区字符。
以上五种属性对串口完成基本的设置和操作,下面的三种属性是描述如何利用V B提供的事件驱动机制来实现通信。
C ommE vent:返回通信过程中产生的错误信息及事件,了解通信状况。
ST hresh old:设置并返回不触发OnC omm事件时发送缓冲区被允许的最少字符数。
当缓冲区的字符少于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M M—EV—SEND。
当ST hresh old=0则禁止发送触发OnC omm事件,当ST hresh old=1则发送缓冲区为空时就触发OnC omm事件。
利用这一属性,就可完成发送数据后的一系列操作。
如:对刚发送的数据进行处理,当串口是和M ODEM通信时,发送完数据后可进行拆除线路联接、挂机等操作。
RT hresh old:设置并返回不触发OnC omm事件时接收缓冲区被允许的最多字符数。
当缓冲区的字符多于设置的值时,则触发OnC omm事件,并把C ommE vent设为M SCOM M—EV—RECEIVE,当RT hresh old=0则禁止接收触发OnC omm事件,当RT hresh old=1则接收缓冲区有一个或更多字符时就触发OnC omm事件。
利用这一属性,就可完成对串口接收数据的处理。
2.利用通信控件的实例Sub F orm1—load()form1.sh ow′设置COM1m p ort=1comm1.S ettin g="9600,o,8,1"′波特率:9600奇校验,8位数据,1位停止位comm1.In p utlen=0′读取接收缓冲区的所有字符comm1.OutBufferS ize=512′设置发送缓冲区为512字节comm1.InBufferS ize=512′设置接收缓冲区为512字节comm1.ST hresh old=0′禁止发送事件comm1.RT hresh old=1′每一个字符到接收缓冲区都触发接收事件′设置COM2m p ort=2comm2.S ettin g="2400,e,8,1"网络′波特率:2400偶验,8位数据,1位停止位comm2.In p utlen=0′读取接收缓冲区的所有字符comm2.OutBufferS ize=512′设置发送缓冲区为512字节comm2.InBufferS ize=512′设置接收缓冲区为512字节comm2.ST hresh old=1′发送缓冲区空触发发送事件comm2.RT hresh old=0′禁止接收事件′打开COM1,COM2comm1.P orto p en=T ruecomm2.P orto p en=T rueT im er1.interval=5000End SubSub C omm1—OnC omm()Dim Inbuff as strin gDim i as inte g er,n as inte g er,t as inte g erS elect C ase C omm1.C ommE vencase M SCOM M—EV—RECEIVEInbuff=C omm1.In p utn=len(Inbuff)F or i=1to nt=Asc(M id(Inbuff,i,1))or&HFFp rint fNext iEnd S electEnd SubSub C omm2—OnC omm()S elect C ase C omm2.C ommE ventC ase M SCOM M—EV—SENDPrint tim eEnd S electEnd SubSub T im er1—T im er()C omm2.out p ut=S econd(N ow)End sub二、通过调用API函数实现通信以上说明了用V B提供的控件实现通信的方法,只要理解了V B控件的机制就很容易完成对串口的操作,但可移植性差。
但V B可以很容易调用API函数实现通信。
1.VB对API的调用V B使用动态链接库DLL(D y nam ic Link Libraries)的能力,大大扩展了其功能。
WINDOWS本身提供了API函数包括三大动态链接库:KERNE L库、G DI库、USER库,通过V B用户可以直接调用这些库中的函数。
调用之前,必须首先在V B中声明。
该声明可为模块级或窗体级,当作为模块级声明时,其作用域为所有FORM和M ODU LE,而作为窗体级声明时其作用域为该声明所在的FORM。
V B调用DLL的格式:Declare Sub过程名Lib″库名″Alias″别名″]([B y Val参数As类型])Declare Function函数名Lib″库名″[Alias″别名″]([B y Val 参数As类型])As类型在声明中:DEC LARE表示声明DLL中的函数,当声明是不具有返回值的过程时用SU B关键字,而如果调用的函数具有返回值,则必须用FUNCTION关键字将其声明为函数并在声明语句的最后用AS指明函数返回值的类型。
LI B关键字表示当前声明的过程或函数是库名所指定的库中函数而非V B 本身的函数。
库名,就是对应动态链接库的名称,其中通信函数在USER库中。
B y Val关键字将原参数数据类型一一对应到V B类型中。
WINDOWS的HE LP文件WINS DK.H LP中包含了完整的WINDOWS API函数信息,可用该文件查看联机函数、数据结构及错误信息。
2.API提供的通信函数为了方便说明,我们将有关通信的函数及相关的数据结构放在全局模块中,文件名为COM M.BAS(见API编程函数实例)。
以下是这些函数的基本介绍:(1)O p enC omm(I p C omNam e As Strin g,wInQueue As Inte2g er,w OutQueue As Inte g er)I p C omNam e:设备名,以“COM n”的形式来说明,n为设备号;wInQueue、w OutQueue:分别以字节为单位说明发送、接收缓冲区的大小。
该函数调用成功返回打开的设备号,否则返回一负数代表错误信息码。
(2)S etC ommState(I p DC B As DC B)I p DC B:是DC B结构存放设备所希望的通信设置(DC B结构如COM M.BAS中所示),其中DC B的I D成员必须标识该设备。
如果函数调用成功返回0;否则,返回值小于0。
(3)ReadC omm(nC id As Inte g er,I p Buf As Strin g,nS ize As Inte g er)W riteC omm(nC id As Inte g er,I p Buf As Strin g,nS ize As In2 te g er)这是用来对通信设备进行读写的函数,nC id:说明要读写的通信设备号,I p Buf:为读写缓冲区,nS ize:为要读写的字节数。
如果读写成功,返回读写的字节数,否则是小于0的值,并且其绝对值为读写的字节数。
(4)C losecomm(nC id As Inte g er)该函数关闭nC id所指定的通信设备,并且释放分配给设备的发送,接收缓冲存储器,调用成功返回0;否则,返回值小于0。
(5)BuildC omm DC B(I p Def As Strin g,I p DC B As DC B)l p Def:为一字符串指定设备控制信息,此字符串具有M S-DOS中M ODE命令所使用的参数形式。
I p DC B:为一DC B 数据结构。
该函数将I p Def字符串转换成串行设备控制块(DC B)代码。
(6)G etC ommError(nC id As Inte g er,I p Stat As COM ST AT)该函数检取nC id指定的设备最近的错误值和当前状态, I p Stat:是COM ST AT结构,具体形式如COM M.BAS中所定义的。
返回值为COM M.BAS中带CE-的常量的某种组合。
3.用API函数编程实例这个例子是一仿真发送机,将从键盘输入的字符发送给COM端口。
在FORM中加一按钮COM M AND1来关闭通信口。
SS网络(下转第20页)S S S S S T y p e DC BId As Strin g 31BaudRate As Inte g er B y teS ize As Strin g 31Parit y As Strin g 31Sto p Bits As Strin g 31R lsT im eout As Inte g er CtsT im eout As Inte g er DsrT im eout As Inte g er Bits1As Strin g 31Bits2As Strin g 31X onChar As Strin g 31X offChar As Strin g 31X onLim As Inte g er X offLim As Inte g er PeChar As Strin g 31E ofChar As Strin g 31E vtChar As Strin g 31T xDela y As Inte g er End T y p e T y p e COM ST ATBits As Strin g 31cbInQue As Inte g er cbOutQue As Inte g erEnd T y p eDeclare Function O p enC omm Lib ″User ″(B y Val I p C omNam e As Strin g ,B y Val wInQueue As Inte g er ,B y Val w OutQueue As In 2te g er )As Inte g erDeclare Function S etC ommState Lib ″User ″(I p DC B As DC B )As Inte g erDeclare Function ReadC omm Lib ″User ″(B y Val nC id As Inte 2g er ,B y Val I p Buf As Strin g ,B y Val nS ize As Inte g er )As Inte 2g erDeclare Function W riteC omm Lib ″User ″(B y Val nC id As Inte 2g er ,B y Val I p Buf As Strin g ,B y Val nS ize As Inte g er )As Inte 2g erDeclare Function C losecomm Lib ″User ″(B y Val nC id As Inte 2g er )As Inte g erDeclare Function BuildC omm DC B Lib ″User ″(B y Val I p Def As Strin g ,I p DC B As DC B )As Inte g erDeclare Function G etC ommError Lib ″User ″(B y Val nC id As Inte g er ,I p Stat As COM ST AT )As Inte g er G lobal I p DC B As DC B G lobal nC id As Inte g er Sub F orm1—load ()Dim comset As Strin g comset =“COM 2"nC id =O p enC omm (comset ,512,512)′打开COM 2设置接收,发送缓冲区为512字节I f nC id <0T hen′处理错误M s g Box “不能打开COM:"+Str (nC id )+“Error Num 2ber :"+Str (nC id ),16end end ifC omm and1.C a p tion =“关闭通信口"′设置串口DC B 设备控制块comset =“COM 2:9600,n ,8,1"I f (BuildC omm DC B (comset ,L p DC B ))T hen M s g Box “不能建立COM M DC B",16end end ifL p DC B.Id =Chr (nC id )I f (S etC ommState (L p DC B ))T hen′设置串口状态M s g Box"不能设置串口状态",16end endif End SubSub F orm1-ke y Press (ke y AsciiAs Inte g er )Dim nsend As inte g er ,x As inte g er Dim L p state As COM ST AT ′通信状态块Static inbuff as strin ginbuff =imbuff +Chr (K e y Ascii )x =G etC ommError (ncid ,L p state )′读取当前串口错误或状态if l p state.cbOutQue <512T hen ′送缓冲区有空间否?Nsend =W riteC omm (nC id ,inbuff ,Len (inbuff ))′发送inbuff if Nsend <=0then Nsend =-Nsend ′忽略错误inbuff =M id (inbuff ,Nsend +1)′清除已发送的字符end if end if End SubSub C omm and1-C lick ()Dim N close As inte g er N close =C loseC omm (nC id )I f N close <0T henM s g Box “不能关闭COM M 口:"+Str (nC id ),16end else ncid =0end ifCmm and1.C a p tion =“通信已关闭”End Sub三、用文件输入/输出技术完成通信用V B 提供的以上两种方法已足以应付各种串行通信的问题。