Probleme bei serieller Übertragung zum MCB2300 (ARM)
Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
26.08.2009, 10:01 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2009 10:31 von amin.)
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Hallo,
eigentlich will ich ein 250hz Signal vom PC auf´s MCB2300 übertragen und zurück. Jedoch sind hier alle Versuche bisher gescheitert.
Daher wollte ich jetzt erstmal zur Fehleranalyse ein einfache 25hz Signal (Sägezahn) übertragen, damit ich dieses auch auf dem Board überprüfen kann.
Jetzt habe ich pro Sägezahn (100 Werte) zwischen 3 und 20 Abweichungen vom Sollwert, schon beim Empfang des Boards.
Wäre supernett, wenn jemand mal rüberschauen könnte und eventuell einen Tipp parat hätte.
EDIT: Ergänzend muss ich noch hinzufügen, dass der Lese-Buffer nach längerer Laufzeit irrgendwann immer voll wird (obwohl das nicht der Fall sein dürfte). Und das ich generell das Problem habe, dass ich die PC Seite 2 oder 3 mal neustarten muss, bis das Senden/Empfangen richtig funktioniert. Eventuell hat das ja alles einen Zusammenhang.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Probleme bei serieller Übertragung zum MCB2300 (ARM)
In Deinem VI könnte es einige Race-Conditions geben. Vielleicht ist das der Grund.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
26.08.2009, 12:05 (Dieser Beitrag wurde zuletzt bearbeitet: 26.08.2009 12:12 von amin.)
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Meinst Du jetzt bei der synchronisation von Board und PC. Oder meinst innerhalb des PC Programms ?
Beim Programm habe ich an den Schleifen ja das gleiche Timing von 40ms, so solltes es ja eigentlich bei den einfach Operationen keine Probleme in den Ausführungen der einfachen Operationen geben. Oder hast Du da bestimmte stellen im Auge - bin für jeden Tipp dankbar.
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Die ganzen loakeln Variablen werden nur weil Du eine Verzögerung von 40 ms eingetragen hast nicht so abgearbeitet wie Du es erhoffst. Schau' Dir mal Semaphoren,... an.
Hier ein Bsp. von NI, das Dir das verdeutlicht.
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Hallo,
also vielen Dank für das Beispiel.
Also ich habe jetzt mal zum Test nur noch eine PC->MCB2300 Übertragung. So konnte ich auf PC Seite auf die Variablen komplett verzichten. Und auf dem MCB2300 habe ich wie im Beispiel Semaphoren benutzt.
Jedoch gibt´s noch immer genauso viele Fehler wie zuvor.
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Hallo,
anscheind habe ich eien Fehler bei den Semaphoren gemacht - weis leider nur noch nicht was genau falsch ist.
Zumindest bekomme ich wenn ich einfach nur die Semaphoren weglasse, permanent 4 bis 5 Fehler.
Da aber offenbar shon das weglassen der Variablen auf der PC Seite einen erheblichen Vorteil gebracht hat, könnte ich mir nun gut vorstellen das man auch diese Fehler noch auf der Empfangsseite mit Semaphoren entfernen könnte. Nur weis ich nicht, was ich falsch gemacht habe.
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Hallo,
hab das mit den Semaphoren etwas umstruckturiert, jetzt bekomme ich nur noch 2-3 Fehler auf 100 Werte.
Jedoch sollte eigentlich auch eine Fehlerfreie Übertragung möglich sein.
Probleme bei serieller Übertragung zum MCB2300 (ARM)
' schrieb:Hallo,
hab das mit den Semaphoren etwas umstruckturiert, jetzt bekomme ich nur noch 2-3 Fehler auf 100 Werte.
Jedoch sollte eigentlich auch eine Fehlerfreie Übertragung möglich sein.
Gruß
amin
[attachment=48893:MCB2300_v7t.vi]
Was Du da als Fehler monierst ist ganz einfach fehlende Synchronisation. Einerseits liest Du in einer 4ms Loop neue Werte ein die Du wegschreibst. In einer zweiten Loop liest Du diese Werte mit einem 40 ms Intervall und kontrollierst ob der neue Wert genau 1 grösser ist als der vorige. Wenn dem nicht so ist ist es ein "Fehler". Auf der Host Seite hast Du ein VI das (wahrscheinlich auch mit einem 40ms Timer) jeweils einen neuen Wert schickt. Und nun denkst Du dass 40 ms auf dem Host genau gleich viel ist wie 40ms auf Deinem ARM Controller!
Wenn Du die Wertepaare bei Deinem Test, immer wenn "Fehler" auftreten, irgendwo sichtbar gemacht hättest, hättest Du gesehen dass entweder bei jedem "Fehler" kein Unterschied war (Deine Testloop ist schneller als die Senderloop auf dem Host) oder einen überspringt (Deine Testloop ist langsamer dann auf dem Host).
Computer sind noch immer nicht standardmässig mit einer Atomuhr verbunden und Dein ARM Controller schon ganz sicher nicht. Dein Test geht ganz einfach von falschen Voraussetzungen aus. Als erstes musst Du mal beide Loops in eine einzige machen. Und dann machst Du Deinen Test in dem Case immer wenn Du 2 Character eingelesen hast. Dann kannst Du das Ganze wahrscheinlich stundenlang ohne "Fehler" laufenlassen.
Probleme bei serieller Übertragung zum MCB2300 (ARM)
Noch eine kleine Verbesserung! Du willst den Case nicht nur ausführen wenn genau 2 Bytes im Buffer sind, sondern immer wenn mindestens 2 Bytes im Buffer sind, dann aber natürlich nur immer 2 Bytes lesen.