Beiträge anzeigen

Diese Sektion erlaubt es ihnen alle Beiträge dieses Mitglieds zu sehen. Beachten sie, dass sie nur solche Beiträge sehen können, zu denen sie auch Zugriffsrechte haben.


Nachrichten - shrimps

Seiten: 1 2 [3] 4 5
31
oscat.lib fuer TwinCAT/CoDeSys / Re: Ramp function - FT_RMP
« am: 08. Februar 2016, 01:29:12 »
Hi,
first you made the worst case of wrong use of Systemtimers like ton, tof tp:
They have to be called cyclic and not on demand !

Please catch the mytime at first statement so it will be called every cycle !

Then your WHILE would do (i hope) better things...

Another idea:
myTimer(IN := NOT myTimer.Q, PT := T#1S);

if increasePressureValue <= 600000 and myTimer.Q then
   increasePressureValue := increasePressureValue + 10000;
end_if

One of many Solutions for your way  8)

Hope that helps
Regards
Shrimps

PS: It looks you are comming from PC-Programming ?

32
oscat.lib fuer TwinCAT/CoDeSys / Re: Ramp function - FT_RMP
« am: 05. Februar 2016, 19:57:30 »
Hi,
i think ramp has nothing todo:
source(in) = 1, dest = 1, so what is todo ?

But i am not sure...

I would yose a simple ton for this:
fbTon(in:= not fbTon.q, PT := t#1s);

if fbTon.q then
# 1 second is over
end_if


hth
Shrimps

33
oscat.lib fuer Step 7 / Re: Feiertage in Step7 oder TIA
« am: 01. Februar 2016, 15:27:42 »
Ohh,
Upps

SORRY !

Ja Danke, habe es gerade gezogen und morgen früh wirds durchgesehen !

Nochmals Danke

34
oscat.lib fuer Step 7 / Re: Feiertage in Step7 oder TIA
« am: 01. Februar 2016, 12:44:48 »
Hi,
erstaml besten danjk für die Rückmeldung.

Ich werde in Kürze STEP7 nachinstallieren und dann kann ich ja mal das "alte" mir ansehen...

LG
Shrimps

35
Hi,
ich hatte damals auch damit rumgebastelt...
Habe mir zum "Spielen" mal ein paar Funktionen nachgebaut...
Allerdings alles IN ST für Twincat...

Ich hänge es hier mal rein, ggf. kannst du ja mit dem einen oder anderen Brocken was anfangen...

Viel Spaß
Shrimps



[gelöscht durch Administrator]

36
oscat.lib fuer Step 7 / Re: Feiertage in Step7 oder TIA
« am: 30. Januar 2016, 00:20:16 »
Hi DOD666,
ich lerne auch gerade "gehen" mit TIA...
Habe bisher Twincat / Codesys gepaukt.
Oscat konnte ich bisher alles verwenden und habe eigentlich "fast" alles verstanden...

Das Beispiel was vorher gepostet wurde ist leider in Step7 gespeichert und es dauert, bis ich das bekomme...
Mein TIA sagt beim Migrieren > Step7 fehlt  ::)
Kannst du das ggf. als TIA V13 Projekt speichern ?

Danke
Shrimps

37
Hi,
gleiches System, gleiche Abarbeitung...
Aber bist du dir sicher, das du in FUP die gleiche Signalreihenfolge wie in CFC hast ?
In CFC kannst du ja beliebig vorwärts und rückführend arbeiten währen FUP nur eine Richtung kennt...

GGf. musst du uns deine beiden Beispiele mal posten.

Nebenbei sagt mir meine Kristalkugel es könnte Twincat v2.1 sein ?

Viel Spaß
Shrimps

38
oscat.lib fuer CoDeSys 3 / Re: Anfängerthema nochmal
« am: 27. Dezember 2015, 22:25:10 »
Hi,
ich bin zwar noch in TC2.x unterwegs, aber immer wenn ich je nach Zielgerät die komplette Lib nicht nutzen kann, ziehe ich mir nur die gewünschten Funktionen / FB´s rein...

