VB6.0实现与电磁流量计串口通信论文_于德轩

于德轩

(湖北芭蕉河水电开发有限责任公司 445800)

摘要:实例说明VB6.0编程软件通过MSComm控件实现电脑与电磁流量计串口通信。

关键词:串口通信;属性;事件;端口;软件;程序

Visual Basic6.0(简称VB6.0)提供了串口通信MSComm控件,开发者可以方便快捷的通过VB6.0在微软操作系统编写串口通信程序。

1 串口通信的实现

1.1 实现方式

VB6.0编程软件的MSComm控件的两种处理通信方式:

事件驱动:利用OnComm事件捕获并处理这些通信事件,还可以检查和处理通信错误。

循环查询:通过检查 CommEvent属性的值来循环查询事件和错误。

1.2 控件属性

CommPort:用于设置或返回连接的串口编号,Windows将会利用该串口和外界通信。

Settings:用于设置或返回通信参数。

PortOpen:用于打开和关闭端口。

Input:从接收缓冲区移走一串字符,将缓冲区中收到的数据读入变量。

Output:用于向发送缓冲区写数据流。InputLen:用于设置或返回接收缓冲区内用Input属性命令读入的字节个数。若取0,则Input属性读取整个缓冲区中的内容。

Rthreshold:该属性是一个阀值,当接收缓冲区内字节个数达到或超过该值后就产生OnComm事件,并且CommEvent属性会被设定为ComEvReceive。

CommEvent:如果在通信过程中发生错误或事件,将会引发OnComm 事件并且改变其属性值。

1.3 电磁流量计

L-mag 电磁流量计具有标准的RS-485通讯接口,采用Modbus-RTU标准协议,可以采集瞬时流量,瞬时流速,累积流量等参数。主站发送命令16进制:01 04 10 18 00 02 F5 0C。

1.4 程序实例

建立一个VB6.0标准exe文件,在Form1中分别添加10个对象(见上图)。程序如下:

Option Explicit

Dim read As String '全局变量 读取所有的数据变量

Private Sub Command1_Click()'将发送的数据设置成字节型变量数组,

Dim SenDataR(0 To 7)As Byte '发送读取正向累积数16进制命令:01 04 10 18 00 02 F5 0C

SenDataR(0)= &H1

SenDataR(1)= &H4

SenDataR(2)= &H10

SenDataR(3)= &H18

SenDataR(4)= &H0

SenDataR(5)= &H2

SenDataR(6)= &HF5

SenDataR(7)= &HC

MSComm1.OutBufferCount = 0 '清空接受缓冲区

MSComm1.InBufferCount = 0 '清空发送缓冲区

MSComm1.Output = SenDataR '发送数组变量

read = ""

Text5.Text = ""

End Sub

Private Sub Form_Load()

MSComm1.CommPort = Val(Text2.Text) '端口号 默认端口3

MSComm1.Settings = Val(Text3.Text)& ",n,8,1" '波特率默认9600

MSComm1.OutBufferCount = 0

MSComm1.InBufferCount = 0

MSComm1.RThreshold = 1 '据接收到一个数就响应oncomm事件

MSComm1.InputMode = comInputModeBinary '二进制发送模式

MSComm1.PortOpen = True '端口打开

End Sub

Private Sub MSComm1_OnComm()

Dim getData_len As Long '长整型

Dim getDataR()As Byte '字节型

Dim j As Integer '整型

If MSComm1.CommEvent = comEvReceive Then 'mscomm控件 comEvReceive 事件触发

getDataR = MSComm1.Input '将接收返冲区数据读入变量

getData_len = UBound(getDataR)'Long 型数据,其值为指定的数组维可用的最大下标。

For j = 0 To getData_len '读取数据直到接收的所有数据读取完毕

read = read & Right("00" + Hex(getDataR(j)),2) 'right 取一段字符串的右边几个字符

Next j

End If

Text1.Text = read '显示接收到的所有数据

Text4.Text = Mid(read,7,8) '读取接受到的正向累积数据,读取字符串read中间的字符

Text5.Text = H2D(Text4.Text)'16进制转10进制显示 调用16转10进制函数 H2D()

End Sub

' 用途:将十六进制转化为十进制

Public Function H2D(ByVal Hex As String)As Long '此段代码非原创故,代码省略。

End Function

程序编写完毕,确认L-mag 电磁流量计RS-485通讯接口经RS485转RS232转换器与电脑连接无误后,即可进行串口通信调试。RS485转RS232转换器接线方法详见说明书。

2 结论

本文对Windows环境下VB6.0编程软件的MSComm串行通信控件编程的方法做了探讨和实践。利用MSComm通信控件可开发出功能强大,适用性好的串行通信程序,本实例程序已在统计每日水厂用水量上得到了应用。

参考文献:

[1] 范逸之.Visual Basic与RS-232串行通信控制.中国青年出版社,2000年8月.

[2] 武马群.Visual Basic 程序设计.北京工业大学出版社,2005年6月.

[3] 李长林.Visual Basic串口通信技术与典型实例.清华大学出版社,2007年5月.

[4]L_mag电磁流量计转换器.Modbus通讯协议.V77,2015-7-16.

[5]李小慧.利用VB编写串口通信程序.唐山师范学院学报第26卷第2期,2004年3月.

作者简介:

于德轩 1976年12月26日 土家族 湖北恩施鹤峰县 助理工程师 大学本科 湖北芭蕉河水电开发有限责任公司 机械工程及其自动化。

论文作者:于德轩

论文发表刊物:《河南电力》2018年10期

论文发表时间:2018/11/16

标签:;  ;  ;  ;  ;  ;  ;  ;  

VB6.0实现与电磁流量计串口通信论文_于德轩
下载Doc文档

猜你喜欢