Vorsicht, Anfänger->Zählen mit FB

urlicht

Level-2
Beiträge
104
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorsicht Anfänger
Ich weiss, da waren schon einige Beiträge zu dem Thema, habe aber ein grundsätzliches Problem.
Ein Ereigniszähler ist als FB zu programmieren. Format des Zählwertes ist DINT.
Der Zählwert wird aus einem DB geholt, etwa so:

U #CBIT //Zählereignis
FP #CM //Zählmerker Flanke +
SPB CNT
SPA END
CNT: L #CVAL //Zählwert holen
L L#1 // eins dazu
+D //addieren
T #CVAL
END: NOP 0
#CVAL wurde im Instanz-DB als DINT in IN-OUT deklariert.
#CBIT wurde im Instanz-DB als BOOL in IN deklariert.
FB Aufruf etwa wie folgt:

CALL FBZAEHL
CBIT: M450.5 // z.B. Taktmerker 1 Sekunde
CVAL: DB756.DBD8

Ergebnis: es zählt nix


Wo liegt der Fehler?
 
Hallo,

#CM muss eine Variable vom Typ Inout sein!

edit: CVAL auch, da es ein DB-Zugriff ist.

Lokalvariablen haben beim Aufruf des FBs in der Regel den Wert 0.
Wenn sie nicht zugewiesen werden, z.B. bei Flankenauswertungen, sind sie halt 0.

Gruß
raika
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
#CM muß nicht unbedingt eine Inout-Variable sein, kann auch eine STAT- Variable im Instanz-DB sein. Auf keinen Fall darf es eine temporäre Variable
sein.
VG Gerhard
 
Danke schon mal für die Antworten.
Es hat sich aber ein Fehler im Posting eingeschlichen.
#CM ist natürlich eine Temporäre Variable vom Typ BOOL, da sie ja nur den Flankenmerker darstellt.
#CBIT muss ein Variable vom Typ in sein. Sie stellt ja das Zählereignis dar.
Die Impulsbildung über die Flanke funtioniert auch. Ich habe sie per Zuweisung an ein Merkerbit und SA T12 zur Kontrolle zurückliefern lassen.

Das Problem scheint im Zählteil selbst zu liegen.
 
Hallo,

#CM ist natürlich eine Temporäre Variable vom Typ BOOL, da sie ja nur den Flankenmerker darstellt.
Solange der Zähl-FB der einzige Baustein ist, der im OB1 aufgerufen wird, funktioniert es auch, wenn #CM eine temporäre Variable ist. Sobald aber weitere Beusteine hinzu kommen, klappt das nicht mehr - bin da selber mal drauf reingefallen :???: - da der Speicherbereich dann von einem anderen Baustein überschrieben wird.
Mach da mal ne statische draus, wie OHGN bereits schrieb.
Ansonsten funktioniert das Zählen (habs im Simulator getestet) einwandfrei.

Gruss,
Jörg
 
Zurück
Oben