Forum: Mikrocontroller und Digitale Elektronik Feldbus für Mikrocontrollersysteme


von Holger K. (holgerkraehe)


Lesenswert?

Hallo zusammen

Ich habe hier folgende Ausgangslage:

Mehrere Devices (slaves) müssen über einen einzigen Bus (Feldbus) 
angesprochen werden können.

Die Slaves werden selbst entwickelt. Der master (wenn es kein PC ist) 
ebenfalls.

Datenmengen sind bescheiden. Einige 20-30 bytes pro 10-20 sekunden für 
3-5 slaves. Die restlichen erhalten nur sporadisch ein paar bytes.

Nach einiger recherche habe ich den Modbus gefunden.
Modbus RTU (über RS485) scheint eigentlich ideal zu sein für diese 
aufgabe.
Aber halt ziemlich alt. Viele andere Feldbusse laufen über TCP IP.
Schöne sache, heute auch nicht mehr sooo schwer zu handhaben aber halt 
doch overhead auch auf hardware seite.

Daher meine Frage, weil Modbus ja schon sehr sehr alt ist.
Ist es noch vertretbar / sinnvoll heute neue modbus devices zu 
entwickeln oder gibt es ähnliche alternativen?

Proprietäre protokolle möchte ich möglichst vermeiden.

Danke schonmal

von Mathias H. (mathias)


Lesenswert?

ModBus ist aktuell.

von G. L. (glt)


Lesenswert?

Modbus ist aktueller denn je.

Evtl. wäre halt CAN noch was für dich.

von Michael K. (Gast)


Lesenswert?

RS485 ist ein super Bus.
Einfach, robust, 2Draht und bis zu 250 Teilnehmer (sportlich...) und je 
nach Datenrate mehrere KM lang.

Nachteil ist das alles tot ist wenn einer den Bus blockiert.
Terminierung und Verkabelung muss beachtet werden, aber ansonsten mein 
lieblings Feldbus.

Modbus kann man machen. Warum nicht, gibt sehr viele Geräte und 
Hersteller die darauf setzen.
Ist aber viel Protokoll für die paar Bytes.
Wenn es niemals zu etwas anderem kompatibel sein muss, würde ich ein 
einfaches eigenes Protokoll zusammenbauen.
Hängt davon ab ob Du fertige Modbus Stacks bekommst die Du leicht 
implementieren kannst oder ob Du das alles selbst coden musst.

von Purzel H. (hacky)


Lesenswert?

Ich bevorzuge RS422, weil bidirektional. Sind halt 2 Draehte mehr. Aber 
die Treiber sind dieselben. Fuer hireichend tiefe Baudraten und 
hireichend kurze distanzen kann man sich die Terminierung schenken. Und 
habe mein eigenes Protokoll. Dieses ist publiziert, die Kunden koennen's 
selbst einbauen, oder meine PC-App verwenden. Das Potokoll kann 
einfacher sein, wenn man die Richtung nicht umschalten muss.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jetzt ist G. schrieb:
> Ich bevorzuge RS422, weil bidirektional.

Aber auch nur bei zwei Geräten am "Bus". Bei mehreren wird es knifflig, 
und dann kann man auch einfach bei RS485 bleiben.

Es ist bei RS485 allerdings hilfreich, eine vernünftige UART zu 
verwenden, die hardwareunterstützung für RS485 enthält - d.h. die nötige 
Sender-/Empfängerumschaltung selbsttätig vornimmt.

Sonst muss man entweder sehr entspannte Timingvorgaben machen (Slave 
darf auf Masteranfrage erst nach einem gewissen Timeout reagieren) oder 
darauf hoffen, daß die UART geeignete Statusbits für 
"Sendeschieberegister leer" oder besser noch einen Interrupt für diese 
Bedingung hat. Das ist nicht bei jeder UART der Fall.

von Michael K. (Gast)


Lesenswert?

Hardwareunterstützung ist immer nett, aber wenn nicht gerade ein OS mit 
seinen sehr eigenwilligen Timing Vorstellungen dazwischen hängt, ist das 
reagieren auf den TX Ready IRQ schneller getan als die Laufzeit zum 
Slave + decode.

Wenn der PC Master ist, findet man bei FTDI USB / Uart wandler mit RS485 
Unterstützung.

Edit: Uart ohne TX ready IRQ? Ups, was es alles gibt ...

von Olaf (Gast)


Lesenswert?

> Daher meine Frage, weil Modbus ja schon sehr sehr alt ist.
> Ist es noch vertretbar / sinnvoll heute neue modbus devices zu
> entwickeln oder gibt es ähnliche alternativen?

Weil etwas alt ist ist es schlecht? Scheint mir eine sehr dumme 
Argumentation zu sein. Tatsaechlich hat Modbus sogar den Vorteil das du 
da einiges an Doku und Testsoftware finden kannst ohne gleich Mitglied 
in einem sehr teuren Verein zu werden wie das bei vielen anderen 
modernen Feldbussen ueblich ist.

Etwas anderes das du dir mal anschauen kannst ist HART. Ich wuerde nicht 
den Bus direkt verwenden weil du da auch Mitglied werden musst und deine 
Hardware teuer getestet wird, aber du koenntest dir ja was eigenes auf 
der Basis verfuegbarer HART-Modeme ausdenken. HART haette den Vorteil 
das du mit zwei Leitungen auskommst weil das auf die Versorgungsspannung 
aufmoduliert wird.

Olaf

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

Mir erschließt sich der Vorteil einer RS485 gegenüber CAN nicht. CAN 
löst viele Probleme schon die man bei RS485 selber lösen muss. 
Multimasterbetrieb zum Beispiel. Oder Prüfsumme. Oder Adressierung. 
Wenn's die Controller hergeben würde ich immer zu CAN greifen.

