vb6 - 使用带有 Visual Basic 6 的 FTDI D2XX 驱动程序读取和写入串行端口
问题描述
我正在尝试使用 VB6 建立连接并从虚拟 COM 端口读取数据,继我在此处的查询:Baud rate limits in software and serial communication with an external device 之后。我正在使用 FTDI 驱动程序通过 USB VCP 与设备通信。
我在 Visual Basic 6 上使用 FTD2XX 库来显示设备的名称和序列号(这已经有效),设置停止位的数量,设置波特率和数据位的数量。我现在想从串口读取和写入,我有一些代码和问题。我的代码如下:
Public Class FTDI1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim DeviceIndex As Integer
Dim TempDevString As String
Dim Read_Result As Integer
Dim Read_Count As Integer
' Get serial number of device with index 0
' Allocate space for string variable
TempDevString = Space(16)
FT_Status = FT_GetDeviceString(DeviceIndex, TempDevString, FT_LIST_BY_INDEX Or FT_OPEN_BY_SERIAL_NUMBER)
If FT_Status <> FT_OK Then
Exit Sub
End If
FT_Serial_Number = Microsoft.VisualBasic.Left(TempDevString, InStr(1, TempDevString, vbNullChar) - 1)
' Display serial number on form
TextBox1.Text = FT_Serial_Number
' Get the model of the connected device
TempDevString = Space(64)
FT_Status = FT_GetDeviceString(DeviceIndex, TempDevString, FT_LIST_BY_INDEX Or FT_OPEN_BY_DESCRIPTION)
If FT_Status <> FT_OK Then
Exit Sub
End If
FT_Description = Microsoft.VisualBasic.Left(TempDevString, InStr(1, TempDevString, vbNullChar) - 1)
' Display serial number on form
TextBox2.Text = FT_Description
' Set baud rate of the connected device
' Set Baud Rate
FT_Status = FT_SetBaudRate(FT_Handle, 1000000)
If FT_Status <> FT_OK Then
Debug.Print("Baud rate set")
Exit Sub
End If
' Set the number of stop bits of the recorded device
' Set parameters
FT_Status = FT_SetDataCharacteristics(FT_Handle, FT_DATA_BITS_8, FT_STOP_BITS_2, FT_PARITY_NONE)
If FT_Status <> FT_OK Then
Debug.Print("Stop bits, parity and data bits set")
Exit Sub
End If
' Read bytes (not strings)
FT_Status = FT_Read_Bytes(FT_Handle, FT_In_Buffer(16), Read_Count, Read_Result)
If FT_Status <> FT_OK Then
Debug.Print(Read_Result)
Exit Sub
End If
' Display read bytes on form
TextBox3.Text = Read_Result
' Close device
FT_Status = FT_Close(FT_Handle)
If FT_Status <> FT_OK Then
Exit Sub
End If
End Sub
End Class
我的问题如下:
1) 我已经使用 FD2XX 库设置了波特率、停止位和数据位数。完成此操作后,是否可以直接连接到串行端口并使用 FTDI 库中没有的函数发送或接收数据?我问这个是因为我不确定 FTD2XX 驱动程序是否与 VCP 分开,并且 FTDI 不提供有关使用 USB VCP 进行串行通信的文档。
2) 是否有任何有据可查的函数库/代码建议可以让我从中阅读?如果这需要某种形式的转换,也可以建议一个有据可查的函数库吗?
3) 是否有任何有据可查的函数库用于将无符号整数写入我通过 USB VCP 与之通信的设备?
解决方案
我对 VB 不是很熟悉,但我经常通过 C 和 python 使用 FT 设备。所以这就是我所知道的:
避免误解的一般注释:VCP 代表虚拟 COM 端口。因此,这实际上使系统能够寻址 FT 设备,而无需使用像 D2XX 这样的特定库。大多数语言都提供了一些对 com 端口的“本机”访问。因此,对于常规的 COM 端口操作,根本不需要处理 D2XX。据我所知,它主要用于替代操作模式和访问 MPSSE。
1) 如果您通过 D2XX 打开一个端口,其他访问将不可用。如果您释放它并通过另一种方式打开它(例如,如果是 auf .net,则为 MSComm 或 IO.Ports.SerialPort),设置将被覆盖(或至少应该是自动的)。
2)恐怕只有 FT 的示例项目是你最好的选择。但也许其他人可以指出更好的方法。
3) 通常本机访问(C 和 python)允许您编写和读取纯字节字符串。因此,您唯一要做的就是将其“转换”为正确的类型。ctype / CByte / CInt 似乎是你的线索。
推荐阅读
- ios - WidgetKit - 以编程方式隐藏小部件
- activemq-artemis - Artemis 计数和页面文件
- node.js - 如何使用 chai 进行内部集成测试和 nock 进行外部 api 调用
- if-statement - 谷歌表格 VLOOKUP MULTIPLE IF
- c# - 用于生产的 Dotnet 内存中数据存储/数据源
- css - min-width: none vs unset 什么是正确的方法?
- ffmpeg - FFMPEG:如何将一分钟长的 MP4 转换为 4MB 以下且质量不错的 WebM (VP8)?
- reactjs - 从故事书中的类型创建控件
- google-cloud-platform - 使用上传云存储操作替换文件夹
- python - 这个列表理解如何成为 Python3 中的一个衬里?