S5 OP17: Zählersetzen geht nicht immer

leszek77

Level-1
Beiträge
37
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum,
ich schreibe eine Kleine Steuerung welche die Werte von einen OP17 auf eine S5- Steuerung überträgt und dann soll der Zähler auf diesen wert gesetzt werden.
Der Zahlenwert wird in DB14 DW3 abgelegt über FB241 in BCD umgewandelt und in Merker MW80 gesichert. Ich habe ein Zeiger auf die Systemtastatur gelegt und dort Frage ich die Entertaste ab. M 39.6

...
SPA FB241
...
U M39.6
L MW80
S Z3
...
Soweit so gut. Nun das Problem:

Ich habe gemerkt das nicht immer der Zähler auf den neuen Wert gesetzt wird. Bei einen Kurzen Enter Tastendruck wird dieser Nicht gesetzt. Manchmal erst beim 2ten Drücken. Ich weis jetzt ob das etwas mit der 1s abtast Zeit zur tun hat. Oder der Zähler keine positive Flanke bekommt.
ich habe es dann so erweitert. Hilft bissl. aber Problem ist immer noch da.

U M39.6
U M50.1
L MW80
S Z3

UN M50.1
= M50.1

Wie kann ich mein Problem lösen. Kann ich auch die Eingabebestätigung anders abfragen?

Ich bin für eure Hilfe sehr dankbar.
mfg Leszek77
 
hallo,

ist der merker nur solange gesetzt wie die Taste gedrückt ist?

Wenn ja, dann setze das Bit vom OP aus dauerhaft, und mach es in der SPS platt, nachdem der Zähler bearbeitet wurde.

Damit stellst du sicher, das die Übertragung erfolgt ist.

Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
also du meinst einen 2ten DW mit OP setzen und dann kann ich ja mit SPS zurücksetzen. Aber wie kann ich das mit den op machen? müsste man doch eine art "event" auslösen? Sowas änliches habe ich auch probiert mit Hilfe von Sammelbit aber hat auch nicht hingehauen.
gruss leszek
 
Basistakt

Moin,

sieh mal nach wie der Basistakt der Steuerung eingestellt ist.
Sollte dieser > 1 X 200ms verlängert sich auch der Erfassungszyklus.
Bei 3 X 200ms hast du 3 sec. Erfassungszyklus.
Wenn ich mich nicht irre kann man der Erfassungszyklus für die Funktios- und Systemtastertur beim OP 17 nur über diesen Wert beeinflussen.

Ich würde mir eine Rückmeldung ans OP geben lassen z.B. "Gespeichert" um sicher zu gehen das der Wert angekommen ist.

gruß
Sven_HH
 
kannst du deiner ENTER-Taste keine Aktion zuweisen?
So was in der Art "Setze Bit".

Dort würde ich das Bit bei Tastendruck setzen, und in der SPS nach Bearbeitung rücksetzen.

Ich denke nicht, dass du noch mehr Variablen anlegen musst.
 
Das ist ein altes Problem bei den Dingern. Die Übertragung zu SPS dauert etwas. Wenn Du vorher den Finger vom Knopf nimmst dann kommt nix an.
Geht eigentlich nur über Bit setzen

Im OP

U Enter
S Bit

In SPS

U Bit
L DW
S Z

L DW
L Z
=!
R Bit



peter(R)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,danke für die Antworten ich habe das jetzt so ähnlich wie vorgeschlagen programmiert.

Ich habe mit ProTool die Variabel welche auf den Zähler zu übertragen ist löst eine Funktion aus. Diese Funktion Reagiert bei Den Ereignis Variabel geändert
und Setzt mir ein DW23 auf 1.

Code:
DW 3  = Zahl über FB241 auf MW42
DW 23 = Zahl über OP geändert 

L dw 23
L KF +0
><F
= M3.1

UNM3.1
SPB=M01

L KF+0
T DW23

M01:

U M3.1
L MW 42 (
S Z3

jetzt habe ich das Problem das der zähler immer eine Eingabe später ist als er sollte.

Eingabe 1 = Zähler unverändert
Eingabe 2 = Zähler 1
Eingabe 5 = Zähler 2
Eingabe 9 = Zähler 5
usw...

Habe auch so versucht:
Code:
DW 3  = Zahl über FB241 auf MW42
DW 23 = Zahl über OP geändert 

L dw 23
L KF +0
><F
= M3.1

UNM3.1
SPB=M01

U M3.1
L MW 42 (
S Z3

L KF+0
 T DW23
 
 M01:

... so wäre es IMHO "richtiger" aber so ändert sich der Zähler gar nicht mehr. Hier denke ich das die pos Flanke fehlt? Oder Kann es sein das immer der DW23 eher ankommt als der DW3 ?

Wie muss es ändern?
 
Du darfst den Zähle nicht umspringen, sonst bekommt er die Flanke an seinem Setzeingang ja tatsächlich nicht mit.

Warum DW3 und DW23?

Der erste Code war ja nicht schlecht, aber wo ist die Wandlung?

Code:
L DW 23
L KF +0
><F
= M3.1

UNM3.1
SPB=M01

Hier die Wandlung machen!
in MW42 schreiben

L KF+0
T DW23

M01:

U M3.1
L MW 42 (
S Z3
 
Hallo die Wandlung hatte ich ursprünglich genau da gemacht wo du jetzt diese vorschlägst. Ich habe die Wandlung jetzt vor diesen Codeblock gesetzt um dies als Fehler auszuschließen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das heißt, du machst die Wandlung immer? Ok, geht auch, kostet etwas Zykluszeit. Aber, wenn die Wandlung vor dem Codeblock sitzt, darfst du sie nicht erst mit dem M3.1 anstoßen! Geht es denn nun eigentlich?
 
Also an der Wandlung kann es nicht liegen. DW3 und M42 habe bei Status-Variabel immer den selben wert. den ich am OP eingebe.
Wenn das läuft kann ich die Wandlung auch im den bedingten Block verstecken.

Aber, wenn die Wandlung vor dem Codeblock sitzt, darfst du sie nicht erst mit dem M3.1 anstoßen!

??? Habe ich jetzt nicht ganz verstanden. Meinst du das die Wandlung mehr als ein Zyklus im Anspruch nimmt?

Geht es denn nun eigentlich?
Leider Nicht :(
 
??? Habe ich jetzt nicht ganz verstanden. Meinst du das die Wandlung mehr als ein Zyklus im Anspruch nimmt?

Glaube ich eher nicht, das die Wandlung länger dauert, dann hätte es ein Bit Busy oder Done o.ä. geben müssen. Wenn die Wandlung mit M3.1 angestoßen wird, der M3.1 aber erst nach dem Wanndlungsbaustein gebildet wird, dann hättest du den Effekt, daß die Anzeige immer eins nachhängt.

der Ablauf ist ja im Moment so:

1. Wert wird geändert

2. Wandelbaustein, der M3.1 ist noch nicht da, also wird nicht gewandelt im MW42 steht nach wie vor der letzte Wert

3. M3.1 wird True, der Wert hat sich ja geändert

4. Wert auf Null

5. Zähler wird gesetzt, mit MW42, also einem alten Wert!

6. Zyklusende, Austritt am Ende OB1

7. Zyklusanfang, Eintritt an Anfang OB1

8. --> das ist jetzt 2.
M 3.1 ist ja noch da, nun wird gewandelt

9. --> das ist 3.
Wert ist 0, also M3.1 auf False

usw.

Daher ist es wichtig, den M3.1 vor dem Wandeln zu bilden falls du das Wandeln mit dem M3.1 startest.
 
Zuletzt bearbeitet:
Hallo,
ich habe jetzt mein Programm soweit geändert das es Funktioniert, aber noch nicht Richtig. Wenn ich die Enter Taste jetzt extrem kurz drücke dann wird der wert nicht übernommen. Ich denke das hat etwas mit der Zykluszeit bzw den Basistakt zur tun.
hier mein aktueller code:
Code:
000B      :L   DW 23 (ereignis:werteingabe)
000C      :L   KF +0
000E      :><F
000F      :=   M  3.1                        
0016      :UN  M  3.1                            
0017      :SPB =  M01
Springe solange der Benutzer noch nicht Mit der Eingabe
angefangen hat.

0019      :U   M39.6                                OP- Enter Taste gedrueckt
001A      :SPB =  M01
Springe solange der Benutzer noch nicht die Enter Taste
loßgelassen hat.

001C      :SPA FB 241                               BCD
001D NAME :COD:16
001E DUAL >    DW 3                                 (E/W)
001F SBCD >    M  46.0                              (A/BI)
0020 BCD2 >    MB 44                                BCD
0021 BCD1 >    MW 42                                BCD-Z3
0022      :
0023      :L   KF +0
0025      :T   DW 23

0026 M01  :
0027      :U   M  3.1                               
0028      :UN  M  39.6                              
0029      :L   MW 42                                BCD-Z3
002A      :S   Z  3                                 Op-Bereichszaehler
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich die Enter Taste jetzt extrem kurz drücke dann wird der wert nicht übernommen. Ich denke das hat etwas mit der Zykluszeit bzw den Basistakt zur tun.

Ja, das denke ich auch, dann kann es durchaus passieren, das die Enter-Taste nicht ankommt. Aber eigentlich sollte das doch auch ohne die Entertaste zum laufen zu bringen sein. Hab leider keine Hardware zur Verfügung um das auch mal etwas zu testen.
 
Moin,

sieh mal nach wie der Basistakt der Steuerung eingestellt ist.
Sollte dieser > 1 X 200ms verlängert sich auch der Erfassungszyklus.
Bei 3 X 200ms hast du 3 sec. Erfassungszyklus.
Wenn ich mich nicht irre kann man der Erfassungszyklus für die Funktios- und Systemtastertur beim OP 17 nur über diesen Wert beeinflussen.

Ich werde heute mit der Entertaste ein verlängerten Impuls setzen der höher ist als der Basistakt und es dann damit versuchen:
Code:
000B      :L   DW 23 (ereignis:werteingabe)
000C      :L   KF +0
000E      :><F
000F      :=   M  3.1                        
0016      :UN  M  3.1                            
0017      :SPB =  M01
Springe solange der Benutzer noch nicht Mit der Eingabe
angefangen hat.

0019      :U   M39.6                                OP- Enter Taste gedrueckt
001A      :SPB =  M01
Springe solange der Benutzer noch nicht die Enter Taste
loßgelassen hat.

un m39.6
l kt 30.1
sv t10

001C      :SPA FB 241                               BCD
001D NAME :COD:16
001E DUAL >    DW 3                                 (E/W)
001F SBCD >    M  46.0                              (A/BI)
0020 BCD2 >    MB 44                                BCD
0021 BCD1 >    MW 42                                BCD-Z3
0022      :
0023      :L   KF +0
0025      :T   DW 23

0026 M01  :
0027      :U   M  3.1                               
u t10                             
0029      :L   MW 42                                BCD-Z3
002A      :S   Z  3                                 Op-Bereichszaehler
mal schauen ob es besser funktionieren wird
 
Das ist ein altes Problem bei den Dingern. Die Übertragung zu SPS dauert etwas. Wenn Du vorher den Finger vom Knopf nimmst dann kommt nix an.
Geht eigentlich nur über Bit setzen

Im OP

U Enter
S Bit

In SPS

U Bit
L DW
S Z

L DW
L Z
=!
R Bit



peter(R)

Hallo leszek77

Genau das ist dein Problem... nur bei der ENTER Taste kann man kein Bit setzen... Versuchs mal mit einer F oder K Taste.
Wenn Du umbedingt die ENTER Taste nutzen willst dann lass Dir von der Steuerung ne Rückmeldung ans OP senden, damit stellst Du sicher das sie auch "Angekommen" ist.

Gruß
Sven_HH
 
Zurück
Oben