Kommunikation zwischen mehreren Mikrocontrollern


20

Ich möchte mit der Implementierung eines Systems aus N Mikrocontrollern (N> = 2 MCUs) beginnen, möchte aber die Möglichkeiten kennen, mit denen sie miteinander kommunizieren können.

Im Idealfall werden (N-1) Mikrocontroller als Clients im Haus platziert, während der letzte (der "Server") über USB mit einem PC verbunden ist. Die Probleme, die ich momentan habe, sind, wie man diese (N-1) Mikrocontroller an den "Server" anschließt. Die Client-MCUs führen sehr einfache Aufgaben aus. Daher ist es möglicherweise keine gute Lösung, ARMs für solche einfachen Aufgaben zu verwenden, nur weil sie CAN / PHY-MAC bereitstellen .

Die Kommunikation wird bei den meisten Geräten nur einmal alle paar Minuten und bei Bedarf bei anderen Geräten stattfinden. Die Geschwindigkeit ist nicht sehr kritisch (Meldung ist kurz): 1 Mbit / s halte ich für WEG für übertrieben.

Die von mir geplanten MCUs sind die folgenden.

  • Atmel AVR Tiny / Mega
  • TI MSP430
  • ARM Cortex M3 / M4
  • (Möglicherweise Atmel AVR UC3 - 32-Bit)

Ich möchte PICs vermeiden nach Möglichkeit (persönliche Wahl), einfach weil es weniger Möglichkeiten gibt, sie zu programmieren (alle oben genannten haben mehr oder weniger Open-Source-Tools sowie einige offizielle Tools).

Ich weiß, dass einige ARMs CAN- Funktionalität bieten und bin mir bei den anderen nicht so sicher.

Im Moment habe ich mir folgende Möglichkeiten ausgedacht:

  1. Einfaches GPIO zum Senden von Daten (sagen wir> 16 Bits bei HIGH, um den Beginn der Nachricht anzuzeigen,> 16 Bits bei LOW, um das Ende der Nachricht anzuzeigen). Es muss sich jedoch um eine Standardfrequenz << (frequency_client, frequency_server) handeln, um alle Bits erkennen zu können. Benötigen Sie nur ein Kabel pro Client-MCU.
  2. RS-232 : Ich denke, dies ist das bei weitem am häufigsten verwendete Kommunikationsprotokoll, aber ich weiß nicht, wie gut es skaliert. Ich erwäge derzeit bis zu 64 Client-MCUs (wahrscheinlich später mehr)
  3. USB: AFAIK, das ist meistens wie RS-232, aber ich denke nicht, dass es in diesem Fall sehr gut skaliert (obwohl USB viele Geräte unterstützt - 255, wenn ich mich richtig erinnere - kann es für diese Anwendung zu kompliziert sein)
  4. RJ45 / Ethernet: Das würde ich sehr gerne nutzen, denn es ermöglicht die problemlose Übertragung über große Entfernungen (zumindest mit geschirmtem> Cat 6- Kabel). Das Problem sind die Kosten (PHY, MAC, Transformator, ...). Ich weiß aber nicht, ob man es zu Hause wirklich gut löten kann. Auf diese Weise würde ich keine Client-MCU benötigen
  5. Wireless / ZigBee : Module sind sehr teuer, obwohl es der richtige Weg ist, um "Spaghetti" hinter dem Schreibtisch zu vermeiden
  6. HF-Module / Transceiver: Ich spreche von denen im 300-MHz-1-GHz-Band, daher sollten sie zu Hause schwierig zu löten sein. Die Module sind alle eingebaut, aber sie sind ziemlich teuer wie das ZigBee (zumindest die RF-Module bei Mouser, bei Sparkfun scheinen es billigere zu sein).
  7. KÖNNEN? Es scheint sehr robust zu sein. Auch wenn ich nicht vorhabe, es in Automobilanwendungen zu verwenden, kann es dennoch eine gute Alternative sein.
  8. I²C / SPI / UART ? Nochmals - besser "Spaghetti" mit den Kabeln vermeiden, wenn möglich
  9. SPS sind eigentlich keine Option. Die Leistung nimmt mit zunehmender Länge ziemlich schnell ab und hängt von der Kapazitätsbelastung des Stromnetzes ab. Ich denke, preislich ist das ungefähr dasselbe wie Ethernet.

