Variablen wärend der Laufzeit

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo ich hoffe sehr, dass mir mit meinem Problem geholfen werden kann.

Habe jetzt meine ganze Anwendung bzw. das Programm auf folgendem Bruchteil reduziert.

Und zwar möchte ich eine Variable (mit Startwert) einerseits über Taster erhöhen bzw. reduzieren.
Dazu habe ich die Taster einfach an zwei digitale Eingänge gelegt jeweils 2 Und-Verknüpfungen erstellt mit einer Negation am Eingang damit kein Wiederspruch entsteht.
Dahinter befindet sich ein Addierer bzw. Subtrahierer (also Undverknüpfung an EN) welche nun einen Wert von der Variable abziehen bzw. zu addieren
und am Ausgang wieder den neuen Wert der Variablen zuordnen.

Ich beobachte auch die Variable mit einer Beobachtungstabelle in der man ja nun auch eigentlich den Wert einstellen können sollte, den die Variable annehmen soll.

Das Problem ist, dass sich die Variable nur beim tasten für runter kleiner wir und sie nimmt auch nicht den Wert an den ich ihr in der Beobachtungstabelle geben möchte.
Jetzt habe ich das ganze 3 mal, also für insgesamt 6 digitale Eingänge (jeweils pärchenweise für hoch und runter). Jetzt kommt noch hinzu das sich egal welchen Taster ich für runter drücke alle 3 Variablen kleiner werden…

Dazu sei gesagt das ich die Variablen in einem Datenbaustein global angelegt habe, der versuch mit Variablen in einer PLC-Tabelle zu arbeiten ging überhaupt nicht!

Hoffentlich könnt ihr das anhand meiner Beschreibung nachvollziehen und mit einen rat geben was da falsch sein könnte oder wie ich das mache.


Bin ratlos…

Bitte nicht all zu kompliziert erklären, bin nicht all zu Fitt in SPS programmierung!

Jetzt schon mal danke für die Hilfe!


Hier angaben zu Gerät und Programm:

CPU TYP:

CPU 1215C AC/DC/RLY

Verwendete Softwareversion des Projektierungssystems:

SIMATIC S7-1200 bzw. TIA Portal V11
 

Sinix

Well-known member
Beiträge
1.588
Punkte Reaktionen
216
Zuviel Werbung?
->Hier kostenlos registrieren
Hi,

stell mal einen Screenshot rein.
Die PLC-Tabelle kannst du online beobachten, zum Steuern müsstest du eine Beobachtungstabelle nehmen (=2 Paar verschiedene Schuhe).

MfG MK
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Bilder des Programms sind da! ;) Ja ich benütze auch eine Beobachtungstabelle, da kann ich ja auch dann sehen wie der Wert der Variablen nach unten geht wenn ich einen Taster für runter betätige!
 

Sinix

Well-known member
Beiträge
1.588
Punkte Reaktionen
216
Hat jeder Aufruf einen eigenen Instanz-DB?
Hast du es mal mit nur einem Aufruf probiert?
Werden deine globalen Variablen anderweitig im Programm aufgerufen?
Was siehst du beim online-beobachten wenn du aufwärts betätigst?
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Huuu, ich weiß nicht ob die Fragen ganz verstehe!
Aber Ich habe nur einen DB in denen ich alle meine Variablen habe, falls du das meintest!
Die Variablen benutze ich anders wo nicht, so wie es da in den bildern zu sehen ist halt
3 mal zu einem Baustein zusammengefügt! Aber das ist ja dann erstmal die nächste Sufe wenn es
um alle 3 phasen geht! Im moment habe ich nur das was die bilder zeigen!
Also ich beobachte die Variablen wärend des laufens, also wenn ich dann die Tasten drücke wenn das Online ist ansonsten nicht!
 

thomas_1975

Well-known member
Beiträge
240
Punkte Reaktionen
34
Du solltest prüfen ob die Mathematik in jedem Zyklus, oder solange Taste gedrückt ausgeführt wird. Stichwort Flankenauswertung Gruß thomas
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Hallo,
du hast ja an deiner Rechenfunktion die Variable X-Wert. Was hat die für einen Inhalt ? Startwert ? Sind deine Variablen im FB im Stat oder im Temp Bereich angelegt ? Wie Beobachtest du deine Werte in der Variablen Tabelle über den Instanz DB ? Oder Online im Baustein ?
Du müsstest ja eine Variable Tabelle öffnen und die Bereiche aus deinem DB 7 beobachten . Machst du das so ?
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Also bei x-wert handelt es sich um einen DInt mit dem Strtwert 2, aber auch wenn ich da nur eine Zahl statt der Variablen dran hänge ändert sich nichts!

Alle Variablen in meinem DB sind unter Static angelegt, ist das falsch?

