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!
Ich möchte mehrere Geräte per cRIO über FPGA und Real Time.vi ansteuern und bekomme Probleme wenn ich versuche per Real Time.vi Steuerbefehle übere mehrere Ports zu sende.
Das heisst: Alles klappt wenn ich nur über Port 1 Befehle sende (Bild 1). Wenn ich dann zum Beispiel die selben Befehle auch über einen anderen Port zu senden versuche genau so wie ich es in Bild 1 gemacht habe, reagiert das Gerät entweder sehr spät oder gar nicht.
Ich habe schon versucht alle möglichen Teilstrukturen zu "disablen" aber es hat nichts gebracht. Habe an verschiedenen Stellen "Waits" eingebaut aber auch ohne Erfolg. Sitze schon den ganzen Tag daran und komme einfach nicht weiter.
Naja scheint als wäre das Problem nicht ganz gelöst. Nun funktioniert alles auf Port 1, auch wenn die anderen Befehle für die anderen Ports noch aktiviert sind. Aber ich habe nun Probleme damit, wenn ich zum Beispiel in diesem Fall über den Port 5 Befehle senden und auslesen möchte (s. Bild 2). Port 1 wird mehrmals ausgelesen - soll auch so sein - während Port 5 nur am Anfang einmal ausgelesen wird. Die gesendeten Befehle werden am Gerät auch nicht umgesetzt (Bild 2, rot).
Ports wurden sowohl im FPGA (auch schon kompiliert) als auch im RT angepasst.
Ideen?
Grüße,
Hattorii
26.03.2014, 19:16 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2014 19:19 von jg.)
Ja, bei der Gegenstelle ist alles so eingestellt, wie bei Port 1. Ein Befehel kommt ja auch an: in_pv_02 --> Ist-Temperatur Ausgabe, allerdings nur ein mal am Anfang.
Ich habe das FPGA jetzt so bearbeitet, dass Port 5-8 nun auch alle Bytes senden (s. Bild 3).
Der Fehler besteht weiterhin. Zudem kommen die Befehle über Port1 nach dem das RT ca. 10 Sekunden läuft, nicht mehr an. Das war ja vorher nicht so. Port 5 wird erneut nur ein mal ausgelesen und die Befehle werden nicht gesendet.
Ich habe erneut probiert die Befehle der zur Zeit unbelegten Ports (2 und 3) zu deaktivieren (vgl. Bild 4) und dann werden mehrere Werte über Port 5 ausgelesen und zumindest der gesendete Befehl "out_mode_05 1" kommt zu Anfang an. Das heisst es ist schon eine "Besserung" zu erkennen. Läuft das RT aber ein paar Sekunden passiert wieder nichts mehr.
Die Bilder und die VIs sind im Anhang. Ich habe für dich eine aufgeräumte Version angehängt . Im RT.vi im Anhang sind die Befehle, die über Port 2 und 3 gesendet werden, nicht deaktiviert.
Offensichtliche Fehler kann ich jetzt nicht erkennen (wobei das aber zwecks Tapete schwer fehlt).
- Passen die Zuordnungen im FPGA, sind die entsprechenden RS-232-Module in den programmierten Slots?
- Ich gehe davon aus, dass du den FPGA-Code neu kompiliert hast?!
- Dir ist hoffentlich klar, dass du aktuell nur alle 0,8 Sekunden "nachschaust", ob etwas im READ-FIFO drinnen steht, um es dann abzuholen.
- Dir ist hoffentlich klar, dass du nur alle 6,4 Sekunden Kommandos an eine der Schnittstellen weitergibst, es ist vollkommen egal, ob du den Code in Schnittstelle 3 deaktivierst oder nicht.
- Wie groß sind den die Read & Write FIFOs eingestellt?
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
das wird das Problem nicht lösen, aber dein VI übersichtlicher machen:
Statt 5* ConcatString nur einmal FormatIntoString…
Dein RT-VI könnte auch davon profitieren, wenn du deine 8 Strings mit den Geräteantworten in einem Array verwalten würdest: nur ein Schieberegister statt 8, nur eine Schleife statt 8 paralleler Abfragen, …
@GerdW
Das kommt dann dabei raus wenn man LabVIEW Neuling ist. Man bastelt es sich irgendwie zusammen :)Die
@ Jens
Die Zuordnungen stimmen, Schnittstellen wurden auch überprüft. FPGA wurde kompiliert .
Aber die 0,8 Sekunden Wartezeit sind doch zwecks serieller Abarbeitung notwendig, oder? Oder habe ich da was falsch gemacht.
Kann es sein, dass das FIFO schneller vollgeschrieben wird als es ausgelesen wird und dass so beim Übersenden der Befehle die Port-Zuordnung nicht stimmt? Denn manchmal werden die Befehle über den falschen Port gesendet so dass z.B. das Gerät K02 gestartet wird statt H01.
Die Größe der FIFO`s: Requested Number of Elements: 1023, Actual Number auch 1023 (also schon voll?).
(31.03.2014 11:07 )Hattorii schrieb: Aber die 0,8 Sekunden Wartezeit sind doch zwecks serieller Abarbeitung notwendig, oder? Oder habe ich da was falsch gemacht.
Nochmal: Die Gesamtzyklus-Zeit, bis du wieder bei Port 1 bist, beträgt aktuell 6,4 Sekunden, da du in deiner State-Machine stur durch die 8 programmierten Ports durchgehst. Das Lesen im FPGA geschieht eigentlich immer, solange du kein neues Kommando schickst. Die Wartezeit ist parallel zu deiner Write/Read Anordnung, wird somit parallel ausgeführt. Nach Senden eines Kommandos gehst du sofort in den Versuch, Daten zu lesen. Das ist aber eigentlich nicht schlimm, da der FIFO dir die Daten puffern sollte und du in jedem 0,8s Zyklus den Puffer auch immer komplett leerst.
(31.03.2014 11:07 )Hattorii schrieb: Kann es sein, dass das FIFO schneller vollgeschrieben wird als es ausgelesen wird und dass so beim Übersenden der Befehle die Port-Zuordnung nicht stimmt? Denn manchmal werden die Befehle über den falschen Port gesendet so dass z.B. das Gerät K02 gestartet wird statt H01.
FIFO voll, ich bezweifle es. Deine Sende-Kommandos sind ca. 50 Byte lang.
Falsche Zuordnung, schwierig zu debuggen ohne echte Hardware. Du könntest natürlich den Sendeteil umbauen und genauso wie beim Read ebenfalls den Port bei jedem Byte mit übertragen. Dann hast du gar keine Probleme. Der Write-Teil könnte dann in etwa so aussehen:
(31.03.2014 11:07 )Hattorii schrieb: Die Größe der FIFO`s: Requested Number of Elements: 1023, Actual Number auch 1023 (also schon voll?).
Nein, das ist ja nur der Konfigurationsdialog. Nicht jede Größe kann eingestellt werden, deshalb ist "Actual Number" >= "Requested Number".
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!