Hast du mal nur die Function real_to_strf dir importiert (*.exp) ?
Und diese dann übersetzt ?

Viel Erfolg
Shrimps

BTW: Ich hatte  mir damals alle einzelnen Module der OSCAT via Github runtergezogen, ist ganz praktisch, dann muss man nicht wegen jedem einzelnen Teil die lib laden und den gewünschten Teil exportieren...
Ebenfalls hatz man schnell mal nur einen Codeteil durchgesehen...


39
Hohoho,
das hört sich aber spannend an...
Twincat V2.x oder V3.x ?

LG

40
Uups,
sorry hatte ich vergessen, Ich frage ausserhalb des 3P den Status ab und wenn er ungleich 100 ist, wird die Pumpe abgeschaltet !
Dadurch gibts keinen "Hitzeschwall" durch die Leitung beim CAL-Lauf.
Dieser läuft bei  mir alle 24h oder wenn eine bestimmte Anzahl Bewegungen abgearbeitet wurden, siehe Source.

LG
Shrimps

41
Bestehende Module / Existing Modules / Actuator_3P Auflösung / Steps
« am: 17. Dezember 2015, 23:31:42 »
Hallo in die Runde der "Heizungsbauer" etc...

Mal eine Grundsatzfrage zum Actuator_3P:
Der Stellwert, welcher ggf. vom PID kommt ist ja ein Byte mit dem genutzen Range 0-255.
Nun wird entweder fix oder via Referenzfahrt die Zeit für Auf bzw. Zu ermittelt.
In meinem Fall und ggf. vielen anderen liegt die Motolaufzeit bei ca. 60s (damits einfacher ist)
Wenn man nun 60s / 255 rechnet, kommt man auf 255ms pro Positionsschritt.
Üblicherweise werden die klassischen 3-Wegemischer mit 1 bis 2s angesteuert, darunter habe ich noch nichts gesehen.
Meines Erachtens macht es ja auch wenig Sinn so kurz anzusteiern weil alleine die Relaiszeiten hier auch schon eine Rolle spielen !?
Nun die Sache:
Ist es hier nicht sinnvoller, die Anzahl Steps, zumindest in meinem Fall auf 100 zu skalieren (0-100)
Dann bin ich zwar immmer noch unter 1 Sekunde, aber deutlich näher am "echten" Laufverhalten des Mischers ?

Der Änderungsaufwand ist ja gering, einfach den PID oder was auch immer auf 0-100 regeln lassen und dem Aktuator 0-100 vorgeben.

Wie seht ihr das ?

LG
Shrimps





42
Ok dann halt via Code:
Aber erstmal nur der Actuatorteil ohne das drumherum
FUNCTION_BLOCK ACTUATOR_3PN
VAR_INPUT
EN : BOOL; (* enable actuator *)
IN : BYTE; (* Signal Byte *)
END_CLOSE : BOOL; (* Terminating Close *)
END_OPEN : BOOL; (* Terminating Open *)
END_VAR
VAR_OUTPUT
OPEN : BOOL; (* Signal for open-Valve *)
CLOSE : BOOL; (* Signal for Closing-Valve *)
POS : BYTE; (* Virtual Position *)
STATUS : BYTE; (* STEPS: 100 is good *)
END_VAR
VAR
ramp : _RMP_NEXT; (* lookup for direction *)
Counter : CTU; (* Counter for Movements *)
moves : INT; (* var for Counts  *)
next_zero : INT := 250; (* max of Movements *)
tonValve : TON ; (* Timer Valve *)
tonRelay : TON; (* Timer RelayPausing *)
tonCalib : TON; (* Timer Calibration *)
ERROR : BYTE; (* 0 = OK, 10 = NoClose, 20 = NoOpen, 30=NoBoth *)
END_VAR
VAR CONSTANT
T_RUN : TIME := t#70s; (* maximimum runtime of Valve, longer then time for endswitch *)
T_CAL : TIME := t#24h; (* permanently make Calibration *)
t_LockOut : TIME := t#20s; (* Lock for changing Direction too fast *)
T_RELAY : TIME := t#1500ms; (* Locktime for smooth change of relay-Direction *)
END_VAR