Ich beobachte die Variablen einfach indem ich sie über den Namen in die Beobachtungstabelle einfüge!
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Hallo ,
mir ist gerade noch aufgefallen das du die SollSpannung A nur Subtrahierts und die Sollspannung B nur addierst.
Du hattest anfangs geschrieben :
"
Und zwar möchte ich eine Variable (mit Startwert) einerseits über Taster erhöhen bzw. reduzieren. "
So wird nur der Sollwert fü A kleiner und für B größer. Des weiteren wird der neue rechenwert nicht berücksichtigt. D.h. wenn meine Aktuelle Spannung sich nicht ändert komme ich immer wieder auf das selbe Ergebnis. So wie ich dich bisher verstanden habe würde deine gewünschte Funktion eher einem Zähler entsprechen.
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Das A bzw. B ist nur zum auseinanderhalten der Eingänge am Baustein! Auf dem nächsten bild lege ich an beide eingänge die Variable soll Spannung!
Also die mit A und B sind nur innerhalb des Baussteins (Namen der Eingänge).
Kann doch innerhalb des Bausteins 2 eingänge bzw. ausgänge nicht den selben namen geben...
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Aber trotzdem du willst doch das sich dein errechneter Wert beim nächsten Tastendruck wieder ändert.
Beispiel :
Sollspannung A = 100
Variablen Wert X = 2
Beim Trigger von deinen Eingängen Startest du die Rechenfunktion beim Addieren = 102.
So ....
Triggerst du jetzt noch mal kommst du wieder auf das Ergebnis 102. Da deine Aktuelle Spannung ja gleich bleibt.
Ich habe dich so verstanden das du die Sollspannung A hoch oder runter zählen möchtest mit dem Variablen Wert X bei Tastendruck. Das würde so wie auf deinem Bild dragestellt nicht funktionieren. Oder wir haben aneinander vorbei geredet.
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Ist schon richtig! Ich möchte einen Variablen Wert also jede Phase hoch und runter regeln!
Das runter macht er ja (Auch wenn das ein wenig schnell passiert, nähmlich einmal kurz drücken geht der schon 500 runter), nur das hoch geht nicht!

Ich füge doch jedesmal im zweiten bild der Variablen den neu Errechneten wert zu der dann vorne wieder anliegt, also werden andauert 2 abgezogen wenn ich gedrückz halte!

Und ich kann nicht verstehen wieso nur eins von beiden geht!
 

spqr76

Well-known member
Beiträge
125
Punkte Reaktionen
4
Zuviel Werbung?
->Hier kostenlos registrieren
Ok,
ich würde das so machen :

Mit M0.0 vorwaertszählen

U M 0.0
FP M 2.0
SPBNB m001
L MW 100
L 2 // Hier kannst du deine Variable X Wert einsetzen
+I
T MW 100
m001: NOP 0




Mit M0.1 wird zurück gezählt
U M 0.1
FP M 2.1
SPBNB m002
L MW 100
L 2 // Hier kannst du deine Variable X Wert einsetzen
-I
T MW 100
m002: NOP 0
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Ich habe jetzt einfach mal das 1. Bild in gleich in die Main gepackt und nicht noch den Baustein im 2. Bild daraus gemacht und dann macht er das hoch und runter (auch wenn noch zu schnell), aber wo ist dann der Fehler wenn ich also aus Bild 1 einfach nochmal den einzelnen Baustein in Bild 2 mache??? Ich lege da doch nur nochmal ein und ausgänge an die ich dann wiederrum zuweise... Wenn ich alle verknüpfungen in die Main packe ohne aus einzelnen Funktionen wieder Baussteine zu machen, wird das zu Mächtig und unübersichtlich!

Hier Bild:

nur main.JPG
 
Zuletzt bearbeitet:

Sinix

Well-known member
Beiträge
1.588
Punkte Reaktionen
216
Das runter macht er ja (Auch wenn das ein wenig schnell passiert, nähmlich einmal kurz drücken geht der schon 500 runter), nur das hoch geht nicht!

Da musst du mit Flanken arbeiten.(sonst wird bei jedem Zyklus (Millisekunden) addiert/subtrahiert)

Ich habe jetzt einfach mal das 1. Bild in gleich in die Main gepackt und nicht noch den Baustein im 2. Bild daraus gemacht und dann macht er das
...

wie spqr schon schrieb, entscheidend ist was an IN1 vom ADD/SUB steht. Hier muss wieder die statische Variable vom OUT drauf.
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Ja das mit den Flanken hab ich mir gedacht, aber keine Funktion dafür gefunden. Unter Pulse steht beispielsweise nur eine Pulsweitenmodulation.
Ich hatte auch überlegt einen Zeitfunktion einzubauen, damit der halt beispielsweise nur alle 0,5 sek. hoch oder runter zählt,
leider auch dafür nichts gefunden! Wo genau finde ich denn Anweisungen dafür? Hab eigentlich alles durchgeguckt!

Und warum spinnt der nun rumm wenn ich meine Verknüpungen einfach nochmal in einen Baustein packe und da nur die ein- und ausgänge zuweise?
Klar kann ich jetzt alles in der Main einzeln beschreiben, aber wie schon gesagt wird das zu mächtig und unübersichtlich!
 

Thinfilm

Well-known member
Beiträge
50
Punkte Reaktionen
6
Ich glaube Du verwechsest hier was. Schau bitte nicht unter Puls sondern unter Flankenauswertung. Denn hier wird nur ein "1" Impuls deines Tasters ausgewertet und nicht einer pro Zyklus.
 
OP
S

Spider

Member
Beiträge
13
Punkte Reaktionen
0
Diesen Unterpunkt habe ich in meinen Anweisungslisten nicht. :(
Wo finde ich denn andere Anweisungen oder Funktionen als diese?

Hier Bild:

Anweisungslisten.JPG
 
Oben