Matthias

von Michael K. (Gast)


Lesenswert?

Μαtthias W. schrieb:
> Mir erschließt sich der Vorteil einer RS485 gegenüber CAN nicht.

So sehr unterscheiden die sich garnicht.
Can löst eine ganze Menge direkt in Hardware, was man bei RS485 noch zu 
Fuss machen muss.
Der Vorteil von RS485 ist das jede dödel MCU einen Uart besitzt aber nur 
die teuren Teile einen Can Controller.

RS485 gab es schon als an Can noch nicht mal gedacht wurde.
RS485 reicht locker für die meisten Sachen aus.
Auch eigene Protokolle dafür zu schreiben ist nicht schwerer als den Can 
Controller zu betütern.

Wie sehr ich die Datenrate bei Can anpassen kann um die Reichweite zu 
erhöhen, weiß ich gerade nicht.

von Holger K. (holgerkraehe)


Lesenswert?

Ich danke euch für die vielen Antworten und Kommentare.

Ich sehe das ich auf dem richtigen Weg bin!

Danke und schönes Wochenende

von Purzel H. (hacky)


Lesenswert?

RS422 ist passend fuer einen Master-Slave Bus, dh der Master empfaengt 
immer, und die Slaves senden nur auf Anfrage.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jetzt ist G. schrieb:
> dh der Master empfaengt immer, und die Slaves senden nur auf Anfrage.

Und worin besteht dabei der Unterschied zu RS485? Wozu zwei Leitungen 
für einen nicht auftretenden Betriebsfall (Master sendet und empfängt 
gleichzeitig) vergeuden?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Michael K. schrieb:
> Hardwareunterstützung ist immer nett, aber wenn nicht gerade ein OS mit
> seinen sehr eigenwilligen Timing Vorstellungen dazwischen hängt, ist das
> reagieren auf den TX Ready IRQ schneller getan als die Laufzeit zum
> Slave + decode.

Er meint eher nen Flag für "TX Schieberegister empty" oder "TX Idle".
Wenn der TX Ready IRQ kommt, dann ist zwar das Datenregister am CPU Bus 
leer, aber der UART sendet noch.
Das Datenregister wird ja ins Schieberegister geladen und dann 
rausgeschoben.
Wenne jetz bei TX empty den Bustreiber deaktivierst fehlt da was vom 
letzten Byte.

Michael K. schrieb:
> Der Vorteil von RS485 ist das jede dödel MCU einen Uart besitzt aber nur
> die teuren Teile einen Can Controller.
STM32F103 sind für dich also teuer?

von Purzel H. (hacky)


Lesenswert?

> Und worin besteht dabei der Unterschied zu RS485? Wozu zwei Leitungen
für einen nicht auftretenden Betriebsfall (Master sendet und empfängt
gleichzeitig) vergeuden?


Der Vorteil .. ich muss keine Richtung umschalten, muss keinen einzigen 
Gedanken dran verschwenden. Ob's nun 3 oder 5 pins/pole sind, ist mir 
egal. Ist kein Kostenfaktor. Der PC kann ohne Sonderhardware arbeiten

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Richtung umschalten heißt es dann zwar nicht, aber 2 Bustreiber könn ja 
wohl nicht gleichzeitig auf diselbe Doppelader treiben.
Also muss immernoch der Bustreiber beim senden aktiviert und danach 
deaktiviert werden.
Also gleiches problem wie beim RS485.
Also hör hier doch bitte auf zu trollen.

von Dieter W. (dds5)


Lesenswert?

Ja, die slaves müssen schon ihren Treiber deaktivieren wenn sie nicht 
dran sind.
Aber prinzipiell könnte der Master z.B. dem slave 2 was schicken während 
er noch auf den ersten hört. Ob das mit dem Protokoll vereinbar ist 
steht wieder auf einem anderen Blatt.

von Purzel H. (hacky)


Lesenswert?

Nee. Nicht gleiches Problem wie RS485. Beim 422 in Vollduplex mode wird 
der Slave beim Senden eingeschaltet. Der Master, der PC, muss nichts.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jetzt ist G. schrieb:
> Nee. Nicht gleiches Problem wie RS485. Beim 422 in Vollduplex mode wird
> der Slave beim Senden eingeschaltet. Der Master, der PC, muss nichts.

Damit ist das "Problem" also nur beim Master nicht vorhanden. Bei den 
Slaves hast Du aber exakt gar nichts gewonnen, die müssen nach wie vor 
den Bus freigeben, wenn sie nichts zu melden haben.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Jetzt ist G. schrieb:
> Und
> habe mein eigenes Protokoll. Dieses ist publiziert, die Kunden koennen's
> selbst einbauen, oder meine PC-App verwenden.

Nen Link wäre so langsam mal interessant.

von Thomas E. (picalic)


Lesenswert?

Rufus Τ. F. schrieb:
> Es ist bei RS485 allerdings hilfreich, eine vernünftige UART zu
> verwenden, die hardwareunterstützung für RS485 enthält - d.h. die nötige
> Sender-/Empfängerumschaltung selbsttätig vornimmt.

Rufus Τ. F. schrieb:
> Damit ist das "Problem" also nur beim Master nicht vorhanden. Bei den
> Slaves hast Du aber exakt gar nichts gewonnen, die müssen nach wie vor
> den Bus freigeben, wenn sie nichts zu melden haben.