Welches Protokoll wäre außerdem bei gleichzeitiger Übertragung "besser" (nehmen wir den seltenen Fall an, dass zwei Geräte gleichzeitig mit der Übertragung beginnen: Welches Protokoll bietet das beste "Konfliktmanagementsystem" / "Kollisionsmanagementsystem"?

Etwas zusammenfassen : Ich würde gerne hören, welche Lösung für ein verteiltes Client-System, das eine sehr leichte Datenkommunikation bietet, die beste ist, wenn man sowohl die Flexibilität (maximale Anzahl von Geräten, Konflikt- / Kollisionsmanagementsystem, ...) als auch den Preis berücksichtigt , einfach zu Hause zu machen (löten), ... Ich möchte vermeiden, 20 $ nur für das Kommunikationsmodul auszugeben, aber gleichzeitig 30 Drähte hinter dem Schreibtisch zu haben, wäre zum Kotzen.

Die Lösung, die ich mir gerade vorstelle, wäre die einfache Kommunikation zwischen Near-MCUs über GPIO oder RS-232 ( billig !) Und die Verwendung von Ethernet / ZigBee / Wi-Fi auf einer MCU pro "Zone" für die Kommunikation mit dem Server ( teuer !) , aber es ist immer noch viel billiger als ein Ethernet-Modul pro Client-MCU).

Anstelle von Kabeln können auch Lichtwellenleiter / Lichtwellenleiter verwendet werden. Es sind jedoch zusätzliche Konvertierungen erforderlich, und ich bin nicht sicher, ob dies in diesem Fall die beste Lösung ist. Ich würde gerne weitere Details darüber erfahren.


2
Es gibt PICs mit CAN-Funktionalität und kostenlose offizielle Tools, um sie mit Dokumentation zu programmieren.
AndrejaKo

@AndrejaKo PIC hat eigentlich keinen Open Source Compiler wie AVRs oder zumindest MSP430s. Es ist wahr, dass sie oft mehr Funktionen als die oben aufgeführten MCUs zum gleichen Preis bieten. Ich mag diese großen Unterschiede zwischen den Familien vom 16.12.18.24.32 nicht wirklich und dass einige von ihnen überhaupt keinen kostenlosen Compiler haben (ich denke, es ist PIC18).
user51166

2
Tatsächlich hat PIC18 einen kostenlosen Compiler und andere auch. Der Hauptbonus anderer Familien ist, dass sie mit GCC zusammenarbeiten. Im Open Source-Camp gibt es den Small Device C-Compiler, der PIC 16- und PIC 18-Geräte unterstützen sollte.
AndrejaKo

2
Wenn Sie noch keine Erfahrung mit einem der von Ihnen genannten uCs haben, sollten Sie gewarnt sein, dass der Einstieg in ARM viel schwieriger ist als z. B. mit PICs oder AVR, insbesondere wenn Sie Open Source betreiben möchten. Bei ARM entwerfen die Anbieter nicht den Kern und stellen im Allgemeinen auch keine IDE zur Verfügung, wodurch das Ganze etwas komplexer wird. Es ist schön, wenn zB Microchip bei PICs alles zur Verfügung stellt und unterstützt.
Oli Glaser

@OliGlaser Nun ja, Open Source-Tools für ARM können zwar etwas schwierig zu verwenden sein (ich habe ein STM32-Discovery-Board ausprobiert und es hat nicht sehr gut funktioniert), aber viele Anbieter bieten eine IDE an, mit der - seine Vor- und Nachteile - Eclipse-basiert und frei begrenzt: LPCXpresso (NXP) und Code Composer Studio (TI) zum Beispiel (nicht Open Source, aber sie werden zumindest unterstützt). AVRs werden auf der Open Source-Seite und in ATMEL STUDIO 6 ziemlich gut unterstützt. Keine Erfahrung mit PIC. Codiert nur AVR (Assembler) und ARM (C, auf dem NDS).
user51166

Antworten:


22

CAN klingt in diesem Fall am besten. Die Entfernungen innerhalb eines Hauses können per CAN mit 500 kbit / s bewältigt werden, was nach einer ausreichenden Bandbreite für Ihre Bedürfnisse klingt. Der letzte Knoten kann eine handelsübliche USB-CAN-Schnittstelle sein. Auf diese Weise kann die Software auf dem Computer CAN-Nachrichten senden und alle Nachrichten auf dem Bus anzeigen. Der Rest ist Software, wenn Sie dies der Außenwelt als TCP-Server oder so etwas präsentieren möchten.

