08-14-2009 02:41 AM
Hallo,
ich habe auf einem cRIO ein Programm geschrieben, welches über ein Netzwerk Daten mit einem Programm austauscht, welches auf ein PC läuft.
Zur Kommunikation verwende ich Umgebungsvariablen. Einige dieser Variablen werden in bestimmten Fällen gelesen und in anderen Fällen geschrieben.
Beispiel: Eine boolsche Variable kann von einem Nutzer auf "True" gesetzt werden, damit eine bestimmte Aktion ausgeführt wird. In diesem Fall ist die Variable im Programm "lesend". Jedoch gibt es innerhalb des Programms Sicherheitsfunktionen die in definierten Fällen diese Variable auf "False" setzen und eine Rücksetzen (durch einen Nutzer) der Variable auf "True" verhindern. Dies habe ich durche eine Case-Schleife realisiert. -> Im Case True ist die Variable "lesend" und im Case False ist sie "schreibend" und wird ständig mit False beschrieben, damit eine Wertänderung auf True durch einen Nutzer umgehend rückgängig gemacht wird.
Nun habe ich folgendes festgestellt:
Situation: Die Sicherheitsfunktion ist bspw. 20 Schleifendurchläufe lang aktiv gewesen, die Case-Schleife hatte daher 20 mal den Wert False und somit wurde in die Variable auch 20 mal ein False geschrieben. Im Schleifendurchlauf 21 wird die Sicherheitsfunktion inaktiv und die Case-Schleife bekommt den Wert True, wodurch auch die Variable nicht mehr beschrieben wird, sondern jetzt "lesend" ist.
Problem: Wenn der User ebenfalls im 21. Schleifendurchlauf die Variable jetzt vom PC aus auf True setzt, dauert es jedoch noch einmal 19 Schleifendurchläufe bevor die Variable auchim Programm True wird.
Es scheint so als hätte die Variable einen internen Puffer (FIFO), so das in den ersten 20 Schleifendurchläufen die ersten 20 Elemente auf False gesetzt werden und ab den 21. Schleifendurchlauf das 21. Element auf True gesetzt wird. Ab dem 21. Schleifendurchlauf wird im ein Element des Puffers ausgegeben, so dass es 21 weitere Schleifendurchläufe dauert bevor das True wirklich im Programm ankommt.
In den Variablen-Eigenschaften, kann man zwar unter "Netzwerk" einen Puffer einstellen, aber der scheint mit der Probelmatik nichts zu tun zu haben, da ein deaktiviern dieses Puffers das Problem nicht gelöst hat. Auch die Einstellung RT-FIFO mit einem Einzelelement hat nichts gebracht.
Hat jemand auch schon diese Erfahrung gemacht, wenn ja gibt es irgend eine Möglichkeit dies durch spezielle Einstellungen zu verhindern oder bleibt letzten Endes nur die Möglichkeit programmatisch das mehrmalsschreiben der Varible zu unterbinden?
MfG Asok
08-14-2009 04:40 AM