Man könnte es sich einfach machen und UART mit CAN Bustreibern benutzen.
Dadurch müssen die µC kein CAN unterstützen, aber der Slave oder Master 
muß auch nicht den Bustreiber deaktivieren, wenn er mit Senden fertig 
ist. Wenn die einzelnen Slaves nur auf Anforderung senden, gibt es ja 
keine Bus-Kollisionen.
Trotzdem könnte eine Buskollision erkannt werden, wenn der Sender nicht 
seine eigenen, gerade gesendeten Daten korrekt in seinem Rx-Buffer 
vorfindet.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jetzt ist G. schrieb:
> Ich bevorzuge RS422, weil bidirektional. Sind halt 2 Draehte mehr. Aber
> die Treiber sind dieselben. Fuer hireichend tiefe Baudraten und
> hireichend kurze distanzen kann man sich die Terminierung schenken. Und
> habe mein eigenes Protokoll. Dieses ist publiziert, die Kunden koennen's
> selbst einbauen, oder meine PC-App verwenden. Das Potokoll kann
> einfacher sein, wenn man die Richtung nicht umschalten muss.

 LOL.
 Was wird bei bidirektional umgeschaltet ?

Mw E. schrieb:
> Nen Link wäre so langsam mal interessant.

 Ja, das würde mich auch interessieren.
 Sogar sehr.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Trotzdem könnte eine Buskollision erkannt werden, wenn der Sender nicht
> seine eigenen, gerade gesendeten Daten korrekt in seinem Rx-Buffer
> vorfindet.

Das bekommt man mit RS485-Treibern auch hin, dafür braucht es keine 
CAN-Treiber.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Rufus Τ. F. schrieb:
> Thomas E. schrieb:
>> Trotzdem könnte eine Buskollision erkannt werden, wenn der Sender nicht
>> seine eigenen, gerade gesendeten Daten korrekt in seinem Rx-Buffer
>> vorfindet.
>
> Das bekommt man mit RS485-Treibern auch hin, dafür braucht es keine
> CAN-Treiber.

 Nein, das bekommt man mit RS485 nicht hin.

 P.S.
 Zumindest nicht ohne zusätzliche Leitungen.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Rufus Τ. F. schrieb:
> Das bekommt man mit RS485-Treibern auch hin, dafür braucht es keine
> CAN-Treiber.

Wie denn? Und warum sollte man das tun? CAN-Treiber sind billiger!

von STK500-Besitzer (Gast)


Lesenswert?

Thomas E. schrieb:
> Wie denn? Und warum sollte man das tun?
Indem man den Empfnag wärend des Sendens nicht abschaltet (RE nicht 
zusammen mit DE umschaltet).
Allerdings sind RS485-Transceiver derart niederohmig, dass die Kollision 
gar nicht am Ausgang erkannt wird.

> CAN-Treiber sind billiger!
Bei denen kann man die Datenrichtung aber nicht umschalten.
Und CAN-Controller erkennen schon am gesendenten Bit eine Kollision 
(Recessiv / Dominant), und reagieren entsprechend.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Rufus Τ. F. schrieb:
>> Das bekommt man mit RS485-Treibern auch hin, dafür braucht es keine
>> CAN-Treiber.
>
> Wie denn? Und warum sollte man das tun? CAN-Treiber sind billiger!

 /RE mit einem zusätzlichen Pin steuern oder mit GND verbinden.
 Macht man aber normalerweise nicht so (Es gibt schon Gründe dafür).

von Thomas E. (picalic)


Lesenswert?

STK500-Besitzer schrieb:
> Bei denen kann man die Datenrichtung aber nicht umschalten.

Eben, darum geht es doch: die Umschaltung kann man sich sparen! Aber 
eben auch den CAN-Controller im µC. Ein noch einfacherer Bus wäre direkt 
UART im Halbduplex-Betrieb mit einer einzigen Datenleitung und Open 
Drain Tx-Ausgang. Aber das wäre halt störanfälliger.

von Thomas E. (picalic)


Lesenswert?

Marc V. schrieb:
> /RE mit einem zusätzlichen Pin steuern oder mit GND verbinden.
>  Macht man aber normalerweise nicht so (Es gibt schon Gründe dafür).

Das löst aber immer noch nicht das "Problem", daß, wenn mehrere Geräte 
am Bus hängen, die einzelnen Geräte eben jeweils ihre Bustreiber 
deaktivieren müssen, wenn sie nicht senden.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Marc V. schrieb:
>> /RE mit einem zusätzlichen Pin steuern oder mit GND verbinden.
>>  Macht man aber normalerweise nicht so (Es gibt schon Gründe dafür).
>
> Das löst aber immer noch nicht das "Problem", daß, wenn mehrere Geräte
> am Bus hängen, die einzelnen Geräte eben jeweils ihre Bustreiber
> deaktivieren müssen, wenn sie nicht senden.

 Genau.
 Deswegen benutzt man RS485 nur noch bei 2 Teilnehmer am Bus oder bei
 jederzeit genau definierten Buszuständen.
 Eine andere Möglichkeit wäre token ring aber das bedeutet einen
 ziemlichen Overhead an Software.
 Multimaster und RS485 verträgt sich auch nicht so gut.

 Kurz gesagt, CAN (nur Hardware Layer) und eigenes Protokoll ist
 meiner Meinung nach die beste Lösung für uC ohne CAN (ATMEL).
 ARM dagegen mit vollem CAN natürlich, kostet ja nichts,

von Purzel H. (hacky)


Lesenswert?

RS485 ein gute Wahl fuer Multimaster Systeme. Denn es gibt Treiber nach 
Wahl. Je nach gewuenschter Eigenschaft. zB 25MBit@160m oder 3MBit @500m. 
Und ja, die Buszustaende muessen genau definiert sein. Das muessen sie 
eigentlich sowieso.