CAN ist das einzige Kommunikationsmittel, von dem Sie gesprochen haben, dass es sich tatsächlich um einen Bus handelt. Alle anderen sind Punkt zu Punkt, einschließlich Ethernet. Ethernet kann logisch wie ein Bus mit Switches aussehen, einzelne Verbindungen sind jedoch immer noch Punkt-zu-Punkt-Verbindungen, und das Abrufen der logischen Bustopologie ist teuer. Der Firmware-Overhead auf jedem Prozessor ist ebenfalls erheblich höher als bei CAN.

Das Schöne an CAN ist, dass die wenigsten Protokollschichten in der Hardware behandelt werden. Beispielsweise können mehrere Knoten versuchen, gleichzeitig zu senden, aber die Hardware kümmert sich um die Erkennung und den Umgang mit Kollisionen. Die Hardware übernimmt das Senden und Empfangen ganzer Pakete, einschließlich der Generierung und Validierung von CRC-Prüfsummen.

Ihre Gründe für die Vermeidung von PICs ergeben keinen Sinn. Es gibt viele Entwürfe für Programmierer, mit denen Sie Ihre eigenen erstellen können. Eines davon ist mein LProg . Das Schema finden Sie unten auf dieser Seite. Der Bau Ihrer eigenen ist jedoch nur dann kosteneffektiv, wenn Sie Ihre Zeit auf ein paar Cent pro Stunde festlegen. Es geht auch um mehr als nur den Programmierer. Sie benötigen etwas, das beim Debuggen hilft. Die Microchip PicKit 2 oder 3 sind sehr kostengünstige Programmierer und Debugger. Obwohl ich keine persönlichen Erfahrungen mit ihnen habe, höre ich von anderen, die sie routinemäßig benutzen.

Hinzugefügt:

Ich sehe einige Empfehlungen für RS-485, aber das ist keine gute Idee im Vergleich zu CAN. RS-485 ist ein rein elektrischer Standard. Es handelt sich um einen Differenzialbus, der mehrere Knoten zulässt und eine gute Störfestigkeit aufweist. Aber CAN hat all das und noch viel mehr. CAN wird üblicherweise auch als Differentialbus ausgeführt. Einige argumentieren, dass RS-485 einfach elektrisch anzuschließen ist. Das stimmt, aber CAN auch. So oder so macht es ein einzelner Chip. Bei CAN ist der MCP2551 ein gutes Beispiel.

CAN und RS-485 haben also elektrisch fast die gleichen Vorteile. Der große Vorteil von CAN liegt darüber. Bei RS-485 befindet sich nichts über dieser Schicht. Du bist allein. Es ist möglich, ein Protokoll zu entwerfen, das sich mit Busarbitrierung, Paketüberprüfung, Zeitüberschreitungen, Wiederholungsversuchen usw. befasst. Tatsächlich ist es jedoch viel schwieriger, dies zu erreichen, als die meisten Menschen erkennen.

Das CAN-Protokoll definiert Pakete, Prüfsummen, Kollisionsbehandlung, Wiederholungsversuche usw. Es ist nicht nur bereits vorhanden und durchdacht und getestet, sondern der große Vorteil besteht darin, dass es auf vielen Mikrocontrollern direkt in Silizium implementiert ist. Die Firmware ist auf der Ebene des Sendens und Empfangens von Paketen mit dem CAN-Peripheriegerät verbunden. Zum Senden führt die Hardware die Kollisionserkennung, das Backoff, den Neuversuch und die CRC-Prüfsummengenerierung durch. Zum Empfangen werden die Paketerkennung, die Taktversatzanpassung und die CRC-Prüfsummenvalidierung durchgeführt. Ja, das CAN-Peripheriegerät benötigt mehr Firmware als ein UART, wie er häufig mit RS-485 verwendet wird. Insgesamt wird jedoch viel weniger Code benötigt, da das Silizium so viele Protokolldetails auf niedriger Ebene verarbeitet.

