• IIANews微官网
    扫描二维码 进入微官网
    IIANews微信
    扫描二维码 关注微信
    移动客户端
  • English
2024全景工博会
传感器

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

  2009年01月14日  

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异步串行通信接口通信,数据传输速率为9600bps1位开始位,8位数据位,1位停止位,无奇偶校验位。检测装置不断发送检测数据。每个数据块由4个字节组成,第一个字节的前三位定义为二进制常数1ll,是每个数据块的开始标志,其余3个字节的前三位均为二进制常量000;每两个字节的后五位表示一个十进制数,高位在前,低位在后。如图1所示。

  

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

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

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

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

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

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

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

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

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

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

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

1.3 本装置通信控件的属性

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

rt=2选串行端口2

gs=9600n81 ‘设置9600波特率,无奇偶校验,8个数据位,1个停止位

ferStze=30000设置缓冲区大小为30000个字节

ode=1’输入输出的数据类型为二进制

hold=0不引发接收事件

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

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

1.4 数据处理

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

Function BtoDd1 as byted2 as byteas 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字节二进制数{7E01F6oA}数据传输命令,它必须先存到一个形式为Byte的动态数组,然后再将此动态数组传送出去。采用单击命令按钮方式发送传输命令,过程如下:

Private Sub cmdstart_Click()‘开始按钮

Dim outA()As Byte

……

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

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

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

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

T=Val)’数据采样时 间间隔

CT=Va1)’数据采样时间

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

End Sub

1.6 接收数据程序

接收数据是一个自动的周期性过程,通过子过程来实现,由定时器开启。接收数据时,每次要判断第一个字节是否为一个数据块的起始字节,只有是则连接的4个字节才为正确的数据,否则查看下一字节。通过设置en=7来实现每次从接收缓冲区内读取七个字节的数据,以保证每一个周期能读取一个数据块。接收数据子过程如下:

Sub  ReceriveData()

Dim Buf()As Byte

Dim i As Integer

Dim  Temp  As Integer

Dim  c3 As Byte

Dim U1%U2%

Buf()=

For i=LBound BufTo  UBoundBuf)’查找数据块的第一个字节

If Bufi\32=7 Then

Temp=i

Exit For

End If

Next

For i=0 To 3’读取一个数据块

ci= BufTemP+i

Next

U1=BtoDc0),c1))’调用数据处理函数求数据1

U2=BtoDc2),c3))’调用数据处理函数求数据2

If U1U1 max Then’求数据1的最大值

Ulmax=U1

End If

If U2U2max Then’求数据2的最大值

U2maX=U2

End If

End Sub

1.7 通讯错误的处理

由于外界干扰或电压波动等原因,PC机和阀门启闭动态转知检测装置之间的通信可能会出现错误,如接收缓冲区溢出、连接端口超速等。这些可能发生的事件都能在代码中引起运行错误。为了处理这些错误,须要将错误处理代码添加到程序中。通过控件中的OnComm事件可以捕捉和处理错误。在通信过程中所发生的通信错误是CommEvent属性返回的。当CommEVent属性值发生改变时,表明有通信错误,就会产生OnComm事件。同时,可以利用自动引发OnComm事件的特点在接收过程中加入状态显示码。通信错误的处理程序如下:

Private  Sub  MSComm1_OnComm()

Select Case ent

case ComEventFrame’数据帧错误

X=MsgBoxFraming  Error!,16

…错误处理

Case ComEventOverrun’连接端口超速

