TIA TIA v15, SCL addiert 2 anstatt 1

Oll_Bell

Level-1
Beiträge
41
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
FB:
#temp ist bool temp
#IMPULS, #EINGANG1 und #EINGANG2 sind bool,- INPUTs
#IST_Zahl und #SOLL_Zahl sind INT static, Startwert ist 0
#OUT ist bool OUT
Code:
#temp := (#EINGANG1 OR #EINGANG2) AND #IMPULS;

IF #temp THEN
    #IST_Zahl := #IST_Zahl + 1;
END_IF;


IF  SOLL_Zahl >= #IST_Zahl THEN
    #IST_Zahl  := 0;
    #OUT:= NOT #OUT;
END_IF;

ich erwarte, dass der SCL-Kode "+1" addieren wird, aber der addiert 2.

Impuls erzeugt SR-flipflop, siehe im Anhang.

Ich habe gedacht, dass das IMPULS zwei Takten dauern kann, aber konnte das nicht prüfen. Ich konnte nur den SCL-Kode auf FUB wechseln.

ich habe den AWL-Kode S5 übersetz

Code:
    UN    =EINGANG1    ;AGGREGAT 1 UND    
    UN    =EINGANG2   ;AGGREGAT 2 NICHT LAEUFT
    ON    =IMPULS    ;UND KEIN STUNDENIMPULS
    SPB    =ENDE    ;SPRINGE
    B    =DB  
    L    =IST_Zahl    ;HILFSWORT LADEN
    L    KF +1
    +F        ;+1
    T    =IST_Zahl     ;UND ZURUECKSCHREIBEN
    L    =SOLL_Zahl     ;SOLLBERIEBSSTUNDEN LADEN
    <F                ;WENN: SOLLSTUNDEN GROESSER
    SPB    =ENDE    ;GEZAEHLTE STUNDEN ->SPRINGE
    L    KH 0000
    T    =IST_Zahl     ;BEI ABLAUF DER BETRIEBS-
                    ;STUNDEN DAS HILSWORT LOESCHEN
    UN    =OUT
    =    =OUT    ;DEN AGGREGATEWECHSELAUSGANG
            ;INVERTIEREN
ENDE:        
    BE

IMPULS- Stundenimpuls.

