Wertänderung S7 int

M.R.

Level-1
Beiträge
80
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi habe folgendes Problem wo ich gerade nicht weiterkomme.

Ich habe vor für Sollwerte eine Auswahl zu erstellen.
Es sieht wie folgt aus.
Am Panel wähle ich über ein Auswahlfeld den wochentag aus Montag bis Sonntag. Dann schreibe ich in eine int Variable eine 1-8 hinein je nach tag.
So und dann gibt es bei der Visu (Protool) noch die 24 Sollwerte für jede Stunde einen. Die Variablen für die Sollwerte liegen im DB13.
So jetzt mein Problem. Die Sollwerte für die Tage und Stunden leigen auf der SPS im DB 112. Jetzt will ich vom Panel die Sollwerte über den tag und den SFC 20 ins Panel laden (DB13) das klappt auch alles soweit.
So jetzt das problem:
Der SFC 20 schiebt ja nun die werte aus dem DB112 in den DB13. Danach muss er oder ein neuer SFC 20 die Werte aber anders herum schreiben damit ich die Sollwerte vom Panel ändern kann.

Also in kurzform:

Tag anwählen Sollwerte von DB112 in DB13 schieben.
Dann Sollwerte werden angezeigt DB13 in DB112 Damit Werte von Panel geändert werden können.
Dann wieder Anwahl Tag DB112 in Db13usw.

Bin für jede Hilfe Dankbar!!!

Hier mein Programmteil in AWL