(* Original:
version 2.0 28. jan 2010
programmer hugo
tested by oscat

actuator_3P is an interface for a 3 point actuator.
a 3P actuator is a motor with 2 directions that drives a valve or flap.
the position of the valve or flap is controlled by runtime of the motor foreward or backward.
the available inputs are:
IN specifies the position of the actuator, 0 = 0% and 255 = 100%.

30.07.2015 Shrimps:
Special Version for heating-Mixers with 2 external Position-Switches
renew most steps
Implemented security: When disable, run close first !
If no switch, all will be based on Timers like the original code
03.12.2015 Shrimps:
All Time() Funktions replaced with TON in behavior of Time() Overflow-Problems
*)

(* @END_DECLARATION := '0' *)
(* Starting all Timer *)
tonValve(PT := T_RUN);
tonRelay(PT := T_RELAY);
tonCalib(PT := T_CAL);

(* all steps will be done with these sequence *)
CASE status OF
0: (* Init, will start at Runup or called by Calibration *)
OPEN := FALSE; (* Power off *)
CLOSE := FALSE; (* Power off *)
ramp.TR := T_RUN; (* Fill ramp with default time rising *)
ramp.TF := T_RUN; (* Fill ramp with default time falling *)
(* Counter.RESET := TRUE; (* Reset Moves *) *)
error := 0;
status := 5; (* do next step *)

5: (* Wait some time, better for Relay, perhaps comming from other direction *)
tonRelay.IN := TRUE; (* Starting Wait  *)
IF tonRelay.Q THEN
tonRelay.IN := FALSE; (* Reset Timer *)
status := 10; (* do next step *)
END_IF

10: (* Closing the valve until Timeout or Position reached *)
CLOSE := TRUE; (* give valve power *)
tonValve.IN := TRUE; (* Starting Timer *)

IF tonValve.Q OR END_CLOSE THEN (* Timeout or final Switch reached ? *)
tonValve.IN := FALSE; (* Reset Timer *)
CLOSE := FALSE; (* Stop down *)
error := error + (10 * BOOL_TO_BYTE(NOT END_CLOSE));
status := 20; (* do the next step *)
END_IF

20: (* Wait some seconds to avoid damage of Motor or Relays *)
tonRelay.IN := TRUE; (* Starting Wait  *)

IF tonRelay.Q THEN
tonRelay.IN := FALSE; (* Reset Timer *)
status := 30; (* do next step *)
END_IF

30: (* opening Valve *)
OPEN := TRUE;
tonValve.IN := TRUE; (* Starting Timer *)

IF tonValve.Q OR END_OPEN THEN (* Timeout or Position reached ? *)
OPEN := FALSE; (* Off all Power *)
ramp.TR := tonValve.ET; (* Uptime *)
tonValve.IN := FALSE; (* Reset Timer *)
ramp.IN := 255; (* set ramp pos to max value, we reached Openposition *)
error := error + (20 * BOOL_TO_BYTE(NOT END_OPEN));
STATUS := 40; (* do the next step *)
END_IF

40: (* pause for some s its better for the relays instead to change direction immediately *)
tonRelay.IN := TRUE; (* Starting Wait  *)
IF tonRelay.Q THEN
tonRelay.IN := FALSE; (* Reset Timer *)
status := 50; (* do next step *)
END_IF

50: (* now closing the valve *)
CLOSE := TRUE; (* Close valve *)
tonValve.IN := TRUE; (* Starting Timer *)

