Forum: Mikrocontroller und Digitale Elektronik HART start byte (SD) struktur ?


von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

Moins,

Hat jemand die Spezifikation davon zur Hand und kann bitte weiterhelfen 
?

Zum Rest der Telegrammstruktur habe ich Infos gefunden, nur zum Starbyte 
nichts, in dem u.a. auch short oder long address mode festgelegt wird.

Danke ;-), tom.

von Achim M. (minifloat)


Lesenswert?

Tomas Kuckenburg schrieb:
> Starbyte
Starbyte Express?
[...](war Käse)

mfg mf

PS: Achso, HART, die Kommunikation über 4..20mA.
Äh, der zweite 
Gockel-Treffer(http://www.google.com/search?q=hart+message+frame&hl=de) 
scheint was zu enthalten:
http://www.samson.de/pdf_en/l452en.pdf

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

...danke, da steht alles drin AUSSER startbyte Format :-(

glaubst Du ich würde hier posten, wenn es mit gurgel so einfach zu 
finden wäre ???

aber trotzdem danke, tom.

von LuXXuS 9. (aichn)


Lesenswert?

Beschreibe mal dein Problem genauer! Ich habe in meiner Diplomarbeit 
einen Transmitter mit HART-Protokoll entwickelt - kann dir also bestimmt 
helfen, verstehe aber die Frage nicht so genau mit dem "Start-Byte" - so 
etwas gibt es nämlich nicht.

Wenn geht es ja eher um den Delimiter, also das Byte nach den 5 
Preamblen.

Man findet im Netz schon ne Menge, aber das ersetzt halt nicht die 
HART-Protocol-Specifications, die aber einen Haufen Kohle kosten. Die 
durchzuarbeiten macht aber auch keinen Spaß, da sie dicker als ne Bibel 
sind...

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

Nabend,

LuXXuS 909 schrieb:
> Beschreibe mal dein Problem genauer! Ich habe in meiner Diplomarbeit
> einen Transmitter mit HART-Protokoll entwickelt - kann dir also bestimmt
> helfen, verstehe aber die Frage nicht so genau mit dem "Start-Byte" - so
> etwas gibt es nämlich nicht.
>
> Wenn geht es ja eher um den Delimiter, also das Byte nach den 5
> Preamblen.
Genau, je nach Sprachgebrauch Delimiter oder anderswo auch auch start 
byte genannt.

>
> Man findet im Netz schon ne Menge, aber das ersetzt halt nicht die
> HART-Protocol-Specifications, die aber einen Haufen Kohle kosten. Die
> durchzuarbeiten macht aber auch keinen Spaß, da sie dicker als ne Bibel
> sind...
Na ja, das HART-Protokoll in OSI-Schicht 2 selbst ist ja nicht so 
komplex zu implementieren, wenn man täglich mit UDS, KWP, CANxxxxx, 
Flexray, usw. zu tun hat :-), aber das ist ja für jeden auch immer ein 
anderer Blickwinkel.

Wäre supi wenn Du mir in folgenden Punkten bitte weiterhelfen könntest:

1. Kannst Du die Codierung/Struktur vom Delimiter byte mal posten ?

2. Kann das Senden einer Burst-Message vom Master per Telegramm auf 
einem Slave gestartet und auch wieder gestoppt werden, oder wie läuft 
das normalerweise ab ?

3. Die checksum ist einfach uint8 aufsummiert ohne preamble bytes mit 
8-bit Breite und dann = summe XOR 0xff zum bitweisen invertieren, oder ? 
wikipedia hat da noch irgendwas mit +1... schnickschnack bei longituxxx 
checksum parat, sieht mir aber eher nach mumpitz aus in dem Fall. Liege 
ich da richtig ?

4. Kennst Du eine PC-Software, die ich praktikabel als HART Master zur 
slave-protokoll Inbetriebnahme nutzen kann ?

5. Oder ein HART-Protokoll log, wo exemplarisch Verbindungsaufbau und 
paar Abfragen vom Slave drin sind ? Am besten 1x mit short addressing 
mode und einmal mit long.


Herzliche Grüsse, tom.

von LuXXuS 9. (aichn)


Lesenswert?

Morgen Tomas!

Also...

Tomas Kuckenburg schrieb:
> 1. Kannst Du die Codierung/Struktur vom Delimiter byte mal posten ?

Ich beziehe mich auf die HART-Revision 7 (die aktuellste)!

Das Delimiter-Feld legt ja fest, um welchen Frame-Typ es sich handelt 
und ist folgendermaßen aufgebaut:
1
 MSB                         LSB
2
 --- --- --- --- --- --- --- ---
3
|   |   |   |   |   |   |   |   |
4
|   |   |   |   |   |   |   |   |
5
 --- --- --- --- --- --- --- ---
6
  |  _______ _______ ___________
7
  |     |       |         |
8
  |     |       |         |___ Frame Typ
9
  |     |       |              1: BACK (Burst-Frame)
10
  |     |       |              2: STX (Master -> Slave)
11
  |     |       |              6: ACK (Slave -> Master)
12
  |     |       |
13
  |     |       |_____________ Physical Layer
14
  |     |                      0: Asynchron (Standard FSK-HART)
15
  |     |                      1: Synchron (z.B. PSK Phase-Shift-Keying)
16
  |     |
17
  |     |_____________________ Zahl der Expansions-Bytes (bis dato immer 0)
18
  |
19
  |___________________________ Adress-Typ
20
                               0: Polling-Adresse (1 Byte)
21
                               1: Unique-ID (5 Byte)

Die Adressierung mit nur einem Adress-Byte ist ausschließlich für das 
Kommando 0 zulässig - alle anderen Komandoanfragen mit 
1-Byte-Adressierung müssen vom Slave ignoriert werden. Wird Kommando 0 
mit nur einem Byte angefragt, dann wird auch nur mit einem Byte Adresse 
geantwortet - dieses Kommando ist ja nur zum herausfinden der Long-ID 
gedacht. Wurde einmal Kommando 0 zu einem Slave gesendet, so wird i.d.R. 
ab dann nurnoch im Long-Frame-Format gearbeitet.

Tomas Kuckenburg schrieb:
> 2. Kann das Senden einer Burst-Message vom Master per Telegramm auf
> einem Slave gestartet und auch wieder gestoppt werden, oder wie läuft
> das normalerweise ab ?

Ja, der Master kann den Slave in den Burst-Modus versetzen und auch 
wieder da raus holen.  Aber es kann natürlich keine laufende Übertragung 
abgebrochen werden, da es sich ja um Halb-Duplex handelt und die Leitung 
erst wieder frei sein muss, aber ich denke, das ist klar.

Tomas Kuckenburg schrieb:
> 3. Die checksum ist einfach uint8 aufsummiert ohne preamble bytes mit
> 8-bit Breite und dann = summe XOR 0xff zum bitweisen invertieren, oder ?
> wikipedia hat da noch irgendwas mit +1... schnickschnack bei longituxxx
> checksum parat, sieht mir aber eher nach mumpitz aus in dem Fall. Liege
> ich da richtig ?

Die Checksumme beeinhaltet alles zwischen Preamblen und Checksumme - sie 
beginnt also mit dem Delimiter und endet nach dem letzten Datenbyte. Die 
Checksumme ist einfach ein XOR mit jedem Byte. Diese Checksumme kann am 
Ende entweder mit der übertragenen verglichen werden, oder du kannst die 
übertragende mit der selber generierten wieder XORn und es muss 0 
rauskommen. Diese Prüfung stellt die longitudinale Parität dar - die 
vertikale Parität für jedes Datenbyte muss seperat überprüft werden, 
aber diese Funktion bietet i.d.R. jeder uC in seinem UART.

Tomas Kuckenburg schrieb:
> 4. Kennst Du eine PC-Software, die ich praktikabel als HART Master zur
> slave-protokoll Inbetriebnahme nutzen kann ?

Ja, ich kann dir den FrameAlyst von Borst-Automation empfehlen: 
http://borst-automation.com/products/products.htm
Als Testversion kannst du sie 30 oder 50 mal öffnen oder so. Während sie 
auf ist, kannst du sie benutzen, so lange du willst (Zum Glück, in der 
vorherigen Version war es anders, da konnte man das Programm öffnen so 
oft man wollte, musste es aber nach 10 Übertragungen stets neu starten). 
Das Programm sieht auf den ersten Blick recht unscheinbar aus, du kannst 
mit ihm aber wirklich alles machen, was du brauchst. Dazu musst du dir 
mal die Doku durchlesen - gerade die Funktion mit beliebigen Frames ist 
sehr hilfreich, um deinen Parser auf Fehler zu überprüfen. Klick dich da 
mal durch die einzelnen Funktionen, das Programm zeigt dir auf jeden 
Fall alles nötige an, auch die Zeiten, die die Übertragung gedauert hat, 
was nicht ganz unwichtig ist, da der Slave ja im TimeOut bleiben muss.

Ansonsten gibt es auch PACTWare, wo es bei ICS mal eine Testversion von 
einer Generic-HART-DTM gab: 
http://www.icsgmbh.de/deutsch/sensorsoft/dtm5.htm
Mit der kannst du auch einiges machen, aber generell ist es mit Software 
rar gesäht, da bei HART halt alles ziemlich teuer ist...:-\

Tomas Kuckenburg schrieb:
> 5. Oder ein HART-Protokoll log, wo exemplarisch Verbindungsaufbau und
> paar Abfragen vom Slave drin sind ? Am besten 1x mit short addressing
> mode und einmal mit long.

Den Log wirst du im FrameAlyst selber sehen, wenn deine Übertragung 
klappt - wenn nicht, dann kann ich dir auch mal ein paar Übertragungen 
schicken, muss ich mal meinen Transmitter rauskramen.

Gruß

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

Moins,

Super + Danke !!!

>> 2. Kann das Senden einer Burst-Message vom Master per Telegramm auf
>> einem Slave gestartet und auch wieder gestoppt werden, oder wie läuft
>> das normalerweise ab ?

> Ja, der Master kann den Slave in den Burst-Modus versetzen und auch
> wieder da raus holen.  Aber es kann natürlich keine laufende Übertragung
> abgebrochen werden, da es sich ja um Halb-Duplex handelt und die Leitung
> erst wieder frei sein muss, aber ich denke, das ist klar.

Läuft das prinzipiell so ?
Burst starten:
Burst Request vom Master per Burst bit im AD byte und in der message 
dann das CMD mit gewünschter Device-Variable ?
Und der slave sendet ab dann die burst frames mit dem BACK bit im SD 
gesetzt ?

Burst stoppen:
Request vom Master ohne Burst bit im AD byte und in der message dann das 
CMD mit gewünschter Device-Variable ?
Und der slave stoppt ab dann die burst frames und antwortet mit normaler 
response ?

Alle infos sind mir willkommen, Danke.
Ja, den BorstAlyser habe ich mir gerade angeschaut, als Du die Antwort 
geschrieben hast ;-), gibt halt wirklich nicht viel in der Richtung.

