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

Ergebnis 1 bis 5 von 5

Thema: Basteln mit Arduino / USB und CRC

  1. #1
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Bei USB werden die übertragenen Daten ja schon über CRC gesichert.
    Siehe:
    http://www.beyondlogic.org/usbnutshell/usb3.shtml

    Jetzt habe ich mal mit einem Arduino Nano gebastelt und
    den Arduino über USB mit einem Notebook verbunden.
    Dabei erscheint die USB Schnittstelle als /dev/ttyUSBx auf dem Notebook.

    Die einfachste Kommunikation zwischen dem Arduino und der Notebook ist jetzt
    einfaches ASCII Protokoll.
    Beide Seiten können jeder Zeit eine Zeile Text, mit "0x0d 0x0a" abgeschlossen, an die Gegenseite senden.
    Dieser Text wird dann dort interpretiert.

    Frage:
    Wie seht Ihr das,
    werden damit die Daten "sicher" übertragen oder
    würde man so etwas wie Modbus RTU benötigen,
    damit die CRC Summen für industrielle Anwendungen OK wären?
    Zitieren Zitieren Basteln mit Arduino / USB und CRC  

  2. #2
    Registriert seit
    19.02.2016
    Beiträge
    171
    Danke
    3
    Erhielt 16 Danke für 14 Beiträge

    Standard

    Was bei dir aktuell eine CRC hat, ist die Verbindung auf USB-"Layer".
    Das ist der Teil, den der Nano nutzt um seinen Virtuellen Com-Port an dein Noti zu docken...

    Es schützt aber leider nicht deine übertragenen Daten auf dem Com-Port.

    Hier musst du dann eben ein Protokoll einsetzen, welches das kann.
    Wenn du aber schon mal ASCII nutzt, wäre Modbus-ASCII vielleicht leichter implementierbar. Denn sonst musst du auf dem Nano ja alles erst mal in Byte-Code und auf dem Noti wieder zurück wandeln
    Dazu kommt dann natürlich, das Beide Kommunikationsteilnehmer natürlich auch die CRC berechnen müssen...

    MfG Fabsi

  3. #3
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard

    Zitat Zitat von Fabpicard Beitrag anzeigen
    Was bei dir aktuell eine CRC hat, ist die Verbindung auf USB-"Layer".
    Ja, richtig das liegt auf OSI Ebene 2 "Data Link Layer".
    Das ist vergleichbar mit TCP.
    Bei TCP kann ich mich auf Transport Ebene (socket) darauf verlassen, dass die Daten korrekt übertragen wurden.
    Auf Anwendungsebene brauche ich dort dann auch kein CRC mehr.

    Wenn ich bei der USB Verbindung mit dem Arduino den Stecker ziehe,
    bekomme ich bei
    ret = ::select(maxfdp1,&rset,&wset,&eset,&timout);
    -1 zurückgeliefert.
    "On error, -1 is returned, and errno is set to indicate the error; the file
    descriptor sets are unmodified, and timeout becomes undefined."
    Bei einem folgenden
    ret = read(fd,buf,1);
    wird 0 zurückgeliefert.
    "On success, the number of bytes read is returned (zero indicates end of file)..."

    Das Ein-/Ausstöpseln des USB Steckers wird also schon mal sicher erkannt.
    Ich gehe nun davon aus, dass wenn bei der Datenübertragung ein Bit kippt,
    das USB CRC das erkennt und bei select()/read() Fehler zurückgemeldet werden.

    Eine einfache ASCII Kommunikation über diese USB Verbindung müsste also "gesichert" sein.

    PS: Modbus zu implementieren wäre übrigens kein Problem.

  4. #4
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard

    Auf Pastebin
    http://pastebin.com/gGy0yGKh

    habe ich mal den Code gepostet
    (zusätzlicher Thread in einem pvbrowser pvserver)
    den ich zum Testen geschrieben habe.

  5. #5
    Registriert seit
    13.03.2006
    Beiträge
    422
    Danke
    5
    Erhielt 41 Danke für 41 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nachtrag:

    Bei der Verbindung
    Notebook <---> Arduino
    ist physikalisch ja NUR USB im Spiel.
    Nur das Betriebssystem stellt das dem Anwenderprogramm als serielle Schnittstelle zur Verfügung.

    Anders würde es aussehen, wenn man einen USB/Seriell Konverter mit drin hätte.
    Dann hätte man wirklich ein Stück "Strippe" mit V24 Level.

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 28.10.2015, 16:01
  2. Arduino Yun und libnodave
    Von emilio20 im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.01.2014, 13:02
  3. S7-1200 verbinden mit ARDUINO
    Von hotrodhool im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 28.02.2013, 23:32
  4. Antworten: 7
    Letzter Beitrag: 29.04.2012, 18:37
  5. CRC und LRC in Modbus
    Von senmeis im Forum Feldbusse
    Antworten: 4
    Letzter Beitrag: 19.11.2010, 11:12

Lesezeichen

Berechtigungen

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