利用VB实现实时数据采集
用VB进行串口实时数据采集2

----该仪表的串口数据通信协议是:数据传输速率为9600bps,1位开始位,8位数据位,1位停止位,无奇偶校验位。
仪表每秒发送50帧检测数据,每帧数据由4个字节组成。
第一个字节定义为二进制常数0F0H,是每帧数据开始的标志字节;后面连续2个字节为数据字节,采用压缩的BCD码编码方式,高位在前,低位在后,即一个字节表示两位十进制数,则两个字节表示四位十进制数,小数点采用固定形式,定义在两字节中间;第四个字节为符号字节,该字节第八位为1,即:----则为负数;第八位为0,即:----则为正数。
----例如:0F0H 26H 87H 80H 0F0H 34H 62H 00H 表示-26.87 34.62。
----通信传输速率为9600bps,则最快速度1.04ms发送一个字节,仪表每秒发送50帧数据,每帧数据有4个字节,即每秒发送200个字节,平均5.0ms 发送一个字节,连续读取串口数据时要在程序中添加循环等待程序。
----为了实现实时监测功能,接收数据的读取要尽可能的快速,则设置MSComm1的属性如下:RThreshold = 1接收缓冲区收到一个字节产生OnComm事件InputLen = 1 每次读取一个字节----仪表每秒发送50帧数据,微机收到一帧完整数据至少需要20 ms时间,然后再进行数据处理。
如果微机在下一帧数据接收前即20ms内能将数据计算处理完毕,则接收缓冲区内只会保存有一帧数据,不会存有两帧以上数据,接收缓冲区的大小不会影响实时监测效果(接收缓冲区>4字节),这时完全可以实现实时监测或实时控制;如果微机在20ms内不能将数据计算处理完毕,接收缓冲区设置得又很大,在数据计算处理完毕前,接收缓冲区内就会保存有两帧以上数据,而且一次工作时间越长,缓冲区内滞留数据帧就越多,数据采集和数据处理之间产生逐渐增大的额外时间差,当接收缓冲区充满后,时间差不再增大,固定在某一值,部分数据因不能及时采集到接收缓冲区中,数据产生丢失现象,真实工作情况就会和微机处理结果产生较大的时间差,对实时监测和实时控制很不利,这种情况下接收缓冲区的大小就会影响实时监测效果,所以接收缓冲区设置不能过大,以保证数据处理的实时性。
VB串口通信数据采集

VB串口通信数据采集2009-05-12 18:40前两天受人之托写的一个程序,发上来共享,从中可以看到串口通信的常用处理方式,希望对大家有所帮助。
一、系统需求:使用三线制串口,利用vb与dsp通信,采集数据并存储为文本文件。
二、通信协议1. RS232串行通信的波特率设为9600,8位数据位,一位停止位,无校验位。
2. 每组数据包含T1(16位)和T2(16位),将每个数据分成2个8位的数据,先是低8位,然后是高8位。
数据为无符号整型。
先发T1,然后发T2,然后是下一组T1、T2。
T1以头数据0x0A(16进制,10进制位10)为头字节,然后是T1的低8位,T1的高8位。
T2以头数据0xA0(16进制,10进制位160)为头字节,然后是T2的低8位,T2的高8位。
发送时序举例:0x0A, t1低8位,t1高8位,0xA0, t2低8位,t2高8位……将收到的数据T1、T2的高低8位合并,转换成10进制数,以每行T1 T2的形式存储到txt文本文件中。
三、要点说明0. 如果通信协议没有考虑周全就着手开始做,可能会经受无比的痛苦1. 文本框textbox的大小限制为32k,不符合大量数据的需要,因此使用richtextbox2. 换行符为Chr(&HD) + Chr(&HA)3. 需要用状态栏给出必要的信息4. 保存文件的默认名字为当前日期5. 收到comm事件后,需要关闭com事件接收,避免再次触发事件Dim av As VariantDim datacount As LongPrivate Sub cmdClear_Click()txtData.Text = ""End SubPrivate Sub cmdStop_Click()'关闭端口If MSComm.PortOpen = True ThenMSComm.InBufferCount = 0 '清空缓冲区MSComm.PortOpen = FalseEnd IfcmdReceive.Enabled = TruelblStatus.Caption = "停止接收,空闲"End SubPrivate Sub cmdReceive_Click()'串口设置With MSComm.CommPort = 1.Settings = "9600,N,8,1".RThreshold = 1 '接收1字节触发oncomm事件.InputMode = comInputModeBinary.InputLen = 1 '输入长度为1.InBufferCount = 0 '清除接收缓冲区End With'打开端口If MSComm.PortOpen = False ThenMSComm.PortOpen = TrueIf Err ThenMsgBox (Err.Description)Exit SubEnd IfEnd IflblStatus.Caption = "打开端口,等待接收" datacount = 0cmdReceive.Enabled = FalseEnd SubPrivate Sub cmdSave_Click()Dim outfn As StringMsgBox ("接收了" + CStr(datacount) + "组数据") lblStatus.Caption = "接收完成,请选择输出文件"cmdReceive.Enabled = True'选择输出文件CommonDialog1.FileName = CStr(Date) + ".txt"CommonDialog1.Filter = "Text Files|*.txt"CommonDialog1.Flags = CommonDialog1.Flags Or cdlOFNOverwritePrompt CommonDialog1.CancelError = TrueOn Error GoTo errhandlerCommonDialog1.ShowSaveoutfn = CommonDialog1.FileNameOpen outfn For Output As #1Print #1, txtData.TextClose #1'txtData.SaveFile outfnlblStatus.Caption = "输出完成,空闲"errhandler:Exit SubEnd SubPrivate Sub Form_Load()lblStatus.Caption = "空闲"End SubPrivate Sub Form_Unload(Cancel As Integer)'关闭端口If MSComm.PortOpen = True ThenMSComm.InBufferCount = 0 '清空缓冲区MSComm.PortOpen = FalseEnd IfEnd SubPrivate Sub MSComm_OnComm()Dim T1, T2 As LongSelect Case mEventCase comEvReceive '收到Rthreshold个字节产生的接收事件MSComm.RThreshold = 0 '关闭OnComm事件接收lblStatus.Caption = "接收"av = MSComm.Input '读取一个接收字节dataframe(1) = av(0) '转换为字节If dataframe(1) = &HA Then '接收到T1DoDoEventsLoop Until MSComm.InBufferCount >= 2 '循环等待接收缓冲区>=2个字节av = MSComm.Inputdataframe(2) = av(0)av = MSComm.Inputdataframe(3) = av(0) '接收T1T1 = dataframe(2) + CLng(dataframe(3)) * 256 '计算T1End IfDoDoEventsLoop Until MSComm.InBufferCount >= 1 '循环等待接收缓冲区>=1个字节av = MSComm.Input '读取一个接收字节dataframe(4) = av(0) '转换为字节'接收到T2If dataframe(4) = &HA0 Then'MSComm.RThreshold = 0 '关闭OnComm事件接收'循环等待接收缓冲区>=2个字节DoDoEventsLoop Until MSComm.InBufferCount >= 2av = MSComm.Inputdataframe(5) = av(0)av = MSComm.Inputdataframe(6) = av(0) '接收T2T2 = dataframe(5) + CLng(dataframe(6)) * 256 '计算T2'显示T1 T2 entertxtData.Text = txtData.Text + CStr(T1) + " " + CStr(T2) + Chr(&HD) + Chr(&HA)datacount = datacount + 1 '数据组数+1End IfMSComm.RThreshold = 1 '打开OnComm事件接收Case ElseEnd SelectEnd Sub。
基于VB的多路数据采集系统的实现

Prv t u o m— a ( i a e S b F r Lo d )
MS o 1 I B f r o n C mm n u f C u t= 0 。 除 . e 清 接受缓 冲 区 ShiYon s u i g h a MS o C mm1 R h eh l = l ’ . T rs o d 触发 事 S h o f Eeti n l toi E g e r g E s h a j o o g U ies y, N n h n 3 0 C i c ol l r M a d Ee rn n i ei a t i i tn n r t o c c c c n n C n a v i a ca g 3 0 h a 1 5, n 件 为 l 节 字
M m .In P tM e = S C O m 1 U Od
cmlp t d Bn r ’ o n uMo e iay 以二 进制 模式 传输 摘 要
以 单 片机 为核 心 ,设 计 了P 机 与单 片机的主 c 从 式三路 温度 数据 采 集 系统 ,单片机作 为从 机 , 负责 温 度 的 实时 采集 , 采集 结 果 通 过 g -2 2串口传送 至P 机 ,P 机利 用V 6 O S 3 c c B . 进 行 显示 、储存 及实 时监控 ,当某路 温度过 高 或 者过低 时 ,会给 予提 示 并报 警直到 恢 复正 常 V B采用i o p 件 绘制 实时 温度 监 测 结 o m控 c 果 ,使得 监控 效果 更加直 观清 晰化 。
基于VB的实时采集数据库编程

