-> Hier kostenlos registrieren
Hallo Zusammen,
auch auf die Gefahr mich lächerlich zu machen, ich komme auf keine vernünfitge Lösung
Zur Situation ich möchte eine Rolladensteuerung bauen.
Ich kriege von einen Schalter einen Prozentwert in Byte, und von der HMI einen INT Wert 0-100 %.
Jetzt will natürlich auf dem Schalter und der HMI auch den Prozent wert anzeigen.
Ich hab nur das Problem, dass ich mir Kostant meinen Wert überschreibe, weil aus der HMI kommt eine Null
und vom Schalter z.B. eine 128 (50%). Dann Fährt der 50 % auf und dann durch die HMI 50 % zu.
Ich krieg es leider gerade gedanklick nich hin.
Code schreib ich hier mal rein (Variablenbenahmung ist noch nicht so richtig schön)
Ich bin drauf und dran das Thema neu zu machen aber mir fehlt ein rihtiger ansatz um das Problem zu umgehen.
auch auf die Gefahr mich lächerlich zu machen, ich komme auf keine vernünfitge Lösung

Zur Situation ich möchte eine Rolladensteuerung bauen.
Ich kriege von einen Schalter einen Prozentwert in Byte, und von der HMI einen INT Wert 0-100 %.
Jetzt will natürlich auf dem Schalter und der HMI auch den Prozent wert anzeigen.
Ich hab nur das Problem, dass ich mir Kostant meinen Wert überschreibe, weil aus der HMI kommt eine Null
und vom Schalter z.B. eine 128 (50%). Dann Fährt der 50 % auf und dann durch die HMI 50 % zu.
Ich krieg es leider gerade gedanklick nich hin.
Code schreib ich hier mal rein (Variablenbenahmung ist noch nicht so richtig schön)
Code:
FUNCTION_BLOCK Rolladen_Prozent
VAR_INPUT
bProzent :BYTE;
Laufzeit : TIME;
END_VAR
VAR_OUTPUT
bPWM_Rolladen_Auf :BOOL;
bPWM_Rolladen_Ab :BOOL;
HMI_Output:BYTE; //Entfernen
END_VAR
VAR_IN_OUT
HMI :INT;
END_VAR
VAR
Vergleicher : BYTE;
i : INT;
nTime: INT;
nProzent: INT;
nProzent_HMI: INT;
tLaufzeit1: TIME;
tLaufzeit2: TIME;
ET1: TIME;
ET2: TIME;
ImpulsAuf: TP;
ImpulsAb: TP;
bStartAuf :BOOL;
bStartAb: BOOL;
bProzent_HMI: REAL;
bProzent_Neu1 :REAL;
bProzent_Neu2: REAL;
//FÜR HMI
HMI_byte :BYTE;
HMI_Real :REAL;
nHMI: INT;
bHmi_Neu1 :REAL;
bHmi_Neu2 :REAL;
HMI_Vergleicher: INT;
END_VAR
nTime := TIME_TO_INT(Laufzeit)/100;
IF HMI <> HMI_Vergleicher THEN
HMI_Real := INT_TO_REAL(HMI)*2.55;
HMI_byte := REAL_TO_BYTE(HMI_Real);
END_IF
IF bProzent<Vergleicher THEN
i:=10; //Auffahren
ELSIF bProzent>Vergleicher THEN
i:=20; //Abfahren
ELSIF HMI_byte<Vergleicher THEN
i:=30; //Auffahren
ELSIF HMI_byte>Vergleicher THEN
i:=40; //Abfahren
END_IF
CASE i OF
10: bProzent_Neu1:=BYTE_TO_REAL(Vergleicher)-BYTE_TO_REAL(bProzent);
nProzent := REAL_TO_INT(bProzent_Neu1/2.55);
nProzent_HMI:= REAL_TO_INT(BYTE_TO_REAL(bProzent)/2.55);
tLaufzeit1 := INT_TO_TIME(nProzent*nTime);
bStartAuf :=TRUE;
IF ET1=tLaufzeit1 THEN
ImpulsAuf.IN :=FALSE;
bStartAuf:=FALSE;
bStartAb:=FALSE;
tLaufzeit1 :=T#0S;
ET1 :=T#0S;
Vergleicher := bProzent;
HMI_byte :=bProzent;
HMI:= nProzent_HMI;
i:=0;
HMI_Vergleicher := bProzent;
END_IF;
20: bProzent_Neu2:=BYTE_TO_REAL(bProzent)-BYTE_TO_REAL(Vergleicher);
nProzent := REAL_TO_INT(bProzent_Neu2/2.55);
nProzent_HMI:= REAL_TO_INT(BYTE_TO_REAL(bProzent)/2.55);
tLaufzeit2 := INT_TO_TIME(nProzent*nTime);
bStartAb :=TRUE;
IF ET2=tLaufzeit2 THEN
ImpulsAb.IN :=FALSE;
bStartAb:=FALSE;
bStartAuf:=FALSE;
tLaufzeit2 :=T#0S;
ET2 :=T#0S;
HMI_byte :=bProzent;
Vergleicher := bProzent;
HMI:= nProzent_HMI;
i:=0;
HMI_Vergleicher := bProzent;
END_IF
30:
bHmi_Neu1:=BYTE_TO_REAL(Vergleicher)-BYTE_TO_REAL(HMI_byte);
nHMI := REAL_TO_INT(bHmi_Neu1/2.55);
tLaufzeit1 := INT_TO_TIME(nHMI*nTime);
bStartAuf :=TRUE;
IF ET1=tLaufzeit1 THEN
ImpulsAuf.IN :=FALSE;
bStartAuf:=FALSE;
bStartAb:=FALSE;
tLaufzeit1 :=T#0S;
ET1 :=T#0S;
Vergleicher := HMI_byte;
bProzent:=HMI_byte;
//HMI:= nHMI;
i:=0;
HMI_Vergleicher:=HMI;
END_IF
40:
bHmi_Neu2:=BYTE_TO_REAL(HMI_byte)-BYTE_TO_REAL(Vergleicher);
nHMI := REAL_TO_INT(bHmi_Neu2/2.55);
tLaufzeit2 := INT_TO_TIME(nHMI*nTime);
bStartAb :=TRUE;
IF ET2=tLaufzeit2 THEN
ImpulsAb.IN :=FALSE;
bStartAb:=FALSE;
bStartAuf:=FALSE;
tLaufzeit2 :=T#0S;
ET2 :=T#0S;
Vergleicher := HMI_byte;
bProzent:=HMI_byte;
i:=0;
HMI_Vergleicher:=HMI;
END_IF
50:
END_CASE
ImpulsAb(IN:= bStartAb, PT:=tLaufzeit2 , Q=> bPWM_Rolladen_Ab, ET=> ET2);
ImpulsAuf(IN:= bStartAuf, PT:=tLaufzeit1 , Q=> bPWM_Rolladen_Auf, ET=> ET1);
Ich bin drauf und dran das Thema neu zu machen aber mir fehlt ein rihtiger ansatz um das Problem zu umgehen.