Kurz gesagt, RS-485 ist aus einer vergangenen Ära und macht für neue Systeme heutzutage wenig Sinn. Das Hauptproblem scheinen Leute zu sein, die in der Vergangenheit RS-485 verwendet haben, sich daran festzuhalten und der Meinung sind, CAN sei irgendwie "kompliziert". Das niedrige CAN-Niveau ist kompliziert, ebenso wie jede kompetente RS-485-Implementierung. Beachten Sie, dass einige bekannte Protokolle auf Basis von RS-485 durch neuere Versionen auf Basis von CAN ersetzt wurden. NMEA2000 ist ein Beispiel für einen solchen neueren CAN-basierten Standard. Es gibt einen weiteren Automobilstandard J-J1708 (basierend auf RS-485), der mit dem CAN-basierten OBD-II und J-1939 mittlerweile ziemlich veraltet ist.


Das Erstellen einer eigenen benutzerdefinierten Karte ist hilfreich, wenn Sie die MCU in die Hardware integrieren möchten, die sie umgibt. Für Entwicklungszwecke halte ich ein Development Kit für einen besseren Weg. Mein Grund für die Vermeidung von PICs ist das Fehlen von Open Source-Compilern (es gibt einige kostenlose, aber beispielsweise nicht für PIC18) und nicht das Fehlen öffentlich verfügbarer Schaltpläne, obwohl sie einige zusätzliche Funktionen bieten, die Sie in anderen MCUs (Ethernet, KÖNNEN, ...). Und I2C ist ein Bus AFAIK.
user51166

@ user51166 - Es gibt kostenlose PIC18-Compiler von microchip. Siehe die MPLAB XC Compiler- Produktseite. Es werden auch die Compiler für 16bit und 32bit uC aufgelistet.
PetPaulsen

@ user51166 Es gibt auch den kostenlosen C18- Compiler.
AndrejaKo

@PetPaulsen Seltsam. Ich bin mir ziemlich sicher, dass ich vor einem Monat eine Seite gesehen habe, auf der alle Compiler aufgelistet sind, die frei zum Download zur Verfügung stehen (PIC16 / 24/32). Wahrscheinlich wurde das mit dem Übergang MPLAB C Compiler -> MPLAB XC Compiler gelöst, obwohl ich nicht sicher bin. Darüber hinaus bieten sie "nur" eine Freeware-Edition an, die Ihren Code nicht optimiert, und keinen Open-Source-Compiler. Trotzdem ist das besser als gar nichts;)
user51166

@user: Ich glaube, alle Microchip-Compiler haben kostenlose Versionen, die sich nur dadurch von den Vollversionen unterscheiden, dass einige der Optimierungen deaktiviert sind. Assembler, Bibliothekar, Linker und Simulator sind im kostenlosen MPLAB-Paket enthalten. Hier gibt es wirklich kein Problem.
Olin Lathrop

6

Ich würde Controller mit CAN empfehlen, da diese Funktion genau für die Controller-Vernetzung gedacht ist.

RS232 kann leicht implementiert werden, aber es wird eine echte Herausforderung, wenn Sie versuchen, eine Kommunikation mit mehr als 2 Knoten zu implementieren (weil sie nicht für diesen Zweck erstellt wurde).

Ethernet kann auch eine nette Option sein, da Sie einige Host- und Client-Verbindungen erwähnt haben, die für die Ethernet-Implementierung selbstverständlich sind.


Was sind zum Beispiel die Vorteile von CAN gegenüber Ethernet? Wahrscheinlich billiger, aber sonst was?
user51166

@ user51166 - CAN ist nicht nur billiger, sondern auch viel billiger. Es ist nicht nur einfacher, sondern auch viel einfacher.
Rocketmagnet

@Rocketmagnet: erkläre bitte etwas mehr. In den meisten Fällen benötigen Sie ohnehin einen integrierten IC (obwohl PICs und ARMs und andere häufig CAN-Funktionen integrieren, sind sie etwas teuer). Aus der Sicht der Hardware sehe ich nicht, wie dies viel billiger sein kann, da die ICs für 0,5-1,0 $ pro Stück erhältlich sind. Ich nehme an, Sie meinen es aus softwaretechnischer Sicht einfacher, oder? CAN hat eine maximale Entfernung von ~ 500 Metern, was in meinem Fall sicherlich ausreicht, aber gibt es - nur zur Information - ähnliche Alternativen für größere Entfernungen (Glasfaser vielleicht)?
user51166

