Analogwertverarbeitung mit Wertabspeicherung

asima

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich habe folgendes Problem, ich muss analoge Werte die mittels eines Potis eingestellt werden können. Nun müssen mit 2 werte auf 2 Kippschaltern gespeichtert werden.

Die Einstellung des mit dem Leuchtband (siehe Bild) angezeigten Sollpegels "minimum" erfolgt mit dem Stellknopf. Hierzu muß der Kippschalter s6 in die Mittelstellung geschaltet, so wird der zu diesem Zeitpunkt vom Leutband angezeigte Pegel Als Sollwert "max abgespeichert werden.

Das selbe gilt, dann auch für den Schalter s7 der den wert "min" abspeichern soll.

Wenn die schalter s6 und s7 betätigt werden, sollen die abgespeicherten Pegel auf dem Leuchtband angezeigt werden.

Ich muss das Ganze mit Struckturiertem Text und S7-Graph Programmieren. und weis nicht wie ich das realisieren soll.

Ich bitte euch um eure HILFE

DANKE im voraus.


LG
 

Anhänge

  • Bild0059.jpg
    Bild0059.jpg
    360,7 KB · Aufrufe: 44
Zuviel Werbung?
-> Hier kostenlos registrieren
ich bin erst soweit das sich die beiden pumpen abwechselnd den behälter befüllen und. mit der analogwertverarbeitung weis ich noch gar nich wie ich anfangen soll.

hier mein quellcode:

FUNCTION_BLOCK FB_Pumpen_SCL
// FB steuert zwei Pumpen an und hält den Fluessigkeitspegel zw. 2 Grenzwerten b1 und b2
VAR_INPUT
// Eingangsparameter
s0, s1, s2, s4, s5, b1, b2: BOOL;
s6, s7: INT;
END_VAR

VAR_OUTPUT
// Ausgangsparameter
h1, h2, k1, k4: BOOL;
END_VAR

VAR
// statische Variablen => im Instanz-Datenbaustein (hier DB1)
phaseL: BOOL:=true; phaseR: BOOL:=false;
fuellen: BOOL:=true; leeren: BOOL:=false;
END_VAR

h1 := 1;

// Anweisungsteil
IF NOT b1 AND NOT b2 AND phaseL AND fuellen THEN //Fuellen: an Untergrenze in PhaseL, K1 ein)
k1:=true; k4:=false;
END_IF;

IF NOT b1 AND NOT b2 AND phaseR AND fuellen THEN //Fuellen: an Untergrenze in PhaseR, K4 ein)
k1:=false; k4:=true;
END_IF;

IF b1 AND b2 AND phaseL AND fuellen THEN //Fuellen: Obergrenze in PhaseL erreicht
k1:=false;
leeren:=true; fuellen:=false;
END_IF;

IF b1 AND b2 AND phaseR AND fuellen THEN //Fuellen: Obergrenze in PhaseR erreicht
k4:=false;
leeren:=true; fuellen:=false;
END_IF;

IF NOT b1 AND NOT b2 AND phaseL AND leeren THEN //Leeren: an Untergrenze Phasenumschalt. L-R
phaseL:=false; phaseR:=true;
leeren:=false; fuellen:=true;
END_IF;

IF NOT b1 AND NOT b2 AND phaseR AND leeren THEN //Leeren: an Untergrenze Phasenumschalt. R-L
phaseR:=false;
phaseL:=true;
leeren:=false; fuellen:=true;
END_IF;

nun muss ich mit den Analogwerterten arbeiten und hab hab kp wie ich das machen soll, da ich noch ein anfänger bin :-|

wie funktioniert das mit dem skalieren und was brauche ich da alles für?


FUNCTION_BLOCK fc_105

CALL "SCALE"
IN :=PEW320
HI_LIM :=1.000000e+001
LO_LIM :=-1.000000e+001
BIPOLAR:=TRUE
RET_VAL:=MW3
OUT :=MD20


CALL "SCALE"
IN :=PEW322
HI_LIM :=1.000000e+001
LO_LIM :=0.000000e+000
BIPOLAR:=FALSE
RET_VAL:=MW2
OUT :=MD10
END_FUNCTION_BLOCK;
 
Zuletzt bearbeitet:
kann mir denn keiner irgend einen tipp geben wie ich mit den analogwerten arbeiten kann und ob das mit dem baustein fc 105 richtig ist und wenn ja, wie ich damit umgehen soll????:confused:
 
