Problemlösung bei SEL Baustein

Zuviel Werbung?
-> Hier kostenlos registrieren
Probier das mal bitte aus ob das deinen Vorstellungen entspricht. Du kannst die Zeiten ändern und die Max/Min Werte Festlegen. ZZt. ist es so das bei EIN:=TRUE der Wert bist MAXv(10) alle 2s hochgezählt wird. Bei Ein_Down wird alle 2s der Wert kleiner bis MINv(0).

Einfach ein ST Program aufmachen und Simulieren, wenn das passt kann ich mich mal an der Umsetzten machen, nutze idr nur ST ;)


Code:
VAR
    TP1, TP2:TP;
    EIN, EIN_Down: BOOL;
    Value:REAL;
    Faktor:REAL:=0.5;
    TRIG, TRIG2:R_TRIG;
    Maxwert:REAL:=10;
    Minwert:REAL:=0;
    MINv, MAXv:BOOL;
END_VAR
Code:
TP1(IN:=EIN AND NOT MAXv AND NOT TP1.Q , PT:=t#2s );
TRIG(CLK:=TP1.Q);
IF TRIG.Q THEN Value:=Value+Faktor;
    ELSE Value:=Value;
END_IF;

TP2(IN:=EIN_Down AND NOT MINv AND NOT TP2.Q , PT:=t#2s );
TRIG2(CLK:=TP2.Q);
IF TRIG2.Q THEN Value:=Value-Faktor;
    ELSE Value:=Value;
END_IF;
IF Value>=Maxwert THEN maxv := TRUE;
    ELSE maxv:=FALSE;
END_IF
IF Value<=Minwert THEN minv:=TRUE;
    ELSE minv:=FALSE;
END_IF;
 
So, also wie gesagt, hab da noch nicht so viel Erfahrung. Hab jetzt das ST Programm aufgemacht und den Inhalt so reinkopiert.

Wenn ich das nun auf die Steuerung schiebe, sehe ich zwar div. Werte..... weis aber nicht wirklich was ich da machen muss,bzw. worauf ich zu achten habe....

Sry, aber du müsstest mir mal sagen worauf ich achten muss, denn ändern tut sich nichts......
 
Du kannst das auch einfach erstmal Simulieren statt auf die Steuerung zu schieben...
Es gibt Zwei eingänge die "Wichtig" sind. Wenn der Eingang EIN True ist wird Hochgezählt, wenn der Eingang Ein_down True ist wird runter gezählt.
Um das zu testen Log dich ein uns starte das Programm.
Nun solltest du auf der Linken Seite einige Variabeln sehen. Unteranderem auch EIN und etwas weiter unten EIN_Down. Mach mal einen Doppelklick auf das schwarze FALSE. Nun steht dahinter in Cyan oder welche Farbe das sein soll <:=TRUE> Wenn du jetzt F7 drückst, wird der Wert geforcert (als quasi erzwungen) nun sollte der Wert alle 2 Sekunden um 0.5 steigen.
Das hört auf wenn der Maxv erreicht wird (10) oder du die Variable EIN nochmal Foreced auf FALSE;

Bei fragen nur zu ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Super, danke dir dass du dir so viel Zeit nimmst. Das ändern der Variable hatte ich gesehen, nur das F7 fehlte mir.

Ja die Schaltung macht bei mir genau das gleiche wie bei dir ;-D

jeweils um 0,5 alle 2 Sek hoch. Wenn ich den ausgegebenen Wert dann noch einem Port zuweisen kann, was ja an sich kein Problem sein sollte, ist das so wie ich mir das vorstelle bzw. kann dann mit meinen Werten ergänzt werden.

Da ich mal gehört habe, dass Codesys auch übersetzen kann, aber nicht weis wie ^^, würde ich dich bitten, dies nun mal versuchen zu übersetzen.
 
Einfach ein ST Program aufmachen und Simulieren, wenn das passt kann ich mich mal an der Umsetzten machen, nutze idr nur ST

Das meinte ich, oder hab ich das Falsch verstanden.

Ich dachte jetzt du würdest dies noch nach FUP übersetzen, sodass ich ein übersichtliches Bausteinsystem hab....

Oder so sagst mir, wie ich in FUP den ausgebenden Wert der Zeit nutzen kann.
 
Habe das erstmal für die so Umgesetzt das du ST und FUP gleichzeitig nutzen kannst.
Ich habe mal den Wert auf den SEL Baustein gelegt. Aber den SEL brauchst du ja nicht mehr !
Zu beachten ist das du das ST Program (bei mir Plc2) in PLC_PRG aufrufen mußt ! Sonst passiert nix (roter Pfeil unten)
Der Blauepfeil zeigt die als BSP wie du im FUP den Wert des ST Prog´s verwenden kannst
Code:
Plc2.Value
umgekehrt kannst du natürlich auch im ST die Variablen EIN ersetzten in dem du
Code:
PLC_PRG.xRelay0
(als BSP) verwendest.
SEL_nr3.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ähm... wenn du sagst ich brauch den SEL Baustein nicht mehr, warum benutzen wir den dann ?

Wenn die Umlegung nicht notwendig ist, dann sag mir nur, wie ich den Wert aus der ST Liste auslesen und in meine FUP einlesen kann.
 
Da wo du ihn brauchst verwendest du (in meinem Fall) Plc2.Value als Eingang.
Ich denke mal du brauchst ihn nicht mehr. Ich habe ihn nur noch von eben im Programm.
Du hast ja deinen Wert den du weiter Verarbeiten kannst. Hoch bzw Runterzählen macht der ja auch
 
Ok, die verbindung funktioniert.

Wie gebe ich ihm denn das Signal dass er anfangen soll hochzuzählen.

Beim hochzählen könnte man ja das TRUE signal des RELAY0 nehmen, beim runterzählen müsste man eine feste Zeit wählen, wie bpsw. 11 Std. oder so oder was gäbe es da sonst ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du in meinem Baustein den Eingang EIN entfernst und dort PLC_PRG.xRelay0 einfügst sollte es schon laufen. Zum Runterzählen würde ich einen weiteren Baustein Relay4 einfügen und den entsprechend konfigurieren. Dann kannst du bei allen deine Startzeit festlegen.
 
das PLC_PRG, ist das der Name, wo der xrelay0 liegt oder wieso dieser name ?

sobald ich den nämlich korrigiere, erhalte ich fehler
 
PLC_PRG müsste bei dir Links in der Baumstruktur bei Bausteine stehen. Darin sollten deine FUP Sachen wie die Relay Bausteine sein oder nicht ?
Sonst schick mal ein Screenshot.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So siehts bei mir aus, habe einige PRG´s und alle dementsprechend benannt.

Dein Programm läuft in Timeranalog.
In Timeclock läuft das POU Programm wo es hier schon screenshots gibt.
In SystemTimePrg läuft das Programm der Qscat Timerbausteine.
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    313,5 KB · Aufrufe: 5
Noch eine Idee.. vieleicht einfacher...
Erstell einen neuen Baustein. Hier wählst du FUNKTIONBLOCK ! und ST. Nenn ihn wie du magst. In meinem Besipiel SEL_ersatz.
Nun fügst du folgendes Ein :
Code:
FUNCTION_BLOCK Sel_ersatz
VAR_INPUT
    EIN, EIN_Down: BOOL;
    Faktor:REAL;
    Maxwert:REAL;
    Minwert:REAL;
    Impulszeit:WORD;
END_VAR
VAR_OUTPUT
    Value:REAL;
END_VAR
VAR
    TP1, TP2: TP;
    TRIG, TRIG2:R_TRIG;
    MINv, MAXv:BOOL;
    ImpulsZeit_used:TIME;
END_VAR
UND
Code:
ImpulsZeit_used:=WORD_TO_TIME(Impulszeit*1000);
TP1(IN:=EIN AND NOT MAXv AND NOT TP1.Q , PT:=ImpulsZeit_used );
TRIG(CLK:=TP1.Q);
IF TRIG.Q THEN Value:=Value+Faktor;
    ELSE Value:=Value;
END_IF;

TP2(IN:=EIN_Down AND NOT MINv AND NOT TP2.Q , PT:=ImpulsZeit_used );
TRIG2(CLK:=TP2.Q);
IF TRIG2.Q THEN Value:=Value-Faktor;
    ELSE Value:=Value;
END_IF;
IF Value>=Maxwert THEN maxv := TRUE;
    ELSE maxv:=FALSE;
END_IF
IF Value<=Minwert THEN minv:=TRUE;
    ELSE minv:=FALSE;
END_IF;
Jetzt öffne dein FUP und füge einen Baustein ein. Dort wählst du Definierte Funktionsblöcke und den Baustein (in meinem Beispeil SEL_ersatzt(FB)).
Jetzt hast du einen Baustein den du nach belieben beschalten kannst !
Neu ist der Eingang Impulszeit, dort kannst du die Zeit eingeben die du zwischen den Schritten haben möchtest, in Sekunden !
 
Ja guck mal, genau an so etwas habe ich gedacht.

Er funktioniert fast so wie es soll ;-)

Ich habe den xRELAY0 mal auf einen Schalter gelegt, sobald dieser gedrückt wird, zählt er bis 10 hoch und bleibt stehen....

Schalte ich das Relay aus, sollte er eigentlich wieder zurückspringen und beim nächsten Anschalten wieder von vorne beginnen.
Das macht er hier jetzt nicht....
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    24,4 KB · Aufrufe: 4
Zurück
Oben