wADC No1 = 1 h w hDC No2 = 2 h w ADC o3 = 3 hN 模 块 )配 有 基 于 W n o s的 i dw 驱 动 程 序 , 在 数 据 采 集 应 用 中 利 用 M coo t ir s f W n o s环 境 的 优 势 和 特 点 ,在 可 视 的 编程 环境 下 id w
一 —
w f C d ,w P ) C goe J 3
f Val =A81 A F o t( B s , w D h o , 4 2 D la w a e A C N 4
一 —
w fC d ,w P ) Cgoe J 3
【 摘 要 】 介 绍 了利 用 V 提 供 的数 据 管 理 器 和 报 表 设 计 器 ,实 现 数 据 实 时 采 集 记 录 、 报 表 输 出 和 自动 删 B
除的编程 。
【 键 词 】 实 时 采 集 ;V 关 B数 据 库 ;编 程
【 图分类号】 中 T 1 .3 P3 1 1 2 【 献标识码】 A 文 【 文章 编 号】 1 0 — 1 8 2 0 ) 3 0 7 — 0 03 8 X( 0 2 0 - 1 8 2
2 1 建 立 数 据 表 结 构 .
1 实 时 采 集 的特 点 和 实 现
在 工 业 现 场 和 其 他 恶 劣 条 件 下 ,经 常要 测取 点 多 而 分 散 的 模 拟 信 号 ( 电压 、 电 流 、电 阻应 变 和 如 热 电 偶 、热 电 阻 测 量 等 )和 数 字 量 信 号 ( 开关 状 如 态 检 测 、事 件 捕 获 、测 频 计 数 等 ) 检 测 系 统 应 具 。 有 测 量 精 度 高 、抗 干 扰 能 力 强 、智 能 化 程 度 高 、使 用 简 单 灵 活 和 安 装 维 护 方 便 等 特 点 。近 年来 ,“ 研 华 工 控 ” 威 达 工 控 ” 等 分 别 推 出 了数 据 采 集 与 控 、“ 制 卡 (或模 块 ) 通 讯 网 络 系 统 及 应 用 软 件 ,成 为 、
VB下开发设计实时的数据采集曲线

VB下开发设计实时的数据采集曲线1. 引言在笔者参与过的开发的机组轴瓦控制系统中,要求能够实时采集轴瓦转动速度值V,并能根据实时采集到的数据绘制出V在10分钟内变化的短期趋势图和一日内变化的长期趋势图,以便观测轴瓦转动的趋势情况,查看控制效果。
该系统在VB6.0环境下进行开发,开始时采用了VB包含的Activex控件技术绘制曲线,在效果不理想的情况下,笔者利用VB绘画函数,最终成功实现了实时数据采集曲线的绘制与显示。
笔者将以轴瓦实时采集速度值V的短期趋势图为例,谈一下实时采集曲线的设计与实现过程。
2. 绘图控件的选择系统开发初期,采用VB内所含的Activex控件技术来解决实时采集曲线的绘制问题。
VB控件中提供了外部Activex控件Mschart来给该应用程序添加图表功能,用它能创建包括条形、饼形、线形等不同类型的三维图表。
利用该控件,可对表中的所有项目进行完全控制,例如标题、图表、脚注、轴、数据点系列等等,甚至还能旋转图表,为每一元素加上背景、设置光源,把它们放在想要的地方。
本系统中需要实时测量轴瓦速度V的实际值,并根据实时更新的短期速度数据数组、长期速度数据数组分别绘制短期趋势曲线图与长期趋势曲线图,这两个趋势图均是速度值(Y轴)和时间(X轴)的关系曲线,并随着时间变动实时更新,以便观测。
短期趋势图的绘制,由于测量10分钟内的数据,每一秒测量一次,因此每10分钟内都有600个数据,为绘制曲线,还要赋予一个初值,所以速度短期数据定义为长度为601的数组。
将数据初始化后,利用Mschart控件得到如下图1所示的短期趋势模拟图。
该图的静态显示外观比较理想,但是每秒一次的数据更新使屏幕每秒钟都会引起由于重绘带来的闪烁,这大大降低了图形界面的可视性与美观性。
由此可见,M schart控件不太适用于绘制实时数据采集系统的相关曲线。
为了解决这个难题,笔者尝试利用了VB提供的绘画函数等简单易用的多媒体实现技术,并取得了非常好的效果,以下是我们的实现步骤。
应用VB和MATCOM开发数据采集分析系统

模 拟 信 号 转 换 成 电 压 模 拟 信 号 送 入 采 集 卡 ,采 集 卡 把 电压 模拟 信号转 换 成 电压数 字 信号送 入 P 机 , C 然后 由 P C机 对 电压 值进 行 一 次 逆 变 换 ,把 电 压 数
g 通过 D 一 3 . B 7串 行 口 与 热 电 偶 连 结 ;
维普资讯
研 究 与试 验
湖
南 电
力
第 2 2卷/ 0 2年 第 3期 20
应 用 VB和 M A C T OM 开 发 数 据 采 集 分 析 系 统
黄 颖 武汉大学 ( 北武汉 407 ) 湖 3 0 2
摘 要 介 绍 了 用 VB 和 M ATC OM 开 发 数 据 采 集 分 析 系统 ,并 给 出 了 实 际 开发 例 子 。 该 系统 结 合 了 VB和 MATC OM 的优 点 ,使 得 系统 开发 更加 简 单 ,数 据 分 析 功 能 更加 强
显得非常重要 。
中进 行 选 择 ; e 模 拟 输 入 范 围也 可 由软 件 编 程 设 置 。 极 性 : . 双
± 1 V ,± 5 , ± l ,± 0 5 ,± 0 V ,± 0 0 V , 0 V V . V .1 . 5
± 0 0 V ,± 0 O 5 。单 极 性 :O 1 V ,O 1 ,0 .1 . OV ~ 0 ~ V
足 实 验 的需 要 。在 实 验 中 使 用 8组 热 电偶 ,分 别 通 过 补 偿 导 线 与 采 集 卡 的模 拟 输 入 D 7串行 口的 对 B3
电偶 , I 8 1 HG 型数 据 采 集 卡 , C机 。 AC 1 2 一 P AC[ ~
・
应 端 相 连 接 。K 型 热 电偶 的 电压 值 随 着 温 度 值 的 升
VBA与网页交互和数据采集的实现方式与技巧
VBA与网页交互和数据采集的实现方式与技巧在当今信息时代中,数据的收集和分析变得越来越重要,无论是进行市场调研、数据分析,还是进行业务决策,数据采集都扮演着至关重要的角色。
而VBA (Visual Basic for Applications)作为一种编程语言,可以在Microsoft Office套件中使用,尤其在Excel中,可以帮助我们实现网页交互和数据采集的任务。
本文将重点讨论VBA与网页交互和数据采集的实现方式与技巧。
一、VBA与网页交互要实现网页交互,需要通过VBA代码模拟用户在网页上的操作,例如点击按钮、填写表单等。
以下是一些常用的VBA技巧:1. 使用IE对象实现网页交互:VBA中可以使用Internet Explorer(IE)对象来实现对网页的控制。
首先需要引用Microsoft Internet Controls(即添加“Microsoft Internet Controls”引用),然后创建IE对象并指定URL,最后通过VBA代码模拟用户的操作,如点击按钮、填写表单等。
例如,可以使用IE对象的Document属性来获取页面上的HTML元素,然后通过VBA代码进行操作。
2. 使用XMLHTTP对象进行网页交互:除了使用IE对象,还可以使用XMLHTTP对象进行网页交互。
XMLHTTP对象可以发送HTTP请求,并接收服务器返回的数据。
通过VBA代码,可以使用XMLHTTP对象模拟用户的操作,并获取网页上的数据。
例如,可以使用XMLHTTP对象的Open方法指定请求的类型(GET或POST)、URL和是否异步等参数,然后使用Send方法发送请求,并使用ResponseText或ResponseXML属性获取服务器返回的数据。
3. 处理动态网页和AJAX请求:有些网页使用了JavaScript等技术实现了动态效果,例如在用户点击按钮后,通过AJAX请求从服务器获取数据并更新网页内容。
用VB.NET实现基于以太网的数据采集
s t a b l e a nd r e l i a b l e o p e r a t i o n,a n d i mp r o v e s t h e t e s t a c c u r a c y o f me a s u r e me n t ,a nd a l s o s a v e s t h e t e s t c o s t . Ke y wo r ds: d a t a a c q u i s i t i o n; e t h e r n e t ; VB. NET; W5 1 00 c hi p
基于VB的实时数据采集系统设计与实现
基于VB的实时数据采集系统设计与实现
黄文聪; 常雨芳
【期刊名称】《《可编程控制器与工厂自动化(PLC FA)》》
【年(卷),期】2004(000)006
【摘要】基于VB的实时数据采集系统可以方便地实现实时数据采集与数据处理。
该项系统主要由单片机和PC机两部分组成。
单片机部分是以89C51为核心,结
合A/D转换、时钟、电平转换和存储器等外围芯片,实现了采集和存储的功能。
PC机部分主要是用VB编写的程序来实现数据通讯、数据显示和数据处理的功能。
该实进数据采集系统在某结构物的健康监测系统中运行效果良好。
【总页数】3页(P82-84)
【作者】黄文聪; 常雨芳
【作者单位】武汉理工大学自动化学院
【正文语种】中文
【中图分类】TP274.2
【相关文献】
1.基于VB的温湿度实时数据采集程序设计 [J], 朱其祥;徐守东;吴国新;徐勇
2.基于VB实时数据采集与处理的多线程设计 [J], 李永策;徐颖强
3.基于VB的串口实时数据采集 [J], 张崇智
4.VB环境下基于PCI总线的实时数据采集的实现 [J], 刘继承;宋万广;刘春侠
5.基于VB的实时数据采集程序设计 [J], 李湘江;彭建
因版权原因,仅展示原文概要,查看原文内容请购买。
基于VB的数据采集与处理系统的研究
Public Declare Function Inp Lib″inpout321dll ,Alias ″ Inp32″(ByVal PortAddress As Integer) As Integer Public Declare Sub Out Lib“inpout321dll″Alias″ Out32″(ByVal PortAddress As Integer ,ByVal Value
收到结束标志后 ,通过打印口快速读回 A/ D 卡上数 据缓存区中的采样数据 ,进行分析 、处理 、存档 。由 于采样过程是硬件时序电路和高速数据缓存技术实 现的 ,所以 PCM - 6000 系列 A/ D 卡采样速率高 。 原理见图 1 。
一 、系统简介
数据采集一般是把代表被监测对象运行状态信 息的电压模拟信号送入 A/ D 转换器 ,A/ D 转换器把 电压模拟信号转换成电压数字信号送入 PC 机 ,进 行实时显示和分析处理 。
NowX :NowX + 1
′位置加 1
If NowX > MaxPlotNo Then
′绘图取样数是否超过
NowX = 0 :kl = kl + 1
′绘图块数增 1
flsOver = True
′准备激活隐藏图片框的绘制
End If
Next
ch I = first Ch
·2 6 ·
计量技术 20041No 6
四 、结束语
随着现代电子技术和计算机技术以及信号处理 技术的发展 ,数据采集与处理系统在设备状态监测 中的应用正越来越受到人们的重视 。笔者将上述方 法应用于深孔加工的刀具状态监测中 ,表明该系统 能满足实时性和通用性的要求 ,对深孔加工的监控 研究具有实用价值 ,同时也适用于其它领域的数据 采集与处理 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
收稿日期:1997—07—03 路 勇 博士研究生。
主要从事刀具监控技术的研究。
姚英学 教授。
主要从事虚拟制造与刀具监控技术的研究。
利用VB 实现实时数据采集路 勇 姚英学 陈朔冬 哈尔滨工业大学机械工程系 黑龙江 哈尔滨(150001)摘 要 本文探讨了在VB 中利用动态链接库实现与硬件有关的技术,同时也介绍了BC ++中如何建立动态链接库以及如何在VB 中应用动态链接库的方法,最后利用VB 实现了数据实时采集。
关键词 动态链接库,数据采集 V isual Basic (以下简称VB )是一种可视化的编程语言,自面世以来,倍受广大编程人员的青睐。
但与其它任何语言一样,VB 也有其自身的不足。
例如在工业控制中对计算机的底层硬件进行访问以及利用各种控制接口板进行数据采集等,这时仅靠VB 是无法解决的。
为解决类似这样的问题可以间接使用动态链接库DLL (D ynam ic L ink L ibrary )来实现。
DLL 是M icro soft W indow s 的重要特点之一,它提出了一个全新的概念,程序人员利用它可以实现应用程序共享代码和资源,其最大的优点是:DLL 与用户的程序分开,用户可以更新DLL 而不用更改已编译过的.EXE 程序。
1 动态链接库动态链接库虽然是一个可执行模块,但它并不可以直接运行,它只是提供一群函数供W indow s 应用程序或其他的动态链接库调用,以完成其特殊的任务。
由于动态链接库是在应用程序运行期间被连接起来的,故称为动态链接库。
动态链接库只有在别的模块中调用了的它的某个函数以后,该动态链接库才发生作用。
2 用BC ++编制动态链接库用BC ++编制动态链接库其基本框架是三个函数:L ib M ain ()函数、出口函数W EP ()及自定义功能函数。
L ib M ain ()函数是W indow s DLL 的主入口点,主要用来完成一些初始化工作;出口函数W EP ()在DLL 最终被卸出之前W I NDOW S 调用该函数做一些必要的清除工作;自定义功能函数是DLL 的核心部分,供其它应用程序调用来完成特定的功能。
C ++为了支持函数的多态性,对函数名自动作了特殊的处理,而这不能为VB 所接受,所以要避免C ++进行这种处理,应该在函数名前加上_expo rt 关键字,该函数就可以在DLL 外调用了。
笔者利用BC ++4.5开发的DLL 的部分程序如下:DLL 源文件DLL .CPP #include 〈w indow s .h 〉#include 〈do s .h 〉#include 〈stdlib .h 〉#include 〈coni o .h 〉int FA R PA SCAL L ib M ain (HANDL Eh Instance ,W ORD wD ataseg ,W ORDwH eapSize ,L PSTR L p szCm dline ) { dll initializati onif (wH eapSize !=0)U nlockD ata (0);return (1);}int FA R PA SCAL W EP (int bSystem Exit ){return (1);} you can add o ther functi on here vo id far -e xpo rt OU T PO (unsigned po rt ,unsigned char value ){outpo rtb (po rt ,value );return (1);}int far -e xpo rt IN PO (unsigned po rt ){int result ;result =inpo rtb (po rt );return (result );}模块定义文件DLL .D EF L I BRA R Y DLL EXET YPE W I NDOW SCOD E PR ELOAD M OV EABL E D ISCA RDABL E DA TA PR ELOAD S I N GL EH EA PS IZE10243 利用VB 调用动态链接库3.1 声明动态链接库在VB 应用程序中若要使用DLL 中的函数,首先必须有特殊的声明,用D eclare 声明语句在全局模块的代码中进行声明,将动态链接库中的函数声明到VB 中,供VB 程序调用。
语句格式是:D eclare Sub 过程名L ib “库名”[A lias “别名”](By 2V al 参数A s类型)D eclare Functi on 函数名L ib "库名”[A lias “别名”](ByV al 参数A s 类型)A s 类型在声明中首先用D eclare 关键字表示声明DLL 中的函数,在C 语言中有些函数类型为vo id 类型,表示没有返回值,一般在VB 中将这类函数用Sub 关键字声明成过程;而如果需要调用的函数具有返回值,则必须用Functi on 关键字将其声明成函数,并且在声明语句的最后用A s 关键字指出函数返回值的类型。
L ib 关键字表示当前声明的过程或者函数是库名所指定库中的函数,而不是VB 程序本身的函数。
库名就是对应动态链接库的名称。
所有调用的函数名对应写在过程名或者函数名处。
A lias 关键字指定函数的别名,这是因为有些DLL 的函数名太长或者名称中有不合法符号而使第18卷第2期1998年2月 计算机应用Com p u ter A pp licati on s V o l .18,N o.2Feb .1998 VB 不能识别,或有些函数名与VB 中的关键字重名,那么这时就不能直接把原函数名写在过程或函数名处,而应将DLL 库中真实的函数名写在别名处,用户在声明的时候对过程或函数名再自行命名,将来调用时两个名称表示同一个函数。
必须注意每个声明语句必须写在同一行上而不能回车换行。
3.2 调用DLL 时参数的传递参数的传递方式有值方式和引用方式,VB 拥有丰富的数据类型,其中有些类型C 动态链接库并不支持,象变长字符串、Currency 以及属性等。
因此,在调用C 动态链接库时应谨慎使用VB 变量。
本文列出了基本的C 语言数据类型以及相应的VB 数据类型如表1。
表1C 语言声明VB 中的声明调用参数字符串指针(L PSTR )ByV al S A s String 任何String 或者V ariant 变量整数指针(L P I N T )I A s Integer 任何Integer 或者V ariant 变量长整数指针(L PDW ORD )L A s L ong 任何L ong 或者V ariant 变量结构指针(比如L PR ECT )S A s R ect任何用户自定义变量整数(I N T ,BOOL ,U I N T ,W ORD )ByV al I A s Integer 任何Integer 或者V ariant 变量句柄(h W nd ,hD c ,h M enu )ByV al h A s Integer 任何Integer 或者V ariant 变量长整数(DW ORD ,LON G )ByV al L A s L ong 任何L ong 或者V ariant 变量整数数组指针I A s Integer 数组的第一个元素vo id 指针(vo id 3)A s A ny任何变量(String 用ByV al )vo id (过程返回值)Sub p rocedure N ANULLA s A nyByV al 0&4 应用实例工业控制中,数据的实时采集是经常遇到的。
这里笔者利用VB 编程以信号发生器产生的标准正弦信号为输入信号,以H Y -1232A D 、D A 板为采集接口板在PC XT 486上实现了数据的实时采集。
为了实现数据的动态显示,笔者利用了一点小技巧:即随着数据的出现,调整图文框的左右边界使其同步增大和缩小,从而达到了图文框不变而数据在显示器上动态显示的目的。
窗体及各控件属性如表2所示。
表2对象Cap ti onN am e Fo r m 数据显示D ataFo r m P icture ——D ataV iew T i m er ——T i m e Comm and采集Start源程序如下:’DA TA .BA SD eclare Functi on I N PO L ib "dll.dll "(ByV al po rt A s Inte 2ger )A s IntegerD eclare Sub OU T PO L ib "dll .dll "(ByV al po rt A s Inte 2ger ,ByV al value A s Integer)‘DA TA .FRMD i m POLL %,BA SEA %,LBYTE %,HBYT E %D i m DBYT E A s Integer ,x A s Integer D i m VALU E A s Single ,y A s Single Sub ADC ()BA SEA %=&H 280OU T PO BA SEA %,1DoPOLL %=I N PO (BA SEA %+5)POLL %=POLL %A nd &H 80L oop U ntil POLL %=&H 80LBYT E %=I N PO (BA SEA %+1)HBYT E %=I N PO (BA SEA %+2)DBYT E =LBYT E%+(HBYT E%A nd &H F )3256VALU E =(DBYT E%-2047)3104096Snd SubP rivate Sub Start -C lick () T i m e .Interval =1End SubP rivate Sub D ataFo r m -L oad () x =0End SubP rivate Sub T i m e _T i m er () ADCy =103VALU ED ataV iew .PSet (x ,D ataV iew .H eigh t2+y )x =x +1If x >=D ataV iew .Scale W idth T henD ataV iew .L eft =D ataV iew .L eft -1D ataV iew .W idth =D ataV iew .W idth +1End If End Sub运行部分结果如下:5 结束语利用以上方法,很好的解决了利用VB 对硬件的访问的不足,实现了VB 的实时控制,达到了VB 的功能扩展。