Forum: Mikrocontroller und Digitale Elektronik RS485 mit LoS detection und PoB möglich und sinnvoll?


von Stefan S. (neocortex)


Lesenswert?

Hi Leute,
Ich hab mal wieder ein Thema, bei dem mein Wissen - Als Informatiker der 
das nur Hobbymäßig hin und wieder mal macht - wieder an seine Grenzen 
stößt.

Ich plane ein Projekt, das ein mehr oder weniger eigenes Bussystem 
bekommen soll. Dafür hätte ich gern RS485 mit der Möglichkeit zu 
erkennen wenn kein Teilnehmer am Bus angeschlossen ist und wenn es 
möglich/sinnvoll ist Würde ich Power over Bus implementieren, damit der 
Kommunizierende Teil unabhängig vom Rest des Knotens ist. Ich hoffe es 
ist verständlich....

Damit ist das wichtigste gesagt. Damit ihr vllt meine Gedanken versteht, 
würde ich euch mal erzählen Wie ich an den Punkt gekommen bin. Es geht 
grundsätzlich darum eine Sammlung von Knoten zu haben, die auf bestimmte 
Weise miteinander reden können sollen. Wer das nicht Lesen Will, kann 
zum letzten Absatz skippen, da kommt der Teil, der für den Thread am 
wichtigsten ist!

Meine persönlichen Anforderungen sind die folgenden:
1. Automatische Enumeration von Knoten
2. Automatische Addressierung von Knoten
3. Automatische Parametrierung wenn ein Knoten ersetzt wird
4. Pseudo masterless
5. Kein fixer Addressraum

Ich hoffe die Eigenschaften sind richtig benannt und ihr versteht mich 
nicht falsch.  Teilweise sind die Features auch nur abhängig vom 
Protokoll!!! Ich hab sie nur an mein ganzes Projekt, weswegen auch der 
Anspruch an den Bus ist, dass das möglich ist.
Ich möchte meinen Bus möglichst billig haben und möglichst primitiv, 
also nehme ich UART als Basis. Das ist quasi auf jedem Mikrocontroller 
seit schon immer drauf, weswegen eine Riesige Bandbreite an Controllern 
zur Verfügung steht. Also kann potentiell jemand der später mal mein 
System erweitern möchte benutzen was er will.
Da ich es für wenig sinnvoll halte entweder RS232 Signale oder direkt 
ttl UART über lange Kabel zu schicken - mir ist klar, dass RS232 
problemlos größere Strecken schafft, aber es braucht eine Referenz zu 
Masse und ich würd gern die Möglichkeit haben den Bus galvanisch zu 
trennen. (Bitte korrigiert mich wenn man RS232 sinnvoll galvanisch 
getrennt benutzen kann!)

Da UART aber nur eine Punkt-zu-Punkt Verbindung ist muss ich da 
tricksen. Der erste und aus meiner Sicht offensichtliche Gedanke wäre 
"Es gibt einen Master und beliebig viele Slaves. Die Rx Leitungen aller 
Slaves sind verbunden und gehen auf den Tx vom Master. Mit den Tx der 
Slaves und Rx des Master identisch." Da bin ich aber an dem Problem 
hängen geblieben, dass die Slaves dafür Addressen haben müssten. Ich 
will keine Addressen vorgeben und ich will im Master kein Polling machen 
müssen, deswegen ist das Design raus.

Dann bin ich zum Schluss gekommen, dass eine Art Daisy-chain das 
sinnvollste ist. Also Master Tx -> Knoten 1 Rx ; Knoten 1 Tx -> Knoten 2 
Rx ; ... ; Knoten N Tx -> Master Rx. Das passt ganz gut, denn dann geht 
die Kommunikation immer nur in eine Richtung und ein Knoten kann 
jederzeit entscheiden Eine Nachricht an den Master abzusetzen. Das ich 
keine Kommunikation zwischen Knoten brauche ist das so vollkommen 
brauchbar für mich.
Dann hab ich drüber nachgedacht auf welchem Weg ich denn die Daten 
zwischen den Knoten übertragen möchte. Ich brauch kein Duplex, denn 
meine Kommunikation ist unidirektional. Ich brauch eine Robuste 
Kommunikation, die längere Strecken ab kann. Ich hätte gern möglichst 
Verbinder und Kabel, die verbreitet sind, damit man sie nicht von Hand 
anfertigen muss, wenn man nicht will. Am Anfang wollte ich entweder DB9 
benutzen, weil der ein Paar Pins hat, die für andere Features vllt cool 
wären, aber irgendwie ist die Zeit von Seriell Kabeln langsam vorbei und 
die sind nicht mehr so einfach zu kaufen. Dann dachte ich an 
Telefonkabel mit RJ11 Steckern, aber auch deren Zeit ist langsam vorbei, 
außerdem sind RJ11 zu RJ11 Kabel auch relativ selten.... Schlussendlich 
bin ich bei RJ45 hängen geblieben, denn es hat genug Pins um ein paar 
der Features umzusetzen, es ist verbreitet und es hat Kabel, bei denen 
Egal ist welche Seite im Sender und welche im Empfänger steckt. Außerdem 
bekommt man Ethernet Kabel an jeder Ecke und selbst das bescheidenste 
Ethernetkabel - vorausgesetzt es hat alle 4 Paare - ist mehr als gut 
genug für meinen Bus.
Da Ethernet Kabel ja schon mit twisted Pairs kommen, bin ich geneigt 
auch irgendwie ein RS485 oder so zu benutzen - Bietet sich ja geradezu 
an.

Also ist mein Plan folgender:
Ein Paar vom Master aus gesehen ist die Transmit Seite. In der Seite 
hängen die ganzen Knoten. Ein zweites Paar vom Master aus ist die 
Receive Seite und die wird entweder direkt verbunden, oder in jedem 
Knoten gepuffert - was potentiell sinn machen würde.

Dann bin ich an einem Anderen Teil hängengeblieben, der mich gestört 
hat: Wie sieht das dann beim letzten Knoten aus? Muss der Letzte Knoten 
einen physischen Schalter haben um anzuzeigen, dass er der letzte Knoten 
ist? Wie sieht das aus, wenn der verpeilter User oder jemand mit bösen 
Absichten versucht damit knoten vom Bus zu trennen? Muss ich da ein 
spezielles Kabel haben, wo ein Paar auf einen extra Stecker gelegt wird 
und im Zweifel die Stecke zwischen dem vorletzten Knoten und dem Letzten 
auch neu verlegen, wenn ich einen weiteren Knoten anhängen will?
Also hab ich mir überlegt, dass ich gern automatisch erkennen würde wenn 
ein Knoten der letzte ist und dass er dann automatisch seinen Ausgang 
mit dem Rückweg verbindet. Also am besten testen ob auf der 
Ausgangsseite des Knotens ein Busfault anliegt und dann automatisch 
umschalten. Jetzt hab ich herausgefunden, dass man Fehler im Bus bei 
RS485 "relativ einfach" erkennen kann, indem man zwei Fehlertollerante 
Receiver benutzt und bei einem die Polatität tauscht. Es muss dann wohl 
auch noch einen Abschlusswiderstand im Bus geben, damit die Busspannung 
bei Offenem Bus auch zusammenbricht, aber das ist ja kein Ding.
Im besten Fall könnte ich zwischen Bus offen und Bus kurzgeschlossen 
unterscheiden, aber das ist nicht wichtig. Wichtig ist nur, dass ich 
rausfinden kann, ob da ein valider Teilnehmer angeschlossen ist und gut.

Da dieses System aber nur funktioniert, wenn alle Teilnehmer im Bus 
Strom haben, hab ich mir überlegt wäre es vllt sinnvoll dass man über 
das Buskabel auch zumindest ein kleines Bisschen Strom mitschicken kann. 
RJ45 hat 4 Paare, also 8 Leitungen. Zwei Paare sind mit Hin- und Rückweg 
verplant, also bleiben noch zwei Paare übrig. Für ein anderes Feature 
das ich gerne umsetzen würde brauch ich das dritte Paar und dann bleibt 
noch ein einziges Paar über....
Ich hab also überlegt, ob ich mir das Paar als Versorgungsleitungen 
nehme. Dann bin ich ggf eingeschränkt in der Menge an Strom, die jeder 
Knoten ziehen kann. Viel lieber würde ich da doch Power over Bus auf den 
beiden ersten Paaren umsetzen, damit ich quasi den doppelten Querschnitt 
für meine Stromversorgung haben kann. (Vllt übertreibe ich da auch 
maßlos! Ich kann nicht gut einschätzen wie viel Strom ich über ein 
Adernpaar ziehen kann, bedenkt aber bitte das jeder Teilnehmer Strom 
ziehen soll, damit zumindest der Com Teil der Knoten immer Strom hat, 
wenn der Master Strom hat.)

Ich hab vor auf dem dritten Adernpaar noch einen Can-bus parallel laufen 
zu lassen, der aber optional ist, falls die Knoten Daten übertragen 
wollen, bei denen die Latenz wichtig ist, oder wo Knoten untereinander 
kommunizieren wollen. Wieso da Can zum Einsatz kommt und nicht auch ein 
RS485 ist ne ganz andere Geschichte und hier nicht unbedingt relevant. 
Aber auch bei Can gäbe es die Möglichkeit Power over Bus zu machen, um 
den Knoten mehr Strom zur Verfügung zu stellen, sollte das in der Praxis 
notwendig werden.