Gibt es noch weitere Besonderheiten wie das packed ASCII format usw. ?
Gibt es bei HART etwa auch segmentierte Nachrichten (wenn die 25 data 
bytes nicht ausreichen) ?

btw, HART ist schon witzig, kein konsistentes message format (short vs. 
long address, master vs. slave mit status bytes), da "freut" sich der 
Implementierer, aber ist schon gemacht.
So ist das manchmal bei den historisch gewachsenen Dingen, hinterher 
wissen es immer alle besser ;o).


Herzliche Grüsse, Tom.

von LuXXuS 9. (aichn)


Lesenswert?

Tomas Kuckenburg schrieb:
> Läuft das prinzipiell so ?
> Burst starten:
> Burst Request vom Master per Burst bit im AD byte und in der message
> dann das CMD mit gewünschter Device-Variable ?
> Und der slave sendet ab dann die burst frames mit dem BACK bit im SD
> gesetzt ?

Nein, so geht das nicht. Es gibt spezielle Kommandos zum Starten und 
Stoppen der Burst-Telegramme. Der Master setzt niemals das Burst-Bit in 
seiner Anfrage.

Tomas Kuckenburg schrieb:
> Burst stoppen:
> Request vom Master ohne Burst bit im AD byte und in der message dann das
> CMD mit gewünschter Device-Variable ?
> Und der slave stoppt ab dann die burst frames und antwortet mit normaler
> response ?