4

RS-485 mit mehreren Kabeln könnte hier gut funktionieren, wenn die Möglichkeit besteht, dieselbe Leitung mit allen Geräten zu verbinden.

Wenn es zum Beispiel mit einem herkömmlichen Netzwerkkabel der Kategorie 5e verwendet wird, können Sie zwei Paare für die Datenübertragung in beide Richtungen verwenden (mit einem Vollduplexmodul), ein Paar oder sogar einen einzelnen Draht als gemeinsame Masse verwenden und den Rest aushandeln welches Gerät wird in welchem ​​Moment senden. Es ist etwas komplizierter als RS-232, aber die Module sind billiger als CAN und Ethernet und die Kabelbegrenzung beträgt 1200 m. Der Nachteil ist, dass Sie Ihr eigenes Konfliktlösungsprotokoll erstellen müssen. Lassen Sie das Gerät, das senden möchte, möglicherweise ein bestimmtes Kabel überprüfen und prüfen, ob es hoch ist. Wenn dies nicht der Fall ist, bringen Sie es in die Höhe und beginnen Sie mit der Kommunikation. Wenn dies der Fall ist, warten Sie auf eine zufällige Zeitspanne. Trotzdem bin ich mir nicht sicher, wie gut das auf langen Strecken funktionieren würde.


Ich mache mir keine Sorgen über zu lange Strecken und plane im Moment nicht, über 100 m zu fahren.
user51166

Warum akzeptiert StackExchange heute übrigens nicht @ <Benutzername>? Jedes Mal, wenn ich eines
hinzufüge

@ user51166 - Der Ersteller der Antwort wird automatisch benachrichtigt, sodass das "\ @ - Rauschen" automatisch entfernt wird. (Mein \ @ user51166 wurde nicht entfernt, weil Sie nicht der Schöpfer dieser Antwort sind)
PetPaulsen

Das Interessante ist, dass ich für keinen der Kommentare hier Benachrichtigungen erhalten habe.
AndrejaKo

4

Ich würde einen RS-485-Bus wählen, der mit Manchester Encoding arbeitet Daten arbeitet.

RS-485 weil:

  • Ist günstig
  • Ist einfach zu implementieren
  • Verwendet lo Power
  • Ermöglicht große Entfernungen (bis zu 1200 Meter)
  • Hohe Datenraten (bis zu 10 Mbit / s)
  • Hohe Störfestigkeit
  • Es gibt Transceiver, mit denen bis zu 256 Geräte am selben Bus angeschlossen werden können
  • Geringe Anzahl von Teilen

Manchester-Codierung, weil:

  • Ist einfach zu implementieren
  • Ist selbstsynchronisierbar

Aus Gründen der Datenintegrität kann die Nachricht eine Länge und ein CRC-Feld enthalten.

Beispiel einer CRC-Funktion:

unsigned char crc_calc(unsigned char buffer[], unsigned short size)
{
  unsigned long i;
  unsigned char crc;

  crc = CRC_INIT;

  for (i=0;i<size * 8;i++)
  {
    crc = (crc << 1) | (crc >> (7));

    if (buffer[i/8] & (0x80 >> (i%8)))
    {
      crc ^= CRC_POLY;
    }
  }

  return crc;
}

CRC_INITund CRC_POLYsind beliebige Werte, die zur Berechnung der CRC verwendet werden.

Beispiel einer Nachricht mit Längen- und CRC-Feldern:

Beispiel für eine Nachricht


Irgendwelche Vorschläge für so gute Transceiver, möglicherweise billig?
user51166

Wie @AndrejaKo angedeutet hat, bietet RS-485 anscheinend kein Protokoll zur Konfliktlösung.
user51166

Die Auswahl der Transceiver hängt von der Spannung ab, die Sie verwenden möchten. Die Konfliktlösung muss in Software mit CRC-Prüfung, Leitungsüberwachung oder beidem erfolgen.
Bruno Ferreira

Wenn Sie einen Master haben, können Sie auch eine Adressierung oder eine rundenbasierte Übertragung implementieren.
Bruno Ferreira

Nicht wirklich ein Meister. Nur der "Server", der über USB als Schnittstelle zum PC fungiert. Die Clients müssen ihm jedoch automatisch Nachrichten senden ...
user51166

3

