# Bacnet-Objekt schaltet hin und her



## Klimamensch (30 Juli 2016)

Hallo,

ich habe einen Wago-Controller 750-831, mit dem ich Werte per BACnet in ein Netzwerk übergebe. Mit dem Wago BACnet Configurator überwache ich, ob die BACnet-Objekte, die von Wago-Controller erzeugt werden auch sichtbar und korrekt sind. 

Nun habe ich folgendes Problem:

Ich habe einen BACNET_BINARY_VALUE, der vom Wago-Controller erzeugt wird. Im Present_Value steht eine "1", also "AN" "TRUE" oder wie auch immer man es bezeichnen möchte. Der Wert ist im Wago Bacnet Configurator lesbar, ist aber mal "1" und dann wieder "0", obwohl im Wago-Controller immer "1" steht. Das ganze wechselt ziemlich unregelmäßig hin und her. Die Phasen der "0" sind jedoch länger als die der "1".

Was passiert hier?
Wer hat eine Idee für einen Lösungsansatz?


----------



## Wu Fu (1 August 2016)

Hast Du das Objekt mit einem anderen Objekt eines externen Gerätes verknüpft?
Schau Dir mal das gesamte Priority Array an, vielleicht es zyklisch überschrieben, bevor es die SPS wieder überschreibt.
Welchen Wert hast Du in relinquish default stehen?

Schöne Grüße
Daniel


----------



## KingHelmer (1 August 2016)

Eventuell schreibst du in zwei unterschiedlichen Tasks mit unterschiedlicher Zykluszeit auf die selbe Variable, was ein Flickern bewirkt.
Aktualisiert wird im Configurator aber nicht so schnell, daher wechselt der Zustand nur langsam und unregelmäßig.

Flo


----------



## Klimamensch (1 August 2016)

Es ist tatsächlich so, dass die globale Variable, also das Bacnet-Objekt, mit jedem Einzelzyklus zwischen "an" und "aus" wechselt. Mein Funktionsblock gibt allerdings bei jedem Einzelzyklus den Wert "an" an das globale Bacnet-Objekt weiter. 

Jedes Mal, wenn ich einen Einzelzyklus durchlaufen lasse, blinkt im WAGO Bacnet Configurator der Present_Value und das Priority_Array auf. Das ist wohl ein Zeichen für die Wert-Änderung. Im Priority-Array steht im Fall "aus" in jeder der 16 Zeilen null. Nur wenn der Fall "an" eintritt, steht in der letzten Zeile der Wert "an". Mir scheint der Fehler liegt irgendwo im Priority_Array, zumal ich noch kaum damit gearbeitet habe und mir die Funktion des Arrays noch nicht ganz klar ist.

Ich würde mich über weiter Hilfe freuen.


----------



## Klimamensch (2 August 2016)

Ich habe noch drei Bilder angehängt, um die Situation zu verdeutlichen.


----------



## Wu Fu (3 August 2016)

Wenn du 16mal "null" drin stehen hast, wird der Present Value mit dem relinquish default überschrieben, hier steht vermutlich "Aus" drin.
Setze den relinquish default auf "Ein" und Du hast das Problem nicht mehr.
Spaß bei Seite das wird Dein Problem nicht lösen.

Das Problem scheint zu sein, dass der Wert den Du aus dem Programm schreibst nicht durchgehend geschrieben wird. Warum dass so ist, kann ich leider momentan nicht sagen.
Hast Du das Objekt mit einem anderen Objekt eines anderen Gerätes verbunden?
Kann er sein, dass der Present Value woanders im Programm nochmals beschrieben wird?
Wird die Task zyklisch aufgerufen?


----------



## Klimamensch (3 August 2016)

Ich habe nun folgende Änderung vorgenommen, die funktioniert.

Ich wandele nun einen boolschen Wert nur noch in einen BacnetbinaryPV um und schreibe den Werte dann in den Present-Value des global definierten Bacnet_Binary_Values. Das heißt, ich schreibe mit jedem Zyklus nun kein komplett neues Bacnet-Objekt, sondern greife nur noch auf den Present_Value des bestehenden Objekts zu. Ich hoffe das ist so verständlich beschrieben.

Diese Variante funktioniert und ich werde sie nun auch so im gesamten Programm umsetzen. Warum das der Fall ist, kann ich mir aber nicht erklären.

Im Anhang findet sich noch ein Bild, das das oben Beschriebene noch mal erläutern soll.

Das Problem ist vorerst für mich abgeschlossen. Ich danke euch für eure Hilfe.


----------



## Wu Fu (3 August 2016)

Schön das es klappt.

Mein letztes Wago/BACnet Projekt ist schon etwas her. Ich habe damals alle Codesys-Variablen erst im BACnet Konfigurator mit den BACnet-Objekten verbunden, das war eine heiden Arbeit.
Soweit ich das erkenne erzeugst Du das BACnet Objekt schon in Codesys, das wäre die elegantere Lösung.

Warum das so nicht geklappt hat weiß ich leider auch nicht.
Aber gut das es nun so klappt.

Schöne Grüße


----------

