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.


Themen - Majaestix

Seiten: [1]
1
Hallo Zusammen,

ich suche für codesys 2 einen Rechteckgenerator, bei dem ich die Anzahl der erzeugten Impulse vorgeben kann.
In der Lib habe ich irgendwie nichts passendes gefunden.
Hat da jemand einen Tip für mich?

Danke im voraus.

Gruss

Majaestix

2
Hallo Zusammen,

ich habe den Baustein SCHEDULER etwas umgeschrieben und auf meine Bedürfnisse angepasst:

FUNCTION_BLOCK SCHEDULER_3x

VAR CONSTANT
array_begin :       INT := 0;
array_end : INT := 9;
END_VAR

VAR_INPUT
E : ARRAY[array_begin..array_end] OF BOOL;
T : ARRAY[array_begin..array_end] OF TIME;
END_VAR

VAR_OUTPUT
Q : ARRAY[array_begin..array_end] OF BOOL;
END_VAR

VAR
init : BOOL;
u : ARRAY[array_begin..array_end] OF TIME;
tx : TIME;
c : INT;
i : INT;
END_VAR


(* ----- read system_time ----- *)

tx := DWORD_TO_TIME(T_PLC_MS());

IF NOT init THEN
init := TRUE;
FOR i := array_begin TO array_end DO
u[i] := tx - T[i];
END_FOR;
END_IF;

FOR i := array_begin TO array_end DO
Q[i] := FALSE;
END_FOR;

IF tx - u[c] >= T[c] THEN
Q[c] := E[c];
u[c] := tx;
END_IF;
c := c + 1;

IF c = array_end THEN
c := array_begin;
END_IF;

Jetzt passiert folgendes:
Rufe ich die Instanz wie folgt auf:

FUNCTION_BLOCK scheduler_3_test

VAR_INPUT
Enable : BOOL;
END_VAR

VAR
timer : SCHEDULER_3x;
test_flag_1 : BOOL;
test_flag_2 : BOOL;
test_flag_3 : BOOL;
END_VAR

IF enable THEN

timer (E[0] := ja,
T[0] := T#5s,
Q[0] => test_flag_1
E[1] := ja,
T[1] := T#10s,
Q[1] => test_flag_2,
E[2] := ja,
T[2] := T#15s,
                 Q[2] => test_flag_3);

IF timer.Q[0] THEN
test_flag_1 := TRUE;
END_IF;

IF timer.Q[1] THEN
test_flag_2 := TRUE;
END_IF;

IF timer.Q[2] THEN
test_flag_3 := TRUE;
END_IF;

IF timer.Q[3] THEN
test_flag_1 := FALSE;
test_flag_2 := FALSE;
test_flag_3 := FALSE;
END_IF;

END_IF;

