Hallo, ich habe zwei verschiedene Hardwaregeräte, die nicht mit einer gemeinsamen Taktquelle gespeist werden. Beide Systeme laufen mit 2kHz (aber jedes nicht zu 100 Prozent mit 2kHz). Es müssen Daten hin- und hergetauscht werden. Nach einer Weile passiert es immer, dass beim Hin- und Hersenden der Daten Fehler entstehen - wegen der gemeinsamen leichten Nicht-Synchronität, die Systeme laufen nach einer Weile immer etwas auseinander und laufen dann wieder für eine Weile stabil. Beispiel: Sender: 01234 56789 01234 56789 01234 56789 Empf. : 01234 46679 01234 56789 01234 46679 ............:.====....................====. Der Fehler ist z.B. der, dass ein Wert vom Empfänger zweimal gelesen wird und der, der eigentlich kommen müsste, verschluckt wird. Gäbe es irgendwelche Möglichkeiten, das softwaremässig abzufangen? Oder könntet Ihr mir irgendwelche Literatur empfehlen, wo man noch etwas mehr über diese Problematik nachlesen könnte?
Beitrag #4994312 wurde von einem Moderator gelöscht.
Walter Jenschko schrieb: > ich habe zwei verschiedene Hardwaregeräte, die nicht mit einer > gemeinsamen Taktquelle gespeist werden. Beide Systeme laufen mit 2kHz > (aber jedes nicht zu 100 Prozent mit 2kHz). Es müssen Daten hin- und > hergetauscht werden. Und wie genau passiert das nun? Das ist doch der springende Punkt. Wenn der Takt nicht synchronisiert ist, muss halt wenigstens die Kommunikation synchronisiert werden. Wie das zu realisieren ist, hängt aber davon ab, wie genau die Dinger miteinander reden.
Beitrag #4994368 wurde von einem Moderator gelöscht.
Walter Jenschko schrieb: > Gäbe es irgendwelche Möglichkeiten, das softwaremässig abzufangen? Du musst eine Serielle Datenschnittstelle mit Startbit, Baud Rate u.s.w nachbilden.
genervt schrieb im Beitrag #4994368: > AngularJS hat nichts mit dem Thema zu tun, also bitte ignorieren Ich vermute, er wollte damit sagen, dass zur Beantwortung der Fragen essenzielle Informationen fehlen. Das scheinst du ja auch gemerkt zu haben, da du selbst auch keine Antwort lieferst. Walter Jenschko schrieb: > ich habe zwei verschiedene Hardwaregeräte, die nicht mit einer > gemeinsamen Taktquelle gespeist werden. Beide Systeme laufen mit 2kHz > (aber jedes nicht zu 100 Prozent mit 2kHz). Es müssen Daten hin- und > hergetauscht werden. Deine Systeme sind mit 2 Kilohertz getaktet? > Nach einer Weile passiert es immer, dass beim Hin- und Hersenden der > Daten Fehler entstehen - wegen der gemeinsamen leichten > Nicht-Synchronität, die Systeme laufen nach einer Weile immer etwas > auseinander und laufen dann wieder für eine Weile stabil. Ganz entscheidend wäre hier, wie dein Übertragungsprotokoll aussieht. Das kann ja hier keiner raten. Und womit sind die Systeme getaktet? Quarz? RC-Oszillator? Schlagzeug? Welche Genauigkeit haben die Taktquellen in etwa?
Ziemlich simpel, ja. Einfach eine Botschatszähler (BZ) in die Nachricht packen. Wenn zwei mal der gleiche Wert kommt-> Ignorieren. Wenn es knapp wird, kann es aber passieren, dass man eine Botschaft verpasst. An der Lücke im BZ kann der Empfänger aber erkennen, dass ein Zyklus fehlt und den ggf. noch mal anfordern.
c-hater schrieb: > Und wie genau passiert das nun? Das ist doch der springende Punkt. Es handelt sich um zwei Systeme. Das erste System ist ein Siemens iPC-Box-PC mit zwei Karten. Die eine Karte ist eine CP1616-Karte für Profinet-Kommunikation und eine ehtercat-fähige Netzwerkkarte (Modell weis ich grade nicht, aber eine mit Intel-Chipsatz, die Ethercatkommunikation zulässt). Programmiert wird dieses System mit Simulink. Die CP1616-Karte verfügt über eine Clock-Leitung, auf die das Simulink-Modell getaktet wird. Die Ethercat-Karte arbeitet in dem System für sich alleine als Ethercatmaster. Auch dort ist die Geschwindigkeit auf 2kHz eingestellt. Simulink-Realtime bietet bereits fertige Blöcke zur Ethercatkommunikation an. Diese werden verwendet. Die Daten, die über Ethercat versendet werden sollen, werden über den Kommunikationsblock in die jeweiligen Sende- und Empfangsregister der Netzwerk-Karte gesendet und die Karte sendet die Daten halt nicht auf den Sampletakt von der CP1616-Karte getriggert an das Zielsystem. Das Zielsystem besteht auch aus zwei Teilen - der Empfangseinheit für die Ethercatkommunikation (das als Ethercat-Slave arbeitet) und einem weiteren Teil, in dem das Regelsystem arbeitet. Das sind zwei unabhängige FPGAs, die auch mit Simulink programmiert werden und auch zwei eigentständige Taktquellen haben und Daten über Register miteinander austauschen. Ich arbeite gerade an der Kommunikationseinheit an dem Zielsystem (man braucht sich momentan nicht um die Synchronisation zw. Regelsystem und Kommunikationssytem zu kümmern, da der Fehler bereits im eigenständig programmierbaren Kommunikationsmodul auftritt). Das Zielsystem ist nicht in der Lage, auf ein externes Triggersignal zu reagieren (ich kann also nicht eine Triggerleitung von Simatic-iPC an das Zielsystem senden). Ich habe mal eine Skizze angefügt.
Walter Jenschko schrieb: > Es handelt sich um zwei Systeme. Das erste System ist ein Siemens > iPC-Box-PC mit zwei Karten. Die eine Karte ist eine CP1616-Karte für > Profinet-Kommunikation und eine ehtercat-fähige Netzwerkkarte (Modell > weis ich grade nicht, aber eine mit Intel-Chipsatz, die > Ethercatkommunikation zulässt). Bullshit. Ethercat agiert erstens in Frequnzbereichen weit oberhalb der von dir angegebenen 2kHz und enthält zweitens hinreichende Mechanismen zur Bitsynchronisation. Genau das ist ja der Sinn von Ethercat. So, wie's aussieht, versuchst du ein sehr viel langsameres und völlig dummes Protokoll auf den (nicht mit diesem semmeldummen Protokoll synchronisierten) Bitstream von Ethercat aufzusetzen. Kann man machen (wenn man es nicht besser weiss). Dann muss man aber halt ein Protokoll bauen, welches den eigenen Takt synchronisiert, völlig unabhängig vom Takt des drunterliegenden Ethercat. Am einfachsten dürfte es wohl sein, eine UART nachzubauen... Weitaus sinnvoller wäre allerdings, Ethercat so zu benutzen, wie es eigentlich gedacht ist. Sprich: beide Geräte müssen erstmal auf die Bitrate des Ethercat-Streams synchronisiert werden. Darauf setzt man dann auf. Ein minimales Protokoll zur Word-Synchronisation brauchst du aber auch dann noch, ist aber auch schon Bestandteil von Ethercat, muss nur benutzt werden. Fazit: lies die verschissene Dokumentation zu Ethercat, benutze das vorhandene API. Dann geht nicht nur 2kHz synchron, sondern auch noch sehr viel mehr... Hausaufgabe?
Ganz einfach man übertragt einfach Impulse von z.B. 1 mSek diese sind dann auch zur Synchronisation die darauffolgende Länge der low Pause bestimmt obs ne 1 oder 0 ist. Man spart sich also eine Synchronisationleitung und es wird trotzdem jedes Bit synchronisiert. 1 mSek high+ 1 mSek low = 1 1 mSek high + 2 mSek low = 0
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.