X=MsgBox(“数据丢失!”,16

…错误处理

……

End Select

End Sub

2 保存数据

通过串口传送过来的数据经过处理后,连同对应的时间参数,送入数据库,供MIS系统查询、绘制趋势曲线、打印报表等使用。数据表结构如表1所示:

1 数据表结构

列名

数据类型

可否为空

说明

T

Integer2

NOT NULL

时间(主键)

U1

Integer4

NOT NULL

数据1

U2

Integer4

NOT NULL

数据2

列名

数据类型

可否为空

说明

T

Integer2

NOT NULL

时间(主键)

U1

Integer4

NOT NULL

数据1

U2

Integer4

NOT NULL

数据2

3 绘制趋势曲线

将采集到的数据绘制成趋势曲线(U1-TU2-T),进行统计、计算和分析,以得到产品的性能指标。

3.1 绘图方法的使用

VB中,最方便使用的绘图组件是图片框(Picture Box),此组件可以使用相关的绘图方法将数据绘到图片框中,使结果显示在其上。在绘制趋势曲线中只需用到直线的绘制方法,在VB中画直线是迈过Line方法来实现的,它的语法为:

[step] [x1x1] [step](x2y2[<颜色>[B[F]]

其中,x1y1为直线的起点坐标,x2y2为直线的终点坐标,颜色用于设置直线的颜色,BF为绘制矩形时所用。当使用Line方法绘制连结的线时,前一条线的终点就是后一条线的起点。线的宽度取决于DrawWidth属性值,线型取决于DrawStyle属性值。执行Line方法后,CurrentXCurrentY性被参数设置为终点。

3.2 插值公式的使用

间门启闭动态转矩检测系统中PC机接收的数据为每隔一定时间间隔采样、处理和读取的,为了能更好地显示曲线的趋势走向,需要使用插值法求中间点。常用牛顿插值公式计算中间点坐标。牛顿插值公式如下:

牛顿插值公式是一个递推公式,当需要增加一个节点时,只要多计算一行就可以了,比较方便实用。利用该公式即可骗写出在绘制趋势曲线过程中用到的构造牛顿插值公式子过程。

3.3 绘制趋势曲线

读取数据库中的数据,利用牛顿插值函数及Line方法,可得到如图2所示的检测结果趋势曲线(U1-TU2-T

程序代码如下:

Private Sub DrawNewTonGraphXmin As SingleXmax As Singlestp As Singlem1 As Integerm2 As Integerk As SinglecPie As object

Stp为横坐标绘图步长;m1为曲线的横坐标数据在数据表中的字段名,m2为曲线的纵坐标数据在数据表中的字段名;k为曲线比例系数;c为曲线的颜色;Pic为绘图的图片框

Dim x As Single X坐标

Dim y As Single Y坐标

NewTonInterpolationl mlm2调用构造中顿插值公式子过程

dth=2设置曲线宽

yle=vbSolid’设置曲线线型

x=Xmin

y=NewTonInterpolation2x)’用牛顿插值公式求X点的y

xy),c’设置起点

x=x+Stp

While  xXmax

y=NewTonInterpolation2x

-xy*k),c’由上一次的位置画至此点

x=x+stp

Wend

x=Xmax

y=NewTonInterpolation2x

-xy*k),C

      
End Sub

4 结束语

阀门启闭动态转矩检测系统为一主从式系统,上位机为PC机,应用程序全部用VB开发,由PC机实现对整个检测过程的自动控制,可以完整地记录被测阀门在开启与关闭的全过程中所需的时间(开度)与转矩、时间(开度)与位移的关系,并以数据显示、趋势曲线、输出最大值及报表等形式,反映阀门的制造与装配质量信息。本文中给出的原程序均巳在VB6.0环境下调试通过,其中的编写方法对其他类似的检测系统也有一定的借鉴作用。

参考文献

[1] 范逸之.利用Visual Basic实现串并行通信技术.北京:清华大学出版社,2001.

[2] 范逸之.Visual Basic与分布式监控系统[M].北京:清华大学出版社,2002.

最新视频
穿越光影隧道,魏德米勒特别祝福准时到达   
欧姆龙光电传感器E3AS-HL:帮助稳定检测各类复杂工件   
TE 成就稳定、高效的新能源储能系统
Fluke SV600在线声学成像仪无人巡检解决方案
施耐德电气:中压配电和电网自动化
研祥金玛
专题报道
2024全景工博会
2024全景工博会 2024工博会以“工业聚能 新质领航”为全新主题,旨在瞄准我国新型工业化高质量发展的核心技术和重点领域,为产业转型升级提供良好的示范样板。
企业通讯
《我们的回答》ABB电气客户故事
《我们的回答》ABB电气客户故事

全球能源格局加速重构的今天,怎样走好复杂且极具挑战的电气化转型之路?如何用创新技术实现更多电力和更低排放,从而创造美好世

开关电源在设备升级中的性能影响和选型技巧
开关电源在设备升级中的性能影响和选型技巧

随着《中国制造2025》等政策的推进,新一代工业浪潮来临,工控行业迅猛发展,自动化设备需求与日俱增。众所周知,电源是设备

在线会议

社区

Baidu
map