bekomme ich einen Kompilerfehler, etwa: timer (E[0] geht nicht oder so ähnlich.

Adressiere ich die Instanz aber so:

FUNCTION_BLOCK scheduler_3_test

VAR_INPUT
Enable : BOOL;
END_VAR

VAR
timer : SCHEDULER_3x;
test_flag_1 : BOOL;
test_flag_2 : BOOL;
test_flag_3 : BOOL;
END_VAR

IF enable THEN

timer.E[0] := ja;
timer.T[0] := T#11s;

timer.E[1] := ja;
timer.T[1] := T#17s;

timer.E[2] := ja;
timer.T[2] := T#23s;

timer.E[3] := ja;
timer.T[3] := T#5s;

(* ----- Aufruf SCHEDULER_3x ohne Parameter ----- *)
timer();

IF timer.Q[0] THEN
test_flag_1 := TRUE;
END_IF;

IF timer.Q[1] THEN
test_flag_2 := TRUE;
END_IF;

IF timer.Q[2] THEN
test_flag_3 := TRUE;
END_IF;

IF timer.Q[3] THEN
test_flag_1 := FALSE;
test_flag_2 := FALSE;
test_flag_3 := FALSE;
END_IF;

END_IF;

läuft er super.

Kann mir jemand sagen, wie ich einen Aufruf mit der Übergabe von Array-Werten an VAR_INPUT gestalten muss?

Danke für Hilfe.

Majaestix

3
Hallo Zusammen,

folgendes Zenario:

Der FB DIMM_I soll mittels CLICK_MODE bei einem einzelnen Klick auf 100% fahren, bei doppeltem Klick auf den letzten Dimwert gehen und bei langem Tastendruck die Dimmrampe abfahren.

Das klappt bei einem Taster und dem vorgeschalteten FB CLICK_MODE auch super.

Jetzt hatte ich alternativ zum realen Taster in der Visu von TwinCAT einen Taster erzeugt und diesen über den FB CLICK_MODE abgefragt. Der Taster ist in der Visu als Taster und nicht als Toggle definiert. Leider detektiert dieser FB den ersten Klick der Visu garnicht. Doppelklicks werden garnicht oder als Einzelklick erkannt und meistens, wenn überhaupt, erst bei drei Klicks als Doppelklick identifiziert. Nachdem ich in der Source gesehen hatte, dass die T_DEBOUNCE Zeit des FB fest auf 500ms steht, dachte ich, ok, nehme ich halt den FB CLICK. Hier kann ich ja u.a. die T_DEBOUNCE Zeit einstellen. Der funktioniert auch einigermassen. Leider detektiert CLICK kein LONG, sondern bei langem Tastendruck nur Einzelklicks.

Zur Zeit behelfe ich mir damit, dass ich CLICK zur Detektion des Einzelklicks verwende und dahinter den FB CLICK_MODE zur Detektion von langen Tastendrücken verwende. Ist natürlich ein relativ unschönes Konstrukt und läuft auch nicht 100% zuverlässig.

IMHO ist es so, dass bei Benutzung der Visu Taster die Klicks zu schnell für CLICK_MODE kommen. CLICK erkennt sie zwar meistens, natürlich bei angepassten SETUP Variablen, kann aber kein LONG.

Die FB's CLICK und CLICK_MODE möchte ich aber aus Kompatibilätsgründen nicht gerne anpassen.

Hatte das Problem vielleicht schon jemand und könnte mir einen besseren Lösungsansatz geben, als CLICK und CLICK_MODE hintereinander zu schalten?

Danke für jeden Hinweis.

Gruss

Majaestix


4
Hallo Zusammen,

hier nur ein kleiner Denkanstoss:

Gestern bin ich darauf gekommen, dass man mit den Jalousiesteuerungsbausteinen auch ganz hervorragend Vorhänge und Roll(schiebe)tore steuern kann. Die Bedingungen, zumindest die der Rollo-Controller, sind identisch zu den Anforderung an die Steuerung eines Schiedbetores oder eines Vorhanges. Leider sind die Bezeichnungen der Jalousiesteuerungsconroller ausschliesslich auf die vertikale Bewegungsrichtung ausgerichtet.
Vielleicht macht es Sinn, bei evtl. weiteren, zukünftigen FB´s die Bezeichnungen neutraler zu halten. Man kommt dann vielleicht eher drauf, dass sie sich sowohl für senkrechte als auch für waagerechte Bewegungsabläufe eignen.

Gruss

Majaestix


5
Hallo Zusammen,

jetzt ist doch bald Weihnachten, und dann dürfen sich doch brave Kinder was wünschen...

Also wünsche ich mir jetzt was ;)

Nämlich einen Baustein zum zum Schalten von Verbrauchern, z.B. Licht, der in etwa so aussehen könnte:

Eingänge:
- I1 : bool; z.B. für Alarm, Feuer etc., Prio. 1
- I2 : bool; z. B. für einen Taster, Prio. 2
- I4 : real; z. B. für einen Wert für den Dimmer, Prio. 3
- I5 : bool; z. B. Helligkeitssensor, Prio. 4
- I6 : bool; z. B. für einen BWM, Prio. 5
- I7 : bool; z. B. für weitere Bedingung, evtl. Tageszeit usw., keine Prio.
- I8 : time: z. B. für eine Mindestlaufzeit seit dem letzten Impuls
- I9 : time : z. B. für eine Maxlaufzeit seit dem letzten Tasterimpuls