IF tonValve.Q OR END_CLOSE THEN (* Timeout or Position reached ? *)
CLOSE := FALSE; (* Stop power *)
ramp.TF := tonValve.ET; (* TF to be filled! *)
tonValve.IN := FALSE; (* Reset Timer *)
ramp.IN := 0; (* Ramp position set to zero *)
pos := 0;
STATUS := 60; (* do next step *)
END_IF

60: (* pause for some s its better for the relays instead to change direction immediately *)
tonRelay.IN := TRUE; (* Starting Wait  *)
IF tonRelay.Q THEN
tonRelay.IN := FALSE; (* Reset Timer *)
status := 100; (* do next step *)
END_IF

100: (* normal operation *)
Counter.RESET := FALSE; (* Activate Counter: Moves *)
tonCalib.IN := TRUE; (* Activate Calibration lookup *)

IF  Counter.Q THEN (* Moves reached *)
status := 0; (* Reset *)
END_IF

(* check for auto calibration *)
(* no lookup for then nearest Position, because opening could make damage by heatings *)
IF tonCalib.Q THEN
tonCalib.IN := FALSE; (* Reset Timer *)
status := 0; (* full restart *)
END_IF

IF NOT EN THEN
IN := 0;
END_IF

(* do the full job now: *)
(* set ramp generator to IN *)
ramp.IN := IN;

(* Postitioning the valve *)
OPEN := ramp.UP ;
CLOSE := ramp.DN ;

(* Adjusting *)
IF IN = 0 THEN (* Closing until Switch reached *)
CLOSE := NOT END_CLOSE;
END_IF

(* tonValve.IN := OPEN OR CLOSE; (* Check Timing *) *)

END_CASE;

(* Count all Movements *)
(* Reset at close-signal or init *)
Counter(CU:= OPEN OR CLOSE, RESET := END_CLOSE OR (status = 0), PV:= next_zero, CV=> moves);

(* internal flap simulation and output activation *)
ramp(OUT := POS, TL := t_LockOut);

(* adjust position if end switch is active *)
IF END_OPEN THEN
pos := 255;
ramp.IN := 255;
END_IF

IF END_CLOSE THEN
pos := 0;
ramp.IN := 0;
(* Counter.RESET := TRUE; (* Reset Moves *) *)
END_IF

END_FUNCTION_BLOCK


43
Hallo Admin:

Ein Fehler ist aufgetreten!
Das Dateianhangsverzeichnis ist nicht beschreibbar. Ihr Dateianhang oder Benutzerbild kann nicht gespeichert werden!

Ich versuchte actuator_hh.zip 5.036 Bytes hochzuladen !!!

44
Hallo Booner,
anbei meine Minibib mit dem umgeschriebenen 3P.
(Eigene Lib damit ich für den 3P nicht die ganze OSCAT benötige, meine kleine SPS hat nicht soviel Platz...)
Vorsicht: Ich habe ja Magnetendschalter !
Und in der von mir früher geposteten Version wahr leider der TimeÜberlauffehler von Oscat drin !!!
Hatte bei mir zugeschlagen !
Deswegen habe ich diverse TON drinnen...
Einiges kann man nach eigenem Ermessen entfernen, z.Bsp. die Wartezeit für die Relais...
Dann wird das Teil nochmals viel kleiner !

Aber du darfst mich zu "meinem" 3P alles fragen...

Viel Erfolg
Shrimps

45
Hi,
ich hatte den 3p auch im Einsatz...
Habe ihn dann für meine Belange umgeschrieben und bin dann noch auf den Overflow von Time() reingefallen:
Plötzlich machte er ewige Kalibrierungsfahrten weil mit der next_cal übergelaufen war !
Hat mich ein wenig Nerven gekostet und nun habe ich die meisten Dinge für mich entschärft.
Nun läuft er stabil...

Ist allerdings bei mir unter Twincat 2.x in reinem ST am laufen...

Falls Inter. besteht, kann ich ihn hier posten...

Viel Erfolg
Shrimps

Seiten: 1 2 [3] 4 5