多通道数据采集

淡定如旧 淡定如旧 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位高手,最近做了一个多通道的数据采集,遇到了一个麻烦,希望您能帮我一下,我要做的就是用单片机采集数据,然后通过串口送到上位机里,上位机用的是vb,从下位机猜到的是1000个字节的数据,这1000个乬是四个通道的数据,也就是每个通道有250个字节,现在我已经能够顺利采集到了数据了,在vb工程文件中国的textbox显示的是1000个十六进制的数据,现在我想把这十六进制的数据转换成具体的唯一值,我采用的是8位的AD转换器,怎么才能吧这些十六进制转换成正常的十进制的浮点数的位移,传感器输入的是0-5V的电压,所对应的位移是0-1250mm,下面是我的代码,希望高手给我指点一下如何才能将这1000个字节的十六进制的数据转换成十进制的0-1250mm的位移啊?

上位机程序代码

Public Class 多通道数据采集
Public Delegate Sub myDelegate()
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1

cmbSerialPort.Items.Add(My.Computer.Ports.SerialPortNames(i))
Next
btnCloseSerialPort.Enabled = False
SerialPort.Close()
Timer.Enabled = False
picState.BackColor = Color.Red
cmbBoadrate.Items.Add("4800")
cmbBoadrate.Items.Add("9600")
cmbBoadrate.Items.Add("57600")
cmbChanel.Items.Add("通道一")
cmbChanel.Items.Add("通道二")
cmbChanel.Items.Add("通道三")
cmbChanel.Items.Add("通道四")
End Sub
Private Sub btnOpenSerialPort_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOpenSerialPort.Click
If SerialPort.IsOpen = True Then
SerialPort.Close()
End If
If cmbSerialPort.Text = "" Then
MessageBox.Show("请选择一个串口", "串口选择警告", MessageBoxButtons.OK, MessageBoxIcon.Error)
Else
SerialPort.PortName = cmbSerialPort.Text
SerialPort.ReadBufferSize = 4096
SerialPort.BaudRate = cmbBoadrate.Text
SerialPort.Parity = IO.Ports.Parity.None
SerialPort.DataBits = 8
SerialPort.StopBits = IO.Ports.StopBits.One
SerialPort.DiscardNull = True
SerialPort.DtrEnable = False
SerialPort.Encoding = System.Text.Encoding.ASCII
SerialPort.RtsEnable = False
SerialPort.Open()
picState.BackColor = Color.Green
btnCloseSerialPort.Enabled = True
End If
End Sub
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
If MessageBox.Show("清空文本框显示请选择Yes,清零计数器请选择No", "选择一个删除对象", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
txtDataReceive.Text = String.Empty

Else
txtNumOfReceive.Text = "0"
txtNumOfSendChar.Text = "0"

End If


End Sub
Public Sub SendtoSbuf()
Dim TestArray() As String = Split("fe")
'Dim str(0)="fe" as string
Dim hexBytes() As Byte
ReDim hexBytes(TestArray.Length - 1)
Dim i As Integer
For i = 0 To TestArray.Length - 1
hexBytes(i) = Val("&h" & TestArray(0))
Next
SerialPort.Write(hexBytes, 0, 1)
txtNumOfSendChar.Text = (Val(txtNumOfSendChar.Text) + 1).ToString
End Sub
Public Function DecToHex(ByVal DecNumber As Byte) As String '转换成十六进制字符串
If DecNumber <= 15 Then
DecToHex = " 0" & Hex(DecNumber)
Else : DecToHex = " " & Hex(DecNumber)
End If
End Function
Public Sub GetCharFromAndSendToTextBox()
Dim str_indata As String
Dim byteToRead As Int16


byteToRead = SerialPort.BytesToRead '(读取缓冲区的字节长度)
txtNumOfReceive.Text = (Val(txtNumOfReceive.Text) + byteToRead).ToString

Dim ch(byteToRead) As Byte

Dim bytesRead As Int16 = 0
' str_indata = SerialPort1.ReadExisting()

bytesRead = SerialPort.Read(ch, 0, byteToRead)


If bytesRead > 0 Then
For i As Int16 = 0 To bytesRead - 1
'System.Threading.Thread.Sleep(50) ' 这个很重要!
str_indata = str_indata & DecToHex(ch(i))
Next
End If
With txtDataReceive
.Font = New Font("Garamond", 12.0!, FontStyle.Bold)
.AppendText(str_indata)
.ScrollToCaret()
End With

End Sub
Private Sub btnStartCollectData_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStartCollectData.Click

If SerialPort.IsOpen = True Then
SendtoSbuf()
Else : MessageBox.Show("请打开串口", "警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If


End Sub

Private Sub btnCloseSerialPort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCloseSerialPort.Click
SerialPort.Close()
picState.BackColor = Color.Red
End Sub

Private Sub SerialPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort.DataReceived
txtDataReceive.Invoke(New myDelegate(AddressOf GetCharFromAndSendToTextBox), New Object() {})

End Sub

Private Sub btnCycleCollect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCycleCollect.Click

If SerialPort.IsOpen = True Then
SendtoSbuf()

Timer.Enabled = True
Else : MessageBox.Show("请打开串口", "警告", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
End If

End Sub

Private Sub Timer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer.Tick


SendtoSbuf()
End Sub

Private Sub btnStopCollect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStopCollect.Click
Timer.Enabled = False
End Sub
End Class


...全文

相关推荐

基于LabVIEW的多通道数据采集系统,labview多通道数据采集例子,LabView

### 多通道数据采集1. **硬件接口**: LabVIEW支持多种数据采集硬件,如DAQ(Data Acquisition)卡,可以连接到不同的传感器,实现多通道同步或异步采集。2.

lithops7

LabVIEW多通道数据采集实战指南

LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是由美国国家仪器(National Instruments,简称NI)开发的一种图形化编程语言。自1986年推出以来,它因其直观的编程方式和强大的数据处理能力,已经成为测试、测量和控制领域工程师和科学家的重要工具。LabVIEW广泛应用于工业自动化、数据分析、原型设计以及嵌入式系统开发,特别适合于那些需要实时数据采集和控制的场合。

邹子乔

STM32F103多通道ADC数据采集与处理实战

STM32F103是STMicroelectronics推出的一款高性能的ARM Cortex-M3微控制器。它适用于广泛的嵌入式应用,从简单的工业控制到复杂的通信设备。此微控制器的主要特性包括:高性能ARM Cortex-M3 32位核心,运行频率可达72MHz。丰富的外设接口,如USART, SPI, I2C, CAN等。256KB的闪存和48KB的SRAM。多个模拟和数字输入/输出端口。内置ADC,具有多个通道,且支持多种分辨率。

dax eursir

STM32多通道ADC数据采集与DMA优化

嵌入式系统广泛应用于工业控制、消费电子、医疗设备等领域,其中模数转换器(ADC)作为关键组成部分,扮演着至关重要的角色。ADC负责将模拟信号转换为数字信号,使得微控制器可以处理和分析传感器、声音等非数字源的数据。通过将连续的信号采样、量化并最终转换成数字格式,ADC使得数字系统能够理解和使用这些模拟信息,进而实现更加复杂和智能的功能。接下来的章节将深入探讨DMA原理及其在数据采集中的应用,以及STM32系列微控制器ADC模块的特性,为理解和应用ADC打下坚实的基础。

豪欧巴

LabVIEW编写的多通道数据采集程序,labview多通道数据采集例子,LabView

在本案例中,我们讨论的是一个利用LabVIEW编写的多通道数据采集程序,该程序能够实现对多个数据源的同步采集和显示。首先,我们要理解"DAQ"的含义,即Data Acquisition,数据采集。

lithops7
评论 3
收藏 已收藏
分享
返回顶部
淡定如旧
VB基础类 7,788 成员 197,583 内容