Man sollte sowieso darauf achten, dass das verwendete 
Applikationsprotokoll zustandsfrei ist. Dann geht das schon. Gilt 
eigentlich fuer alle Protokolle.

Man sollte nicht vergessen, dass CAN ein Automobilbus ist. Schnell, 
Verzoegerungsarm, mit kurzer Blocklaenge.  Ist also nicht wirklich 
optimal fuer Nachrichten variabler, oder grosser Laenge.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Rufus Τ. F. schrieb:
> daß die UART geeignete Statusbits für
> "Sendeschieberegister leer"

Meist auch "Transmission complete" oder "TC" genannt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

@Jetzt ist G. (hacky)
Den Link zu deinem Projekt haste schonwieder vergessen ;)

von m.n. (Gast)


Lesenswert?

Holger K. schrieb:
> Datenmengen sind bescheiden. Einige 20-30 bytes pro 10-20 sekunden für
> 3-5 slaves. Die restlichen erhalten nur sporadisch ein paar bytes.

Über 5 m oder 5 km?

von P.S. (Gast)


Lesenswert?

Bei den geringen Datenraten könnte man auch LIN nehmen. Maximale 
Leitungslänge ist 40m.

von Route_66 H. (route_66)


Lesenswert?

Als altem Seebär fällt mir noch "SeaTalk" ein.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Jetzt ist G. schrieb:
> RS485 ein gute Wahl fuer Multimaster Systeme.

 Niemals.

von Einer K. (Gast)


Lesenswert?

Marc V. schrieb:
> Jetzt ist G. schrieb:
>> RS485 ein gute Wahl fuer Multimaster Systeme.
>
>  Niemals.

Darum wird es auch so oft als solches verwendet...
Weil es nicht funktioniert.
Grrr...

von Michael K. (Gast)


Lesenswert?

Jetzt ist G. schrieb:
> RS485 ein gute Wahl fuer Multimaster Systeme.

Radio Eriwan: Im Prinzip schon.
Wenn Du denn das ganze Protokollgefriggel sauber in den Griff bekommst.
Wer ist dran, was passiert wenn der nicht übernimmt, wer greift ein und 
reisst den Bus an sich, was passiert bei Kollision etc. pp.
Da ist CAN ein Segen, der regelt das alles allein.

von Bernd K. (prof7bit)


Lesenswert?

CAN ist schon ne feine Sache, ich hab mich als ich zum ersten Mal damit 
zu tun hatte auch deutlich schneller damit angefreundet als ich 
ursprünglich vermutet hatte.

> Multimaster

Holger K. hat aber nur einen Master. Der Vorteil von RS485 ist halt eben 
daß es sich mit jedem ollen UART auf jedem noch so billigen µC 
implementieren lässt.

UART ist eins von diesen System die das einfachst vorstellbare ihrer Art 
sind, 100% davon dienen der nackten Funktion und nichts könnte mehr 
weiter vereinfacht werden (genau wie sein Gegenstück SPI für synchrone 
Übertragung), gewissermaßen ein elementares Verfahren. Deshalb wird UART 
auch niemals sterben, wenn doch würde man es am nächsten Tag sofort 
wieder erfinden und zwar wieder exakt genau so.

von Thomas E. (picalic)


Lesenswert?

Bernd K. schrieb:
> Der Vorteil von RS485 ist halt eben
> daß es sich mit jedem ollen UART auf jedem noch so billigen µC
> implementieren lässt.

... und der Vorteil von CAN Hardware-Layer mit dem gleichen billigen µC 
ist ein noch billigerer Treiberbaustein, der auf µC-Seite (im Gegensatz 
zu RS485) nichtmal einen weiteren Pin außer Tx und Rx benötigt.

von Bernd K. (prof7bit)


Lesenswert?

Thomas E. schrieb:
> ... und der Vorteil von CAN Hardware-Layer mit dem gleichen billigen µC
> ist ein noch billigerer Treiberbaustein,

Und ein CAN Controller und schon sinds 2 zusätzliche Bausteine (RS485 
nur einer), oder willst Du CAN mit Bitbanging implementieren?

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Bernd K. schrieb:
> Und ein CAN Controller und schon sinds 2 zusätzliche Bausteine (RS485
> nur einer), oder willst Du CAN mit Bitbanging implementieren?

Nein, gar kein CAN Controller! Ich will nur den RS485 Treiberbaustein 
durch einen CAN Treiberbaustein ersetzen, das CAN Protokoll wird nicht 
benutzt.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Nein, gar kein CAN Controller! Ich will nur den RS485 Treiberbaustein
> durch einen CAN Treiberbaustein ersetzen, das CAN Protokoll wird nicht
> benutzt.

 Versuche ich seit 2 Tagen zu erklären.
 Bislang ohne Erfolg...

von Purzel H. (hacky)


Lesenswert?

Aha. Zeig mal. Damit wir uns ein Datenblatt anschauen koennen.
Ich werf mal fuer einen RS485 den SN65HVD24D fuer erhoehte Anforderungen 
ein.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

@Marc,
also ich hab dich schon verstanden.

Ich zitier mich jetzt mal selbst:
>@Jetzt ist G. (hacky)
>Den Link zu deinem Projekt haste schonwieder vergessen ;)
Mehr als Dampfplaudern kam bisher nicht von dir, also zeig doch mal her 
was du mit RS422 kannst! Hattest ja gesagt, dass du da schon was gebaut 
hattest.
Dein Forennick ist jetzt aber nicht so herausstechend als ob man da mit 
google was finden würde.

Was hat der SN65HVD24D jetzt zudem noch mit dem Thema zu tun?
Er hat nen größeren Bereich fürn Common Mode und weiter?
Einfach so ne Bezeichnung in Raumw erfen ohne zusagen worauf man hinaus 
will wirkt auch eher arrogant.

von Purzel H. (hacky)


Lesenswert?

Naja, das ist was ein RS485 Treiber kann. Nicht jeder kann wie dieser 
3MBit auf 250m. Was kann den ein CAN Treiber ? Zeig ein Datenblatt.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Zeig mir erstmaln Link zu deinem Projekt bevor ich mich weiter mit 
deinen steilen Thesen beschäftige ;)

von Thomas E. (picalic)


Lesenswert?

Jetzt ist G. schrieb:
> Damit wir uns ein Datenblatt anschauen koennen

Z.B. SN65HVD1050

Jetzt ist G. schrieb:
> Nicht jeder kann wie dieser
> 3MBit auf 250m.

Enorm wichtig, wenn man vielleicht 9600 Baud über 5m übertragen will...

von X4U (Gast)


Lesenswert?

Thomas E. schrieb:
> Nein, gar kein CAN Controller! Ich will nur den RS485 Treiberbaustein
> durch einen CAN Treiberbaustein ersetzen, das CAN Protokoll wird nicht
> benutzt.

Geht das so einfach? Dachte immer man muss das CAN Protokoll einhalten
 (Präambel, Adressen, Länge, Checksumme usw).

von X4U (Gast)


Lesenswert?

Jetzt ist G. schrieb:
> RS422 ist passend fuer einen Master-Slave Bus, dh der Master empfaengt
> immer, und die Slaves senden nur auf Anfrage.

RS422 ist aber nur nur in Hardware genormt. Alles andere must du selbst 
machen. Da kann man mMn besser CAN nehmen.

Hab viel mit 422 gemacht. Das ist über lange Entfernungen sehr aufwändig 
und du hast die Chance nicht nur zu verpolen sondern hast gleich mehrere 
Adern Chancen zum vertauschen und falsch zu terminieren.

Wenn man die Entfernung hat, full duplex braucht und nur "Klingeldraht" 
bzw. Telefonleitung liegt dann macht die Schnittstelle Sinn sonst ....

von guest (Gast)


Lesenswert?

X4U schrieb:
> Geht das so einfach? Dachte immer man muss das CAN Protokoll einhalten
>  (Präambel, Adressen, Länge, Checksumme usw).

Ja, das geht so einfach. Einem CAN-Tranceiver ist es genau wie z.B. 
einem MAX232 erstmal völlig egal was da an Bits übertragen wird und was 
diese bedeuten.

von X4U (Gast)


Lesenswert?

guest schrieb:
> Ja, das geht so einfach. Einem CAN-Tranceiver ist es genau wie z.B.
> einem MAX232 erstmal völlig egal was da an Bits übertragen wird und was
> diese bedeuten.

Das meinte ich nicht, klar wenn du nur Layer 1 nutzt ist es rein und 
raus transparent.

Aber der TE sucht einen Feldbus für mehrere Endpunkte. Da bietet sich 
CAN doch an. Zum entwickeln und entstören gibt es dann noch Analyzer 
(auch im Feld) und DemoCode.

von Thomas E. (picalic)


Lesenswert?

X4U schrieb:
> Aber der TE sucht einen Feldbus für mehrere Endpunkte. Da bietet sich
> CAN doch an.

Er hat aber offen gelassen, welche Controller in seinen Endpunkten 
stecken - womöglich welche ohne CAN?
Er selbst hatte ja auch schon Modbus über RS485 ins Auge gefasst. Die 
weitere Diskussion hat sich dann auch (wie üblich) von der Eingangsfrage 
ein Stück weit entfernt.

von guest (Gast)


Lesenswert?

X4U schrieb:
> Aber der TE sucht einen Feldbus für mehrere Endpunkte. Da bietet sich
> CAN doch an. Zum entwickeln und entstören gibt es dann noch Analyzer
> (auch im Feld) und DemoCode.

Kommt drauf an. Wenn die Hardware CAN-Controller mitbringt und man mit 
den 8 Byte pro Nachricht auskommt ist CAN ne feine Sache.
Allerdings läßt sich eine UART notfalls auch in Software nachbauen 
(Versuch das mal mit einem CAN-Controller) und ist in der Anstauerung 
auch ein Stück einfacher.
Und wenn einem die 8 Byte nicht reichen braucht man so oder so noch ein 
zusätzliches Protokoll.

von Bernd K. (prof7bit)


Lesenswert?

Es ist doch ganz einfach:

* Hast Du CAN-Fähige Controller oder kannst stattdessen auf solche 
umsteigen oder sind externe CAN-Controller eine akzeptable Option?

    -> Nimm CAN


* Hast Du nur Controller ohne CAN und/oder willst kein CAN?

    -> Nimm RS-485


Den CAN-Controller zu initialisieren und zu benutzen benötigt kein 
bisschen mehr Code als einen UART zu initialisieren und zu benutzen, von 
daher Gleichstand. (Ok, zugegeben, bei nem externen Controller mußt Du 
auch noch das SPI benutzen, also insgesamt etwas umständlicher als nur 
den UART. Aber nicht inhärent schwierig, nur etwas mehr langweiliger 
Code)

Beim Protokoll das Du Dir ausdenkst sind die jeweiligen Eigenschaften 
des Übertragungsmediums zu berücksichtigen (was passiert wenn zwischen 
dem 2. und dem 3. Teilnehmer das Kabel durchgeschnitten wurde, wie weißt 
Du ob die Nachricht ankam, wie sollen die Geräte addressiert werden, muß 
Der Master ständig pollen (RS-485) oder wäre es eventuell eleganter wenn 
die Teilnehmer von sich aus Telegramme schicken wenn ein Ereignis 
eintritt (CAN), maximale Nutzlast bei CAN ist 8 Byte pro Frame und 
Übertragung längerer Datenblöcke ist gewünscht?, Firmware-Update über 
den Bus gewünscht?)

