Daten Empfang über Serielle Schnittstelle

  • Excel

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von michab85.

    Daten Empfang über Serielle Schnittstelle

    Hallo,



    ich habe ein Problem bezüglich des Datenempfangs über die Schnittstelle.
    Ich sende dem Gerät etwas, Das senden funktinioert einwandfrei, jedoch
    müsste ich eine Antwort bekommen, aber erhalte keine Antwort, das
    Erreignis wird einfach nicht ausgeführt.



    Hier ist mein Quellcode:

    Dim Out As Variant

    Dim Out_2(5) As Byte

    Private Sub Port_Ein()

    With MScomm

    .CommPort = 1

    .Settings = "4800,e,8,1"

    .Handshaking = comNone

    .InputLen = 1

    .InputMode = comInputModeBinary

    .RThreshold = 1

    .SThreshold = 1

    .PortOpen = True

    End With

    End Sub


    Private Sub CommandButton1_Click()

    Port_Ein

    Out(1) = &H1

    Out(2) = &H0

    Out(3) = &H0

    Out(4) = &H0

    Out(5) = &H62



    Out_2(0) = &H65

    Out_2(1) = &H0

    Out_2(2) = &H0

    Out_2(3) = &H0

    Out_2(4) = &H0

    Out_2(5) = &H65



    MScomm.Output = Out

    MScomm.Output = Out_2

    End Sub



    Private Sub MScomm_OnComm()

    Dim variable As Variant

    If (MScomm.CommEvent = comEvReceive) Then



    MsgBox ("Daten empfang")

    variable = MScomm.Input

    Range("A1") = variable(0)

    Range("A2") = variable(1)

    Range("A3") = variable(2)

    Range("A4") = variable(3)

    Range("A5") = variable(4)

    Range("A6") = variable(5)



    End If

    MsgBox ("Schließe Port")

    MScomm.PortOpen = False

    End Sub
    Das Receive Ereignis ist nicht besonders zuverlässig. Entweder den Eingangspuffer verkleinern oder besser noch regelmäßig die Größe des Eingangspuffers abfragen und bei größer 0 die Daten manuell holen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Mh. habe hier grad nur Excel 2007 drauf und grad kein RS232 Gerät zum testen... Evtl mal die Daten ein paar Sekunden nach dem Senden "zu Fuss" aus dem Puffer abholen. Wenn ich am WE Zeit (und Lust) finde, schau ich mal, was mir da als Lösung vorschwebt. Um was für eine Anwendung handelt es sich? Evtl die Daten in ein anderes Programm (per VB2008) einlesen.
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    Es geht darum, von der Hardware die Software Version auszulesen. Das Senden klappt ja, weil ich dies anhand eines anderen Hex Codes (alle Hex Codes sind von der Hardware) was sende und die Hardware dann dem ensprechend das richtige macht. Hal beim Empfangen funktioniert es nicht, wel (meine Vermutung) das CommEvent einfach nicht aufgerufen wird, obwohl es aufgerufen werden sollte, da ja der Befehl richtig gesendet wird bzw. richtig ist.

    Achja zu fuss abholen keine Ahnung wie das gehen soll...
    Neues von mir:

    Also der Empfang funktionieert jetzt, jedoch habe ich folgendes problem. Ich sehe das der Empfang der 6 Hex Zahlen richtig ist, durch Debug.Print.

    Jetzt wollte ich das ganze, sprich den ganzen Inhalt, in einer bzw. mehreren Zellen rein schreiben lassen. Ich bekomme jedoch jeweils nur das letzte empfangene Zeichen (Hex Zahl) in die Zelle.

    Folgender Code benutze ich zur Zeit:

    Private Sub MSCom_OnComm()
    Dim Buffer As Variant
    Dim Data() As Byte
    Dim i As Integer
    Dim Zeichenkette As String
    Dim Ausgabe As String

    Select Case MSCom.CommEvent
    Case comEvReceive:
    Do While (MSCom.InBufferCount > 0) 'solange ausführen, wie Zeichen vorhanden
    Buffer = MSCom.Input 'ComPort auslesen
    Data = Buffer
    For i = LBound(Data) To UBound(Data)
    Ausgabe = Hex(Asc(Chr$(Data(i)))) 'Umwandlung in Hex
    Debug.Print Ausgabe 'Ausgabe im Direktbereich
    Sheets(2).Range("A1:F1") = Ausgabe
    Next
    Loop
    End Select
    'MSCom.PortOpen = False 'kann entfallen, da cmdStop_Click das übernimmt
    End Sub
    Du kopierst jeden Wert in alle Zellen.

    Visual Basic-Quellcode

    1. Sheets(2).Range("A1:F1") = Ausgabe


    Du musst aber für jeden Wert eine andere Zelle nehmen.

    Visual Basic-Quellcode

    1. spalte=0
    2. For i = LBound(Data) To UBound(Data)
    3. Ausgabe = Hex(Asc(Chr$(Data(i)))) 'Umwandlung in Hex
    4. Debug.Print Ausgabe 'Ausgabe im Direktbereich
    5. spalte=spalte+1
    6. Sheets(2).cells(1,Spalte) = Ausgabe
    7. Next
    Gruß
    Peterfido

    Keine Unterstützung per PN!
    hallo zusammen, ich bin neu im Forum und brauche auch hilfe beim seriellen datenempfang. das senden funktioniert bei mir, aber ich bekomme einfach keinen wert eingelesen. bislang habe ich mich an die anleitung auf pencomdesign.com/support/relay…_software_example_net.htm und verwende anstatt des mscomm den netcomm, was sicherlich kein Problem darstellt

    gehalten. dort ist aber nur das senden beschrieben. habe auch schon den code von fatihA versuch einzugeben, aber ich verstehe nicht richtig wie ich den code einbinden soll.

    mein Ziel ist es letztendlich in access serielle daten, die als string gesendet werden in eine tabelle zu schreiben (jeder leerzeichen eine neue spalte). hier der string den ich von der seriellen schnittstelle bekomme

    004 1 1.708 1.790 35.04 0.182 0.190 0.003 0.274 5.999 94.00 +0.000 20.00 +0.000 0.000 0.000 21.14 0.000 0.000 000042

    danke schonmal im vorraus für die hilfe