用VB进行串口实时波形显示(5)

2019-01-12 18:10

图1 用户界面 2 编写程序代码 编写的程序代码如下:

PriVate Sub Form_Load()

Msc1.CommPort=1 ’ 使用串行口1

’波特率9600,偶校验,8个数据位,1个停止位 Msc 1.Settings=“9600,E,8,1”

’当使用Msc 1.Input时,每次从接收缓冲区取一个字节。 Msc1.InputLen=0 ’读取整个接收缓冲区内码或消除 Msc1.Portopen=True ’ 打开串行口 End Sub

Private Sub Comd1_Click()

On Error Resume Next ’简单的错误处理 If Txt1.Text = \

x = MsgBox(\被检仪器程控码不能为空值\) Exit Sub End If

MSC1.Output = Txt1.Text + Chr$(13) ’发送程控码 For i = 1 To 20000000 Next End Sub

Private Sub Comd2_Click() Txt1.Text = \ Txt1.SetFocus End Sub

Private Sub Comd3_Click()

Dim instring As string instring = MSC1.Input

MSC1.Output = Txt2.Text + Chr$(13) Do DoEvents

Loop Until MSC1.InBufferCount >= 20

instring = MSC1.Input ’ 从接收队列中读入字符串 Txt2.Text = \

Txt2.Text = instring ’ 显示读入的字符串 End Sub

Private Sub Comd4_Click() Txt2.Text = \ Txt2.SetFocus End Sub

Private Sub Comd5_Click()

MSC1.PortOpen = False ’ 关闭串行口 End End Sub

3 程序简要说明

上述程序设置的端口通信协议为: 9600波特率,偶校验,8个数据位,1个停止位。当退出程序时,一定要关闭串行口,通过comm1.PortOpen=False完成。使用时,在“请输入被检仪器程控码控制仪器功能”文本框中输入“FUNC‘FREQ 1;FREQ:RES1HZ”即仪器的程控码为:“功能通道1测频,分辨率为1Hz。单击“确定”后,HP53150A置于相应功能。加入信号后即可测量检测,当读取测量数据时在“请输入被检仪器程控码读取仪器数据”框中输入“DATA?”,单击“确定”后,该框中以字符的形式显示测量结果。从而实现仪器程控功能和性能指标的检测。上述只是一个简单的例子。要实现完善的功

能,必须进一步改进程序。 上面介绍了笔者在使用VB6开发Windows环境下测控软件的一点收获,可以看出使用VB6开发Windows98下与仪器进行串口通信程序是非常简单的。

双击MSCOMM控件进入OnComm,当有数据传输到PC机时就会触发这个事件,所以不需要在Timer中来实时监测。

下面是一个例子可以参考一下: '***************************************** '串口处理

'***************************************** Private Sub MSComm_OnComm()

On Error GoTo hak: Dim intInputLen As Integer Dim str As String

Dim temp As Integer Dim fl As Single Dim i As Integer

Select Case MSComm.CommEvent Case comEvReceive RX = RX + 1

StatusBar1.Panels(4).Text = \接收:\

intInputLen = MSComm.InBufferCount '是指调制解调器已接收,并在接收缓冲区等待被取走的字符数。 ReDim inbyte(intInputLen) ' 重新定义数组长度 inbyte = MSComm.Input '按字符接收

If OpType(0).Value = True Then

For i = LBound(inbyte) To UBound(inbyte) str = str + Chr(inbyte(i)) Next i

txtReceive.Text = txtReceive.Text & str '十六进接收

ElseIf OpType(1).Value = True Then For i = LBound(inbyte) To UBound(inbyte) str = str + CStr(Hex(inbyte(i))) + Chr(32) If Len(Hex(inbyte(i))) <= 1 Then

txtReceive.Text = txtReceive.Text & \ Else

txtReceive.Text = txtReceive.Text & str End If Next i '整型接收

ElseIf OpType(2).Value = True Then Dim bit As Byte bit = inbyte(0)

For i = LBound(inbyte) To UBound(inbyte) temp = temp + CLng(inbyte(i)) Next i

If bit >= 128 Then '判断是否为负

txtReceive.Text = txtReceive.Text & (temp - 255) & \ Else

txtReceive.Text = txtReceive.Text & temp & \ End If End If End Select

MSComm.InBufferCount = 0 hak:

MSComm.InBufferCount = 0 End Sub

回答者: xmxqiyan - 江湖新秀 五级

只能分时接收了

比如 char rev_buf[1024] 现接收1024个 在循环判断 rev[i]=='A' rev[i+4]=='Z' 则为有效数字

另外:你的仪器为一台 这种单工通信还行 如果不止一台 则会有干扰 还不如不要上位机 当然 这只是我的想法而已

回答者: 摘一把青梅煮酒 - 同进士出身 六级

把comm控件设置为每6个字符激发一次oncomm事件。

这样实时读取就可以了。

用时钟控件也是可以的,定期把缓冲区的数据读出来,

再整理处理。

3-21 12:59

3-21 13:59


用VB进行串口实时波形显示(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:日语本科自考复习资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: