什么是最好的方式来访问的一串口从VBA?

我有一个需要我们的一些销售代表能够发送一个简单的字符串通过串口从一个行动按钮在PowerPoint。我不经常使用VBA,尤其是对于这样的事。通常我会把它变成一种应用程序的某一类,但实际上我不觉得这个想法是糟糕的。这将是一个方便的工具,为他们的演示这装置,而上一个投影仪和其他销售人员和非技术人。此外,这种销售的家伙不会有任何问题作出小的修改VBA或PowerPoint演示,但不会做以及与重新编译。净的应用程序。

我知道我们可以做的,它通过批文件从介绍的行动,但是,这并不使我非常高兴。我想我们也许可以访问COM对象和运行的,但再一次我不是现实的最新和最伟大的图书馆使用在VBA,它也会很高兴得到一个快速的小底在如何容易开放、发送和关闭连接。

由于这将需要运行多个人的计算机,这将是好的,如果它将易于运输的其它机。我应该可以说,它已运行在办公室于2007年和Windows XP。兼容性有任何东西将是一个很好的奖励,虽然。

我应该如何去处理这个吗?任何良好技巧或技巧?图书馆的建议?

有帮助吗?

解决方案

Win32API处理串口作为一个文件。你可以访问的串口直接通过调用这些API职能从内VBA。我必须要做到这一老。净的应用程序,但VBA是没有什么不同。

而不是散列出对您在这个网站,这里有一个参考我挂上了多年。 如何执行串行通信端口在VBA

其他提示

Sub Stinky()
Dim COM_Byte As Byte
Dim Received_Lines As Long
Dim Input_Buffer As String
Dim Output_Buffer As String
Dim Chars2Send As Long
Dim CharsRemaining As Long
Dim lfsr As Long
    Open "COM7:9600,N,8,1" For Random As #1 Len = 1
    Input_Buffer = ""
    CharsRemaining = 0
    Do
    Get #1, , COM_Byte
    If COM_Byte Then
        If COM_Byte = 13 Then           ' look for CR line termination
            Debug.Print Input_Buffer, Now   ' print it
            Input_Buffer = ""               ' and clear input buffer
        '   generate some output (9 characters)
            lfsr = &H3FFFFFFF - 2 ^ (Received_Lines And 15)
            Output_Buffer = "?@@@@@@@@"
            Chars2Send = 9
            CharsRemaining = 9
            For j = 0 To 2
                Mid(Output_Buffer, 2 + j, 1) = Chr(Asc(Mid(Output_Buffer, 2 + j, 1)) + (31 And Int(lfsr / 32 ^ (2 - j))))
            Next j
            Debug.Print Output_Buffer
        '   show what I generated
            Received_Lines = Received_Lines + 1 ' keep track of received line count
        Else
            Input_Buffer = Input_Buffer & Chr(COM_Byte) ' assemble output buffer
        '   process any characters to send
            If CharsRemaining Then
                CharsRemaining = CharsRemaining - 1
                COM_Byte = Asc(Mid(Output_Buffer, Chars2Send - CharsRemaining, 1))
                Put #1, , COM_Byte
            End If
        End If
    End If
    DoEvents
    Loop
    Close
End Sub

这对我的作品。我不知道该如果开放实际上设立的波特率,作为我第一次使用TeraTerm.我COM口USB接到一个BASYS3原型工具包。这是喷出人物在9600,记录了36人物结束CR。我可以随机发送命令的9个字符。在上述码,我产生这些命令串的每一个时间我收到一个新的线.我选择了哪一个角色来发送的是有点笨重的:也许是一个更好的办法是要有一个角色指针和一个数字,且当这些去等于设定他们两个为零。

这是一个简要的模块的载>>>情绪,即可发送和接收信息的电脑上串口。这不是很优雅,但它是简单的,应该在现代版本的Excel和窗户。

你留在你自己的扩大的功能性和存储或分析的信息。这只是表明低层的东西到处理串口。

第5条线宣布毫秒的"睡眠"的图书馆功能(基于Excel的版本)。

这串口()子程序概述的步骤,以开放的港口,发射了一些数据,收到一些数据,尽量再次收到一些数据(表明它真的不相抵触的"结束的文件"的错误),以及关闭的港口。


#If VBA7 Then ' Excel 2010 or later
    Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else ' Excel 2007 or earlier
    Public Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As Long)
#End If

Public Sub SerialPort()
    ' open a COM port, transmit a message, gather results, close the port.

    ' open the COM port as file #1
    Debug.Print "Open COM port 4"
    Open "COM4:115200,N,8,1" For Binary Access Read Write As #1

    transmit$ = Chr(2) + "Hello, World." + Chr(13)
    receiveDummy$ = "~~~"

    ' transmit a message
    Put #1, , transmit$
    Debug.Print "Message sent."

    ' wait a bit for a response
    Sleep 100

    ' check for received message
    Debug.Print "Look for incoming message."
    On Error Resume Next
    Do While True
        receive$ = receiveDummy$  'dummy value
        Input #1, receive$
        If receive$ = receiveDummy$ Then Exit Do  'the string didn't change, so move on
        Debug.Print receive$
    Loop
    On Error GoTo 0

    ' do it again to show that the empty input queue doesn't stop the flow
    Debug.Print "Look again for incoming message (should not stop on error)."
    On Error Resume Next
    Do While True
        receive$ = receiveDummy$  'dummy value
        Input #1, receive$
        If receive$ = receiveDummy$ Then Exit Do  'the string didn't change, so move on
        Debug.Print receive$
    Loop
    On Error GoTo 0

    ' close the serial port
    Debug.Print "Close COM port."
    Close #1

    Debug.Print "Done."
End Sub
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top