Lassen Sie mich Ihre bevorzugte Wahl, Ethernet, mit meiner bevorzugten Wahl, CAN, vergleichen.

Erforderliche Komponenten:

  • Ethernet: RJ45-Anschluss, Magnetics, Phy-Chip (sofern nicht in MCU integriert). Benötigen Sie auch Schalter und ein Kabel vom Schalter zu jedem Knoten. Jede Leiterplatte benötigt einige Kondensatoren und Abschlusswiderstände, möglicherweise auch Ferrite. Benötigt gutes PCB-Design.
  • CAN: Transceiver-Chip (billig), jeder Stecker, billiges Kabel kann in einer Schleife um den Standort von einem Knoten zum nächsten springen. Benötigen Sie nur einen Kondensator für den Transceiver und einen Abschlusswiderstand an jedem Ende des Busses.

Sie sprechen von Mikrocontrollern für 1 USD. Der Bus kostet viel mehr als die MCU. Sie müssen die Gesamtkosten jeder Lösung addieren, um zu wissen, welche Lösung tatsächlich billiger ist. Addieren Sie die Kosten für MCU, Steckverbinder, Transceiver, passive Komponenten, PCB, Kabel usw.


0

In LPC11C24 von NXP ist auch der CAN-Transceiver integriert, und CANOpen wird im ROM unterstützt (wodurch Ihr 32-K-Daten-Flash nicht zerstört wird). Die LPCXpresso 11c24-Karte kostet 20 EUR (hat Platz für den DB9-Anschluss bereitgestellt), sodass Sie wirklich nur Kabel hinzufügen müssen :-)


0

Repost von einer anderen ähnlichen Frage. Kostengünstige einfache Kommunikation zwischen zwei Mikrocontrollern

TLDR : Nicht besonders billig, aber in einigen Anwendungsfällen zuverlässig.

Wenn ich über den Tellerrand hinausschaue, könnte es hier einige andere Lösungen geben, wie zum Beispiel den folgenden Chip, auf den ich in letzter Zeit gestoßen bin. Natürlich hängt alles davon ab, was Sie tun möchten. So etwas wie UART fällt Ihnen ein, wenn Sie beide MCUs auf der gleichen Platine haben oder sogar vorhaben, sie manuell gegen elektrostatische Entladungen zu schützen, wenn sie getrennt werden.

Master- und Device-Lösung für IO-Link-Anwendungen

L6360   Master
L6362A  Device

enter image description here

Wann würden Sie eine Lösung wie diese in Betracht ziehen:

  1. Die Frontier-Chips sind vollständig geschützt. Dies ist wichtig, wenn Sie jede MCU auf einer separaten Platine haben und sich mit freiliegenden Stiften wie z. B. Schraubklemmen befassen.
    • Umgekehrte Polarität
    • Überlast mit Abschaltfunktion
    • Übertemperatur
    • Unterspannung und Überspannung
    • GND und VCC offener Draht
  2. Interoperabilität. Wenn jemand anderes die andere Seite designt, muss er nur die Daten über IO-Link leiten.
  3. Integrierter Regler Vcc(in) 7~30v, Vdd(out) 3.3/5v

Es klang interessant für mich, also dachte ich, ich werde es da rausbringen.


-3

Dies hängt vom Umfang Ihrer Anwendung und Ihrer Mikrocontroller ab. Du hast Atmel winzig / mega erwähnt, sie sind ziemlich klein. In ihrem Fall haben I2C / SPI / UART den Vorteil, dass sie in Hardware implementiert sind und somit einfach zu bedienen sind.


3
OK, aber wie behebt dies das Problem des OP? IIC ist ein Bus, aber für weite Strecken wie zum Beispiel durch ein Haus überhaupt nicht geeignet. Es ist single ended und relativ hochohmig. SPI ist ein Bus, der jedoch von einem einzelnen Master mit einer separaten Slave-Auswahlleitung zu jedem Gerät gesteuert wird. Sie könnten jede Leitung als differentielles Paar mit Leitungstreibern und Empfänger implementieren, aber Sie haben immer noch das Problem der Punkt-zu-Punkt-Auswahl zwischen Master und Slave. UART ist ausschließlich Punkt zu Punkt. Es ist nicht klar, wie Sie diese in der Situation des OP verwenden wollen.
Olin Lathrop
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.