串行端口通信-从设备接收数据

时间:2019-02-12 15:34:29

标签: vba access-vba serial-port

我一直在使用MS Access 2016中来自thescarms.com(http://www.thescarms.com/VBasic/commio.aspx)的串行端口通信VB模块。我试图复制一个序列,该序列可以通过串行端口连接成功从便携式手持设备接收数据。使用白蚁(RS232终端),我可以通过以下方式与设备通信:

[CSV] 'sent
[CSV]APR500 V.2.8 Mar 18 2014/20.04.08 14.01.14 'received
[CSVOK] 'received
[CCD|1] 'sent
[CCD|1][CCDOK] 'received
[CSW] 'sent
[CSW][12022019|1333|WG|9.09||||NT||1.2|||M|1] 'received
[CSWOK] 'received

在VBA中,我尝试使用模块以及CommRead和CommWrite例程来复制它。

Private Sub Command14_Click() Dim intPortID As Integer ' Ex. 1, 2, 3, 4 for COM1 - COM4 Dim lngStatus As Long Dim strError As String Dim strData As String Dim strAnswer As String intPortID = 4 strData = "[CSV]" ' Initialize Communications lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _ "baud=9600 parity=N data=8 stop=1") If lngStatus <> 0 Then ' Handle error. lngStatus = CommGetError(strError) MsgBox "COM Error: " & strError End If ' Set modem control lines. lngStatus = CommSetLine(intPortID, LINE_RTS, True) lngStatus = CommSetLine(intPortID, LINE_DTR, True) ' Write data to serial port. lngSize = Len(strData) lngStatus = CommWrite(intPortID, strData) Me.Text1 = strData 'CHECK StrData If lngStatus <> lngSize Then ' Handle error. End If ' Read maximum of 64 bytes from serial port. lngStatus = CommRead(intPortID, strData, 64) Me.Text2 = strData strData = "[CCD|1]" 'send next command ' Set modem control lines. lngStatus = CommSetLine(intPortID, LINE_RTS, True) lngStatus = CommSetLine(intPortID, LINE_DTR, True) ' Write data to serial port. lngSize = Len(strData) lngStatus = CommWrite(intPortID, strData) Me.Text3 = strData If lngStatus <> lngSize Then ' Handle error. End If ' Read maximum of 64 bytes from serial port. lngStatus = CommRead(intPortID, strData, 64) Me.Text4 = strData If lngStatus > 0 Then ElseIf lngStatus < 0 Then ' Handle error. End If ' Reset modem control lines. lngStatus = CommSetLine(intPortID, LINE_RTS, False) lngStatus = CommSetLine(intPortID, LINE_DTR, False) strData = "[CSW]" 'send THIRD command ' Set modem control lines. lngStatus = CommSetLine(intPortID, LINE_RTS, True) lngStatus = CommSetLine(intPortID, LINE_DTR, True) ' Write data to serial port. lngSize = Len(strData) lngStatus = CommWrite(intPortID, strData) Me.Text5 = strData If lngStatus <> lngSize Then ' Handle error. End If ' Read maximum of 64 bytes from serial port. lngStatus = CommRead(intPortID, strData, 64) Me.Text6 = strData If lngStatus > 0 Then ElseIf lngStatus < 0 Then ' Handle error. End If ' Reset modem control lines. lngStatus = CommSetLine(intPortID, LINE_RTS, False) lngStatus = CommSetLine(intPortID, LINE_DTR, False) ' Close communications. Call CommClose(intPortID) End Sub

似乎可以正确通信,但是我没有从设备中取回数据,而是进行了以下交互:

[CSV]  'sent
[CSV]APR500 V.2.8 Mar 18 2014/20.04.08 14.01.14 'recieved
[CSVOK] 'recieved
[CCD|1] 'sent
[CCD|1][CCDOK] 'recieved
[CSW] 'sent
[CSW] 'recieved

我不明白为什么我的反应不如白蚁。我在设备上拥有的测试数据少于64个字节,并且我已经尝试在CommRead例程中增加字节大小。如果有人可以在网站上提供任何说明,我将不胜感激。希望这不是太具体,并且在VBA或串行端口通信方面比我更有经验的人可以提供帮助。

我正在使用的设备是APR 500(https://agrident.com/products/portable-readers/apr500/

0 个答案:

没有答案