Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 7 von 7

Thema: B&R Serielle Kommunikation

  1. #1
    Registriert seit
    10.01.2014
    Beiträge
    163
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich möchte ein Telegramm über eine serielle Schnittstelle schicken (X20CS1030, RS485).
    Ich hab mir die beiden Beispiele der DVFrame Bibliothek angeschaut. Wo setze ich da mein Telegramm ein?
    Ich würde gerne "7E FF 03 40 41 00 00 FF FF 00 FD 0B 26 EB 7E " als Telegram schicken.

    Hat jemand eine Idee?
    Zitieren Zitieren B&R Serielle Kommunikation  

  2. #2
    Registriert seit
    02.02.2011
    Beiträge
    109
    Danke
    16
    Erhielt 13 Danke für 13 Beiträge

    Standard

    Hallo Knuppel,
    du kopierst die Zeichenkette in eine Stringvariable (Länge >=15) .
    In buffer (3. Parameter der FRM_write() Funktion) kommt die Adresse deiner Stringvariablen.
    In buflng (4.Para) kommt die Anzahl der zu sendenden Zeichen (hier 15)

  3. #3
    knuppel ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    10.01.2014
    Beiträge
    163
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo und danke erstmal, werde ich im neuen Jahr gleich mal ausprobieren.

  4. #4
    knuppel ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    10.01.2014
    Beiträge
    163
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Noch eine Frage stellt sich mir und somit auch euch

    Gibt es eine Bibliothek die das CRC Prüfwort ausrechnet?

  5. #5
    Registriert seit
    11.01.2010
    Beiträge
    27
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo knuppel,

    also was ich weiß gibt's da keine Bibliothek.
    Also die meisten Hersteller verwenden CRC-16 zum Prüsummen-Check, manche machen einen eigenen Reim - diesen muss man, wenn es keine Beschreibung gibt dann mal rauskriegen.

    Also hier wäre aus einem anderen Forum ein Visual Basic Code für den CRC-16, welcher auf der B&R-Steuerung im Automation Basic gut zu gebrauchen ist.

    Ich verwendete für alle Variablen den UINT Typen.

    Private Function CRCBerechnung(ByVal CRC As UShort, ByVal C As Byte) As UShort

    Dim I As Byte
    Dim P As UShort = 40961 (* bitinvertierte Polynommaske 2^15 + 2^2+1 *)

    For I = 0 To 7 (* Hier ist die richtige Anzahl der Bytes einzutragen, in deinem Fall wahrscheinlich 13 - 15 Gesamt minus der zwei letzten *)
    If ((CRC Xor C) And 1) > 0 Then
    CRC = ((CRC / 2) Xor P)
    Else
    CRC = CRC / 2
    End If

    C = C / 2
    Next

    Return CRC

    End Function

    Diesen kann man zur Erzeugung der Prüfsumme gut verwenden.
    Man muss nur den CRC dann in die letzten beiden Bytes richtig eintragen - Zu Bedenken : Low Byte, High Byte und Little und Big Indian - bei Bedarf sollte geswappt werden.
    Natürlich funktioniert das ganze auch zum Checken der Antwort vom Gegenüber und somit zum Check ob alles richtig angekommen ist.

    Viel Spass damit, ich hoffe es funktioniert bei dir.

  6. #6
    knuppel ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    10.01.2014
    Beiträge
    163
    Danke
    5
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für das Snippet, uch hab noch nichts mit A-Basic gemacht, wie spreche ich diese Funktion an?

  7. #7
    Registriert seit
    11.01.2010
    Beiträge
    27
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi knuppel,

    Variblendefinition:
    Term.data[I] ARRAY [0..14]
    crc_lesen_schreiben UINT
    c_lesen_schreiben UINT
    p CONST 40961
    I UINT

    Term.data[0] = $01 ;Slave Adresse crc_lesen_schreiben = $FFFF
    Loop I = 0 To 12 DO
    c_lesen_schreiben = UINT(Term.data[I])
    If ((crc_lesen_schreiben Xor c_lesen_schreiben) And 1) > 0 Then
    crc_lesen_schreiben = ((crc_lesen_schreiben / 2) Xor p)
    Else
    crc_lesen_schreiben = crc_lesen_schreiben / 2
    EndIf
    c_lesen_schreiben = c_lesen_schreiben / 2
    ENDLOOP
    Term.data[13] = USINT(crc_lesen_schreiben)
    Term.data[14] = USINT(swapUINT(crc_lesen_schreiben))
    ENDIF

    Sollte so eigentlich funktionieren, sonst müsste man es noch an die Software bzw. den Slave / Master anpassen.
    Die Funktionen sind natürlich auch in andere Sprachen übersetzbar.
    Aber sonst ohne Gewähr, weils ja was selbst gestricktes ist.

Ähnliche Themen

  1. B&R | Serielle Kommunikation mittels IF1020 | RS232-Schnittstelle
    Von Deichkind im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 12.04.2016, 08:40
  2. Step 7 Serielle Kommunikation SIPLACE
    Von bluebird277 im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 01.09.2014, 14:08
  3. Codesys V3 - Serielle Kommunikation
    Von Bookem im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 15.01.2014, 05:58
  4. Step 5 serielle Kommunikation über DP/DP Koppler
    Von matziane im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 21.08.2013, 08:09
  5. Serielle Kommunikation
    Von Thomate im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 24.10.2012, 16:30

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •