Label1(2) = Format(MaxW, “0.00\ ‘显示毫米单位最大值,2位小数
Label1(3) = Format(MaxW/25.4,“0.000\ ‘显示英寸单位最大值,3位小数
End If
If WW < MinW And WW > -51 Then ‘判断最小值
MinW = WW
Label1(4) = Format(MinW, “0.00\ ‘显示毫米单位最小值,2位小数
Label1(5) = Format(MinW/25.4,“0.000\ ‘显示英寸单位最小值,3位小数 End If
.RThreshold = 1 ‘打开MSComm1事件接收 End If Case Else End Select End With End Sub
基于VB的串口数据采集
[ 来源:机电论文 | 类别:技术 | 时间:2008-6-21 14:44:00 ]
[字体:大 中 小]
要求:用VB编写一个小软件,采集电子数显千分表的数据
数显表接口参数:数显表的专用接口可与PC机的RS232(9针)相接,其波特率4800,无奇偶校检,8位数据位,1位停止位,以AcsII码发送数据
窗体设计:1个listbox,1个textbox,1个MSComm控件,2个CommandButton
程序设计:
Dim indata As Variant Dim data(100) As Single
Private Sub Command1_Click() Static i i = i + 1
data(i) = Text1.Text List1.AddItem data(i)
End Sub ‘...按键一次,采集一个数据,并存入List1中
Private Sub Command2_Click() MSComm1.PortOpen = False '….关端口 Unload Me End Sub '...退出
Private Sub Form_Load()
MSComm1.CommPort = 1 '...使用Com1口 MSComm1.Settings = \设置通讯参数 MSComm1.RThreshold = 10 MSComm1.streshold = 10
MSComm1.PortOpen = True '...打开串口 Text1.Text = \End Sub
Private Sub MSComm1_OnComm() Select Case MSComm1.CommEvent Case comEvReceive '...有接收事件发生
indata = MSComm1.Input
Text2.Text = (indata / 10) ‘…text1实时显示数显表的数据 MSComm1.InBufferCount = 0 '...清空输入寄存器 End Select End Sub
我这有一段VB程序是为了画实时采集曲线的。
软件编程我不行,如果大家有看得懂得,请帮我看看。
程序不多
Private Sub MSComm1_OnComm() Dim Inbyte() As Byte Dim buffer As String
Dim datatemp(1000) As Single
If num > 199 Then Call renew '刷新绘图区 '读取仪表返回数据串
Select Case MSComm1.CommEvent Case comEvReceive
Inbyte = MSComm1.Input '这地方看不懂,数组可以这样赋值吗?
For i = LBound(Inbyte) To UBound(Inbyte)
buffer = buffer + Hex(Inbyte(i)) + Chr(32) 'for语句也没看懂,尤其是buffer这赋的是什么值? Next i
Case comEvSend End Select
'获取十进制测量数据
’这下面的又是没看懂,应该是将十六进制转换为十进制,怎么转换的呢? If Len(Trim(Mid(buffer, 1, 2))) = 1 Then
datatemp(num) = Val( \\ & Mid(buffer, 3, 2) & Str( \\ & Mid(buffer, 1, 2)) * 0.01 Else
datatemp(num)
=
Val(
\
\ & Mid(buffer, 3, 2) & Mid(buffer, 1, 2)) * 0.01 End If
‘绘制曲线
Private Sub draw() Picture1.Cls
Picture1.DrawWidth = 2
Picture1.BackColor = QBColor(7) ’下面的程序我看不懂,用的是什么原理画的曲线呢? Picture1.Scale (0, 50)-(200, 0) For i = 1 To num - 1
X1 = (i - 1): Y1 = datatemp(i - 1) X2 = i: Y2 = datatemp(i)
Picture1.Line (X1, Y1)-(X2, Y2), QBColor(1) Next i End Sub
问题点数:100 回复次数:10 显示所有回复修改 删除 举报 引用 回复
加为好友 发送私信 在线聊天
发表于:2007-06-25 14:44:411楼 得分:0 连点法阿
修改 删除 举报 引用 回复 ? CathySun118
失.悟 ? ? ? ?
等级:
可用分等级:富农 总技术分:88266
? ? 总技术分排名:66
2 发表于:2007-06-26 09:41:372楼 得分:0 画曲线啊,用这个吧:
'实时曲线左移函数,定义在模块中 加为好
Public
Declare
Function
BitBlt
Lib
\
\ (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal
'建立一个类,作为画实时曲线 Option Explicit
Public pCurveNUM As Integer Public pCurveName As String Public pCurveMax As Double
WintePrivate pricCurve As PictureBox rs_lePrivate priCurvePoint(6) As Integer e
Private priCurveData(6) As Double
其实Private priDrawY0(6)
友 ySrc As Long, ByVal dwRop As Long) As Long 发送私
信 在线聊
天 Public pCurvemin As Double
?
As Double
Private priDrawY1(6) As Double Private priDrawNMinute As Integer Private priDrawTMinute As Integer
等级:
可
Private WithEvents priTimerDraw As Timer
Public Property Let ltDrawTimer(ByRef lTimer As Timer)
? ? ?
用分等
级:中 Set priTimerDraw = lTimer 农
End Property
Public Property Let ltGiveCurveData(ByVal lDataPoint As Va Dim i%
? 总技术分:
1658 riant)
? 总
技术分 For i = 1 To pCurveNUM
排名: priCurvePoint(i) = CInt(lDataPoint(i)) 1287 Next