Zählen über Variablen/Datenbank, scheinbar willkürliche Werte

morrison

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

ich darf mir in der Firma gerade selber SPS beibringen und habe Probleme beim zählen mit Variablen bzw. mit einer Datenbank.
Gezählt werden soll, wie viele Schaltzyklen ein Relais mitmacht und ab wann die Abweichung zu groß wird. Dazu eignen sich die CTU Bausteine ja schonmal nicht. Ich brauche Werte bis ca. 500.000. Also hab ich mir gedacht, ich pack die Werte einfach in ne 32bit Variable und vergleich die hinterher mit nem Komparator.

Das funktioniert aber nur für den ersten Wert, der zählt in Einerschritten. Die anderen zählen in allen möglich anderen Schritten (siehe Screenshot). Wo liegt das Problem? :confused: Ich komm einfach nicht dahinter.

Hardware ist ne 314er CPU mit jew. einer dig. Ein- und Ausgangskarte, programmiert wird mit Step7 V5.x (ich glaube 5.3 bin mir da aber nicht ganz sicher).
Meine bisherigen Kenntnisse beschränken sich auf LOGO und n bisschen FUP programmieren, allzu viel ist da also noch nicht da. ;)

Variablen.JPG
 

Peda

Active member
Beiträge
31
Punkte Reaktionen
6
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
dir ist bewusst das dass Merkerdoppelwort MD100 aus den Bytes MB100-103 besteht?!
und das Bei MD101-> MB101-MB104 und soweiter!
Also werden deine Werte immerwieder überschrieben!!

mfg
 
OP
M

morrison

Member
Beiträge
11
Punkte Reaktionen
0
War mir nicht bewusst, macht aber Sinn. Danke.

Ist das bei allen Adressierungen so, dass die Bytes in den Wörten drinstecken?
 
Zuletzt bearbeitet:
OP
M

morrison

Member
Beiträge
11
Punkte Reaktionen
0
Zählen klappt, aber jetzt hab ich ein Problem beim Vergleichen.
Über einen Subtrahierer wird Zahl 2(DBD5) von Zahl 1(DBD1) abgezogen und das Ergebnis in DBD21 gespeichert. Nun soll DBD21 über einen Vergleicher mit 10 verglichen werden. Ist DBD21>= 10, soll die Lampe leuchten.
Allerdings zählt DBD21 nur bis 9, dann wird in DBD1 welcher eigentlich mangels Signal gar nicht zählen darf weitergezählt, DBD21 bleibt bei 9 stehen und die Lampe bleibt aus.
Die Zahlen sind alle vom Typ DINT.

Was passiert da und wo liegt das Problem?

Vergleichen.JPG
 
OP
M

morrison

Member
Beiträge
11
Punkte Reaktionen
0
Das Ein-bit ist der Schalter, der das Programm startet und anhält, der ist dauerhaft an.
Der Fehler muss mit dem Vergleicher zusammenhängen. Ohne Vergleicher zählt das Programm einwandfrei, auch wenn ich die Kontakte abklemme (warum sollte es auch nicht).
 
Zuletzt bearbeitet:
OP
M

morrison

Member
Beiträge
11
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
In DBD1 steht wie oft das Relais angezogen hat, in DBD5 wie oft ein Schließerkontakt durchgeschaltet hat.
Diese sollen über ein paar 100.000 Schaltzyklen verglichen werden und bei einer Abweichung von mehr als 10 soll die Lampe leuchten.

DB1DB5.JPG
 

Tigerente1974

Well-known member
Beiträge
1.816
Punkte Reaktionen
290
Warum nutzt Du eigentlich ungerade Adressen? Ich würde fast drauf wetten, dass es irgendwo eine Bereichsüberschneidung gibt...
Ob DBW oder DBD, da "gehören" nur gerade Adressen dran: DBW0, DBW2, DBD4...
Wenn Du mittlerweile weisst, welche Bytes zu einem Wort oder Doppelwort gehören, dann such mal in Deinem Programm nach solchen Überschneidungen. Und verabschiede Dich von den ungeraden Wortadressierungen.
 
OP
M

morrison

Member
Beiträge
11
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
So sieht meine Datenbank aus. Sollte stimmen, oder?

Datenbank.JPG

Ich kann heute nachmittag mal das ganze Programm hochladen. Geht nur auf Arbeit nicht, dafür ist das Netz zu langsam.

In DBD1 und 5 stehen Zahlen von 0 bis ~100.000.
 
Zuletzt bearbeitet:

vollmi

Well-known member
Beiträge
5.055
Punkte Reaktionen
1.186
Wenn du schon einen DB zusammenstellst. Benenne doch die einzelnen Variablen grad sinngemäss. Gib dem DB auch n Symbol. Und häng dann gleich die Symbole an die Bausteine. Da gehst du einigem an Aerger aus dem Weg, vor allem was Bereichsüberschneidungen angeht.

Und der nächste kann das Projekt dann noch lesen ohne über die Absolute Adressierung zu stolpern und im DB dann das Symbol DBD1 zu suchen.

mfG René
 
Zuletzt bearbeitet:

vollmi

Well-known member
Beiträge
5.055
Punkte Reaktionen
1.186
Schau dir das mal an.

Anhang anzeigen Relaiste.zip

Ich hab das mal in Symbolische zugriffe geändert und aus allem vollqualifizierte DB zugriffe gemacht.

Ich weiss jetzt stech ich in ein Wespennest. Gewöhn dir die Nutzung von Merkern garnicht erst an. Das Programm gehört IMHO in einen FB mit Instanz. Flanken Timer (IEC Timer) etc gehören in die Schnittstelle.

mfG René
 
Zuletzt bearbeitet:
Oben