阀门启闭动态转矩检测装置与PC机的智能串行通信 点击:173 | 回复:0



xiao xiao

    
发表于:2009-02-18 15:53:40
楼主
0 引言

阀门制造的质量越来越受到行业与广大用户的重视,特别是高压、大口径、低温等特殊工况下工作的阀门及重要输送管道上的阀门,若开启或关闭过程中发生机械故障,其后果不可设想。阀门启闭动态转矩检测系统可以完整地记录被测阀门在开启与关闭的全过程中所需的时间(开度)与转矩、时间(开度)与位移的关系,并以数据显尔、趋势曲线、输出最大值及报表等多种形式,反映阀门的制造与装配质量信息,供技术人员进行统计、计算和分析,以获得产品的性能指标,可帮助企业提高产品质量。

阀门启闭动态转矩检测系统以PC机为控制处理中心,由阀门启闭动态转矩检测装置采集数据,然后用异步串行通信方式传给PC机,实现由PC机对整个检测过程的自动控制。VB在开发可视化环境下的检测系统控制软件时有其独特的优势。首先,人机界面的建立比其它工具简单、快速;其次VB提供了串行通信控件,使开发者可以开发串行通信和系统程序,而功能上也提供了不少为用户所设想的简便之处。本义介绍的阀门启闭动态转矩检测系统中的有关程序即选用了VB作为编程工具。

1 阀门启闭动态转矩检测装置与PC机的串行通信

用VB开发串行通信程序一般有两种方法:

①利用Windos的通信API函数

Windows SDK提供了完备的API接口函数,利用API函数编写的串口通信程序功能更强大、更丰富,但编写复杂,其复杂化和专业化使很多开发者望而却步。

②采用通信控件实现

使用控件是VB的一大优势,其编写程序较为简单,大多数VB程序员使用微软公司的MSComm控件来进行串行通信程序的开发。

笔者编写的用于阀门启闭动态转矩检测装置与PC机的串行通信程序,主要利用了MSComm控件的一些属性与方法。MSComm控件提供了标准的事件处理函数、过程,通过设置串行通信的参数(端口号、波特率等),比较容易实现串行通信。

1.1 阀门启闭动态转矩检测系统通信协议

阀门启闭动态转矩检测装置与PC机之间采用RS232异步串行通信接口通信,数据传输速率为9600bps,1位开始位,8位数据位,1位停止位,无奇偶校验位。检测装置不断发送检测数据。每个数据块由4个字节组成,第一个字节的前三位定义为二进制常数1ll,是每个数据块的开始标志,其余3个字节的前三位均为二进制常量000;每两个字节的后五位表示一个十进制数,高位在前,低位在后。如图1所示。



1.2 MSComm控件的主要属性和事件

MSComm控件有很多属性,其中最基本的有以下几个:

1.2.1 CommPort属性:设置并返回通讯端口号。端口号可以设置为l~99的任何数,如MSComm.CommPort=2表示设置当前通讯端口为COM2。

1.2.2 Setting属性:设置并返回波特率、奇偶校验、数据位、停止位。格式为MSComm.Setting=String。String是一个包含四部分的字符串:第一部分为波特率;第二部分为奇偶校验,N表示不校验,M表示符号校验,E表示偶校验,0表示奇校验,S表示空格校验;第三部分为数据位数,其可选值为4,5,6,7,8;第四部分为停止位位数,其可选值为1,l.5,2。Setting属性的缺省值为“9600,N,8,1”。

1.2.3 PortOpen属性:设置并返回通讯端口的状态(打开和关闭)。

1.2.4 Input属性:从接收缓冲区返回和删除字符。该属性在运行时为只读。

1.2.5 InputMode属性:设置和返回Input属性检索的数据类型。


1.2.6 InputLen属性:设置并返回每次InPut属性从接收缓冲区中读取的字符数。InputLen属性的缺省值为0。设置InputLen为0时,Input将读取接收缓冲区的全部字符。

1.2.7 Output属性:向传送缓冲区写数据。要传送的数据可是文本数据或二进制数据。

1.2.8 CommEvent属性:返回最近的通信事件或错误。只要有通讯错误或接收事件发生时就会产生0nComm事件。CommEvent属性中存有该错误或事件的数值代码。

1.2.9 Rthreshold属性:设置或传回引发接收事件的字符数,即属性页上的 “R阀值”。当接收寄存器达到所设置的字符数时,将会引发OnComm事件中的接收事件。此属性的默认值是0,其意义是无论寄存器中有多少字符均不会引发接收事件。

1.3 本装置通信控件的属性

本装置通信控件MSComm1重要属性设置如下:

MSComm1.CommPort=2’选串行端口2

MSComm1.Settings=“9600,n,8,1” ‘设置9600波特率,无奇偶校验,8个数据位,1个停止位

MSComm1.OutBufferStze=30000’设置缓冲区大小为30000个字节

MSComm1.InputMode=1’输入输出的数据类型为二进制

MSComm1.RthreShold=0’不引发接收事件

MSComm1.InputLen=7’指定由串行口一次读入的字符串长度

MSComm控件提供了OnComm事件,用于通信错误或通信事件发生时,用户可在OnComm事件中编写代码。

1.4 数据处理

对接收的每个数据块,要通过一个简单算法,将二进制格式数据转换成两个十进制表示的数据。编写数据处理函数如下:

Function BtoD(d1 as byte,d2 as byte)as integer

BtoD=(d1 And&H10)/16*2^9_

+(dl And&H8)/ 8*2^8_

+(d1 And&H4)/ 4*2^7_

+(dl And&H2)/2*2^6_

+(d1 And&H1)/1*2^5_

+(d2 And&H10)/16*2^4_

+(d2 And &H8)/8*2^3_

+(d2 And &H4)/4*2^2_

+(d2 And &H2)/2*2^1_

+(d2 And &H1)/1*2^0_

End Function

1.5 发送命令程序

为了发送一个4字节二进制数{7E,01,F6,oA}数据传输命令,它必须先存到一个形式为Byte的动态数组,然后再将此动态数组传送出去。采用单击命令按钮方式发送传输命令,过程如下:

Private Sub cmdstart_Click()‘开始按钮

Dim outA()As Byte

……

outA()=ChrB(&H7E)&ChrB(l)&ChrB(&HF6)&ChrB(&HA)

MSComm1.Output=outA’向阀门启闭动态转矩检测装置发送数据传输命令

U1max=0’数据1最大值存储变量清零

U2max=0’数据2最大值存储变量清零

T=Val(TxtSp1Int.Text)’数据采样时 间间隔

CT=Va1(TxtConTime.Text)’数据采样时间


TimerReceive.Enabled=True’启动接收阀门启闭动态转矩检测装置数据定时器

End


楼主最近还看过

SSI ļʱ