Связь через последовательный порт - получение данных с устройства - PullRequest
0 голосов
/ 12 февраля 2019

Я использую модуль VB для связи через последовательный порт с thescarms.com (http://www.thescarms.com/VBasic/commio.aspx) в MS Access 2016. Я пытаюсь воспроизвести последовательность, которая успешно получает данные от портативного портативного устройства через соединение через последовательный портИспользуя термит (терминал 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/)

).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...