从VBA访问串行端口的最佳方式是什么?

从VBA访问串行端口的最佳方式是什么?

我需要一些销售代表能够通过串行端口从PowerPoint中的操作button发送一个简单的string。 我通常不使用VBA,特别是对于这样的事情。 通常我会把它变成某种应用程序,但我其实并不认为这个想法是不好的。 这将是一个方便的工具,让他们在投影机上演示此设备,并与其他销售人员和非技术人员交谈。 另外,这个销售人员将不会对VBA或PowerPoint演示文稿进行小小的修改,但是在重新编译.NET应用程序时不会有任何问题。

我知道我们可以通过从动作演示中运行的batch file来完成,但是这并不会让我感到非常高兴。 我想我们可能可以访问一个COM对象并从那里运行,但是我再也不是真正了解VBA中使用的最新的和最大的库,也很快得到一个简单的入门知识,发送并closures连接。

由于这将需要在多人的电脑上运行,如果能够轻松地运送到其他机器上将是很好的。 我应该可以说它必须在Office 2007和Windows XP上运行。 与其他任何东西兼容将是一个不错的奖金,但。

我该怎么处理呢? 任何好的提示或技巧? 图书馆build议?

Win32 API将串行端口作为文件处理。 您可以通过在VBA中调用这些API函数来直接访问串行端口。 我必须为旧的.NET应用程序这样做,但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 

这对我有用。 我不确定OPEN是否实际设置了波特率,因为我第一次使用TeraTerm。 我的COM端口是与BASYS3原型套件的USB连接。 它在9600处喷射字符,以CR结尾的36个字符的logging。 我可以随意发送9个字符的命令。 在上面的代码中,我每次收到一个新行时都会生成这些命令string。 我select发送字符的方式有点笨拙:或许一个更好的方法是有一个字符指针和一些字符,当这些字符相等时将它们设置为零。

Interesting Posts