oscat.lib > Modulentwicklung / Module Development

Lichtschalter mit Helligkeitssensor

<< < (2/5) > >>

hugo:
im code ist ein speicher eingebaut wie z.b. rs flip flop

habe den code nicht getestet, er sollte eine gedankenanregung sein.

wichtig ist die if then else

if Q then
   bedingung zum löschen des ausgangs
   dieser teil wird ja nur aufgerufen wenn q bereits true also das licht ein ist
   sobald die bediungung hier true ist wird q auf false gesetzt und der else zweig ab sofort  aufgerufen
else
   jetzt alle bedingungen die den ausgang q setzten.
   sobald q gesetzt wird der else zweig nicht mehr aufgerufen
end_if

im beispiel mit switch_i passiert im prinzip dasselbe, nur das sich der speicher innerhalb vom modul switch_i befindet

spiel mal mit der if then else bedingung oben rum dann kommst du schnell drauf.

hier noch in worten:
zuerst ist ja q = false.
das bedeutet das nur der teil zwischen else und end_if ausgeführt wird.
wenn du jetzt mit einer bedingung bwm und helligkeit < 1600 q auf true setzt wird dieser teil nicht mehr ausgeführt.

jetzt wird da q ja true isdt der teil zwischen if unf else ausgeführt.

hier steht jetzt diejenige bedingung die q wieder löschen kann, und das ist im einfachsten fall bwm = false, also q := not bwm
denn wenn keine bewegung soll ja ausgeschaltet werden oder.
hier können dann noch weitere bedingungen stehen wie z.b. helligkeit < 24000 usw....
ganz einfach oder

Majaestix:
Hallo Hugo,

Du Gott der SPS! Ich danke Dir! Ich hab´s begriffen und es funktioniert auch noch :D

Du hast was gut!

Gruss

Majaestix

hugo:
ein tip vom mir

lies mal übers wochenende ein buch über programmierung basic, pascal oder c egal ist eh alles gleich
dann werden dir die augen aufgehen was man mit programmierung alles machen kann

übrigends ist st eigentlich pascal

Majaestix:
Hallo Hugo,

üble Nachrichten, es läuft leider doch nicht so ganz  >:(

Folgenden Code habe ich erstellt:


--- Code: ---PROGRAM MAIN
VAR

(*=========================================== Ein-/Ausgaenge Lichtschalter Kueche ======================*)

Lichtschalter_Kueche : SWITCH_I;
Lichtschalter_Kueche_getastet : BOOL := FALSE;
Lichtschalter_Kueche_Entprellzeit : TIME := T#3m;

Licht_Kueche_ein : BOOL := FALSE;

(*----------------------------------------------- Schwellenwert Helligkeitssensoren  ---------------------------------------*)

Licht_Kueche_unterer_Schwellenwert : INT := 14000;
Licht_Kueche_oberer_Schwellenwert : INT := 18500;

END_VAR

(*+++++++++++++++++++++++++++++++++++++++++++ Kueche ++++++++++++++++++++++++++++++++++++++++++++*)

Lichtschalter_Kueche (SET := EG_KC_NORD_WAND_WEST_BWM_E1_48b
AND EG_KC_NORD_DECKE_HS_E1_2a < Licht_Kueche_unterer_Schwellenwert,
RST := NOT EG_KC_NORD_WAND_WEST_BWM_E1_48b
AND EG_KC_NORD_DECKE_HS_E1_2a > Licht_Kueche_oberer_Schwellenwert,
T_ON_MAX := Lichtschalter_Kueche_Entprellzeit,
Q => Licht_Kueche_ein);

IF Licht_Kueche_ein THEN EG_KC_WEST_DECKE_LICHT_DIMMER_S1_7 := 32767;
EG_KC_OST_DECKE_LICHT_DIMMER_S1_31 := 32767;
EG_KC_NORD_DECKE_LICHT_DIMMER_S1_36 := 32767;
ELSE EG_KC_WEST_DECKE_LICHT_DIMMER_S1_7 := 0;
EG_KC_OST_DECKE_LICHT_DIMMER_S1_31 := 0;
EG_KC_NORD_DECKE_LICHT_DIMMER_S1_36 := 0;
END_IF

--- Ende Code ---

Wenn das Licht an ist, also SET = true, dann liegt der vom Helligkeitssensor gemessene Lichtwert über der unteren Schwelle. Das führt dazu, dass SET trotz BWM nicht erneut getoggelt wird. Damit bleibt das Licht zwar für die T_ON_MAX Zeit an, aber nach Ablauf dieser Zeit gibt es einen Licht-aus/Licht-an Effekt. Das dauert zwar nicht lange, SET wird ja sofort wieder getoggelt, aber man merkt es.
Das ist eigentlich das Problem, an dem ich mir schon solange die Zähne ausbeisse.

Hast Du noch eine Idee?

Danke.

Gruss

Majaestix

Majaestix:
Hallo Hugo,

ich glaube, jetzt habe ich es doch:


--- Code: ---Lichtschalter_Kueche (SET := EG_KC_NORD_WAND_WEST_BWM_E1_48b
AND EG_KC_NORD_DECKE_HS_E1_2a < Licht_Kueche_unterer_Schwellenwert
OR EG_KC_NORD_WAND_WEST_BWM_E1_48b
AND EG_KC_NORD_DECKE_HS_E1_2a > Licht_Kueche_unterer_Schwellenwert
AND EG_KC_NORD_DECKE_HS_E1_2a < Licht_Kueche_oberer_Schwellenwert,
RST := NOT EG_KC_NORD_WAND_WEST_BWM_E1_48b
AND EG_KC_NORD_DECKE_HS_E1_2a > Licht_Kueche_oberer_Schwellenwert,
T_ON_MAX := Lichtschalter_Kueche_Entprellzeit,
Q => Licht_Kueche_ein);


--- Ende Code ---

Die erste Bedingung war wahrscheinlich falsch, mal sehen, was bei Sonnenaufgang passiert.

Gruss

Majaestix

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln