我正在尝试使用VB6建立连接并从虚拟COM端口读取数据,下面是我在这里查询的内容:软件和与外部设备的串行通信中的波特率限制。我使用FTDI驱动程序通过USB与设备进行通信。
我正在使用Visual 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进行串行通信的文档。
( 2)是否有任何记录良好的函数库/代码建议,使我能够从中阅读?如果这需要某种形式的转换,那么也可以建议建立一个完整的函数库吗?
3)是否有任何记录良好的函数库,用于将无符号整数写入我通过USB与之通信的设备?
发布于 2019-05-17 11:40:04
顺便问一下,问题中提出的FT_Write_String和FT_Write_Bytes函数从何而来?
在FTDI代码示例中,它是FT_Write、FT_WriteByte、
D2XX模块 在此页面上发布的许多Visual示例使用一个模块与D2XX DLL进行接口。要下载Visual 6的单元(D2XX_Module.bas),单击此处。 请注意,下面的代码示例可能已经包含一个处理D2XX DLL接口的模块。当前模块文件与随示例分发的模块文件之间可能存在差异。D2XX_Module.bas 公开声明函数FT_Write Lib "FTD2XX.DLL“(ByVal lngHandle As Long,ByVal lpszBuffer As String,ByVal lngBufferSize As Long,ByRef lngBytesWritten As Long)与公共声明函数FT_WriteByte Lib”Alias“FT_Write (ByVal lngHandle As,ByRef lpszBuffer As As "FT_Write”)一样长(ByVal lngHandle As,ByRef lpszBuffer As As As,Long,Lib“”(en24#,en26#,en33 28,en33 28,en33 29#,#en32表示33)
注意:然而,,FT_W32_WriteFile的ByVal lpszBuffer As String参数似乎是ByRef lpszBuffer As Any的错误。
示例6 我们感谢Bob提供了这个使用VB6 MPSSE与MAX187 ADC通信的MAX187示例。 源代码和可执行文件可用于免费的下载。此代码仅为说明目的而提供“原样”,因此,FTDI或Bob都没有为此VB6代码提供技术支持。
Visual的字符串变量是Unicode,因此它们不适合处理二进制数据。
与其替换字符串变量,不如显式地将数据存储在字节数组变量中,并使用FT_WriteByte函数进行写入。
基于上述情况,将如下所示。
Dim SendData(nnn) As Byte ' nnn is value of send data size - 1
SendData(0) = 121
SendData(1) = xxx
SendData(2) = yyy
.
.
.
FT_Status = FT_WriteByte(FT_Handle, SendData(0), Len(SendData), BytesWritten)发布于 2019-05-16 14:24:57
我不太熟悉VB,但我经常通过C和python使用FT设备。所以我知道的是:
为了避免错误的概念: VCP代表Virtual端口。因此,这实际上使系统能够处理FT设备,而不需要使用像D2XX这样的特定库。大多数语言提供对com端口的一些“本机”访问。因此,对于常规的com端口操作,根本不需要处理D2XX。据我所知,它主要用于替代操作模式和访问MPSSE。
1)如果您通过D2XX打开一个端口,它将不可用于其他访问。如果您释放它并通过另一种方式打开它(例如,MSComm或IO.Ports.SerialPort,以防出现.net),设置将被覆盖(或者至少应该是自动的)。
2)恐怕只有英国“金融时报”的例子项目才是你的最佳选择。但也许其他人可以指出一个更好的方法。
3)通常,本机访问(C和python)允许您编写和读取普通字节字符串。所以你唯一要做的就是把它转换成正确的类型。ctype / CByte / CInt似乎是你的提示。
https://stackoverflow.com/questions/56168399
复制相似问题