Forum: Mikrocontroller und Digitale Elektronik Profibus Telegramm


von Florian S. (sirius7)


Angehängte Dateien:

Lesenswert?

Hallo,

habe eine Aufgabe mit Musterlösung zum Profibus-Telegramm, es soll ein 
'A' Zeichen per UART versendet werden, also

0x41 (0b 0100 0001).

Die Musterlösung ist

0100 0001 001

es wurden wie man sieht nur 3 Bits hinten angehängt. Also vorne wurde 
nichts angehängt, obwohl wie man z.B. hier

http://www.profibus.felser.ch/telegrammformate.htm

sieht, dass vorne noch i-welche SD1, DE und andere Bytes zu sehen sind.

wie lässt sich das erklären? was sind denn die ganzen Telegramm - 
Formate, die auf der Seite dargestellt sind und wann muss man sie 
verwenden?

vielen Dank im Voraus.

von Kay I. (imperator)


Lesenswert?

Alex S. schrieb:
> 0x41 (0b 0100 0001).
>
> Die Musterlösung ist
>
> 0100 0001 001

Ich glaube, die Musterlösung ist anders zu verstehen:
0 1000 0010 01

Davor steht das Start-Bit, dann kommt das Byte (kleinstes Bit zuerst), 
dann kommen Parity & Stop-Bit

--> hat also nocht nichts mit der Protokoll-Definition des Profibus zu 
tun, sondern behandelt erstmal nur den UART.

Damit wäre schonmal die Bit-Darstellung deiner Payload im UART geklärt, 
musst Du Dir nur noch überlegen, welches Profibus-Telegramm Du benutzt, 
um diese Payload zu übertragen.
Es würde sich wahrscheinlich ein Telegramm anbieten, dass 
Payload-transport anbietet ;-) ... kleiner Tip: ist im Link mit "PDU" 
gekennzeichnet

http://www.profibus.felser.ch/telegrammformate.htm

von Florian S. (sirius7)


Lesenswert?

Hallo Kay,
vielen Dank für die Antwort, nun wie ich verstanden habe, wenn man das 
Byte getrennt von Startbit, Parity - bit & stop sieht, dann reduziert 
sich das eigentliche Databyte zu ..1000 0010 .. wäre das dann nicht mehr 
ein anderes Zeichen nicht mehr 0x41, sondern 0x82 ?

von Bernd K. (prof7bit)


Lesenswert?

Alex S. schrieb:
> Hallo Kay,
> vielen Dank für die Antwort, nun wie ich verstanden habe, wenn man das
> Byte getrennt von Startbit, Parity - bit & stop sieht, dann reduziert
> sich das eigentliche Databyte zu ..1000 0010 .. wäre das dann nicht mehr
> ein anderes Zeichen nicht mehr 0x41, sondern 0x82 ?

MSB wird zuletzt übertragen, lies die Bitfolge rückwärts.

von Florian S. (sirius7)


Lesenswert?

ach soo jetzt ist es klar, vielen Dank! :)

aber was ist dann mit anderen Bits? SOF, Parity und Stop Bit? werden sie 
ganz normal übertragen oder auch rückwärts? Ist das so, dass nur 
Nutsbyte rückwärts gelesen werden soll?

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Bis dahin macht das übrigens noch alles die Hardware in so ziemlich 
jedem gängigen Microcontroller komplett eigenständig, darüber muss man 
sich also nur dann den Kopf zerbrechen wenn man mal das Oszi dranhängt 
um zu überprüfen  ob die Theorie mit der Praxis in Einklang steht (z.B. 
bei der Fehlersuche), da ist es hilfreich deuten zu können was die 
einzelnen Bits bedeuten, ob man vergessen hat das Parity-Bit 
einzuschalten, ob die Baudrate stimmt, ob A und B vertauscht sind (alles 
invertiert), da ist es wichtig in der Lage zu sein kurz draufzuschaun 
und sagen zu können: "Hier ist das Startbit, dort ist das Stopbit, sieht 
gut aus, oh warte, das letzte Byte des Telegramms fehlt jedesmal".

Der wirkliche "Spaß" wird beginnen wenn Du Dich durch die 
Protokolldokumentation wühlst und die höheren Schichten implementieren 
musst.

von Bernd K. (prof7bit)


Lesenswert?

Alex S. schrieb:
> aber was ist dann mit anderen Bits? SOF, Parity und Stop Bit? werden sie
> ganz normal übertragen oder auch rückwärts?

Bei dieser asynchronen seriellen Datenübertragung wird immer das 
niederwertigste Bit zuerst übertragen, es wird immer von einem Startbit 
eingeleitet und Parity (falls vorhanden) kommt immer vor dem Stopbit und 
ganze endet immer mit einem (oder mehreren) Stopbits. Das ist ein 
de-facto Standard, Du kannst davon ausgehen daß wenn in deinem 
Microcontroller ein UART verbaut ist daß der per default das genau so 
macht.

Das stammt noch aus alten mechanischen Fernschreiber-Zeiten. Wenn Du mal 
betrachtest wie man das beim Empfang decodieren würde dann siehst Du daß 
man eigentlich immer nur auf die erste fallende Flanke warten muss und 
dort einen Timer starten kann der nur für die nächsten 9 oder 10 Bit 
ausreichend genau laufen muss. Beim nächsten Startbit kann man wieder 
synchronisieren. Das ist so bestechend simpel und einfach daß man es 
sogar in reiner Mechanik implementieren konnte und auch in 100 Jahren 
wird man es noch verwenden.

Die Anzahl der Datenbits kann jedoch variieren, das muss vorher 
festgelegt werden. Manche Protokolle verwenden zum Beispiel 9 Bit und 
unterscheiden über das höchste Bit zwischen Daten und Steuerbytes. Das 
macht aber nicht jede Hardware mit, vor allem bei USB/Seriell-Adaptern 
oder grundsätzlich bei seriellen Schnittstellen im PC muss man diese 
Einschränkungen beachten.

: Bearbeitet durch User
von Florian S. (sirius7)


Lesenswert?

Hallo, Bernd, ich danke Ihnen ganz herzlich für diese umfangreiche 
Erklärung, das hat mir ganz doll weitergeholfen! Noch mal vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.