ich bin erst soweit das sich die beiden pumpen abwechselnd den behälter befüllen und. mit der analogwertverarbeitung weis ich noch gar nich wie ich anfangen soll.

hier mein quellcode:

FUNCTION_BLOCK FB_Pumpen_SCL
// FB steuert zwei Pumpen an und hält den Fluessigkeitspegel zw. 2 Grenzwerten b1 und b2
VAR_INPUT
// Eingangsparameter
s0, s1, s2, s4, s5, b1, b2: BOOL;
s6, s7: INT;
END_VAR


VAR_OUTPUT
// Ausgangsparameter
h1, h2, k1, k4: BOOL;
END_VAR

VAR
// statische Variablen => im Instanz-Datenbaustein (hier DB1)
phaseL: BOOL:=true; phaseR: BOOL:=false;
fuellen: BOOL:=true; leeren: BOOL:=false;
END_VAR

h1 := 1;

// Anweisungsteil
IF NOT b1 AND NOT b2 AND phaseL AND fuellen THEN //Fuellen: an Untergrenze in PhaseL, K1 ein)
k1:=true; k4:=false;
END_IF;

IF NOT b1 AND NOT b2 AND phaseR AND fuellen THEN //Fuellen: an Untergrenze in PhaseR, K4 ein)
k1:=false; k4:=true;
END_IF;

IF b1 AND b2 AND phaseL AND fuellen THEN //Fuellen: Obergrenze in PhaseL erreicht
k1:=false;
leeren:=true; fuellen:=false;
END_IF;

IF b1 AND b2 AND phaseR AND fuellen THEN //Fuellen: Obergrenze in PhaseR erreicht
k4:=false;
leeren:=true; fuellen:=false;
END_IF;

IF NOT b1 AND NOT b2 AND phaseL AND leeren THEN //Leeren: an Untergrenze Phasenumschalt. L-R
phaseL:=false; phaseR:=true;
leeren:=false; fuellen:=true;
END_IF;

IF NOT b1 AND NOT b2 AND phaseR AND leeren THEN //Leeren: an Untergrenze Phasenumschalt. R-L
phaseR:=false;
phaseL:=true;
leeren:=false; fuellen:=true;
END_IF;

nun muss ich mit den Analogwerterten arbeiten und hab hab kp wie ich das machen soll, da ich noch ein anfänger bin :-|

wie funktioniert das mit dem skalieren und was brauche ich da alles für?


FUNCTION_BLOCK fc_105

CALL "SCALE"
IN :=PEW320
HI_LIM :=1.000000e+001
LO_LIM :=-1.000000e+001
BIPOLAR:=TRUE
RET_VAL:=MW3
OUT :=MD20


CALL "SCALE"
IN :=PEW322
HI_LIM :=1.000000e+001
LO_LIM :=0.000000e+000
BIPOLAR:=FALSE
RET_VAL:=MW2
OUT :=MD10
END_FUNCTION_BLOCK;


Hallo!
Erstens: Bitte verwende die Code tags, das ist die Raute über dem Eingabefeld. Das macht´s übersichtlicher:

Code:
blablabla
.

den SCL hab ich mer jetzt noch nicht angeschaut, ABER:
Code:
FUNCTION_BLOCK fc_105
 
CALL "SCALE"
IN :=PEW320
HI_LIM :=1.000000e+001
LO_LIM :=-1.000000e+001
BIPOLAR:=TRUE
RET_VAL:=MW3
OUT :=MD20
 
 
CALL "SCALE"
IN :=PEW322
HI_LIM :=1.000000e+001
LO_LIM :=0.000000e+000
BIPOLAR:=FALSE
RET_VAL:=MW2
OUT :=MD10
END_FUNCTION_BLOCK;

beim du nimmst einmal das MW2 für Return und einmal das MW3. Wenn du das wirklich auswerten willst wird das nix, weil sich das überschneidet.
MW 0 --> MB 0 und MB 1
MW 2 --> MB 2 und MB 3
MW 4 --> MB 4 und MB 5

weiters: MD 0 --> MW 0 und MW 2 --> MB 0, 1, 2, 3! klar soweit?
Ich würd auch kein MD10 nehmen, weil wenn schon Double, dann (meine Meinung) sollte es durch 4 teilbar sein.

viel Erfolg!
 
Zurück
Oben