Zu meinem letzten Punkt mit dem Masterless: Es wird einen Master geben, 
der auch eine Sonderstellung einnimmt, aber die ist hauptsächlich darin, 
dass er Eine Stromquelle darstellt und dass eine normale und eine 
separate "Loop-in" Buchse bekommt, sollte man doch aus gründen physisch 
einen Ring legen wollen - auch wenn mir da momentan noch nicht klar ist, 
welcher konkrete Fall das sein soll. Ich will nur, dass die 
Kommunikation nicht daran gebunden ist, dass die Knoten von einem Master 
gepollt werden, sondern dass Knoten ggf Fehler oder Events an den Master 
melden können, ohne das auf dem Can-Bus zu tun. Der soll ja nur optional 
sein und das Feature mit dem Melden soll immer funktionieren. Desewgen 
auch die Daisychain!

Jetzt kennt ihr meine Überlegungen dazu und jetzt kommt der Teil wieso 
ich das überhaupt Frage! Glaubt ihr es ist möglich Power over Bus und 
LoS-Detection gleichzeitig zu implementieren? Wenn nicht, bleibt ja noch 
imer PoB bei CAN. Und ich würde mal gern eine Einschätzung von euch 
hören, wie viel Strom man über ein einzelnes Adernpaar eines Ethernet 
Kabels bekommt. Ich würde die Spannung dabei möglichst auf einem 
geringen Maß halten, da ich nicht sicherstellen kann, dass ich da nicht 
mal mit Schraubklemmen hantiere und mich nebenbei selbst schocke.... 
Wahrscheinlich ist es auch einfacher mit kleineren Spannungen. Mein Ziel 
wären entweder 12V oder 24V am Master, wobei ich hoffe 12V sind 
ausreichend.

von Frank K. (fchk)


Lesenswert?

Ich fange mal von hinten an.

Mit 12V kommst Du nicht weit. In der Praxis (z.B. bei ISDN oder PoE) 
werden 48V verwendet, weil das noch Kleinspannung ist und noch keinen 
Berührungsschutz benötigt. Wenn Du die Spannung halbierst, verdoppelst 
Du den Strom und vervierfachst Du die Verlustleistung im Kabel. Ganz 
blöde Idee, vor allem, wenn die Kabel länger werden

PoE+ gemäß 802.3at arbeitet mit 600mA. Dabei liegen die 48V zwischen dem 
TX-Paar und dem RX-Paar an, wobei die Einspeisung über die 
Mittelanzapfung am Übertrager erfolgt. Alternativ über die ungenutzen 
Paare 4,5 und 7,8. Pro RJ45-Pin sind das also 300mA.

Zu Deinem Bussystem hast Du Dir ja einige Gedanken gemacht. Du 
übersiehst aber den Hardwareaufwand dabei. Und Du vergisst dabei, dass 
Du alles selber machen musst und nichts fertig dazukaufen kannst, was 
woanders in Massen und damit billig produziert wird. Bei Amazon gibts 
beispielsweise ENC28J60 SPI-Ethernet-Breakout-Boards für teilweise unter 
5€. Du wirst Dein proprietäres Businterface niemals für 5€ inkl. 
Leiterplatte und Buchse etc produzieren, selbst ohne Busspeisung nicht. 
Damit sind Deine ganzen Überlegungen sinnlos.

Mit Standardlösungen kommst Du meistens besser weg.

fchk

von Nosnibor (Gast)


Lesenswert?

Stefan S. schrieb:
> 1. Automatische Enumeration von Knoten
> 2. Automatische Addressierung von Knoten
> 3. Automatische Parametrierung wenn ein Knoten ersetzt wird
> 4. Pseudo masterless
> 5. Kein fixer Addressraum

Also LocalTalk nach 30 Jahren nochmal neu erfinden? Da würde ich erstmal 
nachschauen, wie Apple das damals gemacht hat.

Außerdem: Daisy-Chain ist unpraktisch. Wenn da mal bei einem Knoten ein 
Stecker rausrutscht oder ein Kabel versagt, ist der ganze Bus tot und 
der Fehler lässt sich nur schwer eingrenzen.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Das dicke AppleTalk-Buch kann man downloaden. Lesen. verstehen und dann 
notfalls wiederkommen.

Warum machst du nicht gleich alles per CAN? Und RJ45 belegt mit eigener 
Funktionalität ist gelinde gesagt problematisch.

von Jester (Gast)


Lesenswert?

tl;dr

Trotzdem folgender Hinweis: Hast dir schon mal NMEA 0183 angeschaut? 
Kann man sich sicher was davon abkucken. Oder NMEA 2000 (basiert auf SAE 
J1939/CAN)?

von Stefan S. (neocortex)


Lesenswert?

Frank K. schrieb:
> Zu Deinem Bussystem hast Du Dir ja einige Gedanken gemacht. Du
> übersiehst aber den Hardwareaufwand dabei. Und Du vergisst dabei, dass
> Du alles selber machen musst und nichts fertig dazukaufen kannst, was
> woanders in Massen und damit billig produziert wird. Bei Amazon gibts
> beispielsweise ENC28J60 SPI-Ethernet-Breakout-Boards für teilweise unter
> 5€.

Stimmt vollkommen, aber wenn Ethernet für die Anwendung, die ich brauche 
geeignet wäre, dann hätte ich schon längst Ethernet genommen! Wenn ich 
das aber über Ethernet direkt machen wollte, dann müsste ich ein custom 
Protokoll darüber fahren und ich komme nicht mit viel weniger Aufwand 
und wahrscheinlich Kosten (Obwohl das vllt sogar noch passen könnte) 
weg, wenn ich meinen Bus so baue wie ich ihn vor habe mit Platine baue. 
Außerdem komme ich um die Kosten von einer Platine ja eh nicht rum, denn 
ich will ja keine Bus module bauen, sondern die sachen direkt in meine 
Platinenlayouts einabuen. Da müsste ich bei Ethernet auch auf ein 
bisschen mehr achten als mit dem langsameren RS485. Außerdem ist das ein 
Spaßprojekt und da kommt es mir nicht auf kosten an.

Nosnibor schrieb:
> Also LocalTalk nach 30 Jahren nochmal neu erfinden? Da würde ich erstmal
> nachschauen, wie Apple das damals gemacht hat.

Ich hab LocalTalk noch nie gehört, aber stimmt, ich kann mir das mal 
anschauen.

Nosnibor schrieb:
> Außerdem: Daisy-Chain ist unpraktisch. Wenn da mal bei einem Knoten ein
> Stecker rausrutscht oder ein Kabel versagt, ist der ganze Bus tot und
> der Fehler lässt sich nur schwer eingrenzen.

Ich hab automatische Erkennung für Busfehler! Wenn zwischen Konten 8 und 
9 jetzt plötzlich der das Kabel raus rutscht, erkennt Knoten 8 dass er 
der neue letzte Knoten ist und sagt dem Master bescheid. Dann weiß ich 
ganz genau, wo der Fehler sitzt. Ich weiß jetzt nicht, was das Problem 
da sein soll?

Abdul K. schrieb:
> Warum machst du nicht gleich alles per CAN? Und RJ45 belegt mit eigener
> Funktionalität ist gelinde gesagt problematisch.

Weil ich CAN allein für ungeeignet halte um größere Datenmengen darüber 
zu senden. Can ist bei mir aus Preisgründen eigentlich auf MCP2515 oder 
Controller mit Can eingebaut beschränkt und die können in der regel 
beide kein CAN-FD. Außerdem soll der CAN Bus ja nur optional sein für 
manche Spezialfälle, wo mein Bus zu hohe Latenzen hat. Außerdem könnte 
ich das mit CAN-FD machen, dann bleibt mir aber noch immer das Problem, 
dass ich am anfang einmal addressen vergeben muss ohne dass ich irgendwo 
im Flash ne Seriennummer abgelegt haben will. Das hab ich ausprobiert 
und zum laufen bekommen, ist mir aber zu viel aufwand das in Platformio 
immer einzurichten. Und auch hier wieder der Hinweis, dass das ein Spaß 
Projekt ist und ich wenig wert auf Sinnhaftigkeit legen möchte.

Jester schrieb:
> Trotzdem folgender Hinweis: Hast dir schon mal NMEA 0183 angeschaut?
> Kann man sich sicher was davon abkucken. Oder NMEA 2000 (basiert auf SAE
> J1939/CAN)?

Ne hab ich nicht, mach ich nach dem freundlichen Hinweis aber. Vielen 
Dank dafür!

Nema 0183 Hab ich mir grad mal auf Wikipedia angeschaut, sieht super 
interessant aus, aber Mein Protokoll sollte mehr Binärdaten haben, hat 
aber deutliche Ähnlichkeiten zu meinem prototyp protokoll spec.

