Positive Flanke in einer Funktion?

Beiträge
6
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

vorab möchte ich erstmal "Hallo" sagen, da ich gerade neu hier bin :). Mein Name ist unschwer zu erkennen ich heiße Sebastian und bin 27 Jahre alt, habe vor 3 Jahren mit dem Programmieren angefangen und habe mir zum größten Teil
alles selber beigebracht. Doch gerade eben stehe ich vor einem Problem.

Ich habe eine Funktion geschrieben, in der ich einen Zähler ansteuere ( alles in AWL programmiert). Die funktion funktioniert auch auf dem ersten Blick so wie ich es mir vorstelle, aber jetzt kommt das große "ABER".
Wenn ich meinen FC in einem anderen FC aufrufe der in FUP prgrammiert ist, ich meine Eingangsparameter anschließe und teste funktioniert alles einwandfrei. Übersetze ich den FC jedoch in AWL und rufe dann meinen FC auf und parametriere alles funktioniert es nicht. Meine flanke wird nicht angesteuert und somit mein Zählwert nicht um 1 erhöht und ich habe keine idee was ich falsch gemacht habe.

Hier einen kurzen Auszug aus meinem Baustein:

O #Störung
O #Reset
JCN m003
AN #Eingang
AN #Störung
A #takt
FP #Zähler_plus
= #Zähler_plus1
A #Zähler_plus1
JNB m001
L #Zählwert
L 1
+I
T #Zählwert
m001: NOP 0
m003: NOP 0
 

borromeus

Well-known member
Beiträge
2.270
Punkte Reaktionen
329
Najo, Zweifel....
Was sind die Symboloperanden für ein Typ? In/Out/Temp/InOut
Vor allem der #Zähler_plus?
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
17.603
Punkte Reaktionen
5.179
Diese Variablen müssen IN_OUT sein, damit sie ein Gedächtnis haben:
! Störung ist out --> IN_OUT
! Zähler_plus ist temp --> IN_OUT
! Zählwert ist temp --> IN_OUT

Oder schreibe die Funktion als Funktionsbaustein FB mit den Variablen in STAT.

Dein Problem hat nichts mit FUP oder AWL zu tun. Es ist Zufall, daß es in FUP funktioniert.

Harald
 
OP
S
Beiträge
6
Punkte Reaktionen
0
Sorry ich hatte mich vertan, Zählwert ist schon In_Out, der Rest ist wie gesagt temp. Das Problem ist, wenn ich einen FB nehme, muss ich ihm einen DB zuweisen und da
mein Programm schon sehr groß ist und die Softwareentwickler keine vernünftige Struktur eingebracht haben, wird es durch programmieren eines FB's nur noch unübersichtlicher.
Ich werde es gleich mal versuchen, die von euch oben genannten tempvariablen als In_Out zu programmieren und zu testen.

Vielen Danke schonmal für eure Hilfe.


P.S: Ob das Problem unabhängig von der Programmierart ist weiß ich nicht 100% sicher, ich werde später noch ein Netzwerk posten, was dasselbe Problem hat, wenn man es nach AWL übersetzt.
 

414

Member
Beiträge
14
Punkte Reaktionen
0
Hi,

ich gehe davon aus, dass Du Dir hier einen stink normalen Zähler kreieren willst.

kleiner Tip:

den #Takt (ich gehe davon aus hier ist der CPU- Takt-Merker aus der HW-Konfig gemeint) kannst Du Dir auch global, z.B. am Anfang oder Ende OB1, in eine FP wandeln und auf einen einen Merker legen, der stets gültig ist:
U Takt
FP M1.0
= M1.1

den M1.1 kannst Du überall aufrufen. Erliefert Dir entsprechend dem Takt stets eien FP in gleichen Zeitabständen.
Du würdest Dir an Deinem FC- Afruf damit die Anschaltung eines Flanken- und/oder eines Flankenhilfsmerkers sparen.

Die anderen Var sollten nicht als Temp deklariert werden, s. hier die AW von PN/DB.

414
 

Boxy

Well-known member
Beiträge
1.422
Punkte Reaktionen
138
Gib das ganze mal richtig in FUP ein, wenn es in AWL geht geht es auch in FUP.
Mist wohl eher ein Problem der richtigen Eingabe.
 

Jochen Kühner

Well-known member
Beiträge
4.156
Punkte Reaktionen
475
eine fb bearbeitung dauert auch nicht länger, und ist manchmal auch noch schneller, wenn die hilfsmerker welche nun auf inout parametern liegen z.b. aus einem db kommen! Wenn man den db als multiinstanz in einem fb aufruft braucht man ja auch keinen extra db...
 

Jochen Kühner

Well-known member
Beiträge
4.156
Punkte Reaktionen
475
Zuviel Werbung?
->Hier kostenlos registrieren
P.S: Ob das Problem unabhängig von der Programmierart ist weiß ich nicht 100% sicher, ich werde später noch ein Netzwerk posten, was dasselbe Problem hat, wenn man es nach AWL übersetzt.

das problem ist einfach das du lokaldaten als permanenten speicher benutzt hast, was diese nicht sind, und es zufälligerweise eben funktioniert hat!
 
OP
S
Beiträge
6
Punkte Reaktionen
0
Hallo und nochmals vielen Dank für eure Antworten, ich habe wie von mehreren hier gesagt die deklaration im FC von temp auf IN_OUT verändert und schon hat es funktioniert. Zumindest funktioniert mein FC jetzt so wie ich es mir vorstelle.
Klar ist die richtige Eingabe in FUP wichtig um es später in AWL zu übersetzen und den gewünschten Ablauf zu realisieren.
Hier ist für euch das versprochene Netzwerk, was in FUP funktioniert und in AWL nicht:


A(
A "S.88.1"
FP "M43.2"
NOT
A "K.55.5"
A "K.55.6"
L S5T#15S
SD "T167"
NOP 0
NOP 0
NOP 0
A "T167"
)
A "M0.0"
= "Alarmen".ST492


Ich habe es jetzt in AWL übersetzt, damit ihr er kopieren und ausprobieren könnt.

MFG Sebastian und nochmals vielen Dank für eure Hilfe bei meiner Funktion, denn diese ist gedacht um all die Netzwerke wie oben gepostet zu ersetzen ;)
 

JoopB

Well-known member
Beiträge
879
Punkte Reaktionen
188
Dass funktioniert in AWL wie in FUP, nach 15 sec ist T167 abgelauffen aber in der Status kan mann die zeit nich sien ablaufen wie in FUP oder KOP. In PLCSim kan man dass wel sien wenn T 167 bei der zeiten angewald wert.
 
Oben