: Bearbeitet durch User
von Holger K. (holgerkraehe)


Lesenswert?

Da sind ja noch einige Antworten / Kommentare hinzugekommen.

Also um noch ein Paar Unklarheiten zu beseitigen:

Die aktuelle Hardware hat kein CAN im uC.
Es ist geplant STM8 oder STM32F030 zu verwenden.
Evtl. noch Atmega324.

von STK500-Besitzer (Gast)


Lesenswert?

Holger K. schrieb:
> STM32F030
https://www.st.com/content/ccc/resource/technical/document/reference_manual/cf/10/a8/c4/29/fb/4c/42/DM00091010.pdf/files/DM00091010.pdf/jcr:content/translations/en.DM00091010.pdf

Der unterstützt den RS485-Flow sogar in Hardware, und kann auch 
multiprocessor communication.
Das vereinfacht die Sache bis auf die Kollisionserkennung.

von Peter D. (peda)


Lesenswert?

Es gibt auch RS-485 Transceiver mit automatischer Richtungsumschaltung, 
z.B. MAX13487E

von m.n. (Gast)


Lesenswert?

Holger K. schrieb:
> Also um noch ein Paar Unklarheiten zu beseitigen:

Hättest Du ruhig die notwendigen Kabellängen sowie das Umfeld (Büro, 
Maschinenhalle) bekanntgeben können.
Aber wie man sieht, gibt es ja auch schon Lösungen, ohne das Problem zu 
kennen. Hut ab! (oder war das der Kopf?)

von Thomas E. (picalic)


Lesenswert?

STK500-Besitzer schrieb:
> Das vereinfacht die Sache bis auf die Kollisionserkennung.

Eben dafür wäre der CAN Hardware-Layer bestens geeignet - da alle 
Devices gleichzeitig alle (auch selbst gesendeten) Daten empfangen, ist 
eine Kollisionserkennung leicht möglich. Zudem sind die Tranceiver 
billiger (Digikey Einzelpreis für den billigsten SO-8 CAN-Tranceiver: 
0,47 Euro, der billigste RS485-Cip kostet da >1 Euro) und man muss sich 
nicht mit Tx-Enable herumschlagen. Der µC muß nur über Tx- und Rx-Pins 
mit dem Tranceiver verbunden werden, kein weiteres Steuersignal.
Der einzige "Nachteil" (wenn man es nicht als Vorteil sieht, der das 
Blockieren des Busses u.U. verhindert) ist, daß man eine gewisse 
Midestdatenrate braucht, damit der CAN Transmitter Timeout nicht 
zuschlägt.

von STK500-Besitzer (Gast)


Lesenswert?

Thomas E. schrieb:
> Eben dafür wäre der CAN Hardware-Layer bestens geeignet - da alle
> Devices gleichzeitig alle (auch selbst gesendeten) Daten empfangen, ist
> eine Kollisionserkennung leicht möglich. Zudem sind die Tranceiver
> billiger (Digikey Einzelpreis für den billigsten SO-8 CAN-Tranceiver:
> 0,47 Euro, der billigste RS485-Cip kostet da >1 Euro) und man muss sich
> nicht mit Tx-Enable herumschlagen. Der µC muß nur über Tx- und Rx-Pins
> mit dem Tranceiver verbunden werden, kein weiteres Steuersignal.
> Der einzige "Nachteil" (wenn man es nicht als Vorteil sieht, der das
> Blockieren des Busses u.U. verhindert) ist, daß man eine gewisse
> Midestdatenrate braucht, damit der CAN Transmitter Timeout nicht
> zuschlägt.

Ob man einen RS485- oder CAN-Transceiver verwendet ist doch völlig egal.
Um die Vorteile des CAN-Bus benutzen zu können, ist ein CAN-Controller 
notwendig.
Den müsste man beim gewählten 32bitter extern dranhängen. Damit wäre der 
Kostenvorteil nicht mehr gegeben.
Timeoput-Geschichten sind nicht so mein Fall, da sie die ganze 
Bus-Geschichte verlangsamen.
Mit der Multiprozessor-Kommunikation kann man sich das dann auch sparen.
Und man kann eine eigene Datenlänge definieren (im Gegensatz zu den 8 
Bytes bei CAN - CANopen ist ja eigentlich auch nur "Gebastel").
Wenn ein Slave nicht adressiert wurde, hält er die Klappe - ganz 
einfach.

von Holger K. (holgerkraehe)


Lesenswert?

m.n. schrieb:
> Hättest Du ruhig die notwendigen Kabellängen sowie das Umfeld (Büro,
> Maschinenhalle) bekanntgeben können.

Stimmt. Sorry.

Kabellänge: ca. 1-3 Meter.
Umfeld: Semi-Profesionell. (Es werden 24V Motoren angesteuert).
Aber ansonsten nichts wildes!

Interessanter Ansazt mit den Can-Tranceivern.
Jedoch kostet ein MAX485 bei Ali 0.037 USD inkl. Versand.
Also keine 4Cent!

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Holger K. schrieb:
> Kabellänge: ca. 1-3 Meter.
> Umfeld: Semi-Profesionell. (Es werden 24V Motoren angesteuert).

Ein RS232-Treiber vom Master an alle Endgeräte. Rückleitung der 
Endgeräte RS232 mit Diode+R entkoppelt zum Master.
Vorteil: voll duplex und per Terminal bzw. PC bedien-/kontrollierbar.