Nema 2000 Hab ich auch grad mal fix auf Wikipedia angeschaut und auch 
das ist interessant, aber hilft mir augenscheinlich relativ wenig.

Ich schau mir beides aber morgen mal in ruhe ordentlich an.

von Stefan S. (neocortex)


Lesenswert?

Ich möchte aber nochmal Klarstellen, dass meine Frage hier hauptsächlich 
darauf abzielt, dass ich mir unsicher bin, ob ich LoS-Detection und PoB 
sinnvoll und stabil gleichzeitig benutzen kann.

Wenn ich PoB benutzen möchte, dann Funktioniert das ja, indem ich 
zwischen dem Transceiver und dem eigentlichen Bus Kondensatoren einbaue, 
um das Spannungsoffset auszukoppeln und Spulen jeweils zu Masse und 
V_bus um die Bussignale auszukoppeln.

Wenn ich LoS-Detection benutzen möchte, benutze ich zwei Receiver, wo 
bei einem A und B vertauscht werden und schaue wann beide eine logische 
1 liefern. Das ist in dem Fall wenn entweder der Bus offen, oder 
kurzgeschlossen ist. Meine Sorge galt dem Zustand, dasss entweder durch 
Tolleranzen, oder Alterung die Kondensatoren gegen den DC-Offset 
durchlässig werden und ich nicht mehr 0V habe wenn der Bus offen ist. 
Die Ausgänge der Knoten müssten ja für die nächsten Knoten als 
Einspeisung fungieren und haben deshalb immer Strom. Wenn ich die 
Spannung über Zwei Adernpaare einkoppel, müsste ich mir zumindest um die 
Kondensatoren keine Gedanken mehr machen.

von Stefan S. (neocortex)


Lesenswert?

Frank K. schrieb:
> Mit 12V kommst Du nicht weit. In der Praxis (z.B. bei ISDN oder PoE)
> werden 48V verwendet, weil das noch Kleinspannung ist und noch keinen
> Berührungsschutz benötigt. Wenn Du die Spannung halbierst, verdoppelst
> Du den Strom und vervierfachst Du die Verlustleistung im Kabel. Ganz
> blöde Idee, vor allem, wenn die Kabel länger werden

Ist mir vollkommen klar, aber dann bräuchte ich entweder ein 48 
Netzteil, oder ich müsste mir einen Step-UP in die Master Platine 
einbauen, um aus den 24V die ich eh überall als Versorgungsspannung 
brauche 48V zu machen. Das schien mir relativ unsinnig, zumal ich ja 
hoffentlich relativ wenig Strom brauche um nur den Mikrocontroller und 
die paar Transceiver zu versorgen.

Frank K. schrieb:
> PoE+ gemäß 802.3at arbeitet mit 600mA. Dabei liegen die 48V zwischen dem
> TX-Paar und dem RX-Paar an, wobei die Einspeisung über die
> Mittelanzapfung am Übertrager erfolgt. Alternativ über die ungenutzen
> Paare 4,5 und 7,8. Pro RJ45-Pin sind das also 300mA.

Hab nicht dran gedacht da selbst mal in den Spec zu schauen, aber vielen 
Dank, dass du das gemacht hast. Die Spannung über zwei Paare anzulegen 
ist mir garnicht in den Sinn gekommen, macht aber relativ viel sinn wenn 
ich es mir genauer überlege und im Zweifel würde ich das so machen.

von Stefan S. (neocortex)


Lesenswert?

Frank K. schrieb:
> Du wirst Dein proprietäres Businterface niemals für 5€ inkl.
> Leiterplatte und Buchse etc produzieren, selbst ohne Busspeisung nicht.
> Damit sind Deine ganzen Überlegungen sinnlos.

War auch nie mein Plan. Mein Plan war, dass ich einen Bus selbst 
entwerfe, der sich dazu eignet eine große Anzahl an Knoten und eine sehr 
große Menge an IO-Kanälen halbwegs schnell handhaben zu können und 
möglichst stabil, sowie diagnosefreundlich und idiotensicher zu sein. 
Außerdem wollte ich eine ganze Menge an Komfort Funktionen, die ganz 
viele Standard Busse heute garnicht haben. Und ich wollte einen Bus, der 
möglichst Primitiv für den Controller ist, damit ich als Demo zum 
Beispiel auch meinen Eigenbau von einem 6502 Computer als Master an den 
Bus hängen kann und weiß, dass das funktioniert.

Und zu den 5€ wollte ich noch Loswerden, dass ich wenn dann nur Ethernet 
mit PoE benutzen würde, damit ich auch das die Kommunikation mit dem 
Knoten aufrecht erhalten kann, auch wenn die eingentlichen Knoten 
inaktiv sind. Leider hab ich von den ganzen Ethernet Modulen noch kein 
einziges mit PoE für 5€ gesehen. Also kommen das auf das 5€ Modul 
nochmal mindestens 5-10€ für einen PoE-Splitter drauf und dann bin ich 
wahrscheinlich fast bei dem Preis den mein Bus umgerechnet kostet.

Auch wenn ich fürchte das klang oben alles sehr aggressiv klang, war das 
nicht so gemeint. PoE Funktioniert meines Wissens auf 100m, aber ich 
würde sagen das brauch ich nicht. Es kann natürlich auch sein, dass ich 
die Strumversorgung auch komplett über separate Kabel mache. Der Reiz 
daran war, dass man sehr kleine und stromsparende Knoten dann ja 
komplett via dem Bus versorgen könnte, wenn sie nur ein ganz einfacher 
Sensor oder ein einzelner Taster mit LED sind.

von Stefan S. (neocortex)


Lesenswert?

Auch wenn das bescheuert klingt, wollte ich ursprünglich eine Art 
Rückwandbus für eine pseudo SPS entwerfen, der alles kann was Siemens 
und Co können, aber in so einfach, dass ein Atmega, oder rein großer 
Attiny in einem Knoten ausreicht. Ich weiß, dass es da wahrscheinlich 
bessere Wege für gibt, aber ich wollte halt mein eigenes Ding entwerfen.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Man muß das Datensignal nicht über Kondensatoren einkoppeln. Das analoge 
Telefonsystem macht es über Trafos.

Du hast zu wenig Hintergrundwissen und kein richtiges Konzept über den 
gewünschten Funktionsumfang.

Vielleicht wäre Funk die bessere Lösung. Ist heutzutage sogar oft 
billiger. LoRa


Außerdem hattest du doch schonmal so einen Thread angefangen. Ich 
erinnere mich dran.

von Stefan S. (neocortex)


Lesenswert?

Also Die Hardware sieht dann im groben so aus, dass es einen Eingang und 
einen Ausgang gibt. LoS-Detection braucht nur der Ausgang, also sollten 
drei Transceiver genügen. Wenn ich mir den günstigsten Chip bei reichelt 
hole, der einen Transceiver hat, kostet der 1€ und wenn ich mir die 
günstigsten Ethernet Buchsen ohne Übertrager hole, kosten die je 1.50€. 
Da komme ich auf 6€ und da der Kram ja eh auf einer anderen Platine 
integriert wird brauch ich die hier nicht mitrechnen. Okay, ich könnte 
jetzt den rs485 Repeater mitrechnen, den ich im Rückweg haben würde, 
aber das hab ich mal vernachlässigt, da ja nicht jeder Knoten einen 
braucht.

von Frank K. (fchk)


Lesenswert?

Stefan S. schrieb:
> Ich weiß, dass es da wahrscheinlich
> bessere Wege für gibt, aber ich wollte halt mein eigenes Ding entwerfen.

Ich denke, das ist die eigentliche Hauptmotivation. Du hast da nämlich 
beispielsweise einige argumentative Brüche zwischen "Ich möchte meinen 
Bus möglichst billig haben" und "Außerdem ist das ein Spaßprojekt und da 
kommt es mir nicht auf kosten an.".

Um Dir mal noch einen alternativen Weg aufzuzeigen: Sagt Dir die 
20mA-Stromschleife (TTY) noch was, oder bist Du dafür zu jung?

Stell Dir einen Stromkreis vor, in den alle Knoten eingeschleift sind. 
Ein Netzteil speist einen Strom(!) von 20mA ein (die Spannung wird 
automatisch nachgeregelt, bis der Strom auf 20mA ist). Jeder Knoten kann 
den Strom detektieren (z.B. über die LED eines Optokopplers), und jeder 
Knoten kann den Stromkreis (kurz) unterbrechen (z.B. über den 
Fototransistor eines zweiten Optokopplers). Jetzt definiere 1 als "Strom 
an", 0 als "Strom aus" und hänge die beiden Optokoppler an einen UART. 
Fertig ist die Stromschleife. Jeder Knoten empfängt alles, und jeder 
kann senden (aber nur einer zur Zeit). Funktioniert mit Klingeldraht 
über Kilometer. Der Leitungswiderstand spielt keine Rolle, weil das 
Netzteil ja den Strom auf 20mA regelt.

Das gibts seit den 60'ern und wurde für Fernschreiber, Drucker, 
Terminals und sonstiges serielles verwendet. Galvanische Trennung 
bekommst Du quasi geschenkt.

