当前位置:首页>科技>正文

labview串口提取数据 串口读取数据并处理

2023-06-07 02:04:04 互联网 未知 科技

 labview串口提取数据 串口读取数据并处理

labview串口提取数据

1 8.6版本需要安装labview VISA附加工具包,网上很多 2 串口工具在控件----数据通信目录下..点任何一个串口控件的帮助,里面有例程,10分钟就能看懂了。使用就不外乎是: "配置"字节格式 波特率 ...,读“R”,写“W" ,程序结束的地方别忘记“关闭” 3 串口出来的东西是 字符串,你用 ”字符串转U8数组“这个控件,得到Uint8的数组(即数组里都是 0- 255的数字),再按照你设计的串口发送字节的规律(指令格式)来操作数组就行了 在程序框图里 任何线上你都可以”添加显示控件“,前面板会自动生出对应的显示。字符串显示控件--右键--选择16进制显示,才可以看 串口原始数据 首先:一般情况下都必须规定指令格式,因为串口通信很容易产生随机的数据(即错误字节) 然后就是指令处理:比如你规定指令都是 0101开头,FFFF结尾,中间是你要的数据,那么你就检索那个数组,a0=1,a1=1开头,其后面都是数据,直到出现 255 255,则这条指令结束。 等你明白这些东西,再看文件IO控件(里面有好几种保存方法),学起来就是很快的事情了。~~

串口读取数据并处理

这个得根据单片机的型号去编写,而且编写了可能也需要你自己移植
1.大概思路就是首先检测出两个相邻的字节数据是:0XBB,0X11,检测到这个帧头之后,做一个标记,然后开始接收数据,当数据接收到56个以后,就完了

串口数据采集程序

直接上参考程序:
Dim av As Variant
Dim datacount As Long

Private Sub cmdClear_Click()
    txtData.Text = ""
End Sub

Private Sub cmdStop_Click()

    关闭端口
    If MSComm.PortOpen = True Then
        MSComm.InBufferCount = 0    清空缓冲区
        MSComm.PortOpen = False
    End If

    cmdReceive.Enabled = True
    lblStatus.Caption = "停止接收,空闲"

End Sub

Private 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 Then
        MSComm.PortOpen = True
        If Err Then
            MsgBox (Err.Description)
            Exit Sub
        End If
    End If

    lblStatus.Caption = "打开端口,等待接收"
    datacount = 0
    cmdReceive.Enabled = False
End Sub

Private Sub cmdSave_Click()

    Dim outfn As String

    MsgBox ("接收了"   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 = True
    On Error GoTo errhandler
        CommonDialog1.ShowSave
        outfn = CommonDialog1.FileName

        Open outfn For Output As #1
            Print #1, txtData.Text
        Close #1

    txtData.SaveFile outfn
    lblStatus.Caption = "输出完成,空闲"

errhandler:
    Exit Sub
End Sub

Private Sub Form_Load()
    lblStatus.Caption = "空闲"
End Sub

Private Sub Form_Unload(Cancel As Integer)

    关闭端口
    If MSComm.PortOpen = True Then
        MSComm.InBufferCount = 0    清空缓冲区
        MSComm.PortOpen = False
    End If

End Sub

Private Sub MSComm_OnComm()
    Dim T1, T2 As Long
    Select Case MSComm.CommEvent

        Case comEvReceive       收到Rthreshold个字节产生的接收事件

            MSComm.RThreshold = 0    关闭OnComm事件接收

            lblStatus.Caption = "接收"
            av = MSComm.Input       读取一个接收字节
            dataframe(1) = av(0)    转换为字节

            If dataframe(1) = &HA Then   接收到T1

                Do
                    DoEvents
                Loop Until MSComm.InBufferCount >= 2  循环等待接收缓冲区>=2个字节

                av = MSComm.Input
                dataframe(2) = av(0)
                av = MSComm.Input
                dataframe(3) = av(0)       接收T1
                T1 = dataframe(2)   CLng(dataframe(3)) * 256    计算T1
            End If

            Do
                DoEvents
            Loop Until MSComm.InBufferCount >= 1  循环等待接收缓冲区>=1个字节

            av = MSComm.Input       读取一个接收字节
            dataframe(4) = av(0)    转换为字节

            接收到T2
            If dataframe(4) = &HA0 Then
                MSComm.RThreshold = 0     关闭OnComm事件接收

                循环等待接收缓冲区>=2个字节
                Do
                    DoEvents
                Loop Until MSComm.InBufferCount >= 2

                av = MSComm.Input
                dataframe(5) = av(0)
                av = MSComm.Input
                dataframe(6) = av(0)       接收T2
                T2 = dataframe(5)   CLng(dataframe(6)) * 256    计算T2

                显示T1 T2 enter
                txtData.Text = txtData.Text   CStr(T1)   " "   CStr(T2)   Chr(&HD)   Chr(&HA)

                datacount = datacount   1   数据组数 1
            End If

            MSComm.RThreshold = 1       打开OnComm事件接收

        Case Else

    End Select

End Sub1. 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文本文件中
如果需要 做其他‘文件格式的处理, 数据已经拿到了,想怎么弄就变通下吧。

VC 串口数据读取和保存

你可以看下别人写好的串口通信程序的源代码,如果有需要留下你的邮箱地址,我也可以发给你的。主要是MSCOMM实现的,然后你通过数据库添加你需要的数据表的值,通过递归传到数据库,通过ADO连接数据库后,用SQL查询数据表并显示数据表的数据到当前的文本框里,然后定时的刷新下数据,这样就可以保证你的数据是实时的数据了,你也可以做几组数据表,分别把不同时间段的数据放入数据库,通过SQL查询数据库后显示不同数据表的数据,这样就可以显示不同时期数据的变化量。