vb实现多通道串口采集
- 格式:doc
- 大小:23.98 KB
- 文档页数:15
利用VB实现串口数据采集
于大方
【期刊名称】《山东广播电视大学学报》
【年(卷),期】2002(000)003
【摘要】本文给出了工业数据采集的常见模式,给出了具体连接示意图,同时提出了一种通过RS485方式、利用VB实现作为主方式微机的一个串口对多个从方式的不同种类串行设备的快速通信算法.
【总页数】2页(P60-61)
【作者】于大方
【作者单位】青岛广播电视大学,山东,青岛,266000
【正文语种】中文
【中图分类】TP274
【相关文献】
1.利用VB实现串口通讯在水工闸门远程控制系统中的应用 [J], 茹世荣;汪丹
2.利用VB串口通讯实现对滚珠丝杠磨削误差控制的研究 [J], 刘剑
3.基于VB 6.0串口通信的气压测高系统数据采集实现 [J], 王晓岚
4.利用VB实现计算机与单片机的串口通信 [J], 柴学宁
5.利用VB实现PC机对PRAC5210锁相放大器的串口通讯控制设计 [J], 周章渝;吴次南;董昌文
因版权原因,仅展示原文概要,查看原文内容请购买。
的文件材料的收集、整理、移交工作;二要对施工单位文件材料的形成情况进行质量检查把关,按照监理规程要求,在控制节点进行审核、签署,发现问题及时提出整改。
建设单位:全面负责立项文件、建设用地征地拆迁文件、勘察、测绘、设计文件,工程招投标文件、开工审批文件、财务文件的形成和归档。
为确保项目竣工验收,建议前期组织人员调研项目档案验收程序,明确重点验收范围,编制档案验收文件汇总目录,分项落实到部门和相关人员,负责完整、准确形成档案资料和及时归档。
5结论是否可以与越来越复杂的建井条件挂钩:在复杂条件下,为便于开展工程评价,并为后继工程提供借鉴,对档案管理的要求在提高,原有的档案管理模式不能满足这一要求,在项目档案管理出现管理难度大,形成难,归档难,案卷整理组巻难的问题。
因此,建议在在矿井工程建设各方中增设档案管理人员,分施工单位、监理单位、建设单位三个层面进行控制归档。
个人简介孙洪章(1963~),男,高级工程师,1986年毕业于阜新矿业学院,现在兖煤菏泽能化有限公司从事矿建工作。
(收稿日期:2008-9-19)用VB编写RS-485数据采集程序昆明理工大学国土资源工程学院张明旭黄德镛现场总线和智能仪表的出现标志着工业控制领域进入了网络时代,迅速成为了工业控制的主流。
目前国际上正在使用的现场总线名目繁多,如PROFIBUS、INTERBUS、CAN总线,但是其系统造价相对较高,不太适用于中小型系统的应用。
而RS485串行通信总线以构造简单、技术成熟、造价低廉、便于维护等特点广泛应用于工业控制、仪器、仪表、机电一体化产品等诸多领域。
尤其在数据通信、计算机网络以及工业分布式控制系统中,经常需要采用串行通信来实现远程信息交换。
但是为了对控制串行网络远程采集数据,依然需要为串行通讯网络和智能仪表编写数据采集程序。
本文就简单介绍一个适应RS-485串行网络的数据采集程序。
1RS-485简述电子工业协会EIA于1983年制订并发布RS-485标准,并经TIA-通讯工业协会修订后命名为TIA/EIA-485-A,习惯地称之为RS-485。
图1烘炉温度多路数据采集系统上位机软件界面基于VB 的多路数据采集系统上位机软件设计张瑜,韩玉杰,闵昆龙(东北林业大学机电工程学院,黑龙江哈尔滨150040摘要:采用Visual Basic 6.0设计多路数据采集系统的上位机软件,实现对由单片机组成的测量系统数据的采集、传输、保存、分析、绘制曲线图以及数据和曲线图的打印。
文中以烘炉内多点温度数据采集系统设计为例说明用于串口通信上、下位机的软件设计,以及VB 中mscomm ,msflexgrid 等控件的用法。
关键词:多路数据采集;上位机;mscomm 控件;msflexgrid 控件中图分类号:TP311文献标识码:A文章编号:1001-4462(200701-0029-02Software Design in Host Computer of Multi-data AcquisitionSystem Based on VBZHANG Yu,HAN Yu-jie,MIN Kun-long(College of Machinery and Electricity of Northeast ForestryUniversity ,Heilongjiang Harbin 150040,ChinaAbstract :This article mainly explained how to design software for host computer of multi-data acquisition system based on visual basic 6.0.Also it displaied that the whole single-chip system how to acquire,communicate,save and analyze the data,how to draw graph,and how to print data and graph.The test taked the oven ’s multi-temperature data acquisition system for example,expounded the design of software of host and slave computer that using for serial communication,and also explained the mscomm control and msflexgrid control of visual basic.Key words :multi-data acquisition;host computer;mscomm control;msflexgrid control微软公司的visual basic 6.0是windows 应用程序开发工具,是目前应用最为广泛、易学易用的面向对象的开发工具,并且为用户提供了大量的控件。
串口数据采集及曲线动态显示这个程序主要用到了串口通信和曲线画图一.主要控件Msomm控件一个,两个timer控件,textbox控件,combo控件,picture控件,command 控件二.实现的功能能1.串口采集数据2.用曲线动态显示数据3. 显示时间4.鼠标点击读数(确定所点击位置的横纵坐标)三.界面四.程序Dim T As VariantDim c As VariantDim Y As IntegerPrivate Declare Sub Sleep Lib "kernel32 " (ByVal dwMilliseconds As Long) 'API,用sleep实现延时'延时函数Function delay(number)Call Sleep(number)DoEventsEnd FunctionPrivate Sub Combo1_Click() '选择端口If Combo1.Text = "COM1" ThenmPort = 1ElseIf Combo1.Text = "COM2" ThenElseIf Combo1.Text = "COM3" ThenmPort = 3ElseIf Combo1.Text = "COM4" ThenmPort = 4ElsemPort = 5End IfEnd SubPrivate Sub Command3_Click() '停止采集Timer2.Enabled = FalseMSComm1.PortOpen = FalseCommand2.Caption = "打开串口"End SubPrivate Sub Form_Load() '初始化MSComm1.Settings = "9600,N,8,1"MSComm1.InputMode = 0MSComm1.RThreshold = 1MSComm1.SThreshold = 0MSComm1.InBufferSize = 1024MSComm1.OutBufferSize = 512MSComm1.InBufferCount = 0MSComm1.OutBufferCount = 0Combo1.AddItem "COM1"Combo1.AddItem "COM2"Combo1.AddItem "COM3"Combo1.AddItem "COM4"Combo1.AddItem "COM5"Picture1.Scale (-100, 100)-(100, -100)Command1.Caption = "采集数据"Command2.Caption = "打开串口"Timer1.Interval = 1000Timer2.Interval = 1000Timer2.Enabled = FalseEnd SubPrivate Sub Command2_Click()If Command2.Caption = "打开串口" ThenMSComm1.PortOpen = TrueCommand2.Caption = "关闭串口"ElseIf Command2.Caption = "关闭串口" ThenCommand2.Caption = "打开串口"End IfEnd SubPrivate Sub MSComm1_OnComm() '触发事件If MSComm1.InBufferCount > 0 ThenText4.Text = MSComm1.Inputc = Val(Text4.Text)delay (20)End IfEnd SubPrivate Sub draw()Picture1.FontSize = "15" '设置字体大小Picture1.DrawWidth = 1Picture1.ForeColor = QBColor(12)Picture1.ClsPicture1.Line (-88, -88)-(-88, 88) '纵坐标Picture1.Line (-89, 86)-(-88, 88) '纵坐标箭头及y值Picture1.Line (-87, 86)-(-88, 88)Picture1.PSet (-86, 88)Picture1.Print "y"Picture1.Line (-88, 0)-(88, 0) '横坐标Picture1.Line (86, 1)-(88, 0) '横坐标箭头及x值Picture1.Line (86, -2)-(88, 0)Picture1.PSet (88, -1)Picture1.Print "x"Picture1.DrawWidth = 4Picture1.FontSize = 8For Y = -80 To 80 Step 10Picture1.PSet (-88, Y)Picture1.Print (Y)Next YT = -88Timer2.Enabled = TrueEnd SubPrivate Sub Picture1_MouseDOWN(Button As Integer, Shift As Integer, B As Single, A As Single) '"光标线读数"Text1.Text = BText2.Text = AEnd SubPrivate Sub Command1_Click() '开始采集Call drawEnd SubPrivate Sub Timer2_Timer() '画图Picture1.DrawWidth = 1Picture1.PSet (T, c), vbGreenT = T + 0.5If T > 88 ThenCall drawEnd IfEnd SubPrivate Sub Timer1_Timer() '显示时间Text3.Text = CStr(Time$())End Sub。
VB三种读取串口数据的方式3三种读取串口数据的方式vb提供的这个通信控件“隐藏”了大部分串口通信的底层运行过程,程序员只需编写少量的代码就可以完成软件的开发过程。
在通信数据量不大,通信要求不是很高的情况下建议采取此方式。
(1)settings属性:以字符串的形式设置并回到波特率、奇偶校验位、数据位、暂停位。
这个属性很关键,针对相同的终端设备须要根据设备的具体情况展开调整(比如说日本的设备不同于美国的设备,通常可以使用奇校验)。
(2)inputmode属性:设置接收数据的类型,0为文本格式,1为二进制格式。
(3)input属性:读取并删除接收缓冲区中的数据流。
(4)output属性:向发送缓冲区传送一数据流。
(6)handshaking属性:设置和回到击掌协议,即为计算机内部cpu与串口之间的通讯协议,确保在缓冲区负载时数据不能遗失。
这个属性在确保数据传输的正确性方面存有非常大的促进作用,共计四个选项,分别则表示:①并无流控制;②软件流控制;③硬件流控制;④软硬件流控制。
使用硬件流控时,建议串口之间和电缆积极支持硬件击掌,在自己制作串口通信线时,有关硬件击掌的线rts、cts、dsr、dtr必须相连接恰当。
在正确设置这些属性的基础上,剩下的就是打开串口,通过串口发送及接受数据了。
本文后续章节利用一个实例详细讲解了这些属性的设置及具体代码。
3.2轻易调用win32api通信函数直接调用windowsapi函数,可以清楚地理解串口通信的机制,根据需要灵活地配置串口的各种参数和属性,而且直接调用低层api函数,通信效率比较高,但付出的代价就是程序较复杂,编程周期长,适合于大型通信程序及通讯质量要求较高的场合。
在32位的windows系统中,串口通信就是做为文件处置的,串口操作方式通常为关上、停用、加载、载入等操作方式,适当的windowsapi函数如下:[4](1)createfile()函数:实现串口的初始化并打开串口,返回串口句柄资源以供后续进程调用。
1 / 17用VB开发多通道仪表数据采集程序(xxxx)1.前言实时数据采集系统过去在DOS操作系统下一般是采用汇编语言开发制作。
随着Windows操作系统的普及应用,数据采集及工业控制等软件的开发也上升到Windows环境下。
可视化软件开发平台的出现,为软件开发提供了强大的图形界面功能,使得开发出来的各种应用软件具有良好的人机交互功能。
汇编语言的特点是功能强、运行速度快,但编程复杂、调试难,而高级语言具有良好的可读性及方便的调试手段。
Visual Basic是Windows环境下简单、易学、高效的可视化编程语言开发系统,以其所见即所得的可视化界面设计风格和32位面向对象的程序设计等特点,已广泛地应用于各个领域,是很多计算机软件开发人员采用的开发工具。
VB不但提供了良好的界面设计能力,而且在微机串口通信方面也有很强的功能。
采用VB开发Winodws下的数据采集和工业控制应用软件十分方便,尤其软件界面设计非常便捷,编程工作量较小,开发周期短,特别适合非计算机专业的工程技术人员掌握和使用。
2.MSComm控件特点MSComm控件是Microsoft提供的扩展控件,用于支持VB程序对串口的访问,该控制“隐藏”了大部分串口通讯的底层运行过程和许多烦琐的处理过程,同时支持查询方法和事件驱动通讯的机制,事件驱动通讯是交互方式处理串口事务的一种非常有效的方法,特别适合Windows程序的编写。
在串口通讯过程中,当发送数据、收到数据或产生传输错误时,触发MSComm控件的OnComm事件,然后可以通过判断CommEvent属性值获得事件类型,再根据事件类型进行相应数据处理。
因此用其实现微机串口的数据通讯相当简单,以很少的程序代码就可以轻松实现串口的访问和数据通讯。
2 / 173.实时数据采集示例程序下面给出的应用实例,通过对一台工业八通道实时检测仪表数据通讯协议进行分析,利用VB6.0开发微机通过串口对多通道工业仪表进行实时数据采集的编程技术。
给出的程序代码具有通用性,并有详示,可以直接或稍加改动后用于其它数据采集或实时控制程序中。
3.1仪表及其数据通讯协议这台工业用八通道实时检测仪表,最多可同时接八路高精度位移传感器,用于测量多点微小形变或微量位移,仪表测量精度为0.01毫米,测量范围最大值为50毫米。
该仪表带有一个9针的RS-232C串口,能与微机进行串口数据通讯,实时传送检测数据,通过微机软件处理可实现工业实时监控。
该仪表的串口数据通讯协议是:数据传输速率为9600bps,1位开始位,8位数据位,1位停止位,无奇偶校验位。
仪表每秒通过串口发送200个字节数据,由于接入的位移传感器数量在1-8路可调,所以发送的每帧数据长度不定长,随传感器数量多少而变化。
仪表数据传输首先发送每帧数据的开始标志字节,该字节定义为二进制常数0FAH;然后发送1个字节的通道状态字节,该字节按位顺序每位代表相应的一路通道状态,某位是1则代表该通道接有位移传感器,某位是0则代表该通道未接位移传感器;从第三个字节开始按位移传感器接通的通道顺序发送采集数据字节,每道数据有三个字节,前2个数据字节采用压缩的BCD码编码方式,第1个数据字节是高位,第2个数据字节是低位,即一个字节表示两位十进制数,则两个字节表示四位十进制数,小数点采用固定形式,定义在两字节中间;第3个数据字节为符号字节,该字节第八位为1,即1xxxx 则为负数,第八位为0,即0xxxx则为正数。
例如发送的字节数据为:0FAH 0B1H 26H 87H 8H 34H 62H 00H 37H 76H 0H 42H 53H 80H0FAH为帧开始标志字节,第一道,第五道,第六道,第八道接有位移传感器,表示-3 / 1726.87 34.6237.76-42.53。
3.2部分参数的技术分析3.2.1仪表通讯传输速率为9600bps,则最快速度为1.0417ms发送一个字节;仪表每秒发送200个字节,平均5.0ms发送一个字节,在查询方式或连续读取串口数据时要在程序中添加循环等待程序,等待接收缓冲区收到足够的字节才能进行数据处理。
3.2.2仪表发送每帧数据长度不定长,为了实现实时监测功能,接收数据的读取要尽可能的快速,则在程序开始运行时设置MSComm1的属性RThreshold = 26接收缓冲区收到26个字节产生OnComm事件InputLen = 1 Input每次读取一个字节等到程序接收到一帧完整数据后,计算出当前帧数据长度,再将Rthreshold属性修改为帧长度,则接收缓冲区在收到一帧数据后,MSComm控件才会触发一个OnComm事件,这样就会有更多的时间进行数据的计算和处理。
3.2.3仪表每秒发送200个字节数据,微机收到一完整帧数据至少需要t(ms)时间(只接一道传感器t=25ms;接八道传感器t=130ms),然后再进行数据处理。
如果微机在下一帧数据接收前即t ms内能将数据计算处理完毕,则接收缓冲区内只会保存有一帧数据,不会存有两帧以上数据,接收缓冲区的大小不会影响实时监测效果(接收缓冲区>=一完整帧长度),这时完全可以实现实时监测或实时控制;如果微机在t ms内不能将数据计算处理完毕,接收缓冲区设置的又很大,在数据计算处理完毕前,接收缓冲区内就会保存有两帧以上数据,而且一次工作时间越长,缓冲区内滞留数据帧就越多,数据采集和数据处理之间产生逐渐增大的额外时间差,当接收缓冲区充满后,时间差不再增大,4 / 17固定在某一值,部分数据因不能及时采集到接收缓冲区中,数据产生丢失现象,真实工作情况就会和微机处理结果产生较大的时间差,对实时监测和实时控制很不利,这种情况下接收缓冲区的大小就会影响实时监测效果,所以接收缓冲区设置不能过大,让部分数据丢失,以保证数据处理的实时性。
3.2.4设置MSComm控件的接收数据模式采用二进制方式,即3.2.5VB中有Byte类型变量,但没有字节的位处理语句。
通道状态字节的位处理要通过对该字节的值运算进行判断,符号字节的位处理则要判断符号字节的值是否大于127,大于127则为负数;压缩的BCD码存入Byte类型变量,VB系统只按十进制数处理,这要通过一个简单算法换算,解压BCD码才能还原成十进制表示数值。
假如a是Byte类型变量,W是Single类型变量,将一个压缩的BCD码存入a中,则算法是:W=(a\16)*10 + a-(a\16)*16 则W=a-(a\16)*6 3.3程序代码在(通用)(声明)中定义程序所用变量:Dim ab(4) As Byte注释:字节数据类型数组,用来存贮接收到的一组字节数据Dim av As Variant注释:用来从接收缓冲区读取数据Dim i As Integer Dim j As Integer Dim w As Integer注释:5 / 17接收数据个数计数器Dim b1 As Single Dim b2 As Single Dim WW As Single注释:十进制检测值Dim TD(8) as Boolean注释:通道状态数组Dim Wmax (8) As Single注释:最大值数组Dim Wmin (8) As Single注释:最小值数组在窗体中添加名为Command1的[开始]按钮和名为MSComm1的MSComm控件。
[开始]按钮的Click事件处理程序主要是对MSComm1控制的参数初始化设置,程序中大部分参数在设计时可在MSComm1控制的属性窗口中设置:Private Sub Command1_Click()注释:开始按钮With MSComm1 .CommPort=2注释:6 / 17使用COM2.Setting=9600,N,8,1注释:设置通信口参数.InBufferSize=40注释:设置MSComm1接收缓冲区为40字节.OutBufferSize=2注释:设置MSComm1发送缓冲区为2字节设置接收数据模式为二进制形式.InputLen = 1注释:设置Input一次从接收缓冲读取字节数为1.SThreshold = 1注释:设置Output一次从发送缓冲读取字节数为1 .InBufferCount = 0注释:清除接收缓冲区.OutBufferCount = 0注释:清除发送缓冲区For i=1 to 8Wmax(i) = -99注释:最大值赋初值Wmin(i) = 99注释:最小值赋初值Next i7 / 17w = 0注释:数据个数计数器清零.RThreshold = 1注释:设置接收一个字节产生OnComm事件On Error Resume Next注释:改变错误处理的方式。
Err.ClearIf .PortOpen = False Then注释:判断通信口是否打开.PortOpen = True注释:打开通信口If Err Then注释:错误处理MsgBox 串口通信无效Exit Sub End If End If End With End Sub为了达到实时数据采集目的,实时数据采集处理程序采用MSComm事件驱动方式。
8 / 17Private Sub MSComm1_OnComm() With MSComm1Select Case .CommEvent注释:判断MSComm1通讯事件收到Rthreshold个字节产生的接收事件av = .Input注释:读取一个接收字节ab (1) = av (0)注释:转换保存到字节数据类型数组If ab(1) = 170 Then注释:判断是否为数据开始标志,0FAH=170 .RThreshold = 0注释:关闭OnComm事件接收W=W+1注释:计数器加1 av = .Input注释:读取通道状态字节ab9 / 17(0) = av (0)注释:转换保存到字节数据类型数For i = 1 To 8注释:通道状态数组复位TD(i) = False Next i帧长度赋初值,一个开始字,一个状态字If ab (0) >= 128 Then 注释:判断第八通状态TD (8) = True ab (0) = ab (0) - 128 End If If ab(0) >= 64 Then TD (7) = True ab10 / 17(0) = ab (0) - 64 End If If ab(0) >= 32 Then TD (6) = True ab (0) = ab (0) - 32 End If If ab (0) >= 16 Then TD (5) = True ab (0) = ab (0) - 16注释:第八道是真注释:第7位置零11 / 17注释:帧xx加3个字节注释:判断第七通状态注释:第七道是真注释:第6位置零注释:帧xx加3个字节注释:判断第六通状态注释:第六道是真注释:第5位置零注释:帧xx加3个字节注释:判断第五通状态注释:12 / 17第五道是真注释:第4位置零帧xx加3个字节End If If ab(0) >= 8 Then注释:判断第四通状态TD(4) = True注释:ab (0) = ab (0) - 8注释:第3位置零End If If ab (0) >= 4 Then TD (3) = True ab13 / 17(0) = ab (0) - 4 End If If ab (0) >= 2 Then TD (2) = True ab (0) = ab (0) - 2 End If If ab (0) >= 1 Then TD (1) = True End IfFor i = 1 To 8注释:注释:帧xx加3个字节注释:判断第三通状态14 / 17注释:第三道是真注释:第2位置零注释:帧xx加3个字节注释:判断第二通状态注释:注释:第0位置零注释:帧xx加3个字节注释:判断第一通状态注释:第一道是真注释:帧xx加3个字节If TD(i) = True Then15 / 17av = .Input注释:读取第一个数据字节(BCD码高位字节)ab (2) = av (0)注释:转换保存到字节数据类型数组av = .Input注释:读取第二个数据字节(BCD码低位字节)ab (3) = av (0)注释:转换保存到字节数据类型数组av = .Input注释:读取第三个接收字节(符号位字节)ab (4) = av (0)注释:转换保存到字节数据类型数组b1 = ab (2) - 6 * (ab (2) \ 16)注释:16 / 17高位字节压缩BCD码转换为实数b2 = ab (3) - 6 * (ab (3) \ 16)注释:低位字节压缩BCD码转换为实数注释:数值组合,标定小数点If ab(4) > 127 Then WW = -WW注释:判断数据符号位Label1(i-1) = Format(WW, 0.00)注释:显示毫米单位数值,2位小数If WW>Wmax(i) And WW<51 Then 注释:判断最大值,仪表在刚开始工作时有干扰,会传导一些乱码,位移传感器有参数偏差,最大值一般都略大于50毫米,所以取51为极限最大值,取-51为极限最小值。