ps
gerade habe ich AWL probiert, gleiche Situation, addiert 2 ((
Code:
AN #EINGANG1 
AN #EINGANG2
ON #IMPULS
JC ende

L     #IST_Zahl 
L +1
+I
T   #IST_Zahl 
L   #SOLL_Zahl 
<I
JC ende

L+0
T #IST_Zahl 

AN #OUT
= #OUT

ende: BE

ps

Und dieser Kode addiert nur bis 1

#IST_Zahl := #IST_Zahl + 1 - hier ist immer 1nach 0
#IST_Zahl := ROUND_INT (#IST_Zahl / 2); - hier ist immer 0
Code:
#temp := (#EINGANG1 OR #EINGANG2) AND #IMPULS;

IF #temp THEN
    #IST_Zahl := #IST_Zahl + 1;
#IST_Zahl := ROUND_INT (#IST_Zahl / 2);
END_IF;


IF  SOLL_Zahl >= #IST_Zahl THEN
    #IST_Zahl  := 0;
    #OUT:= NOT #OUT;
END_IF;
 

Anhänge

  • scl.PNG
    scl.PNG
    22,1 KB · Aufrufe: 49
Zuletzt bearbeitet:
erledigt

ich habe den Kode modifiziert
noch eine static Variable vorgegeben
#Impuls_old

Code:
IF (#EINGANG1 OR #EINGANG2) AND ( #IMPULS AND NOT #IMPULS_OLD) THEN
    
#IST_Zahl := #IST_Zahl + 1;
END_IF

#Impuls_old:=#IMPULS;
 
IF  SOLL_Zahl >= #IST_Zahl THEN
    #IST_Zahl  := 0;
    #OUT:= NOT #OUT;
END_IF;

Kurios, ich habe in AWL FP und (P) in FUP vom IMPULS-Eingang des FB-Bausteines mit dem SCL-Kode verwendet aber nicht geholfenю

Und noch nicht klar, #temp lebt 1 PLC-Zyklus, warum hat mehr als 1 addiert...??
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Temp lebt nur einen Zyklus, das ist "wahr", aber die Bedingung die temp ein TRUE zuweist, lebt mehr als einen Zyklus, sodass auch die tempvariable ihren Wert länger als einen Zyklus hat.
Demzufolge hat die temp Variable in mehr als einem Zyklus den Wert true und macht dann in zwei und mehr Zyklen die von dir gewünschte Aufgabe eine Zahl zu addieren.

Dass es genau zwei waren, ist Zufall, wenn Impuls länger Wahr ist als zwei Zyklen können es auch drei oder mehr sein die dein Wert hochgezählt wird.

Wenn du nur zu einem bestimmten Zeitpunkt eine 1 einmalig addieren willst, musst du das über eine Flankenbedingung machen, wie du im letzten Beispiel getan hast.

Die Flanke wird durch die Abfrage "Impuls und Flankenbedingung nicht, zähle um eins hoch" und eine Zeile darunter Flankenbedingung ist erfüllt, indem du der Abfrage Flankenbedingung den Wert von Impuls zuweist.
 
Kurios, ich habe in AWL FP und (P) in FUP vom IMPULS-Eingang des FB-Bausteines mit dem SCL-Kode verwendet aber nicht geholfenю

Und noch nicht klar, #temp lebt 1 PLC-Zyklus, warum hat mehr als 1 addiert...??
Das ist nicht kurios sondern ganz einfach: Für eine Flankenerkennung muss bekannt sein welchen Zustand ein Signal beim letzten Programmdurchlauf hatte - der Programmteil muß sich das irgendwie merken können. "Temporäre" TEMP-Variablen können sich nichts länger als den aktuellen Durchlauf lang merken (deshalb heißen sie ja auch "temporär") - und deshalb funktioniert Flankenerkennung nicht mit TEMP-Variablen als "Merker".

Harald
 
[h=2]aber die Bedingung die temp ein TRUE zuweist, lebt mehr als einen Zyklus....[/h]Dass es genau zwei waren, ist Zufall, wenn Impuls länger Wahr

im meinem Fall #MPULS lebt 2 Zyklus, nicht mehr.

1. Zyklus #Set_Rest "über"#MPULS setz SR auf 1
2. Zyklus Temp_SRQ2 sperrt #Set_Rest
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe das Netzwerk 3 aus dem Bild in #1 nicht. Das sieht nach OverKill aus?
Du bildest einen Impuls an der positiven Flanke des EingangsSignals und setzt damit ein SR-FF.
Sobald und solange das EingangsSignal wieder 0 ist, rücksetzt Du damit das SR-FF.
Damit ist doch das AusgangsSignal Q des SR-FF wieder identisch mit dem EingangsSignal.
Und die FlankenErkennung unwirksam bis überflüssig.
UND-Verknüpfung und SR-FF einfach weglassen! Dann hast Du doch schon den Impuls, mit dem Du einmalig eine 1 addierst!?
Vorausgesetzt, Du verwendest als "Flankenmerker" bei der ImpulsBildung ein Bit das im jeweils nächsten Zyklus noch zur Verfügung steht.
 
Zuletzt bearbeitet:
Das ist Impulserzeuger, der Impuls dauert 2 Zyklus,
Und die FlankenErkennung unwirksam bis überflüssig.
UND-Verknüpfung und SR-FF einfach weglassen!

alles läuft perfekt, das ist die Impulssteuerung, jedes Signal, positive oder negative Flanke
wandeln sich immer in die Impulse um .

UND-Verknüpfung und SR-FF einfach weglassen!
ich kann nicht, weil "SET_Reset" das dauerhafte Signal ist und ich brauche nur die Impulse.


das ist so läuft
1. Zyklus #Set_Reset "über"#MPULS setzt SR auf 1
2. Zyklus Temp_SRQ2 sperrt #Set_Rest
3. wenn
#Set_Reset fehlt ist, resetet das SR-FF
 
Sorry, das Kästchen in der Mitte ist ja nur eine Zuweisung (=). Habe mich durch den symbolischen Namen "Impuls" und ein wenig Wunschdenken irritieren lassen!
Aber auf welchem Wege der Impuls M22.2 auf eine Länge von 2 Zyklen "gestreckt" wird und wie auch an negativen Flanken ein Impuls erzeugt werden soll, das kann ich nicht nachvollziehen.
Ja, der Impuls wird an irgendeiner Stelle im Zyklus erzeugt und dauert an bis zum Ende desselben Zyklus … und bis zum Anfang des nächsten Zyklus … und im nächsten Zyklus bis zu der "irgendeinen Stelle", an der er gebildet wurde und wird dort beendet. Er ist somit zwar in 2 Zyklen feststellbar, aber trotzdem nur 1 Zyklus lang feststellbar.
Klingt paradox und kompliziert, ist es aber überhaupt nicht.

Code:
     |<--------ZyklusZeit-------->|

          Zyklus n       Pause n     Zyklus n+1      Pause n+1
_____|======X=========|___________|======X=========|________
 
____________|============================|__________________

            |<--ImpulsDauer=ZyklusZeit-->|
"Pause" beinhaltet z.B. das Kopieren der Eingänge ins ProzessAbbild.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ich kann nicht, weil "SET_Reset" das dauerhafte Signal ist und ich brauche nur die Impulse.


das ist so läuft
1. Zyklus #Set_Reset "über"#MPULS setzt SR auf 1
2. Zyklus Temp_SRQ2 sperrt #Set_Rest
3. wenn
#Set_Reset fehlt ist, resetet das SR-FF
Das ist trotzdem mehr als umständlich.
Den Impuls kann man auch einfach mit 'ner Flanke bilden und dann dauert er auch wirklich nur genau einen Zyklus:

attachment.php
 

Anhänge

  • FUP Flanke.jpg
    FUP Flanke.jpg
    3,3 KB · Aufrufe: 98
heute ich konnte auch "PF" verwenden, aber wann ich angefangen habe , hatte keine Ahnung wie läuft die Steuerung.
Und heute ist heute.
Und ich verwende SCL, - die Größe des Kodes ist gleich für positive Flankenerkennung.
 
Zurück
Oben