Hirdetés

Új hozzászólás Aktív témák

  • aviator

    tag

    Sziasztok,
    Soros vonalon érkező adatot szeretnék excel táblázatban felhasználni ebben kérnék segítséget.
    Mivel még sosem dolgoztam ilyennel, nem akartam feltalálni a spanyol viaszt, ide vezetett a google: http://www.thescarms.com/vbasic/commio.aspx
    Ez egy elég jól használható modul, jönnek is szépen az adatok. Egy 10 karakteres stringet kell beolvasnom, a problémám az, hogy nem mindig van meg a 10 karakter, illetve néha több van, tehát bizonytalan az olvasás. A csatolt kódban a Do Loop-ban történik meg a string kivétele a soros bufferből, csak ezek szerint nem mindig a jó pillanatban. Próbáltam rákényszeríteni, hogy csak a 10 karakter hosszú olvasás esetén menjen tovább az első if-nél, megcsinálja, de néha sokáig tart, meg hát nem érzem túl elegánsnak.
    Kellene ide egy olyan megoldás, ami kiküszöböli ezt a problémát, de ha valakinek van működő kódja teljesen más alapokon az is tökéletes lenne.

    Private Sub CommandButton1_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

    intPortID = 3 'Using COM3

    ' 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

    lngStatus = CommSetLine(intPortID, LINE_RTS, True)
    lngStatus = CommSetLine(intPortID, LINE_DTR, True)

    ' Read maximum of 64 bytes from serial port.

    Do

    lngStatus = CommRead(intPortID, strData, 64)

    If lngStatus > 0 And (Len(strData) = 10) Then
    TextBox1.Text = strData
    TextBox2.Text = Len(strData)
    Exit Do
    End If

    If lngStatus < 0 Then
    lngStatus = CommGetError(strError)
    MsgBox "COM Error: " & strError
    Exit Do
    End If
    Loop

    lngStatus = CommSetLine(intPortID, LINE_RTS, False)
    lngStatus = CommSetLine(intPortID, LINE_DTR, False)

    ' Close communications.
    Call CommClose(intPortID)

    End Sub

Új hozzászólás Aktív témák