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 - mattsches

Seiten: 1 ... 14 15 [16] 17 18
226
Jetzt verstehe ich, wo der Hase im Pfeffer liegt. Klar, wenn der Laden nachts manuell geschlossen wird, bleibt er morgens zu.

Die Abhilfe kann nun allerdings nicht im BLIND_NIGHT geschehen, Ursache ist ja der PO=0 des BLIND_INPUT. Lösen würde ich das folgendermaßen:

- 255 (konstant) auf BLIND_INPUT/PI
- BLIND_NIGHT/STATUS abgreifen und auf <> 141 vergleichen (Achtung, die Doku stimmt hier nicht, Status 142 wird nicht ausgegeben)
- das (boolesche) Ergebnis über einen F_TRIG ziehen und dessen Ausgang auf BLIND_INPUT/IN

Ergebnis: Wenn der BLIND_NIGHT aus dem Nachtbetrieb geht, wird dem BLIND_INPUT kurzzeitig befohlen, auf Position 255 zu fahren. Dazu reicht der kurze Impuls, der Baustein fährt danach selbständig die definierte Position an.

227
Danke, genau wie ich das vermutet habe, die erste IF-Abfrage ("IF NOT (up AND dn) AND night...") entfernt.

NightWatcher, ich kann keinen Fehler darin erkennen. Muss bei dir genauso funktionieren. Wenn nein, müsstest du dein Programm mal hier posten. Sonst wird es schwierig, weitere Aussagen zu machen.

228
Sven, bei dir tut es nun ja, oder? Soll heißen, wenn du nachts manuell eingreifst, fährt der Rolladen morgens trotzdem automatisch hoch? Poste doch mal deinen Code.

NightWatcher, dann muss es an deinem Programm liegen. Du schreibst, der BLIND_INPUT gibt PO=0 aus. Das geht m. E. nur, wenn entweder MASTER_MODE=FALSE ist (musst du ausdrücklich setzen, leider hat der Autor der Variablen keinen Initialwert verpasst). Oder wenn vor dem automatischen Schließvorgang der Laden schon manuell geschlossen wurde.

Wenn Master Mode = True ist und der Laden manuell geöffnet ist, bleibt PO=255 bestehen - egal was die nachgeschalteten Bausteine bei aktivem Automatikbetrieb so anstellen, inklusive BLIND_NIGHT.

Ich hatte seinerzeit im BLIND_NIGHT noch einen Bug gefunden, die Ausgänge QU und QD werden nur im Automatikmodus durchgeschleift, was ich für falsch halte:

Original:
(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
po := night_position;
ao := night_angle;
ELSE
QU := UP;
QD := DN;
po := pi;
ao := ai;
status := s_in;
END_IF;

Meine Version:
(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
po := night_position;
ao := night_angle;
ELSE
po := pi;
ao := ai;
status := s_in;
END_IF;

QU := UP;
QD := DN;

Glaube aber nicht unbedingt, dass dein Problem damit zusammenhängt.

229
@NightWatcher:
Hast du am BLIND_INPUT Master_Mode auf True gesetzt?

@erdbeerschäler:
Ja, das würde ich über eine Erkennung der negativen Flanke lösen. F_TRIG auf den Fensterkontakt, den Ausgang zum einen verodert mit dem, was bisher auf BLIND_INPUT/IN geht.

Zum anderen muss ja noch der Sollwert umgeschaltet werden, der auf BLIND_INPUT/AI geht. Dazu würde ich dem F_TRIG zur Sicherheit einen TOF nachschalten, z. b. mit t#1s. Von dort dann auf den eigentlichen Sollwertumschalter. Der ginge z. B. mit MUX_R2 und nachgeschaltetem Konverter von Real auf Byte (nötigenfalls Real -> Int -> Byte). Etwas umständlich, eleganter wäre ein MUX_B2 für die Umschaltung zweier Byte-Werte. Leicht herzustellen als abgewandelte Kopie des MUX_R2.

Gruß,
m.

230
Das sollte einfach sein, dazu brauchst Du keinen TIMER_EXT.

Einfach ein paar zusätzliche Parameter definieren, z. B.:

FUNCTION_BLOCK BLIND_NIGHT
VAR_INPUT
[...]
ENABLE_MINMAXTIMES : BOOL;
END_VAR
VAR_INPUT CONSTANT
[...]
EARLIEST_OPENING_TIME : TIME_OF_DAY;
EARLIEST_CLOSING_TIME : TIME_OF_DAY;
[...]
END_VAR

Und dann die Bedingungen für das automatische Schließen und öffnen erweitern:

[code][...]
ELSIF (DT_TO_TOD(dtin) > sunset + sunset_offset) AND (last_night < DT_TO_DATE(dtin)) AND NOT night AND e_night DN AND (DT_TO_TOD(dtin)>=EARLIEST_CLOSING_TIME OR NOT ENABLE_MINMAXTIMES) THEN
[...]
ELSIF (DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND (last_day < DT_TO_DATE(dtin)) AND night AND e_day AND (last_night < DT_TO_DATE(dtin))  AND (DT_TO_TOD(dtin)>=EARLIEST_OPENING_TIME OR NOT ENABLE_MINMAXTIMES) THEN
[...]
END_IF;

Jetzt werden die Rolläden erst geschlossen, wenn EARLIEST_CLOSING_TIME erreicht oder diese Blockierung/Verzögerung per ENABLE_MINMAXTIMES=FALSE deaktiviert ist (z. B. wenn Du nicht zuhause bist).

Du solltest nur noch prüfen, ob die aktuelle Uhrzeit an DTIN als Lokalzeit oder UTC übergeben wird. Falls Letzteres der Fall ist, würde ich einen weiteren Parameter machen, mit dem Lokalzeit übergeben wird und in den beiden zusätzlichen Bedingungen darauf zugreifen (und nicht auf DTIN). Sonst bewegen sich die Läden doch ein oder zwei Stunden früher als gewünscht.

Grüße,
mattsches

231
Servus Sven,

jetzt verwirrst Du mich. Welchen Dark-Baustein meinst Du?  ???

Ich habe mal meine Varianten der bestehenden BLIND_*-Bausteine vorgestellt. Ein *DARK war da aber nicht dabei. Richtig ist, dass meine Bausteine nur miteinander tun - weil ich die Analogwerte für Position und Lamellenwinkel von größenlosen 0..255 auf 0..100 bzw. Winkel in Grad geändert habe.

Was Deine Frage angeht: Können kannst Du nahezu alles. Mir ist nur nicht ganz klar, was der Timer bewirken soll (ohne den TIMER_EXT jetzt genau zu kennen, ich setze ihn nicht ein).

Was soll denn genau wie funktionieren? Komst Du mit meinem Vorschlag oben nicht zum Ziel?

Gruß,
mattsches

232
Also der Editor des Vertrauens sollte klar sein - Codesys. Darin kann man nicht nur Projekte bearbeiten, sondern auch Bibliotheken, sofern sie nicht verschlossen wurden. Was bei den OSCAT-Bibliotheken ("Open Source Community...") dankenswerterweise nicht der Fall ist.

Drei Möglichkeiten fallen mir auf die Schnelle ein:

1. In Codesys also "Datei öffnen", Dateiart "Bibliothek *.lib" auswählen und die gewünschte Bibliothek öffnen. Zweite Instanz von Codeys öffnen mit dem Zielprojekt, dort neuen Baustein unter beliebigem Namen anlegen und per Copy & Paste Deklarations- und Codeteil kopieren. Im Zielprojekt dann anpassen und die Instanzen auf den neuen Bausteinnamen ändern.

2. Wie oben Bibliothek in Codesys öffnen, dann aber als Projekt abspeichern. Schließen. Zielprojekt öffnen, "Projekt/Kopieren...", Quellprojekt auswählen und im folgenden Dialog den gewünschten Baustein. Eine Kopie wird im Zielprojekt angelegt, diese umbenennen, modifizieren und die Instanzen anpassen an den neuen Namen.

3. Vielleicht am einfachsten: Bibliothek öffnen, "Projekt/Exportieren...", gewünschten Baustein auswählen, Dateiname für (temporäre) Exportdatei angeben. Zielprojekt öffnen, "Projekt/Importieren...", Datei auswählen, anpassen, etc. pepe.

Sucht euch eine Variante aus.

Direkt in der Bibliothek ändere ich nichts, weil ein Debuggen vom Zielprojekt aus dann nicht möglich ist.

Grüße,
mattsches

233
Das sollte relativ einfach zu ändern sein. Schaut mal in den Quellcode des BLIND_NIGHT, gleich die ersten Zeilen bewirken, dass ein manueller Eingriff bei Nacht das automatische Öffnen deaktiviert:

IF NOT (up AND dn) AND night THEN
(* manual operation at night will cancel operation for one night *)
night := FALSE;
ELSIF [...]

Wenn ihr diese erste IF-Abfrage rauslöscht (und aus dem ELSIF natürlich ein IF macht), sollte es so funktionieren, wie ihr euch das wünscht.

Ich würde dazu ganz pragmatisch den Baustein aus der Bibliothek ins eigene Projekt kopieren, dort modifizieren und z. B. als BLIND_NIGHT2 speichern und aufrufen. Sache gegessen.

234
BECKHOFF / Re: Nach Neustart werden Ausgänge angesteuert
« am: 28. September 2014, 20:53:16 »
kenzo, die Verriegelung im CFC kannst du dir sparen. Das macht der im BLIND_CONTROL aufgerufene BLIND_ACTUATOR mittels INTERLOCK-Aufruf schon selbst. Inkl. einstellbarer Verzögerungszeit zwischen den Ausgängen; denn die Motoren würden ein direktes Umschalten von Auf nach Ab und umgekehrt auch nicht gut vertragen.

Codeauszug:
(* make sure only one motor is active at a given time *)
lock(i1 := UP, I2 := DN, TL := T_lockout);

(* ramp up or down to simulate the angle position of the blind slats *)
angle(e := lock.Q1 OR lock.Q2, UP := lock.Q1, PT := T_Angle);
position(e := lock.Q1 AND angle.high OR lock.Q2 AND angle.low, up := lock.Q1, PT := T_UD);

(* set the outputs *)
pos := position.Out;
ang := angle.Out;

(* set the outputs *)
QU := lock.Q1;
QD := lock.Q2;

Gruß,
mattsches

235
Codesys 2 / Re: MODBUS TCP und Festo CPX-CEC-M1
« am: 28. September 2014, 20:42:42 »
Hallo cloidnerux,

der CPX-CEC kann meines Wissens von Haus aus schon Modbus TCP, entsprechende Bausteine müssten in den mitgelieferten Bibliotheken dabei sein. Hast du es damit schon probiert?

Ich habe gerade keine geeignete Codesys-Installation greifbar und kann nicht mal eben nachsehen. Könnte ich aber zu einem späteren Zeitpunkt nachholen.

Gruß,
mattsches

236
BECKHOFF / Re: Nach Neustart werden Ausgänge angesteuert
« am: 11. September 2014, 22:19:44 »
Einfach im CFC-Plan auf den Baustein doppelklicken. Dann geht ein Fenster auf, dort kannst du in der Spalte "Wert" den gewünschten Wert eintragen. Kann sein, dass du ein bisschen rumklicken musst. Wenn kein Wert in der Zelle steht, ist sie manchmal schwer zu treffen. Der Dialog ist vielleicht nicht ganz optimal umgesetzt im alten Codesys/TwinCAT.

237
Blöde Frage, kann es sein, dass du zu lange auf den Taster drückst? Standardmäßig fährt die Jalousie bei einem Tastendruck länger 500 ms manuell.

Du könntest den BLIND_INPUT unempfindlicher machen, indem du CLICK_TIME z. B. auf t#1s setzt.


238
oscat.lib fuer TwinCAT/CoDeSys / Re: Blind_Control flex. Ansteuerung
« am: 11. September 2014, 11:30:02 »
Hallo,

grundsätzlich kannst du die MUX-Bausteine schon verwenden. Das Ausgangssignal des letzten Bausteins müsstest du dann von REAL nach BYTE wandeln.

Je nachdem, wie viele mögliche Werte du umschalten willst (wie viele sind es denn?), wird das aber in CFC evtl. ein recht verschachteltes Konstrukt wegen der Logikglieder, die du für die Binärsignale noch bräuchtest.

Ich würde mir dazu einen eigenen Baustein bauen, der die gewünschte Zahl von möglichen Werten schaltet. Und diesen einen Baustein dann in den CFC-Plan packen. Als Grundlage könntest du den Code der MUX-Bausteine verwenden.

Viele Grüße,
Matthias

239
Codesys 2 / Re: Skalierung ? aber welche?
« am: 28. August 2014, 15:49:03 »
Vielleicht musst du doch etwas mehr schreiben. Wo ist "dort"? Ohne Informationen, auf welchen Baustein du dich beziehst, wird es schwer.

Eine lineare Skalierung kann das ja nicht sein. Sonst müsste der skalierte Wert für 40000 zwischen 69 und 80 liegen.

Hast du keinen Zugriff auf den Sourcecode?

240
Codesys 2 / Re: OSCAT network.lib 1.2.1 Demos
« am: 31. Juli 2014, 12:24:49 »
Hallo Rainer,

öffne doch mal die *.lib direkt in Codesys. Dann müsstest du im Ordner "DEMO" die Programme finden und öffnen können. Dann wie empfohlen die benötigten Programme exportieren und in deinem Projekt importieren.

Hab's mit Codesys V3 noch nicht ausprobiert, aber mit der 2er funktioniert das gut.

Gruß,
mattsches

Seiten: 1 ... 14 15 [16] 17 18