In der Industrie wird etwas ähnliches zur Übertragung analoger Messwerte 
verwendet, wobei dort der Stromkreis nicht unterbrochen wird, sondern 
der Innenwiderstand des Sensors gesteuert wird. Der Sensor versorgt sich 
mit dem Schleifenstrom auch selber. (4-20mA Stromschleife)

fchk

von Stefan S. (neocortex)


Lesenswert?

Abdul K. schrieb:
> Man muß das Datensignal nicht über Kondensatoren einkoppeln. Das analoge
> Telefonsystem macht es über Trafos.

Ich werde Wahrscheinlich die Chips von TI verwenden und TI gibt in einer 
Anwendungsnotiz explizit die Empfehlung das via Kondensatoren und Spuen 
zu Masse und V_bus zu tun. und wenn der Hersteller das so empfiehlt, 
wieso sollte ich das anders machen?
Natürlich könnte ich das acuh via Übertragern machen, aber warum sollte 
ich? Zu Trafos und Spulen hab ich von TI fertige Formeln und zu den 
Trafos nicht.

Abdul K. schrieb:
> Vielleicht wäre Funk die bessere Lösung. Ist heutzutage sogar oft
> billiger. LoRa

Funk ist ganz explizit keine Lösung, da ich explizit an einem 
verkabelten Bus arbeite. Jedes Funksystem Bräuchte außerdem wieder 
inhärent irgendwelche addressen von Anfang an und du erinnerst dich, 
dass das nicht mit meinen Anforderungen vereinbar ist. Außerdem geht es 
darum einen Bus zu entwerfen und nicht darum einen Bus zu finden.

Abdul K. schrieb:
> Du hast zu wenig Hintergrundwissen und kein richtiges Konzept über den
> gewünschten Funktionsumfang.

Den habe ich sehr genau, auch wenn mein Hintergrundwissen über alle 
Symmetrisch übertragenen Busse mit Spannungstransport, die es in den 
letzten 100 Jahren gab vielleicht ein bisschen zu wünschen übrig lässt. 
Außerdem wäre es - finde ich ein bisschen vermessen zu erwarten, dass 
ein Informatiker, der das ganze in seiner Freizeit zum Spaß tut das 
selbe Hintergrundwissen besitzt, das zum Beispiel ein erfahrener 
Ingenieur der das schon seit 40 Jahren macht. Du scheinst aber in diesem 
Fall viel mehr zu wissen, also bitte erleuchte mich doch einfach, 
anstatt mir Unwissenheit vorzuwerfen.

Abdul K. schrieb:
> Außerdem hattest du doch schonmal so einen Thread angefangen. Ich
> erinnere mich dran.

Da hatte ich aber keinen Plan und kein Konzept. Dieses Mal hab ich 
deutlich mehr plan und mein Protokoll ist featurecomplete und 
abgeschlossen. Da diese Teile aber nicht relevant sind, hab ich sie hier 
nicht erwähnt. Damals wardas projekt und der kontext ein anderer

von Peter D. (peda)


Lesenswert?

RS-485 würde ich nichtmal mehr mit der Kneifzange anfassen, erst recht 
nicht für Neuentwicklungen.
CAN ist robust und vor allem super einfach. Die wichtigsten Sachen sind 
schon alle implementiert, ohne eine Zeile Software dafür schreiben zu 
müssen. Auch große Datenmengen (Bootloader) sind überhaupt kein Problem, 
man führt einfach eine Paketnummer mit. Der Hauptvorteil ist der echte 
Multimaster, jeder darf wirklich zu jeder beliebigen Zeit lossenden. Die 
Hardware kümmert sich intern um Arbitration und Retry.

RS-485 über 2 Drähte ist eine Illusion. Kann funktionieren, muß aber 
nicht. Der GND-Versatz darf maximal +/-5V betragen, damit es noch 
klappt. Ist bei CAN genau das gleiche.

von Jester (Gast)


Lesenswert?

Abdul K. schrieb:
> Du hast zu wenig Hintergrundwissen und kein richtiges Konzept über den
> gewünschten Funktionsumfang.

In der Findungsphase, und in der befindet sich der TO offensichtlich, 
würde ich mir bestehende Verfahren anschauen - inclusive deren Anwendung 
und Historie.

Das frisst zwar Zeit, was aber bei einem Hobbyprojekt nicht schlimm sein 
sollte, aber es macht auch Spaß. Dabei lernt man zu verstehen, wieso 
LAYERs so wichtig sind (z.B. https://en.wikipedia.org/wiki/OSI_model) - 
und ganz nebenbei auch, Probleme wie das vom TO skizzierte, sauber zu 
strukturieren.

Ethernet (https://en.wikipedia.org/wiki/Ethernet) stammt ursprünglich 
von Xerox und sollte die Idee eines ‚shared mediums‘ verwirklichend: Die 
„Vampir-Technk“ von 10-base-5, bei der ein physikalisch ein Kabel 
angebohrt wird, macht das „begreifbar“. Ansonsten siehe auch  ALOHAnet 
(eine Art Paketradio).

NMEA 0183 ist eine Schnittstelle, die sehr erfolgreich in der 
Schifffahrt eingesetzt wird. Das können kleine Segeljachten sein, um 
z.B. Tochter-Anzeigen im Cockpit anzusteuern - geht aber hoch bis 
Containerschiffe zum Vernetzten von Sensorik, Kartenplotter, 
Radaranlage, Navigationsempfänger jeglicher Couleur...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter D. schrieb:
> CAN ist robust und vor allem super einfach.
Er hat alles drin, was man zum Betreiben von Maschinen und sogar 
kompletten Fertigungsstraßen braucht. Und das Beste: das, was einen Bus 
kompliziert macht, nämlich die Arbitrierung und die Fehlerhandlung und 
sogar die Fehlerbehebung ist in die Hardware eingebaut und millionenfach 
erprobt.

Abdul K. schrieb:
> Du hast zu wenig Hintergrundwissen und kein richtiges Konzept über den
> gewünschten Funktionsumfang.
Und eines kommt dazu: in einem wirklich zuverlässig funktionierenden 
Bussystem stecken zigtausende Ingenieursstunden. Das sollte man sich mal 
richtig bewusst machen, wenn man einfach so von ganz vorne anfangen 
will...

Zusammenfassend kann man sagen:
> RS485 mit LoS detection und PoB möglich und sinnvoll?
Möglich: ja.
Sinnvoll: nein.

: Bearbeitet durch Moderator
von Stefan S. (neocortex)


Lesenswert?

Peter D. schrieb:
> CAN ist robust und vor allem super einfach. Die wichtigsten Sachen sind
> schon alle implementiert, ohne eine Zeile Software dafür schreiben zu
> müssen. Auch große Datenmengen (Bootloader) sind überhaupt kein Problem,
> man führt einfach eine Paketnummer mit. Der Hauptvorteil ist der echte
> Multimaster, jeder darf wirklich zu jeder beliebigen Zeit lossenden. Die
> Hardware kümmert sich intern um Arbitration und Retry.

Ich hab nie behauptet, dass CAN nicht ausreicht, aber ich möchte das 
halt so bauen, da ich zum Beispiel keine Lust hätte mir einen Bit-Bang 
Treiber für SPI zu schreiben, damit ich can machen kann auf einem 6502. 
Aber Das ist ja nicht Hauptanwendung, also nicht so wichtig. Der Bus wie 
ich ihn grad geplant hat braucht garkeine Arbitration, denn die 
Kommunikation ist unidirektional so dass kollisionen ausgeschlossen 
sind.

Peter D. schrieb:
> RS-485 über 2 Drähte ist eine Illusion. Kann funktionieren, muß aber
> nicht. Der GND-Versatz darf maximal +/-5V betragen, damit es noch
> klappt. Ist bei CAN genau das gleiche.

Scheint aber in der Praxis ganz gut zu funktionieren, wenn ich mal si in 
richtung industrie schaue.

Jester schrieb:
> In der Findungsphase, und in der befindet sich der TO offensichtlich,
> würde ich mir bestehende Verfahren anschauen - inclusive deren Anwendung
> und Historie.

Vielen dank, dass du es mal augesprochen hast!

Jester schrieb:
> Das frisst zwar Zeit, was aber bei einem Hobbyprojekt nicht schlimm sein
> sollte, aber es macht auch Spaß. Dabei lernt man zu verstehen, wieso
> LAYERs so wichtig sind (z.B. https://en.wikipedia.org/wiki/OSI_model) -
> und ganz nebenbei auch, Probleme wie das vom TO skizzierte, sauber zu
> strukturieren.

Stimmt, ich hab mir verschiedene Dinge aus dem Smart home und 
Industriebereich bereits angeschaut, die alle ähnlich funktionieren und 
nicht besonders gut in meine Pläne passen. Unter anderem CAN-Open, 
Ethercat, Modbus rtu, modbus tcp, Profibus dp, profinet, KNX, dieses 
komische Protokoll das Eltako benutzt um ihren enocean bus zu bauen und 
noch andere.
Die sind alle sehr interessant, aber ich glaub die sind alle nicht im 
Ansatz was ich suche. Leider sind die ganzen Rückwandbusse von den 
SPS-Systemen alle Proprietär und deshalb nicht zugänglich. Diese Busse 
können ganz viel von dem was ich will.

von Stefan S. (neocortex)


Lesenswert?

Lothar M. schrieb:
> Er hat alles drin, was man zum Betreiben von Maschinen und sogar
> kompletten Fertigungsstraßen braucht. Und das Beste: das, was einen Bus
> kompliziert macht, nämlich die Arbitrierung und die Fehlerhandlung und
> sogar die Fehlerbehebung ist in die Hardware eingebaut und millionenfach
> erprobt.

Vollkommen richtig!

Lothar M. schrieb:
> Und eines kommt dazu: in einem wirklich zuverlässig funktionierenden
> Bussystem stecken zigtausende Ingenieursstunden. Das sollte man sich mal
> richtig bewusst machen, wenn man einfach so von ganz vorne anfangen
> will...

Ich weiß, mir geht es bei diesem Projekt aber ausdrücklich um die 
Entwicklung und ein besseres Verständnis von anderen Bussen. Wenn dabei 
langfristig ein halbwegs robustes System raus kommt das ich in einem 
anderen Projekt recyclen kann, ist es super. Mir persönlich geht es aber 
auch darum einen kompletten Software-Stack und alles zu entwickeln um am 
ende einen raspberry Pi Hat zu haben, der mit ein paar demo boards reden 
kann.
Und wenn das eh ein Spaß und engineering Projekt ist, dann finde ich das 
muss nicht unbedingt sinn machen, oder perfekt sein.

Lothar M. schrieb:
> Zusammenfassend kann man sagen:
>> RS485 mit LoS detection und PoB möglich und sinnvoll?
> Möglich: ja.
> Sinnvoll: nein.

Hast du da schonmal eine Anwendung gesehen, wo das gemacht wurde? Ich 
hab ums verrecken keine Einzige gefunden. Mich würde mal interessieren, 
wie das da gemacht wurde, wenn es eine gibt. Ansonsten freue ich mich 
sehr wenn ihr mir interessante oder exotische Busse nennt, damit ich ein 
bisschen mehr stöbern kann.

von Frank K. (fchk)


Lesenswert?

Stefan S. schrieb:

> Ich hab nie behauptet, dass CAN nicht ausreicht, aber ich möchte das
> halt so bauen, da ich zum Beispiel keine Lust hätte mir einen Bit-Bang
> Treiber für SPI zu schreiben, damit ich can machen kann auf einem 6502.

Musst Du ja auch nicht. Nimm einen NXP SJA1000 und hänge ihn an deinen 
6502-Prozessorbus. Der SJA1000 kann sowohl den Intel-Bus (!RD, !WR) als 
auch den Motorola/MOS Bus (R/!W, E/PHI2). Dann kannst Du direkt auf die 
Register zugreifen.

> Peter D. schrieb:
>> RS-485 über 2 Drähte ist eine Illusion. Kann funktionieren, muß aber
>> nicht. Der GND-Versatz darf maximal +/-5V betragen, damit es noch
>> klappt. Ist bei CAN genau das gleiche.
>
> Scheint aber in der Praxis ganz gut zu funktionieren, wenn ich mal si in
> richtung industrie schaue.

In der Praxis wird in einem solchen Fall ein gemeinsames 
Spannungspotential auf andere Weite sichergestellt, um den Common-Mode 
Bereich eben nicht zu überschreiten.

fchk

von Stefan S. (neocortex)


Lesenswert?

Frank K. schrieb:
> In der Praxis wird in einem solchen Fall ein gemeinsames
> Spannungspotential auf andere Weite sichergestellt, um den Common-Mode
> Bereich eben nicht zu überschreiten.

In der Regel entweder über die Masse der Versorgungsspannung, oder über 
PE (bei letzterem bin ich unsicher). Bei längeren Strecken wird glaub 
ich auch öfter eine extra Masseleitung oder so gelegt. Viele Geräte die 
realistisch nur in einem Schaltschrank auf kurzen Strecken verwendet 
wird - grad wenn sie günstiger sind - komplett auf die kompensation von 
common mode verzichtet. Zumindest hab ich schon ein paar günstigere 
auseinandergenommen und da war nix.

Frank K. schrieb:
> Musst Du ja auch nicht. Nimm einen NXP SJA1000 und hänge ihn an deinen
> 6502-Prozessorbus. Der SJA1000 kann sowohl den Intel-Bus (!RD, !WR) als
> auch den Motorola/MOS Bus (R/!W, E/PHI2). Dann kannst Du direkt auf die
> Register zugreifen.

Mega! Vielen dank für den Tipp! Nach sowas hab ich gesucht. Ich hab auch 
schon mit IsysBus, respektive Asysbus gespielt, der ja nur auf can 
aufbaut. Ich bin ein Mega Fan von CAN, aber für das Projekt mit meinem 
eigenen Bus wollte ich mich explizit nicht auf CAN stützen und hatte 
mich deshalb ein bisschen auf Ethercat gestützt. Ethercat macht ja ein 
ähnliches Daisychaining mit einem Loop, um große Datenmengen in echtzeit 
austauschen zu können.

von c-hater (Gast)


Lesenswert?

Stefan S. schrieb:

> Ich plane ein Projekt, das ein mehr oder weniger eigenes Bussystem
> bekommen soll. Dafür hätte ich gern RS485 mit der Möglichkeit zu
> erkennen wenn kein Teilnehmer am Bus angeschlossen ist und wenn es
> möglich/sinnvoll ist Würde ich Power over Bus implementieren, damit der
> Kommunizierende Teil unabhängig vom Rest des Knotens ist. Ich hoffe es
> ist verständlich....

Ist es nicht wirklich. Wenn PoB implementiert ist/wird, ist die 
Detektion, dass es keinen Busteilnehmer gibt, doch recht trivial und von 
Hause aus sehr gut abgetrennt von der eigentlichen Kommunikation.

> Meine persönlichen Anforderungen sind die folgenden:
> 1. Automatische Enumeration von Knoten
> 2. Automatische Addressierung von Knoten
> 5. Kein fixer Addressraum

Das ist relativ trivial. Das Protokoll muss einfach nur nur die Lücken 
vorsehen, in denen sich neue Busgeräte "melden" können. Und die 
Adressierung überlässt man Meister Zufall. Das allerdings ist dann doch 
ein Problem, zumindest für manche Busteilnehmer. Wenn die nicht auf 
extern eingespeisten Zufall (z.B. aus unique IDs des Chipherstellers) 
zurückgreifen können, dann wird es, je nach konkreter Hardware, schnell 
recht schwierig, in akzeptabler Zeit hinreichend Entropie zu gewinnen, 
um eine wirklich zufällige Adesse zu generieren.

> 3. Automatische Parametrierung wenn ein Knoten ersetzt wird

Das ist schwierig bis unmöglich. Dazu müsste es nämlich einen 
Mechanismus geben, der Art und Rolle des Knoten bestimmen kann. Art geht 
noch, der Knoten kann ja bei der Anmeldung neben seiner Adresse 
announcen, was er ist und was er kann. Dann ist es recht einfach, 
gleichartige Nodes zu Gruppen zusammen zu fassen. Aber die Rolle? Woher 
soll irgendwer (incl. der Node selber) die denn kennen?

Beispiel: Fensterkontakt. Kann sagen: "ich habe Adresse 0x47110815" 
(natürlich zufällig selber ausgewählt) und kann sagen "ich bin ein 
Kontaktsensor mit einem Kontakt-Kanal". Aber die Node kann nicht sagen: 
"Es handelt sich um einen Fensterkontakt" und sie kann schon garnicht 
sagen "Und der ist am mittleren Fenster im Wohnzimmer". Woher soll sie 
das, zum Teufel wissen? Und woher soll sie (oder irgendwer sonst) 
wissen, dass sie eine gleichartige defekte Node ersetzt, die früher(tm) 
mal unter Adresse 0x08154711 zu erreichen war?

Das kann nicht funktionieren...

> 4. Pseudo masterless

...insbesondere nicht unter dieser Voraussetzung.

Also Fazit: Du solltest erstmal lernen, logisch zu denken, bevor du dich 
an Protokolldesign wagst...

von Frank K. (fchk)


Lesenswert?

Stefan S. schrieb:

> aufbaut. Ich bin ein Mega Fan von CAN, aber für das Projekt mit meinem
> eigenen Bus wollte ich mich explizit nicht auf CAN stützen und hatte
> mich deshalb ein bisschen auf Ethercat gestützt. Ethercat macht ja ein
> ähnliches Daisychaining mit einem Loop, um große Datenmengen in echtzeit
> austauschen zu können.

Ja, und warum nimmst Du das nicht? Der Master braucht nur einen normalen 
Ethernet-Controller, und Ethercat Slave Controller gibts zu kaufen:

https://www.microchip.com/en-us/products/high-speed-networking-and-video/ethernet/ethercat-technology-solutions

fchk

von Peter D. (peda)


Lesenswert?

c-hater schrieb:
> Das ist schwierig bis unmöglich. Dazu müsste es nämlich einen
> Mechanismus geben, der Art und Rolle des Knoten bestimmen kann.

Das ist ein häufiges Problem.
Wir haben z.B. ein Gerät mit 16 Steckplätzen, in die z.B. 3,5kV-Module 
gesteckt werden können. Natürlich weiß kein Modul, welche Linse es 
versorgt. Daher gibt es erstmal eine 4Bit-Slotadresse, mit der die 
Haupt-CPU die Module zuordnen kann.
Weiterhin ist im EEPROM der Haupt-CPU der Hardwaretyp hinterlegt, wie 
alle Ausgänge verdrahtet und angeschlossen sind, welche aufeinander 
floaten usw. Erst dann kann die Steuersoftware alle Module richtig 
zuordnen.

Ein gleichartiges Problem hat man auch mit 1-Wire Sensoren DS18B20. 
Jeder Sensor hat seine eigene Adresse. Damit ist aber noch lange nicht 
bekannt, welcher Sensor an welcher Meßstelle montiert ist. Um dieses 
Problem zu lösen, gibt es 2 Möglichkeiten. In einer Konfigurationsphase 
wird jedem Sensor eine Meßstellennummer zugeordnet. Entweder der Sensor 
speichert diese Nummer in seinem EEPROM oder der Master legt eine 
Tabelle aller Adressen an, welche Meßstelle ihnen zugeordnet ist.

: Bearbeitet durch User
von Stefan S. (neocortex)


Lesenswert?

c-hater schrieb:
> Ist es nicht wirklich. Wenn PoB implementiert ist/wird, ist die
> Detektion, dass es keinen Busteilnehmer gibt, doch recht trivial und von
> Hause aus sehr gut abgetrennt von der eigentlichen Kommunikation.

Der Teil, der als Stromquelle bei PoB funktioniert kann ja nicht ohne 
weiteres feststellen, ob da ein Teilnehmer angeschlossen ist, es sei 
denn ich messe wie viel Energie der bus abnimmt.

c-hater schrieb:
> Das ist relativ trivial. Das Protokoll muss einfach nur nur die Lücken
> vorsehen, in denen sich neue Busgeräte "melden" können. Und die
> Adressierung überlässt man Meister Zufall. Das allerdings ist dann doch
> ein Problem, zumindest für manche Busteilnehmer. Wenn die nicht auf
> extern eingespeisten Zufall (z.B. aus unique IDs des Chipherstellers)
> zurückgreifen können, dann wird es, je nach konkreter Hardware, schnell
> recht schwierig, in akzeptabler Zeit hinreichend Entropie zu gewinnen,
> um eine wirklich zufällige Adesse zu generieren.

Das ist ein gelöstes Problem bei mir. Die knoten sind in einer 
Dasychain. Der Knoten testet via LoS ob da noch ein weiterer Knoten ist. 
Der Master bekommt immer die ID 0 und er startet einen scan. Der erste 
Knoten empfängt den Scan, erhöht ein Feld, das sich count nennt, gibt 
sich die ID 1 und hängt seine Typ-ID und ein Statusbyte an den Scan an. 
Jeder andere Knoten tut das gleiche und am ende bekommt der Master eine 
Liste von den Typen aller Knoten.

c-hater schrieb:
> Das ist schwierig bis unmöglich. Dazu müsste es nämlich einen
> Mechanismus geben, der Art und Rolle des Knoten bestimmen kann. Art geht
> noch, der Knoten kann ja bei der Anmeldung neben seiner Adresse
> announcen, was er ist und was er kann. Dann ist es recht einfach,
> gleichartige Nodes zu Gruppen zusammen zu fassen. Aber die Rolle? Woher
> soll irgendwer (incl. der Node selber) die denn kennen?

Es geht um den Ersatz von ausgefallenen Knoten. Wenn der Knoten ersetzt 
wird, drückt man am Master einen Knopf um einen neuen Scan zu starten. 
Bei dem neuen Knoten kann man dann aus dem Statusbyte lesen, dass dieser 
noch nicht parametriert ist und der Master kann die Parameter vom alten 
Knoten an dieser Addresse schreiben.

Außerdem gibt es doch systeme, die das können. Es gibt da Busse, wo zwar 
jeder Knoten in hardware eine einzigartige ID hat, aber wo der Master 
erkennen kann, wenn ein Knoten ausgetauscht wurde und die Parameter des 
alten knotens auf den neuen Läd. Ich will jetzt nix falsches sagen, aber 
ich glaub das war entweder ASi, oder Hart.

Peter D. schrieb:
> Das ist ein häufiges Problem.
> Wir haben z.B. ein Gerät mit 16 Steckplätzen, in die z.B. 3,5kV-Module
> gesteckt werden können. Natürlich weiß kein Modul, welche Linse es
> versorgt. Daher gibt es erstmal eine 4Bit-Slotadresse, mit der die
> Haupt-CPU die Module zuordnen kann.
> Weiterhin ist im EEPROM der Haupt-CPU der Hardwaretyp hinterlegt, wie
> alle Ausgänge verdrahtet und angeschlossen sind, welche aufeinander
> floaten usw. Erst dann kann die Steuersoftware alle Module richtig
> zuordnen.

Ist das bei dir dann nur Teil vom Setup Prozess?

Peter D. schrieb:
> Ein gleichartiges Problem hat man auch mit 1-Wire Sensoren DS18B20.
> Jeder Sensor hat seine eigene Adresse. Damit ist aber noch lange nicht
> bekannt, welcher Sensor an welcher Meßstelle montiert ist. Um dieses
> Problem zu lösen, gibt es 2 Möglichkeiten. In einer Konfigurationsphase
> wird jedem Sensor eine Meßstellennummer zugeordnet. Entweder der Sensor
> speichert diese Nummer in seinem EEPROM oder der Master legt eine
> Tabelle aller Adressen an, welche Meßstelle ihnen zugeordnet ist.

Jap, das muss man bei mir im initialen Setup auch machen. Addition von 
Knoten mitten im Bus kann ich erkennen, wenn sich Count und die 
Reihenfoge der Knoten ändern. Dann muss man dem neuen Knoten ja noch 
immer Parameter geben, daber es sollte kein Problem sein im Master das 
Mapping der Knoten so zu halten, dass es unabhängig von der 
automatischen ID ist. Im Setup kann man ja jedem Knoten eine eindeutige 
ID zuweisen, mit der man dieses Mapping machen kann.

Frank K. schrieb:
> Ja, und warum nimmst Du das nicht? Der Master braucht nur einen normalen
> Ethernet-Controller, und Ethercat Slave Controller gibts zu kaufen:

Ich möchte meinen eigenen Bus entwickeln, wieso sollte ich da was 
fertiges nehmen?

von Stefan S. (neocortex)


Lesenswert?

Mein Design stützt sich heftig auf einen intelligenten Master, der im 
Idealfall ganz viel kann.
Mein Master hat eine Liste von allen Kontentypen und deren Settings und 
kann vorausgesetzt genug Speicher eine Belibige Anzahl an Configs 
speichern. Der Master kann den Knoten eindeutige IDs zuweisen. Der 
Master Startet den Scan und weiß welcher Knoten welche Aufgabe erfüllt. 
Der Master baut ein Abbild der Daten von allen Knoten. Mein geplanter 
Master ist ein Raspberry PI mit einem Selbstentworfenen Hat, wo ein 
Raspberry Pi Pico oder ein kleiner FPGA drauf sitzt, der Teile der 
niederen Funktionen realisiert, denn der Pi hat zwar Rechenleistung satt 
für meine Anwendung, aber leider keine Möglichkeit die Gpios auf 
Hardware auszulagern, weswegen ich den pico oder den FPGA hab.

Auf dem Pi soll ein Kerneltreiber laufen, um eine Verbindung zum Hat 
aufzubauen. Die eigentliche Funktion macht ein userspace daemon, der 
alles an Intelligenz hat. Der Teil ist kein Problem, denn das ist für 
mich als Informatiker ja mein Ding.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Eigentlich ist das gar kein Bus im eigentlichen Sinne. Dein Konzept 
funktioniert nur mit einer recht begrenzten Anzahl von Slaves. Wenn das 
so ist, kann man es so machen. Bei vielen Slaves wird die Frage Ausfall 
eines Slaves und Hotplug immer relevanter.

Da gibt's doch das Konzept Java Bean oder so. Kannste dir mal ansehen.

Wenn die Slaves nicht im gleichen Gehäuse/Gerät sitzen, auf jeden Fall 
galvanische Trennung.

von Stefan S. (neocortex)


Lesenswert?

Abdul K. schrieb:
> Eigentlich ist das gar kein Bus im eigentlichen Sinne. Dein Konzept
> funktioniert nur mit einer recht begrenzten Anzahl von Slaves. Wenn das
> so ist, kann man es so machen. Bei vielen Slaves wird die Frage Ausfall
> eines Slaves und Hotplug immer relevanter.

Wieso sollte es nur mit einer begrenzten Anzahl funktionieren? Es ist 
auf jeden Fall kein klassicher wo alle Teilnehmeer an einem einzigen 
Satz Leitungen hängen, aber im Grunde ist es ja nur eine Art ethercat 
nur ohne Ethernet und mit rs485. Michn hat bei den Bussen Von den SPS 
systemen Gestürt, dass die zum beilspiel maximal 32 Knoten mit insgesamt 
120 Kanälen oder so können, also wollte ich einen Bus bauen, der diese 
Begrenzung in der Theorie nicht hat und ich weiß, dass die Zykluszeit 
mit jedem Knoten ein bisschen langsamer wird, aber das kann ich in Kauf 
nehmen. Bei einem kleinen Test mit Lauter Arduinos und einer manuell 
verkabelten Vorstufe von meiner enumeration hab ich mit 24Byte Nutzdaten 
pro knoten und 32 Knoten eine Zykluszeit pro Nachricht von 100ms 
gemessen. Das klingt für mich doch ganz gut, vor allem wenn ich bedenke 
dass nur die wenigsten Knoten wirklich 24Byte Nutzdaten haben, die 
Zyklisch abgefragt werden sollen. In der Praxis, wenn Das von einem 
Raspi Pico, mit dma und pio, oder einem FPGA gehandhabt wird, denke ich 
geht das auch noch ein bisschen runter.

Abdul K. schrieb:
> Wenn die Slaves nicht im gleichen Gehäuse/Gerät sitzen, auf jeden Fall
> galvanische Trennung.

So war der Plan

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Wieso sollte es nur mit einer begrenzten Anzahl funktionieren?

Weil Slaves auch mal ausfallen.

von Bauform B. (bauformb)


Lesenswert?

Stefan S. schrieb:
> Das klingt für mich doch ganz gut, vor allem wenn ich bedenke
> dass nur die wenigsten Knoten wirklich 24Byte Nutzdaten haben, die
> Zyklisch abgefragt werden sollen.

Warum will man mit so einem "Bus" noch zyklisch abfragen? Man muss ja 
nicht so harte Worte wie "Multi-Master" verwenden, aber das Ding ist 
kollisions*frei*, das sollte man nutzen.

Ausgefallene Knoten könnte man mit einem Relais automatisch überbrücken, 
zumindest bei manchen Fehlerursachen. In dem Zusammenhang sollte man 
auch nochmal einen Ring in Erwägung ziehen, der spart nämlich 
Relaiskontakte ;)

Ja, ein Ring kostet ein langes Kabel mehr, aber man spart ein Aderpaar 
und in jedem Knoten einen Transceiver. Alle Knoten wären gleich, die 
Unterscheidung letzter-in-der-Kette entfällt. Die Stromversorgung könnte 
(sollte) von beiden Enden eingespeist werden.

Vielleicht kann man sogar entscheiden, ob eine Unterbrechung einer Kette 
oder eines Rings schlimmere Folgen hat. Lokalisieren lässt sie sich in 
beiden Fällen ziemlich einfach.

von Stefan S. (neocortex)


Lesenswert?

Bauform B. schrieb:
> Ausgefallene Knoten könnte man mit einem Relais automatisch überbrücken,
> zumindest bei manchen Fehlerursachen. In dem Zusammenhang sollte man
> auch nochmal einen Ring in Erwägung ziehen, der spart nämlich
> Relaiskontakte ;)

Sowas hatte ich vor, zumindest hab ich es mir überlegt, nachdem ich 
meinen Original Post geschrieben hatte. Mein erster Plan war, dass die 
Kommunikation immer von einem dedizierten Mikrocontroller, oder FPGA 
übernommen wird und dass dieser via PoB immer mit Strom versorgt wird 
das mit dem Umschalten tun kann. Dann müsste der halt nur noch von den 
eigentlichen Knoten galvanisch getrennt werden und alles wäre gut.

Bauform B. schrieb:
> Warum will man mit so einem "Bus" noch zyklisch abfragen? Man muss ja
> nicht so harte Worte wie "Multi-Master" verwenden, aber das Ding ist
> kollisions*frei*, das sollte man nutzen.

Die Zyklische Abfrage ist auch ein Weg, damit der Master regelmäßig 
Daten an die Clients schickt und variiert in seiner Frequenz. Damit sich 
mein Master grundsätzlich ein bisschen vereinfacht, hab ich mir 
überlegt, dass es nur zwei arten von Nachrichten geben soll.
Alerts - Requests, deren ID der Master nach dem Startup mal festgelegt 
hat
Requests - Requests haben eine ID, die der Master Festlegt und wo der 
Master darauf wartet, dass eine Nachricht mit dieser ID rein kommt.
Der Master soll entweder alle 60 Sekunden einen Status Request starten, 
indem ein Allgemeiner Status der Knoten angefragt wird, zum Beispiel um 
Sensoren Abzufragen die Momentan nicht mit Logik aktiv benutzt werden, 
zu schauen ob der Bus noch intakt ist, ob die Knoten noch alle antworten 
und um zum Beispiel neue Configs zu pushen. Alles wo Logik dran hängt, 
bekommt einen eigenen Alert, der bei einer Änderung den Slave sofort 
einen anfrage losschicken lässt.

Bauform B. schrieb:
> Ja, ein Ring kostet ein langes Kabel mehr, aber man spart ein Aderpaar
> und in jedem Knoten einen Transceiver. Alle Knoten wären gleich, die
> Unterscheidung letzter-in-der-Kette entfällt. Die Stromversorgung könnte
> (sollte) von beiden Enden eingespeist werden.

Ich hatte mir das überlegt, dass der Ring bei bedarf auch physisch auf 
einem Kabel liegen kann, damit ich mir - Sollte ich mir das überlegen - 
auch Knoten bauen kann, die auf einer Hutschiene sitzen und es wäre 
doof, wenn man dann ein Kabel parallel legen muss. Oder damit man bei 
bedarf einfach einen Stich legen kann, ohne zwei kabel ziehen zu müssen. 
Dann würde es ja im zweifel reichen, wenn irgenwo schon ein CAT-Kabel 
liegt...

Bauform B. schrieb:
> Vielleicht kann man sogar entscheiden, ob eine Unterbrechung einer Kette
> oder eines Rings schlimmere Folgen hat. Lokalisieren lässt sie sich in
> beiden Fällen ziemlich einfach.

Ich bin mir grad nicht sicher, dass wir vom selben reden, aber jap, das 
wäre kein relativ einfach möglich.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan S. schrieb:
> Bei einem kleinen Test mit Lauter Arduinos und einer manuell verkabelten
> Vorstufe von meiner enumeration hab ich mit 24Byte Nutzdaten pro knoten
> und 32 Knoten eine Zykluszeit pro Nachricht von 100ms gemessen. Das
> klingt für mich doch ganz gut
Damit kannst du bestenfalls schnarchlangsame Lichttaster abfragen oder 
Temperaturen übertragen. Für richtige Steuerungstechnik ist so ein Bus 
nutzlos.

Stefan S. schrieb:
> Der Master soll entweder alle 60 Sekunden einen Status Request starten
Wofür soll ein Bus mit derartig langsamen Reaktionszeiten brauchbar 
sein? Im normalen Leben ist nach 60 Sekunden die Welt untergegangen. Bei 
uns kommt nach 6ms eine Fehlermeldung und nach 10ms werden die Antriebe 
angehalten (also 10000mal schneller als dein Plan).

Stefan S. schrieb:
> hatte mich deshalb ein bisschen auf Ethercat gestützt. Ethercat macht
> ja ein ähnliches Daisychaining mit einem Loop, um große Datenmengen in
> echtzeit austauschen zu können.
So wie ich das sehe, hast du EtherCAT nicht verstanden. Denn da sendet 
nicht 1 Master 1 Telegramm zu 1 Slave, der es dann empfängt, verarbeitet 
und weitersendet, sondern der Slave lässt das Telegramm "an sich 
vorbeirauschen" und pickt dann die Bits raus, die ihn angehen und setzt 
dort seine Daten ein, wo der Platz dafür ist. Je nach Bus- und 
Telegrammlänge kann es sein, dass der Master den Anfang des Telegramms, 
das er gerade eben sendet, schon wieder empfängt. Die Aufgabe des 
EtherCAT Slaves ist also eine sehr zeitkritische und deshalb verwendet 
der Slave ein eigens entwickeltes ASIC dafür.

Und das Überraschendste: der EtherCAT hat zwar eine Ringarchitektur, 
aber davon sieht man von aussen nichts, weil über das selbe Kabel, durch 
das der "Hinweg" zu einem Slave realisiert wir, auch der "Rückweg" zum 
vorhergehenden Busknoten realisiert wird. Deshalb kann jeder Slave den 
Ring wieder schließen, wenn die Kette "hinter ihm" unterbrochen ist.

Stefan S. schrieb:
> Leider sind die ganzen Rückwandbusse von den SPS-Systemen alle
> Proprietär und deshalb nicht zugänglich. Diese Busse können ganz viel
> von dem was ich will.
Beckhoff verwendet EtherCAT auch auf der Backplane. Nur eben nicht mit 
Übertragern, sondern mit LVDS-Pegeln.

Stefan S. schrieb:
> Frank K. schrieb:
>> Ja, und warum nimmst Du das nicht? Der Master braucht nur einen normalen
>> Ethernet-Controller, und Ethercat Slave Controller gibts zu kaufen:
> Ich möchte meinen eigenen Bus entwickeln, wieso sollte ich da was
> fertiges nehmen?
"Ich will" und "ich möchte" sind aus Erfahrung ganz schlechte Vorgaben. 
Die Praxis hat gezeigt: wenn es etwas gibt, die nötige Funktion 
übernehmen kann und erprobt ist, dann nimm das. Es geht schneller, es 
ist billiger und es läuft.

Du wirst nicht glauben, wie viele schon ihre eigenen Bussysteme 
entwickeln wollten. Ich hatte auch mal so eine Idee. Es war bei weitem 
nicht die Beste, die ich hatte.

Mein Tipp: beschreibe dein Problem mal mit "ich brauche". Aber mit 
realistischen Vorgaben. Denn du "brauchst" keine Stromversorgung über 
den Bus, wenn das angeschlossene Gerät sowieso ein Netzteil bekommt. Und 
wenn dann noch 2 Teilnehmer zusätzlich zum Bus noch Strom brauchen, dann 
leg halt eine zweite Leitung dorthin.

Meinen Hinweis auf die zigzehntausend Ingenieursstunden, die in einem 
funktionierenden Bussystem stecken, hast du gesehen, gelesen und vor 
allem: du hast ihn verstanden?

Denn du machst dir hier Gedanken um alle Layer des ISO/OSI-Modells. 
Gleichzeitig. Das wird nix, es ist zu viel für 1 alleine. Andere 
Ingenieure arbeiten ganztags allein daran, die physikalische 
Busankopplung störfest, stabil und fehlertolerant hinzubekommen.

Stefan S. schrieb:
> Ansonsten freue ich mich sehr wenn ihr mir interessante oder exotische
> Busse nennt, damit ich ein bisschen mehr stöbern kann.
Exotisch? Kennst du SerCos? Da hat in einem Frame, der z.B. 2ms dauert, 
jeder der angeschlossenen Slaves seinen eigenen kurzen Zeitschlitz von 
z.B. 50µs, in den er seine Daten hineinpacken kann. Und das geht 
tatsächlich "bitgenau" vor sich. Die Verzögerung Im Ring vom Master-TX 
bis zum Master-RX sind bestenfalls ein paar µs (die Lichtgeschwindigkeit 
ist ja 300m/µs plus pro Slave ein paar 64MHz-Takte Verzögerung im ASIC). 
Früher (Sercos I und II) lief das optisch über Plastik-LWL ab, heute 
(Sercos III) wie die anderen derzeit üblichen Busse über 
Ethernet-Hardware.

: Bearbeitet durch Moderator
von Stefan S. (neocortex)


Lesenswert?

Lothar M. schrieb:
> Stefan S. schrieb:
>> Bei einem kleinen Test mit Lauter Arduinos und einer manuell verkabelten
>> Vorstufe von meiner enumeration hab ich mit 24Byte Nutzdaten pro knoten
>> und 32 Knoten eine Zykluszeit pro Nachricht von 100ms gemessen. Das
>> klingt für mich doch ganz gut
> Damit kannst du bestenfalls schnarchlangsame Lichttaster abfragen oder
> Temperaturen übertragen. Für richtige Steuerungstechnik ist so ein Bus
> nutzlos.

Das glaub ich nicht, da ich ja erstmal nur eine relativ naive Umsetung 
habe, bei der ich bestimmt noch viel mehr Geschwindigkeit rausholen 
kann. War ja nur ein kleiner Test um zu schauen ob mein Grundkonzept 
funktioniert.

Lothar M. schrieb:
> Stefan S. schrieb:
>> hatte mich deshalb ein bisschen auf Ethercat gestützt. Ethercat macht
>> ja ein ähnliches Daisychaining mit einem Loop, um große Datenmengen in
>> echtzeit austauschen zu können.
> So wie ich das sehe, hast du EtherCAT nicht verstanden. Denn da sendet
> nicht 1 Master 1 Telegramm zu 1 Slave, der es dann empfängt, verarbeitet
> und weitersendet, sondern der Slave lässt das Telegramm "an sich
> vorbeirauschen" und pickt dann die Bits raus, die ihn angehen und setzt
> dort seine Daten ein, wo der Platz dafür ist. Je nach Bus- und
> Telegrammlänge kann es sein, dass der Master den Anfang des Telegramms,
> das er gerade eben sendet, schon wieder empfängt. Die Aufgabe des
> EtherCAT Slaves ist also eine sehr zeitkritische und deshalb verwendet
> der Slave ein eigens entwickeltes ASIC dafür.

Jap, das hab ich schon verstanden, aber ich hab es in meinem kleinen 
Test noch nicht so umgesetzt. Das finale System soll das so tun.

Lothar M. schrieb:
> Und das Überraschendste: der EtherCAT hat zwar eine Ringarchitektur,
> aber davon sieht man von aussen nichts, weil über das selbe Kabel, durch
> das der "Hinweg" zu einem Slave realisiert wir, auch der "Rückweg" zum
> vorhergehenden Busknoten realisiert wird. Deshalb kann jeder Slave den
> Ring wieder schließen, wenn die Kette "hinter ihm" unterbrochen ist.

Auch das war so von mir vorgesehen! Deswegen will ich ja LoS erkennung 
haben, damit ich feststellen kann, ob der Ring unterbrochen ist.

Lothar M. schrieb:
> Stefan S. schrieb:
>> Frank K. schrieb:
>>> Ja, und warum nimmst Du das nicht? Der Master braucht nur einen normalen
>>> Ethernet-Controller, und Ethercat Slave Controller gibts zu kaufen:
>> Ich möchte meinen eigenen Bus entwickeln, wieso sollte ich da was
>> fertiges nehmen?
> "Ich will" und "ich möchte" sind aus Erfahrung ganz schlechte Vorgaben.
> Die Praxis hat gezeigt: wenn es etwas gibt, die nötige Funktion
> übernehmen kann und erprobt ist, dann nimm das. Es geht schneller, es
> ist billiger und es läuft.

Mir geht es wie schon mehrfach erwähnt hauptsächlich darum den 
Designprozess von einem Bussystem nachvollziehen zu können.

Lothar M. schrieb:
> Du wirst nicht glauben, wie viele schon ihre eigenen Bussysteme
> entwickeln wollten. Ich hatte auch mal so eine Idee. Es war bei weitem
> nicht die Beste, die ich hatte.

Das glaub ich und ich vermute mal, dass ich in ein paar monaten auch 
angekrochen komme und zugebe dass das eine kack Idee war! Aber ich 
möchte das ja zum Lernen machen.

Lothar M. schrieb:
> Mein Tipp: beschreibe dein Problem mal mit "ich brauche". Aber mit
> realistischen Vorgaben. Denn du "brauchst" keine Stromversorgung über
> den Bus, wenn das angeschlossene Gerät sowieso ein Netzteil bekommt. Und
> wenn dann noch 2 Teilnehmer zusätzlich zum Bus noch Strom brauchen, dann
> leg halt eine zweite Leitung dorthin.

Sehr guter Hinweis, aber ich bin ja momentan noch in der Phase wo ich 
meine "Ich brauche" Vorgaben formuliere.

Lothar M. schrieb:
> Meinen Hinweis auf die zigzehntausend Ingenieursstunden, die in einem
> funktionierenden Bussystem stecken, hast du gesehen, gelesen und vor
> allem: du hast ihn verstanden?

Ja habe ich! Ich werde es aber trotzdem tun.

Lothar M. schrieb:
> Denn du machst dir hier Gedanken um alle Layer des ISO/OSI-Modells.
> Gleichzeitig. Das wird nix, es ist zu viel für 1 alleine. Andere
> Ingenieure arbeiten ganztags allein daran, die physikalische
> Busankopplung störfest, stabil und fehlertolerant hinzubekommen.

Ich hab angefangen mir über Layer 6 und 7 zuerst gedanken zu machen und 
schaue nach und nach die Layer runter, was ich brauche um meine oberen 
Layer 7 features möglicht einfach umsetzen zu können.

Lothar M. schrieb:
> Stefan S. schrieb:
>> Ansonsten freue ich mich sehr wenn ihr mir interessante oder exotische
>> Busse nennt, damit ich ein bisschen mehr stöbern kann.
> Exotisch? Kennst du SerCos? Da hat in einem Frame, der z.B. 2ms dauert,
> jeder der angeschlossenen Slaves seinen eigenen kurzen Zeitschlitz von
> z.B. 50µs, in den er seine Daten hineinpacken kann. Und das geht
> tatsächlich "bitgenau" vor sich. Die Verzögerung Im Ring vom Master-TX
> bis zum Master-RX sind bestenfalls ein paar µs (die Lichtgeschwindigkeit
> ist ja 300m/µs plus pro Slave ein paar 64MHz-Takte Verzögerung im ASIC).
> Früher (Sercos I und II) lief das optisch über Plastik-LWL ab, heute
> (Sercos III) wie die anderen derzeit üblichen Busse über
> Ethernet-Hardware.

Hab ich mir angeschaut, konnte aber keine ausreichende Doku finden. Wenn 
du da also was hast, schau ich mir das auch gern an.

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.