Serial Port Communication

Dieses Thema im Forum "Webmaster Hilfe / Programmierer Forum" wurde erstellt von Limak, 01.06.2012.

  1. Limak

    Limak Neuer Benutzer

    Dabei seit:
    12.01.2012
    Beiträge:
    18
    Zustimmungen:
    0
    Hallo Leute,

    Ich habe eine Frage zur Kommunikation über SRS232. Ich arbeite mit Scilab und habe mir dort auch schon (wohl) alles geschrieben, was ich brauche, um auf COM1 zuzugreifen. Wovon ich jetzt aber keine Ahnung habe - da ich absoluter Neuling auf diesem Gebiet bin - ist wie das Signal denn aussieht, dass ich von dem Port auslese.
    Soll heißen: Ist es ein String oder direkt eine Zahl (Int)?

    Wäre nett, wenn mir da einer weiterhelfen könnte oder mich zumindest woanders hin leiten würde falls das das falsch Forum dafür ist ;)
     
  2. AdMan

    schau mal hier: Windows-Wartungs-Tool. Viele Probleme lassen sich damit einfach beheben. Oftmals ist der PC dann auch schneller!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  3. #2 xandros, 01.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.891
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Ueber RS232 werden weder Strings noch Integer uebertragen, sondern Bits (logisch 0 und 1). Und diese Bits werden je nach Uebertragungsrate unterschiedlich schnell gesendet.
    Die meisten seriellen Geraete verwenden dabei 8 Datenbits, kein Paritaetsbit und 1 Stopbit. (8N1)
    Mit 8 Bit kann jedes beliebige Zeichen dargestellt werden, weshalb du bei der Pruefung der Eingaenge eben zwischen Startbit (logisch 0 = Space oder Break) und Stopbit (logisch 1 = Mark oder Idle) diese 8 Datenbits auswerten musst. (Diese liegen dann eben binaer vor und koennen z.B. mittels ASCII-Tabelle in ein entsprechendes Zeichen "uebersetzt" werden.
     
  4. Limak

    Limak Neuer Benutzer

    Dabei seit:
    12.01.2012
    Beiträge:
    18
    Zustimmungen:
    0
    Ok, also Baudrate, Stopbits, Parität und Datenbits habe ich auch eingestellt. Hätte mir dann natürlich denken können, dass bits übertragen werden....
    War nur etwas verwirrt, weil der Beispielbefehl zum Schreiben des Ports so aussah:

    Code:
    writeserial(serialhandler, "#02"+ascii(13))
    ascii(13) ist wohl der Carriage Return und "#02" der - sagen wir - Befehl. Da dieser hier als String übermittelt wird, dachte ich mir zunächst, dass so das Lesen und Schreiben aussieht. Aber höchstwahrscheinlich übersetzt die Funktion writeserial(...) das ganze entsprechend den Datenbits usw. die ich für den serialhandler eingestellt habe.
    In der Anleitung des Gerätes, das ich ansteuern möchte, habe ich dann gelesen, dass die Werte (Achsenpositionen) im Hexadezimalcode an den Rechner gesendet werden und war daher leicht verwirrt.
    Aber ok. Es ist dann also so, dass ich den 8Bit-Code hexadezimal interpretieren soll.

    Meine Frage von vorhin bleibt dann aber weiterhin noch in gewisser Weise bestehen:

    Nehmen wir an, dass ich den Port jetzt lese:

    Code:
    buf = readserial(...)
    Was ist dann "buf"? Es muss ja schon einem Typen zuzuordnen sein, oder? Oder ist das einfach programmspezifisch und je nachdem, was man verwendet (Scilab, Java, Python ...), wird das ganze unterschiedlich gehandhabt?
     
  5. #4 xandros, 01.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.891
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    buf ist in der Regel ein Datenbyte des internen Empfangspuffers. Da die Daten ja nicht unmittelbar von den Anschlusspins abgelesen werden, werden sie in diesem Puffer zwischengespeichert und von dort zur weiteren Verarbeitung verwendet....

    Ein Datenbyte entspricht dabei logischerweise wieder der Uebertragungseinstellung mit 8 Datenbits.

    Bei Scilab kommt es dann aber offensichtlich doch darauf an, welches Tool/AddOn man fuer die Kommunikation via RS232 verwendet. (siehe z.B. Scilab Serial Port Library ASkr's Software Projects oder auch Scilab Serial Communication Toolbox ATOMS : module details)
     
  6. Limak

    Limak Neuer Benutzer

    Dabei seit:
    12.01.2012
    Beiträge:
    18
    Zustimmungen:
    0
    So, alles klappt mittlerweile wunderbar. Ich kann Befehle über die Schnittstelle verschicken und auch den Buffer auslesen und anzeigen lassen.
    Was ich jetzt gerne wissen würde, wäre wie ich das angeschlossene Gerät mit dem Rechner synchronisiere bzw. ob es dafür eine Konvention gibt. Denn sagen wir ich habe ein Gerät, das die ganze Zeit Luftfeuchtigkeit misst (oder was anderes, das ständig leicht schwankt). Da 8 Datenbits übermittelt werden, kann die höchste aufeinmal versendete Zahl die 127 sein (falls Vorzeichen nicht benötigt werden). Nun soll aber ein höherer Wert übermittelt werden und somit benötigt die Zahl mehrere "Sendedurchgänge". Ich kann zwar einfach abwarten bis ich z.B. insgesamt 16 Datenbits erhalten habe, aber woher weiß ich, dass ich nicht die letzten 8 datenbits vom vorherigen Wert und die ersten 8 datenbits vom neuen Wert eingelesen habe (davon ausgehend, dass das Gerät non-stop den Wert sendet)?
    Gibt es da eine Synchronisierungsmöglichkeit falls kein Zeichen gesendet wird, das bedeutet "Achtung! Hier beginnt jetzt der neue Wert"?



    PS:
    Das mit den 8 Bits und dem max. Wert 127 sollte nur ein Beispiel sein. Ich gehe nämlich mal davon aus, dass die 8 bits immer für ein ASCII-Zeichen stehen werden und ich so z.B. für eine dreistellige Zahl 24 datenbits brauchen werde. Das ist jetzt aber nicht so wichtig. Hauptsächlich interessiert mich diese Synchronisierung.
     
  7. AdMan

    Es ist generell erstmal empfehlenswert alle ggf. veralteten oder fehlerhaften Treiber zu scannen und auf neue zu aktualisieren. Hier kannst du einen Treiber-Scanner downloaden. Das erspart oftmals viel Ärger und hilft gegen diverse Probleme.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren.
  8. #6 xandros, 13.06.2012
    xandros

    xandros IT Consultant, Cisco Registered Partner
    Moderator

    Dabei seit:
    05.07.2007
    Beiträge:
    25.891
    Zustimmungen:
    91
    Ort:
    Umkreis Duisburg, neben Mannheim, hinter Hamburg
    Da muss ich mich direkt mal am Kopf kratzen und versuchen nachzuvollziehen, wie du darauf gekommen bist.....

    Bit................08..07..06..05..04..03..02..01
    Dezimalwert..128..64..32..16..08..04..02..01
    Wenn jedes Bit gesetzt ist und kein Vorzeichen benoetigt wird, komme ich somit auf 128+64+32+16+8+4+2+1=255
    Rechnet man die 0 ebenfalls noch als Wert dabei, dann ergibt das insgesamt 256 moegliche Werte (von 0 bis 255)

    Wenn denn ASCII-Codes gesendet werden. Ansonsten koennen auch reine Zahlenwerte uebermittelt werden, die dann wie oben entnehmbar ist, auch dreistellig sein koennen.

    Den RTS-/CTS-Handshake (siehe RS232- Start und Stopbit) erledigt schon die Transportschicht und das Protokoll fuer den Datenaustausch.
    Im Ruhemodus ist der Pegel auf logisch 1 gesetzt. Als Startbit wird dieser Pegel auf 0 gesetzt, womit beide Endgeraete die Synchronisierung beginnen. Dann erfolgt die Uebertragung der Datenbits und eines (oder gelegentlich auch zwei) Stopbits.
    Das Einzige, was du machen musst, ist den Wert aus dem Puffer abrufen. Welche Bits zu welchem Wert gehoeren sortiert die Schnittstelle (FIFO-Chip/Puffer) schon selbst.
     
  9. Limak

    Limak Neuer Benutzer

    Dabei seit:
    12.01.2012
    Beiträge:
    18
    Zustimmungen:
    0
    Alles klar. Vielen Dank. Es ist natürlich oft sehr aufschlussreich das Gerät anzuschließen und einfach zu gucken was bei rauskommt, aber dazu hatte ich bisher nicht die Möglichkeit gehabt.

    Und mit den Zahlenwerten für die 8 Bits hast du natürlich recht. Keine Ahnung wieso ich nur 7 bits gezählt habe :eek:
     
Thema: Serial Port Communication
Besucher kamen mit folgenden Suchen
  1. scilab rs232

    ,
  2. scilab readserial

    ,
  3. scilab serial port

    ,
  4. scilab serielle schnittstelle,
  5. com port kommunikation,
  6. serial port übermittelt in welchem code,
  7. scilab rs232 kommunikation,
  8. python rs232 communication,
  9. rs232 scilab,
  10. daten über serielle schnittstelle einlkesen Scilab,
  11. kommunikation über com port,
  12. scilab serial toolbox,
  13. scilab serial communication,
  14. java communications rs232 windows7,
  15. writeserial scilab return,
  16. com port kommunikation anzeigen,
  17. scilab openserial,
  18. python serielle schnittstelle auslesen,
  19. empfangspuffer scilab,
  20. rs232 scilab,
  21. RS232 mit Scilab auslesen,
  22. serielle datenübertragung 8 bit dreistellige zahl,
  23. scilab rs232 daten,
  24. scilab serial communication toolbox high baud ,
  25. scilab writeserial hexadecimal
Die Seite wird geladen...

Serial Port Communication - Ähnliche Themen

  1. Ports freischalten

    Ports freischalten: Hallo, wenn ich FIFA 15 auf der PS4 starte kommt immer das ich keine Verbindung mit dem EA Server aufbauen kann. Dadurch kann ich nichts...
  2. wie usb-port stromlos machen ?

    wie usb-port stromlos machen ?: hi, ich habe hier ein gigabyte - board (GA-EP45-DS3) verbaut, welches wohl aus 2008 ist. nun möchte ich mittels usb ausgang eine...
  3. Port weiterleiten ?

    Port weiterleiten ?: Hallo Leute, kann mir jemand helfen wie ich bei meinem Router Huawei B593u einen Port weiterleite ? Im Menüpunkt Portzuordnung sieht es aus...
  4. Maestro2k5 stellt sich und Android-Port vor

    Maestro2k5 stellt sich und Android-Port vor: Hallo, Ich wollte mich auch mal kurz Vorstellen. Meine Wenigkeit kommt aus Erfurt und ist 31 Jahre alt. Normalerweise bin ich nur in der...
  5. Huawei B593u Port Mapping ?

    Huawei B593u Port Mapping ?: Hallo Leute. Kann jemand vllt mir beim Port forwarden helfen. Ich habe als Router seit ein paar Tagen den Huawei B593u und habe es nicht...