Исправления, необходимые в коде VBA для связи с RS 232 - PullRequest
0 голосов
/ 17 января 2020

Код связи VBA для RS 232 не выполнен, он не может передавать какие-либо данные на гаджет Rs 232. Пожалуйста, помогите мне определить, где проблема. Во время передачи нет никаких ошибок, но данные не go или не записываются в com-порт 4. С частью json все в порядке. Я вижу результаты, используя текстовый файл вместо окна «Немедленно». Здесь необходимо записывать данные, отправлять и получать данные из гаджета RS 232. Обратите внимание, что я все еще изучаю этот материал VBA. Возможно, я не на вашем уровне

КОД VBA RS 232

Dim json As String
    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 lngSize As Long
    intPortID = 4
    ' Initialize Communications
    lngStatus = CommOpen(intPortID, "COM" & CStr(intPortID), _
        "baud=115200 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.
    strData = JsonConverter.ConvertToJson(transaction, Whitespace:=3)
    lngSize = Len(strData)
    lngStatus = CommWrite(intPortID, strData)
    If lngStatus <> lngSize Then
    ' Handle error.
    End If
Exit_CmdConertJson_Click:
Exit Sub
Err_Handler:
Resume Exit_CmdConertJson_Click

' Read maximum of 64 bytes from serial port.

Dim JSONS As Object

    lngStatus = CommRead(intPortID, strData, 14400)

Set rs = db.OpenRecordset("tblEfdReceipts")
    If lngStatus > 0 Then
' Process data.
Set JSONS = JsonConverter.ParseJson(strData)
    ElseIf lngStatus < 0 Then
Beep
MsgBox "There is no data to updated
        ' Handle error.
        On Error Resume Next
    End If
        ' Process data.

    Z = 2
  For Each item In JSONS
           With rs

            .AddNew
            rs![TPIN] = item("TPIN")
            rs![TaxpayerName] = item("TaxpayerName")
            rs![Address] = item("Address")
            rs![ESDTime] = item("ESDTime")
            rs![TerminalID] = item("TerminalID")
            rs![InvoiceCode] = item("InvoiceCode")
            rs![InvoiceNumber] = item("InvoiceNumber")
            rs![FiscalCode] = item("FiscalCode")
            rs![TalkTime] = item("TalkTime")
            rs![Operator] = item("Operator")
            rs![Taxlabel] = item("TaxItems")("TaxLabel")
            rs![CategoryName] = item("TaxItems")("CategoryName")
            rs![Rate] = item("TaxItems")("Rate")
            rs![TaxAmount] = item("TaxItems")("TaxAmount")
            rs![VerificationUrl] = item("TaxItems")("VerificationUrl")
            rs![INVID] = Me.InvoiceID
            rs.Update
        End With
        Z = Z + 1
    Next

      rs.Close
      Set rs = Nothing
      Set db = Nothing
      Set JSONS = Nothing

    'Reset modem control lines.
    lngStatus = CommSetLine(intPortID, LINE_RTS, False)
    lngStatus = CommSetLine(intPortID, LINE_DTR, False)

    'Close communications.
    Call CommClose(intPortID)

End Sub

Пожалуйста, обратите внимание, здесь я пытаюсь поместить данные в порт, какой из приведенного выше кода является правильным ??

strData = JsonConverter.ConvertToJson(transaction, Whitespace:=3)

JsonConverter.ConvertToJson(transaction, Whitespace:=3) =  "COM" & CStr(intPortID)

Или

JsonConverter.ConvertToJson(transaction, Whitespace:=3)=strData

Приведенный выше код не работает в точке ниже:

Write data to serial port.
    strData = JsonConverter.ConvertToJson(transaction, Whitespace:=3)
    lngSize = Len(strData)
    lngStatus = CommWrite(intPortID, strData)
    If lngStatus <> lngSize Then
    ' Handle error.
    End If

Настоятельно рекомендуется также вставить начальный и конечный текст перед lngSize = Len (strData), но я этого не понимаю. к сожалению, советник, чтобы понять VBA

...