//Vorwahl PLS Wertanzeige
L DB14.DBW 18 //PLS Vorwahl Wochentag 1-8
L 48 //24 Stunden int
*I
T #Anfangs_DW
//Datenbereich auslesen
LAR1 P##Quelle //Anfangsadresse des ANY-Pointers in AR1 laden
L B#(16, 2) //Syntax-ID und Typ: Byte laden
T LW [AR1,P#0.0]
L 48 //Transferlaenge in Byte
T LW [AR1,P#2.0]
L 112 //Quelle-DB
T LW [AR1,P#4.0]
L P#DBX 0.0
L #Anfangs_DW //Anfangs-DW im Quell-DB
ITD
SLD 3
+D
T LD [AR1,P#6.0]
//Sollwerte lesen und an PLS senden
CALL SFC 20
SRCBLK :=#Quelle
RET_VAL:=#BLKmove
DSTBLK :="Sollwerte_PLS".Sollwerte_Wohnzimmer //DB13
//Sollwerte von PLS in SPS schreiben
CALL SFC 20
SRCBLK :="Sollwerte_PLS".Sollwerte_Wohnzimmer //DB13
RET_VAL:=#BLKmove
DSTBLK :=#Quelle
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du darfst den/die SFC20 nicht zyklisch aufrufen, sondern nur per Flanke für einen Zyklus. Dann kannst du die Daten bearbeiten und mit einer anderen Flanke die Daten zurückmoven. Worauf du triggerst, musste dir mal überlegen.

Gruß
Flinn
 
Wie ich das mit dem Triggern und der Flanke machen soll wollte ich wissen.
Ich hatte gedacht ich werte die Änderung vom Tag aus!!!
aber wie werte ich dort eine Änderung aus???
 
Es geht ja nicht um die Doppelte Datenhaltung.
Im Panel sind 24 Int werde Angelegt. Db13
Auf der SPS Befinden sich 7x24 Int Werte in Db112
Das ganze mal 4 Räume.
Da ich wenn ich die Werte im Panel über den int Wert 1-8 Db14 Lade
Mir eine Menge Projektierung in Protool spare.
Deswegen verschiebe ich den Wert von Db112 in den Db13 und
Dann lese ich aus DB13 und Schreibe in Db112.
So war mein Gedankengang.
Es ist für eine Heizungsssteuerung und ich kann somit jede Stunde einen Sollwert vorgeben von Montag bis Sonntag.

Und jemand eine Idee???
 
Und jemand eine Idee???

Also .. ich würde das so machen :
Du hast eine Taste in der Visu mit der du ein Bit setzt für "Daten laden" oder ggf. tust du dies schon mit dem Aufbau der Bildschirmseite. Das Gleiche gilt fürs "Daten speichern". Das entsprechende Bit wird von der SPS zum Ausführen des einen oder anderen Umlade-Vorgangs verwendet und nach Ausführung desselben sofort wieder gelöscht.

Ist es das ?

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja so in etwa.
Den Aufruf der Sollwerte mach ich ja schon über den Int Wert in dem steht welchen Tag mit Sollwerten ich haben will.
Nur wenn ich einen Wert ändere soll dies dann sofort geschehen und nicht erst durch einen Tastendruck.
 
Hallo,
Vielleicht versuchst du es erstmal so wie ich es vorgeschlagen habe und dann, wenn das funktioniert erweitern wir das so, wie du haben willst ...

Gruß
LL
 
Hab es jetzt fertig gestellt mit dem Bit für lesen und schreiben.
Wie bekomme ich es hin das díe Werte sofort geschrieben werden ohne das ich ein bit setzen muss für diesen vorgang???

//Sollwerte lesen/schreiben
U "Befehle PLS".Sollwerte_Kueche.DB14_DBX20_0 //holen
FP M 42.0
= "Meldungen PLS".Antrieb10.DB15_DBX20_0
U "Befehle PLS".Sollwerte_Kueche.DB14_DBX20_1 //schreiben
FP M 42.1
= "Meldungen PLS".Antrieb10.DB15_DBX20_1
CLR
= "Befehle PLS".Sollwerte_Kueche.DB14_DBX20_0 //Befehl rücksetzen
= "Befehle PLS".Sollwerte_Kueche.DB14_DBX20_1 //Befehl rücksetzen

//Vorwahl PLS Wertanzeige
L DB14.DBW 18 //PLS Vorwahl Wochentag 1-8
L 48 //24 Stunden int
*I
T #Anfangs_DW

//Datenbereich holen
LAR1 P##Quelle //Anfangsadresse des ANY-Pointers in AR1 laden
L B#(16, 2) //Syntax-ID und Typ: Byte laden
T LW [AR1,P#0.0]
L 48 //Transferlaenge in Byte
T LW [AR1,P#2.0]
L 112 //Quelle-DB
T LW [AR1,P#4.0]
L P#DBX 0.0
L #Anfangs_DW //Anfangs-DW im Quell-DB
ITD
SLD 3
+D
T LD [AR1,P#6.0]

//Sollwerte lesen und an PLS senden

U "Meldungen PLS".Antrieb10.DB15_DBX20_0
SPBN S001
CALL "BLKMOV"
SRCBLK :=#Quelle
RET_VAL:=#BLKmove
DSTBLK :="Sollwerte_PLS".Sollwerte_Wohnzimmer //DB13
S001: NOP 0

//Sollwerte von PLS in SPS schreiben
U "Meldungen PLS".Antrieb10.DB15_DBX20_1
SPBN S002
CALL "BLKMOV"
SRCBLK :="Sollwerte_PLS".Sollwerte_Wohnzimmer //DB13
RET_VAL:=#BLKmove
DSTBLK :=#Quelle
S002: NOP 0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Den Aufruf der Sollwerte mach ich ja schon über den Int Wert in dem steht welchen Tag mit Sollwerten ich haben will.
Nur wenn ich einen Wert ändere soll dies dann sofort geschehen und nicht erst durch einen Tastendruck.
Ich beziehe mich mal auf diese Mail ...
Dieser INT-Wert, den du da meinst, wird ja sehr wahrscheinlich über ein Eingabefeld geändert - ggf. auch über eine "+" oder "-" -Taste. Mit diesem Wert könntest du nun "bei Wertänderung" das Setzen genau dieser Bits (oder eines neuen Bits nach dem gleichen Schema) erzwingen, die du aktuell über Tasten ansteuerst. Das Einzige, was du in deinem Programm nun noch einbauen mußt ist, dass du dir "merkst", welchen Index du zuletzt geladen hast (den den mußt du ja bei Wert-Änderung wieder zurückschreiben).

Gruß
LL
 
Zurück
Oben