Nein, siehe oben ;-)

Tomas Kuckenburg schrieb:
> Gibt es noch weitere Besonderheiten wie das packed ASCII format usw. ?
> Gibt es bei HART etwa auch segmentierte Nachrichten (wenn die 25 data
> bytes nicht ausreichen) ?

Das PackedASCI braucht dich garnicht zu interessieren, da du es 
eigentlich nur speichern und wieder ausgeben musst. Bei einem Slave 
zumindest. Angezeigt wird das in der Regel eh nicht. Um die Hin- und 
Herkonvertierung brauchat du dich also nicht zu kümmern. Das brauchst du 
ja nur für gespeicherte Nachrichten und so.

Nachrichten werden nicht geteilt, nein - aber es sind auch nicht nur 25 
Datenbytes, da gibt es schon kommandos mit wesentlich mehr Bytes. Man 
kann sich da ja eh nichts aussuchen, da alles absolut fest von der HCF 
vorgegeben wird. Lediglich eigene Kommandos kann man im gewissen Rahmen 
selber implementieren...aber auch da kann man nicht machen, was man 
will.

Tomas Kuckenburg schrieb:
> HART ist schon witzig, kein konsistentes message format (short vs.
> long address, master vs. slave mit status bytes)

Das sehe ich nicht so, da ist schon Verstand drin. Es ist halt erstmal 
etwas kompliziert. Nichts desto trotz ist alles strikt festgelegt, von 
reiner Willkür kann man also nicht reden. Das kurze Format kommt ja eher 
aus den Anfangszeiten von HART und ist halt einfach um neue Geräte 
einzubinden. Wirklich kommuniziert wird ja nur über das Long-Frame.