Setup Vars:
- S1 : bool; z. B. bei Alarm, Feuer etc., Vorgabewert Ausgang true/false
- S2 : bool; z. B. zum Einstellen des Ausgangs allg., Vorgabewert bei steigendender Flage an IN auf true/false
- S3 : real; z. B. zum Einstellen des Ausgangs auf einen Vorgabewert bei dynamischen Verbrauchern (Dimmer)

Ausgänge:
- Q1 : bool; z. B. zum Schalten einer Lampe
- Q2 : real; z. B. zum Dimmen einer Lampe
- Q3 : real; z. B. Status des Verbrauchers
- Q4.. Qx : für ESR Fehlermeldungen etc.

Wie man unschwer erkennen kann, habe ich mich an den Rollo-Controllern orientiert.
Sicherlich kann man sowas aus verschiedenen vorhandenen FB´s zusammensetzen, aber schön fände ich, wenn dieses häufig auftrende Problem innerhalb eines Bausteins gelöst wäre.

Mit häufig auftretendem Problem meine ich:
Über die SPS das Licht zu schalten, ist ja meistens von mehreren Faktoren abhängig.

Zuallererst kommt die Katastrophe, meint einen Einbruch oder einen Brand etc., dann sollte das Licht grundsätzlich angehen, sofern es noch funktioniert.

Dann möchte man unter normalen Bedingungen das Licht gerne anhaben, wenn man es braucht, also via BWM einschalten, aber nur wenn es so dunkel ist, dass man auch wirklich Licht braucht.

Außerdem kann es vorkommen, dass man auch ohne BWM das Licht gerne manuell schalten möchte. Dabei soll es anbleiben, ohne Einfluss vom BWM oder Helligkeitssensor oder ähnlichem.

Zu guter letzt hat man sich so schnell an die BWM´s gewöhnt, dass man bei einer manuellen Schaltung vergisst, das Licht wieder auszuschalten. Hier wäre es hilfreich, wenn bei einer Tasterbedienung das Licht nach einer definiertren Zeit wieder ausgehen würde, ohne das es eines weiteren Tasterdruckes bedarf.

Dann gibt es noch den Fall, dass das Licht von einer bestimmten Tageszeit abhängig ist, dabei kann für diese Range AN oder AUS vorkommen.
Der klassische Schlafzimmer-Fall: Bis zum manuellen Tasten soll das Licht via BWM gesteuert werden, wird dann per Taster geschaltet, wird der BWM deaktiviert, bis ein bestimmter Zeitpunkt erreicht ist und der BWM wieder die Prio 1 kriegt = Im Schlafzimmer normalerweise Licht per BWM schalten bis zum Schlafen die Lampe ausgemacht wird, dann bitte bis zum nächsten Tag keinen BWM mehr, ab z.B. 15:30 Uhr wieder BWM bis zum Ausschalten am Bett usw.

Also, liebe Weihnachtsmänner, kann ich Hoffnung haben? Geht mein Wunsch in Erfüllung? Lässt sich da was machen?

Wäre dafür auch bereit dafür weiterhin brav und artig zu sein  ;)

Gruss

Majaestix

6
Bestehende Module / Existing Modules / Timerbaustein
« am: 17. November 2009, 09:08:29 »
Hallo Zusammen,

ich suche einen Baustein, der mir einfach nur nach einer definierten Zeit (z.B. alle 10 Minuten) einen Ausgang toggelt. Gibt es da was?
Zur Zeit löse ich das über einen Zähler, das ist aber nicht sonderlich genau.

Danke für eine Info.

Gruss

Majaestix

7
Modulentwicklung / Module Development / Eingangsflattern und Hysterese
« am: 10. November 2009, 21:16:38 »
Hallo Zusammen,

zur Zeit habe ich folgendes Problem:

Ich möchte ein Temperatursignal zur Heizungsteuerung verwenden. Mit dem Baustein Hyst_2 funktioniert das auch soweit gut.
z. B.: IN := 21,3 Grad, VAL := 21,5 Grad, HYST := 0,4
Wenn jetzt mein IN um die 21,3  Grad schwankt, schwankt auch mein Q zwischen TRUE und FALSE.
Wie löst man das, da der Schwellenwert, egal bei welchem Hysteresewert, immer irgendwann (kurz) pendelt?
Soll ich da einen Timer nachschalten, und wenn ja, welchen?
Oder gibt es einen Hysteresebaustein, der einen Timer eingebaut hat?
Wäre das evtl. ein Vorschlag für eine spätere Version der Oscat Lib?

Danke für eine Info.

Gruss

Majaestix

8
Hallo Zusammen,

zunächst ein grosses Lob an die Oscat-Programmierer, einfach nur klasse! Vielen Dank für Euren Einatz!

Nun zu meinem Vorschlag für einen neuen Baustein (hoffe ich zumindest, wenn es ihn schon gibt, habe ich ihn einfach nicht gefunden):

In unserem Haus schalte ich das Licht über div. Helligkeitssensoren. Wird ein festgelgter Schwellenwert unterschritten und ein BWM getoggelt, wird das Licht eingeschaltet. Enprellt habe ich das Ganze mit dem Baustein DEBOUNCE, funzt auch prima :-))
Jetzt passiert aber folgendes: Sobald das Licht an ist, wird der Schwellenwert überschritten und natürlich der Eingang des DEBOUNCE nicht mehr getoggelt. Das führt dazu, dass nach Ablauf der Entprellzeit das Licht kurz flackert, dann der Schwellwert unterschritten wird und das Licht wieder für die festgelegte Entprellzeit angeht.

Da ich mir vorstellen könnte, dass auch andere dieses Problem haben, ist dies mein Vorschlag für einen neuen Baustein.

Nochmals danke für Eure Mühe.

Gruß

Majaestix

9
Bestehende Module / Existing Modules / DIMM_I Rel. 3.03
« am: 06. Januar 2009, 18:24:20 »
Hallo Zusammen,

zunächst ganz herzlichen Dank für die super LIB. Sie hat mir, und bestimmt nicht nur mir, einen Haufen Arbeit erspart  :D

Im Moment befasse ich mich gerade mit dem Baustein DIMM_I, also Dimmer.

Für diesen FB hätte ich noch einen Wunsch:
Wenn man den IN lange toggelt, fährt der FB die Helligkeit entweder gleich gegen 0 (out < 127) oder erst gegen max und dann gegen null (out > 127).
Ich fände es sehr praktisch, wenn er das in einer Endlosschleife tuen würde, also das Spektrum zwischen 0 und MAX_ON so lange abfahren, wie IN getoggelt wird.

Hintergrund:
Es gab früher von Merten einen elektronischen Sensordimmer, der arbeitete folgendermassen:
1. Klick > Licht an  = 100%
2. Klick > Licht aus = 0%

1 x Doppelklick > Licht an in Stufe letzter Helligkeit

Dimmer gedrückt halten > Licht fährt solange zwischen 0% und 100% hin und her, wie Dimmer getastet wurde.

Der war wirklich praktisch, na ja, und wenn man sowas mal kennengelernt hat, kann Mann sich nur noch schlecht umstellen  ;)

Und dann habe ich da noch eine Frage:
Wenn ich an IN einen Taster klemme, geht beim ersten Tasten das Licht an, die Helligkeit ist ja abhängig von MIN_ON. Will ich das Licht jetzt wieder ausschalten, muss ich an RST einen weiteren Taster klemmen, um Q auf FALSE zu kriegen. Klemme ich an RST den gleichen Taster wie an IN an, wird das Licht zwar ausgeschaltet, aber sofort wieder ein, ist ja auch logisch. Ich kann das Problem natürlich mit einem vorgeschalteten CLICK lösen, aber vielleicht habe ich da einfach nur einen Denkfehler?

Nochmals ein grosses DANKE für Eure Arbeit.

Majaestix

Seiten: [1]