Holger K. schrieb:
> Jedoch kostet ein MAX485 bei Ali 0.037 USD inkl. Versand.
> Also keine 4Cent!

Was hier gespart wird, zahlst Du bei der Software und beim 
Kabel+Terminierung wieder drauf ;-)

von Thomas E. (picalic)


Lesenswert?

STK500-Besitzer schrieb:
> Ob man einen RS485- oder CAN-Transceiver verwendet ist doch völlig egal.

Ich geb's auf - anscheinend ist es nicht möglich, hier Ideen/Lösungen 
abseits der Hersteller-Applikationen oder per xxx-Konsortium-Beamten 
abgesegneten Bus-Spezifikationen 'rüberzubringen.
Ok, CAN-Transceiver sind ausschließlich für CAN-Protokoll gemacht und 
dürfen selbstredend nur dafür verwendet werden, und UARTs kann man nur 
mit RS485 o.ä. Hardware-Specs benutzen - alles Andere steht nicht in den 
Hersteller-Datenblättern und geht deshalb nicht.
Und weil man UART sowieso nicht über CAN-Layer benutzen kann, ist es 
auch völlig egal, daß man bei RS485 keine Datenkollisionen erkennen kann 
oder die Bustreiber im Fehlerfall ggf. einfach gegeneinander arbeiten. 
Auf diese Gegebenheiten muss man eben das Protokoll anpassen, statt 
einen Hardware-Transportlayer zu wählen, der sowas schon allein durch 
seine physikalische Funktionsweise löst.

Wie der im CAN Transmitter untergebrachte Hardware-Timeout die 
Datenübermittlung verlangsamen soll, ist mir schleierhaft. Er schaltet 
lediglich die Bustreiber aus, wenn das Tx-Signal für eine gewisse Zeit 
auf 0 klemmt, daher auch die Mindest-Datenrate.

Holger K. schrieb:
> Jedoch kostet ein MAX485 bei Ali 0.037 USD inkl. Versand.
> Also keine 4Cent!

Ok, dann möchte ich gar nicht wissen, was CAN Transceiver bei Ali 
kosten...

von X4U (Gast)


Lesenswert?

Holger K. schrieb:
> Kabellänge: ca. 1-3 Meter.
> Umfeld: Semi-Profesionell. (Es werden 24V Motoren angesteuert).
> Aber ansonsten nichts wildes!

Dann ist LIN noch ein Kandidat, rein serielles Master-Slave Protokoll, 
simple Eindraht open collector Hardware (= beliebig hoher Störabstand) 
und Automotive spezifiziert.

Bei 24V Motoren würde ich evtl. galvanisch trennen. Das geht bei LIN mit 
nur einem Optokoppler pro Endpunkt.

von STK500-Besitzer (Gast)


Lesenswert?

Thomas E. schrieb:
> Ok, CAN-Transceiver sind ausschließlich für CAN-Protokoll gemacht und
> dürfen selbstredend nur dafür verwendet werden, und UARTs kann man nur
> mit RS485 o.ä. Hardware-Specs benutzen - alles Andere steht nicht in den
> Hersteller-Datenblättern und geht deshalb nicht.

Habe ich nie behauptet.
Aus dem Zusammenhang gerissen, behauptest du das aber... ;)
Um einem RS485-Bus zu betreiben, kann man SOWOHL einen 
RS485-Transceiver, als auch einen CAN-Transceiver benutzen, wobei sich 
die Endstufen der beiden unterscheiden.
Bei CAN wird auf Bit-Ebene eine Kollision erkannt -  bei RS485 (da 
byteweise orrienteriert) frühestens, wenn man seine eigenes Byte 
eingelesen hat.

von Michael K. (Gast)


Lesenswert?

Thomas E. schrieb:
> Ok, CAN-Transceiver sind ausschließlich für CAN-Protokoll gemacht und
> dürfen selbstredend nur dafür verwendet werden, und UARTs kann man nur
> mit RS485 o.ä. Hardware-Specs benutzen - alles Andere steht nicht in den
> Hersteller-Datenblättern und geht deshalb nicht.

Ein Can Controller löst Kollisionen in einer Bitzeit auf, geht vom Bus 
und wartet eine zufällige Zeit.
Ich bin mir daher nicht sicher ob ein Can Transceiver dauerhaft 
kurzschlussfest ist, wie ein RS485 Treiber.
Weswegen also einen Can Transceiver für etwas benutzen für das ein RS485 
Transceiver voll durchspezifiziert ist?

Natürlich kannst Du ICs ausserhalb der Herstellerspec benutzen.
Wenn Dir ein paar gesparte Cent den Ärger wert sind den Du Dir damit 
einfangen kannst, bitteschön.
Meine Zeit ist zu teuer für diese Abendheuer.

RS484 ist sehr viel älter als Can und trotz der schicken Funktionen 
eines Can Controllers immer noch ein sehr guter und einfacher Bus.
Man muss nicht bei jeder 0815 Anwendung seine eigenen Kreationen da 
reinbringen wenn das schon 100mal sehr robust gelöst wurde.
Verwende Deine Zeit doch lieber sinnvoller in der Lösung neuer Probleme 
statt Dir neue Probleme zu kreieren.

von Bernd K. (prof7bit)


Lesenswert?

Michael K. schrieb:
> Ich bin mir daher nicht sicher ob ein Can Transceiver dauerhaft
> kurzschlussfest ist, wie ein RS485 Treiber.

Bei CAN kann es keine Kurzschlüsse geben weil der Transceiver die 
Leitungen nur in die dominante Richtung treibt. Deshalb kann man mit 
RS-485 erheblich höhere Bitraten auf die selbe Länge erreichen als mit 
CAN.

