-Menü

Beiträge anzeigen

Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.

Beiträge anzeigen-Menü

Beiträge - wolfii

#1
Aus dem Kopf (Details stehen ja in den Datenblättern):

88x: in etwa doppelte CPU-Leistung verglichen mit der 841
820x: >10-fache CPU-Leistung der 841, des weiteren diverse zusätzliche Anwendungsmöglichkeiten durch Linux.

Ich habe derzeit eine 841, wenn ein Wechsel anstünde würde ich auf alle Fälle zur 820x-Serie greifen.

Gruß

Wolfgang
#2
Hallo saku,

ich nehme an Du hast den Loginbaustein in einer Task mit langer Zykluszeit laufen.

Ich hab auch ein wenig gebraucht, um draufzukommen: Die Bausteine aus der Wago MySQL Lib funktionieren nur, wenn sie in einer Task mit kurzer Zykluszeit laufen, da sie asynchron arbeiten (d.h. nicht der ganze Loginvorgang wird auf einmal durchgeführt, sondern nur immer ein kleiner Teil, und erst wenn am Ausgang "connected" TRUE anliegt, bist Du wirklich eingelocht.

Ich habe mir einen Funktionsblock geschrieben, der die Starttrigger für Loginvorgang und zeitgesteuertes Ausführen eines SQL-Statements (zwecks Datenlogging) liefert, und lasse meine Logging-Task jetzt mit 500ms Zykluszeit laufen. Bei Interesse kann ich gern den Sourcecode hier veröffentlichen.

Gruß

Wolfgang
#3
Hallo miteinander,

in der Lib 3.31 ist in GEN_PULSE ein kleiner Fehler reingekommen. Der Wert von tn wird um den jeweils falschen Wert hochgezählt (PTH statt PTL und umgekehrt).

Die korrigierte Fassung schaut bei mir so aus:


IF enq THEN
   tx := DWORD_TO_TIME(T_PLC_MS());
   IF NOT init THEN init := TRUE; tn := tx; END_IF;
   (* This only happens on a timer overflow ... *)
   IF tn > tx THEN
      tn := tx;
   END_IF
   IF tx - tn >= SEL(Q, PTL, PTH) THEN
      tn := tn + SEL(Q, PTL, PTH);
      Q := NOT Q;
   END_IF;
ELSE
   Q := FALSE;
   init := FALSE;
END_IF;

Viele Grüße

Wolfii
#4
Hallo Hugo,

bei einer Referenz bisher müsstest Du das Projekt eigentlich mangels Interesse sofort einstampfen ... :-))

Ok, die Beteiligung an den anderen Foren spricht ja eine deutlich andere Sprache.

Leider kann ich Dir nur mit was nichtkommerziellem dienen: http://www.sonnenhaus-landsham.de/

Ich vor allem die Jalousiesteuerung und damit verbunden die Sonnenstandsberechnungen ein. WAGO 750/841 mit Codesys 2.3

Viele Grüße und vielen Dank für die tolle Arbeit

Wolfii
#5
Hallo miteinander,

vielleicht kann das jemand brauchen:

In der oscat-lib gibts einen Timer-Baustein, den man mit Starttermin und Laufzeit füttert. Für manche Anwendungsfälle war mir ein Timer lieber, den ich mit Start- und Endezeit adressieren kann (beispielsweise brennt unsere Aussenbeleuchtung mit diesem Baustein ab Sonnenuntergang+10min bis zu einer festen Zeit nachts). Liegt die Endezeit vor der Startzeit, geht der Timer davon aus, dass er über Mitternacht laufen soll. Hier also der Quellcode für day_timer

FUNCTION_BLOCK day_timer
VAR_INPUT
   DT_IN: DT;
   starttime: TOD;
   endtime: TOD;
END_VAR
VAR_OUTPUT
   outval: BOOL;
END_VAR
VAR
   currenttime: TOD;
   last_check: TIME := T#0s;
   tx: TIME;
END_VAR


(*
Output is set to TRUE if DT_IN is in between START and END. IF START > END it is
assumed that the timer is meant to run over midnight.
*)
tx := DWORD_TO_TIME(T_PLC_MS());

IF tx - last_check <= T#100ms THEN
   RETURN;
END_IF;

currenttime := DT_TO_TOD(DT_IN);

IF starttime < endtime THEN
   IF currenttime > starttime AND currenttime < endtime THEN
   outval := TRUE;
   ELSE
   outval := FALSE;
   END_IF
ELSE
   IF currenttime > starttime OR currenttime < endtime THEN
   outval := TRUE;
   ELSE
   outval := FALSE;
   END_IF
END_IF
last_check := tx;
#6
Hallo miteinander,

ich verwende die Jalousienmodule recht ausgiebig in unserem Haus http://www.sonnenhaus-landsham.de/, war aber mit der Funktion von blind_night nicht so ganz glücklich. Insbesondere hat mich gestört, dass blind_night für die laufende Nacht abbricht, wenn einmal eine Handbetätgung passiert ist.

Hier der Quellcode meines Moduls. Es fällt in den Automatikmodus zurück, sobald die Frist für die Handbedienung abgelaufen ist (in meinem Fall sind das zwei Stunden ...). Vielleicht hilfts ja jemandem.

Gruß

Wolfii

FUNCTION_BLOCK blind_night
VAR_INPUT
   UP, DN : BOOL;
   S_IN : BYTE;
   pi, ai : BYTE;
   E_night : BOOL := TRUE;
   E_day   : BOOL := TRUE;
   dtin : DT;
   sunrise, sunset : TOD;
END_VAR
VAR_INPUT CONSTANT
   sunrise_offset : TIME;
   sunset_offset : TIME;
   night_position : BYTE := 0;
   night_angle : BYTE := 0;
END_VAR
VAR_OUTPUT
   QU, QD : BOOL;
   status : BYTE;
   po, ao : BYTE;
END_VAR
VAR
   night : BOOL;
   last_night, last_day : DATE;
END_VAR

IF up AND dn THEN
   IF  (DT_TO_TOD(dtin) > sunset + sunset_offset)  AND e_night THEN
      (* enable night *)
      night := TRUE;
   ELSIF (DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND night AND e_day  THEN
      (* disable night *)
      night := FALSE;
   END_IF;
ELSE
   IF (DT_TO_TOD(dtin) > sunrise + sunrise_offset AND DT_TO_TOD(dtin) < sunset + sunset_offset) THEN
      night := FALSE;
   END_IF
END_IF

(* 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;
   QU := UP;
   QD := DN;
ELSE
   QU := UP;
   QD := DN;
   po := pi;
   ao := ai;
   status := s_in;
END_IF;