CAN Interface Hilfe

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    CAN Interface Hilfe

    Hallo,
    ich habe ein RKS CAN Interface am seriellen Port meines PC`s. Senden und empfangen der CAN Messages ist kein Problem.
    Jetzt habe ich folgendes Problem. Ich lese den COM Port wie folgt aus und zeige ihn in einer Textbox an:



    VB.NET-Quellcode

    1. Private Sub SerialPort1_DataReceived(ByVal sender As System.Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
    2. Me.Invoke(Sub() ReceiveText())
    3. End Sub
    4. Private Sub ReceiveText()
    5. Dim zulesen As Integer = SerialPort1.BytesToRead
    6. If zulesen > 0 Then
    7. Dim Buffer(zulesen - 1) As Byte
    8. SerialPort1.Read(Buffer, 0, zulesen)
    9. empfangen = System.Text.Encoding.Default.GetString(Buffer)
    10. End If
    11. RichTextBox2.AppendText(empfangen)
    12. RichTextBox2.ScrollToCaret()
    13. End Sub



    Jetzt will ich aber die CAN Message in ihre "Einzelteile" zerlegen! Ich weis das sie mit t beginnt und mit VbCr aufhört z.B

    tAAABCCCCCCCCCCCCCCCCVbCr

    Kein Problem dachte ich und habe folgenden Code geschriben:

    VB.NET-Quellcode

    1. For i As Integer = 1 To empfangen.Length
    2. If Mid(empfangen, i, 1) = "t" Then
    3. A = Mid(empfangen, i + 1, 3)
    4. B = Mid(empfangen, i + 4, 1)
    5. C = Mid(empfangen, i + 5, 16)
    6. End If
    7. Next


    Leider ist empfangen nicht immer die komplette Can Message da ich ja nur den vorhandenen Puffer leere und kann auch so aussehen:

    CCCCCCCCCCCVbCrtAAABCCCCCC

    Jetzt bräuchte ich einen Code der folgendes umsetzt: wen das Zeichen "t" im Empfangen String kommt müssten die nächsten Zeichen zu einer eigenen Variable hinzugefügt werden bis wieder VbCr kommt. Ich bräuchte also eine Variable in der dann
    AAABCCCCCCCCCCCCCCCC steht. Leider Fehlt mir hierzu komplett der Ansatz.

    Villeicht hat jemand einen Ansatz für mich!

    Grüße David
    Du brauchst ne Flag, die du bei nem t auf true setzt, bei nem CarriageReturn auf false. Nun prüfst du, im Datenempfang, ob diese Flag true ist, wenn ja, dann hängst du das gesendete auch nem zweitem String, oder ner List o.Ä. an.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    dunt schrieb:

    t beginnt und mit VbCr
    Vielleicht solltest Du die empfangenen Zeichen als Bytes interpretieren und nicht als String.
    Da kannst Du Dich einfach durch das Byte-Array hangeln und von-bis rausholen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für die Antworten. Ich habe das Projekt über die Serielle Schnitstelle erstmal auf Eis gelegt da schon über die Serielle Schnittstelle Daten verloren gehen.

    Es gibt allerdings ein Beispiel in C++ wo das CAN Interface über eine dll angesprochen wird. Wäre es möglich die dll in vb.net zu übernehmen.

    Es gibt ja folgende Funktion:

    VB.NET-Quellcode

    1. <DllImport("RKS-USB.dll")> _
    2. Public Shared Function RKSCANOpen(ByVal dwBitrate As Integer)
    3. End Function


    Leider komme ich so zu keinen Ergebniss.
    Bei der dll dabei sind noch eine .h .lib und .exp Datei die man aber nur bei C++ braucht oder?

    Grüße

    dunt schrieb:

    die dll in vb.net zu übernehmen
    Sollte gehen, allerdings glaube ich nicht, dass Du schon so weiz bist.
    Gugst Du hier.
    =====================

    dunt schrieb:

    Daten verloren gehen
    Wie äußert sich das?
    Wie initialisierst Du Deine serielle Shnittstelle? Poste mal den Initialisierungscode vollständig (auch das, was Du im Designeer einstellst).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!