您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > VB MSComm控件下串行通信在电子衡器中的应用
VBMSComm控件下串行通信在电子衡器中的应用发布时间:2005年1月12日摘要:本文首先介绍了异步串行通信的工作方式,然后给出了VBMSComm控件下异步串行通信在电子衡器中的应用实例,包括硬件接口及软件设计。关键词:RS-232异步串行通信VisualBasic电子衡器控件计算机一般提供了2个25针或9针的RS-232标准串行口,简称为COM1和COM2。在某些应用中,我们还可以通过插通信卡来获得额外的RS-232标准串行口。利用这些串行口可以与其它数字设备进行一般的数据通信,计算机的串行接口主要用于远程通信和低速输入输出设备。由于串行数据通信传输线条数最少,而且有许多较便宜的专用芯片可实现它,发送和接受器也简单,因而对数据传输速度要求不高的计算机和数字设备间的近程通信,多采用串行通信实现。而目前各个厂家生产的电子衡器的称重仪表多配有与上位机通信的RS—232C串行接口,因而计算机与称重仪表之间的数据通信用串口很容易实现,只需要制作一条2芯或3芯的数据线编写相应的接口程序即可实现,不需要增加其他硬件设备。采用这种方式组成的微机电子衡器有许多优点:称重仪表经过多年的发展,在数据采集、抗干扰、可靠性等方面技术成熟,质量稳定;而计算机在存储容量、数据处理、查询、统计报表等数据管理方面有明显优势。正是两者的完美结合,才使计算机与称重仪表组成的在线式称重管理系统得到了广泛的应用。1串行通信的工作方式串行通信,可分为同步和异步两种方式。异步方式是指在约定的波特率下,传送和接受的数据不需要严格的保持同步,允许有相对的延迟,虽然速度较慢,但经济实用,所以异步串行通信现大量应用于计算机接口技术中。计算机与称重仪表就采用异步通信的方式传送数据。1.1异步串行通信的数据格式在这种通信方式中,一般以一个字符为一帧。一帧最少由三部分组成:起始位、数据位、停止位,开始是一位起始位以发送一个逻辑“0”表示,接着是表示这个数据的数据位,数据位可以是5位、6位、7位或8位,再加一位奇偶校验位,然后是一个、一个半或二个停止位,停止位以逻辑“1”表示。1.2波特率串行通信每秒传送的位数,传送时先低位后高位。常用的波特率有600、1200、2400、4800、9600等。1.3端口在计算机中,一般都配有两个标准串行口,用COM1和COM2表示。(通常采用2个9针D型阳性插头。)1.4信号线RS—232C标准规定有25根连线,使用21个信号线。在我们讨论的微机电子衡器中仅用到3根信号线,它们是:发送数据线TXD(输出信号),接受数据线RXD(输入信号线),信号地GND。其余信号线定义可参考相关书籍。2串行通信在电子衡器中的应用实例串行通信接口设计,包括硬件、软件设计两部分。在WINDOWS操作系统下,可选用VC++、VB等可视化开发工具。下面将以上海耀华称重系统公司的XK3190—A1+为例,以VB6.0编程语言,说明串行通信的软、硬件设计过程。2.1称重仪表仪表选用上海耀华XK3190-A1+仪表,其串口通信格式如下:2.1.1连续方式发送:所传送的数据为仪表显示的当前称量(毛重或净重),每帧数据由12组数据组成。第X组内容及注释102(XON)开始2+或-符号位3称量数据高位:称量数据::称量数据:8称量数据低位9小数点位数从右到左(0~4)10异或校验高四位11异或校验低四位1203(XOFF)结束2.1.2指令方式发送:通信协议内容较多,详见XK3190—A1+专业技术手册。2.2硬件构成一台计算机通过串口既可与一台称重仪表进行通信,也可与多台称重仪表进行通信。2.2.1计算机与一台称重仪表通信计算机串行口与称重仪表串行口通过通信电缆直接相连.2.2.2计算机与多台称重仪表通信计算机配置有两个标准串行口,最多可与两台称重仪表通信,但通过添加多串口卡或采用RS—485总线可实现与多台称重仪表通信。RS—485总线传输距离远,只用普通双绞线即可挂接多至256个终端。计算机无RS—485接口,计算机端可选用RS—232/RS—485转换器,如波士485C。称重仪表可选用带RS—485接口的仪表,如杭州科利的XK3128仪表,或加RS—232/RS—485转换器。2.3软件设计用VB开发串口通信程序常用两种方法,一种是利用WINDOWS的通信API函数实现,另一种是采用VB内集成的MSComm通信控件实现。实践证明,MSComm控件提供的串行通信功能已能满足一般数据采集和控制系统的RS-232串行通信要求。MSComm控件通过串行端口发送和接收数据,向应用程序提供串行通信,该控件具有丰富的与串口通信密切相关的属性和事件,提供了对串口的各种操作。在实例中选用MSComm控件实现串口通信的编程。2.3.1MSComm控件的主要属性及事件CommPort属性:设置并返回通信端口号。在设计时,可取1到16的任何数(缺省值为1)。PortOpen属性:设置并返回通信端口的状态(打开或关闭)。Settings属性:指定或返回波特率、奇偶性、数据位及终止位参数。格式为:“波特率,奇偶校验位,数据位的位数,停止位的位数”。Sthreshold属性:在MSComm控件设置CommEvent属性为ComEvsend并产生OnComm事件之前,设置并返回传输缓冲区中允许的最小字符数。若设置Sthreshold属性为0(缺省值),数据传输事件不会产生OnComm事件。Rthreshold属性:指定或返回在MSComm控件将CommEvent属性设置为ComEvReceive并生成OnComm事件之前所要接收的字符数目。若将Rthreshold属性设置为0(默认值),将在接收字符时禁止生成OnComm事件。InputLen属性:指定或返回Input属性从接收缓冲区中读到的字符数目。设置属性为0表示Input读取整个缓冲区的内容。Input属性:从接收缓冲区中返回并删除一串字符。Output属性:向发送缓冲区写一个字符串。OnComm事件:当CommEvent属性值更改时出现,表明出现了一个通信事件或一个错误。CommEvent属性:包含一个最近通信事件或错误的值。例如:属性值为ComEvReceive(值为2),接收缓冲区内字符数达到Rthreshold指定的值。2.3.2接口程序部分源代码在窗体中添加MSComm通信控件、TEXTBOX文本框控件及TIMER定时器控件,设置控件属性、编写事件代码即可实现串口通信,用VB6.0编程的部分代码设计如下:2.3.2.1仪表采用连续方式发送数据:(不适合于RS—485总线方式)‘串口初始化模块:PrivateSubForm_Initialize()MSComm1.CommPort=1‘使用COM1口MSComm1.Settings=”4800,N,8,1”‘4800波特率,无奇偶校验,8位数据位,1位停止位MSComm1.InputLen=0‘输入时读整个缓冲区Timer1.Interval=500‘设置定时器定时时间MSComm1.PortOpen=True‘打开端口Timer1.Enabled=True‘打开定时器Endsub‘数据读取及显示模块:PrivateSubTimer1_Time()DimInstringAsString‘变量定义DimDisstringAsstringDimIAslongInstring=MSComm1.Input‘取6位重量数据并显示I=InStr(1,Instring,CHR())Disstring=Mid(Instring,I,6)Text1=DisstringEndsub‘退出模块:PrivateSubForm_QueryunLoad()MSComm1.PortOpen=False‘关闭端口Timer1.Enabled=False‘关闭定时器Endsub2.3.2.2仪表以指令方式发送数据:(适合于以上各种方式)以读取地址为A(01)的称重仪表的数据为例,读取其他地址仪表的数据依次类推。‘串口初始化模块:PrivateSubForm_Initialize()MSComm1.CommPort=1‘使用COM1口MSComm1.Settings=”4800,N,8,1”‘4800波特率,无奇偶校验,8位数据位,1位停止位MSComm1.InputLen=0‘输入时读整个缓冲区MSComm1.PortOpen=True‘打开端口Endsub‘数据读取及显示模块:PrivateSubCommand1_Click()DimInstringAsString‘变量定义MSComm1.Output=chr(2)+chr(65)+chr(66)+chr(48)+chr(51)+chr(3)‘计算机发送指令:‘读A(01)地址称重仪表的毛重值DoWhileMSComm1.inbuffercount14‘等待接收全部数据DoeventsLoopInstring=MSCcomm1.Input‘取重量数据并显示Text1=InstringEndsub‘退出模块:PrivateSubForm_QueryunLoad()MSComm1.PortOpen=False‘关闭端口Endsub3结束语串行通信作为一种技术成熟、方便可靠的通信方式,不失为一种有效的通信手段,因此被广泛应用于工业控制中。计算机与电子衡器在串行异步通信中,除了应保证通信双方的波特率一致外,为了能够成批传送数据,还应保证数据帧同步,以免数据到达端口的速度太快,通信设备可能来不及将数据移入接收缓冲区,造成缓冲区溢出而导致数据丢失。VisualBasic版(精华区)发信人:Love1976(狄飞惊),信区:VisualBasic标题:用MSCOMM控件实现串口通信(经典文章了,转自木棉)发信站:BBS水木清华站(SatApr115:17:292000)这篇文章好象很早就看到了,不过精华区里还没有。现在从木棉转过来,没看过的网友还是可以好好看看的。发信人:nyrx(飞的好累~又不想停),信区:VisualBasic标题:Re:问个问题发信站:华南网木棉站(SunMar2621:02:412000),转信MSComm控件实现中文Win9x下的通信VB5.0/6.0的MSComm通信控件提供了一系列标准通信命令的接口,它允许建立串口连接,可以连接到其他通信设备(如Modem)、还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工的、事件驱动的、高效实用的通信程序。但在实际通信软件设计过程中,MSComm控件并非像想像中那样完美和容易控制,特别是在中文Win95/98下通信时更会出现问题。下面就从基础开始介绍,然后逐步讨论MSComm控件在编程中出现的问题以及编程技巧。一.用MSComm控件通信1.串口通信基础知识一般说来,计算机都有一个或多个串行端口,它们依次为Com1、Com2、...。这些串口还提供了外部设备与PC进行数据传输和通信的通道,这些串口在CPU和外设之间充当解释器的角色。当字符数据从CPU发送给外设时,这些字符数据将被转换成串行比特流数据;当接收数据时,比特流数据被转换为字符数据传递给CPU。再进一步说,在操作系统方面,Windows用通信驱动程序(COMM.DRV)调用API函数发送和接收数据。当用通信控件或声明调用API函数时,它们由COMM.DRV解释并传递给设备驱动程序。作为一个VB程序员,要编写通信程序,只需知道通信控件提供给Windows通信API函数的接口即可,换句话说,只需设定和监视通信控件的属性和事件即可。2.使用MSComm控件在开始使用MSComm控件之前,需要先了解其属性(见下表)。在开始使用MSComm控件之前,需要先了解其属性(见下表)。属性描述数据类型举例CommPort设置并返回通信端口号Integer2Settings设置并返回波特率、校验位、数据位、停止位String9600,N,8,1PortOpen设置并返回端口状态,也可以用于打开和关闭串口Boolea
本文标题:VB MSComm控件下串行通信在电子衡器中的应用
链接地址:https://www.777doc.com/doc-2853901 .html