Tomas Kuckenburg schrieb:
> So ist das manchmal bei den historisch gewachsenen Dingen, hinterher
> wissen es immer alle besser ;o).

Ja, das ist schon ein Urgestein, aber es geht halt immer weiter - sei 
froh, wenn du kein WirelessHART machst. Trotzdem ist es nach wie vor 
sehr verbreitet.

von Tomas K. (Firma: tktronic) (tktronic)


Lesenswert?

Moins,

Ich würde gerne noch einmal auf Dein Angebot mit dem Trace zurückkommen.
FrameAlyst braucht eine Trail-lizenz, das kann noch dauern falls Walter 
Borst sich Zeit lässt ;-).

Einfach so wie es auf der seriellen Schnittstelle roh rübergeht einmal 
CMD0 mit Response vom Slave und ein long CMD wie CMD1 oder was Du gerade 
zur Hand hast wäre gut.

Danke + Gruß, Tom.

von LuXXuS 9. (aichn)


Lesenswert?

Tomas Kuckenburg schrieb:
> FrameAlyst braucht eine Trail-lizenz

Echt? Brauchte ich nie.

Tomas Kuckenburg schrieb:
> Einfach so wie es auf der seriellen Schnittstelle roh rübergeht einmal
> CMD0 mit Response vom Slave und ein long CMD wie CMD1 oder was Du gerade
> zur Hand hast wäre gut.

Ich guck gleich mal.

von LuXXuS 9. (aichn)


Angehängte Dateien:

Lesenswert?

So, hier sind mal nacheinander:

Kommando 0 (short)
Kommando 1 (long)
Kommando 2 (long)
Kommando 3 (long)

Im ersten Bild sind die reinen HEX-Werte, die gesendet werden - im 
zweiten sind die selben Daten dekodiert.

von tom (Gast)


Lesenswert?

super + Danke !

von LuXXuS 9. (aichn)


Lesenswert?

Kein Thema!

von tom (Gast)


Lesenswert?

...falls Du bitte noch den Zusammenbau der long adresse entmystifizieren 
könntest :-) ? :

ad[0] = irgendetwas von der manufacturer id im unteren nibble ?
ad[1] = device type ?
ad[2] = MSB device Id tag
ad[3] = ..
ad[4] = LSB device Id tag


gruss, tom.

von LuXXuS 9. (aichn)


Lesenswert?

tom schrieb:
> ...falls Du bitte noch den Zusammenbau der long adresse entmystifizieren
> könntest :-) ? :

Sicher:
1
              BYTE 0            |             BYTE 1            | ---->
2
 --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
3
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |  3 Byte
4
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |  Unique Identifier
5
 --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
6
  |   |  _______________________________________________________
7
  |   |                             |
8
  |   |                             |___ 14 LSBs vom Expanded-Device-Type
9
  |   |
10
  |   |_________________________________ Burst-Mode-Bit
11
  |
12
  |_____________________________________ Master-Address-Bit

Gruß

von tom (Gast)


Lesenswert?

jepp, und woraus setzt sich der expanded device type zusammen ?

In einer anderen doku habe ich was von 35bit long address gelesen, das 
passt ja dann nicht mit dem hier überein, oder ???

ei verbibscht ;-).

Du hast bei mir schon mal auf jeden Fall eine Kiste Bier gut !


Gruss, tom.

von tom (Gast)


Lesenswert?

axso, wg. der trial lizenz für FrameAlyst: war wohl ein bug im installer 
der 7.11 version den der walter borst im aktuellen trail zum download 
wieder behoben hat...

von LuXXuS 9. (aichn)


Lesenswert?

tom schrieb:
> woraus setzt sich der expanded device type zusammen ?

Den Extended Device Type bekommst du bei der Registrierung deines 
Gerätes bei der HCF. Diese nimmt das Gerät dann in ihre "Common Tables" 
auf und aktualisiert ihre Datenbank.

Wenn jetzt irgendwer mit seinem Programm deinen Transmitter anspricht 
und die aktuellen Extended Device Type Codes hat, dann sieht er weitere 
Informationen zu deinem Gerät, wie halt den Hersteller und den Typ des 
Gerätes. Auf jeden Fall kannst du dir den nicht einfach aussuchen. Bei 
der Unique ID hast du etwas freiere Wahlmöglichkeiten. Beide zusammen 
ergeben jedoch eine Kombination von Adresse, die nirgends auf der Welt 
ein zweites Mal vorkommen wird (oder sollte!).

tom schrieb:
> In einer anderen doku habe ich was von 35bit long address gelesen

Das kenne ich persönlich jetzt nicht. Aber Unterschiede wird es 
eigentlich nicht geben, da ja alles durch die HCF festgelegt ist. 
Quelle?

tom schrieb:
> Du hast bei mir schon mal auf jeden Fall eine Kiste Bier gut !

Kann ich mir die irgendwo runterladen ;-)

von Adrian T. (adite) Flattr this


Lesenswert?

Liebe HART - Spezialisten

Habe eine Verständnisproblem mit der HART Spec. (v6):
Die lange Adresse besteht ja u.a. aus der 24-bit Device-ID. Diese ID 
wird ja mit Kommando 0 und 11 zurückgegeben. Hat diese ID etwas mit der 
Final Assembly - Number zu tun, die mit Kommando 16 und 19 gelesen und 
geschrieben werden kann?
Oder muss diese Assembly Number einfach nur gespeichert werden, ohne 
dass sie irgend einen Einfluss auf die Adressierung hat?

Vielen Dank!

Gruss
Adrian

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.