CAN-Transceiver für RS-485 ist vollständiger Käse. Es gibt keinen Grund 
dafür. Erstens ist es inkompatibel und zweitens weniger störsicher und 
erreicht geringere Datenraten. Die Nachteile aus beiden Welten vereint.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Michael K. schrieb:
> Ich bin mir daher nicht sicher ob ein Can Transceiver dauerhaft
> kurzschlussfest ist, wie ein RS485 Treiber.

Du weisst aber schon, wie ein CAN-Transmitter aufgebaut ist und was 
passiert, wenn der eine eine "1" und der andere eine "0" auf den Bus 
schickt?

Michael K. schrieb:
> Natürlich kannst Du ICs ausserhalb der Herstellerspec benutzen.

Wo soll den da etwas außerhalb der Spec der Tranceiver benutzt werden? 
Es wird lediglich kein CAN-Protokoll verwendet, die Bus-Hardware bleibt 
dieselbe.

STK500-Besitzer schrieb:
> bei RS485 (da
> byteweise orrienteriert) frühestens, wenn man seine eigenes Byte
> eingelesen hat.

Oder eben auch nicht - schließlich arbeiten die RS485 Treiber ggf. 
einfach gegeneinander - je nachdem, welcher der "Stärkere" ist, kann, 
muss eine Kollision aber nicht zwangsläufig direkt zum Erkennnen eines 
Datenfehlers führen.

Bei CAN-Hardware ist sicher, daß eine 0 eine 1 dominiert.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Michael K. schrieb:
> Ich bin mir daher nicht sicher ob ein Can Transceiver dauerhaft
> kurzschlussfest ist, wie ein RS485 Treiber.

 Bei CAN kann es keine Kurzschlüsse geben.

> Weswegen also einen Can Transceiver für etwas benutzen für das ein RS485
> Transceiver voll durchspezifiziert ist?

 Und das wäre was ?

Michael K. schrieb:
> RS484 ist sehr viel älter als Can und trotz der schicken Funktionen
> eines Can Controllers immer noch ein sehr guter und einfacher Bus.
> Man muss nicht bei jeder 0815 Anwendung seine eigenen Kreationen da
> reinbringen wenn das schon 100mal sehr robust gelöst wurde.

 RS485 ist ganz einfach nicht darauf ausgelegt, Buskollisionen zuver-
 lässig zu erkennen und zu behandeln.
 Deswegen schrieb ich auch, dass RS485 nicht für Multimaster Systeme
 geeignet ist.

 RS485 schreibt nur die Hardware vor, CAN dagegen Hard- und Software
 Layer.

 Aber niemand wird gezwungen, beide CAN-Layer zu benutzen, ist das
 so schwer zu verstehen ?

: Bearbeitet durch User
von Michael K. (Gast)


Lesenswert?

Marc V. schrieb:
> RS485 ist ganz einfach nicht darauf ausgelegt, Buskollisionen zuver-
>  lässig zu erkennen und zu behandeln.
Muss er auch nicht.
CRC und neu Übertragen wenns nicht angekommen ist, reicht meist 
vollkommen aus.

>  Deswegen schrieb ich auch, dass RS485 nicht für Multimaster Systeme
>  geeignet ist.
Stimmt, es geht, ist aber unnötig aufwendig wenn man statt dessen 
einfach Can nehmen kann der das viel ausgefuchster in Hardware macht. 
Die Notwendigkeit eines Multimaster Systems ist aber auch nur 
ausgesprochen selten gegeben.

Worauf wollen wir hier aber eigentlich hinaus?
Beide Busse haben ihre Vorteil, beide werden rege benutzt, beide 
erledigen ihren Job hervorragend.
Statt 'mein Bus ist aber besser als deiner' kann man auch einfach einen 
davon benutzen und damit glücklich werden.

Brauche ich die Funktionalitär von Can, dann nehme ich Can.
Brauche ich eine simple gepollte Master / Slave Übertragung ohne viel 
Schickimicki ist RS485 ein prima Bus.
Für anderes ist I²C, SPI oder 1wire vielleicht die richtige Wahl.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Michael K. schrieb:
> Worauf wollen wir hier aber eigentlich hinaus?
> Beide Busse haben ihre Vorteil, beide werden rege benutzt, beide
> erledigen ihren Job hervorragend.

 Ja, nur sehe ich keine Vorteile von RS485 gegenüber CAN, ausser
 vielleicht grössere Rechweite.
 Aber wer arbeitet schon mit Längen über 200m ?


> Statt 'mein Bus ist aber besser als deiner' kann man auch einfach einen
> davon benutzen und damit glücklich werden.

 Selbstverständlich.

von Michael K. (Gast)


Lesenswert?

Marc V. schrieb:
> Aber wer arbeitet schon mit Längen über 200m ?
Viele, ich ...

von Einer K. (Gast)


Lesenswert?

Michael K. schrieb:
> ich
I too.

Letztens ist mir wieder ein SUKONET K (eins der vielen RS485 Protokolle) 
unters Läptop gekommen.
Länge etwas über 800m, erstreckt sich über 4 Gebäude.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Michael K. schrieb:
> Marc V. schrieb:
>> Aber wer arbeitet schon mit Längen über 200m ?
> Viele, ich ...

Arduino Fanboy D. schrieb:
> Michael K. schrieb:
>> ich
> I too.
>
> Letztens ist mir wieder ein SUKONET K (eins der vielen RS485 Protokolle)
> unters Läptop gekommen.
> Länge etwas über 800m, erstreckt sich über 4 Gebäude.

 Ahem.

von heinzl (Gast)


Lesenswert?

Wie wärs mit AS-i Bus...

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.