-> Hier kostenlos registrieren
Hallo zusammen,
ich habe ein Proglem mit einer Einschaltverzögerung in SCL. Ich benutze dafür den Baustein SFB4. Das Programm ist für eine messe gedacht und soll eine Art Browsergame geben. Wo man über ein Panel eingaben geben kann. Die Einschaltverzögerung brauche ich um die Bauzeit eines Gebeudes nach zu stellen. Hier mein Code:
Das Problem ist jetzt das der Timer sofort durchschaltet. Bei PT:= ... Frage ich in meinem DB ein Wert ab mit dem Format TIME.
Vielen Dank schonmal.
ich habe ein Proglem mit einer Einschaltverzögerung in SCL. Ich benutze dafür den Baustein SFB4. Das Programm ist für eine messe gedacht und soll eine Art Browsergame geben. Wo man über ein Panel eingaben geben kann. Die Einschaltverzögerung brauche ich um die Bauzeit eines Gebeudes nach zu stellen. Hier mein Code:
Code:
FUNCTION_BLOCK FB2
VAR_INPUT
DBnr:Block_DB;
Metalmiene_erweitern:BOOL;
Kristalmine_erweitern:BOOL;
Treibstoffmine_erweitern:BOOL;
END_VAR
VAR_TEMP
END_VAR
VAR
m_bau_fertig:BOOL;
m_Bauen:BOOL;
k_bau_fertig:BOOL;
k_Bauen:BOOL;
t_bau_fertig:BOOL;
t_Bauen:BOOL;
zeit_fertig:BOOL;
Timer1:SFB4;
Timer2:SFB4;
Timer3:SFB4;
ZEIT:TIME;
END_VAR
IF Metalmiene_erweitern = 1 AND NOT k_Bauen AND NOT t_Bauen AND NOT m_Bauen AND
DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW14) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW16) THEN
DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW14));
DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW16));
m_bau_fertig:=0;
ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD22));
m_Bauen:=1;
END_IF;
IF Kristalmine_erweitern = 1 AND NOT m_Bauen AND NOT t_Bauen AND NOT k_Bauen AND
DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW28) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW30) THEN
DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW28));
DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW30));
k_bau_fertig:=0;
ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD36));
k_Bauen:=1;
END_IF;
IF Treibstoffmine_erweitern = 1 AND NOT m_Bauen AND NOT k_Bauen AND NOT t_Bauen AND
DWORD_TO_DINT (DBnr.DD0) >= WORD_TO_DINT (DBnr.DW42) AND DWORD_TO_DINT (DBnr.DD4) >= WORD_TO_DINT (DBnr.DW44) THEN
DBnr.DD0:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD0) - WORD_TO_DINT (DBnr.DW42));
DBnr.DD4:= DINT_TO_DWORD(DWORD_TO_DINT (DBnr.DD4) - WORD_TO_DINT (DBnr.DW44));
t_bau_fertig:=0;
ZEIT :=DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD50));
t_Bauen:=1;
END_IF;
Timer1(IN := m_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD22)));
m_bau_fertig := Timer1.Q;
Timer2(IN := k_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD36)));
k_bau_fertig := Timer2.Q;
Timer3(IN := t_Bauen ,PT := DINT_TO_TIME(DWORD_TO_DINT (DBnr.DD50)));
t_bau_fertig := Timer3.Q;
IF m_bau_fertig =1 THEN
DBnr.DW12:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW12) + 1);
DBnr.DW14:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW14))*2.3));
DBnr.DW16:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW16))*2.3));
DBnr.DW20:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW20))*1.75));
DBnr.DD22:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD22)* 1.3);
m_Bauen:= 0;
m_bau_fertig :=0;
ELSIF k_bau_fertig =1 THEN
DBnr.DW26:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW26) + 1);
DBnr.DW28:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW28))*2.4));
DBnr.DW30:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW30))*2.2));
DBnr.DW34:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW34))*1.75));
DBnr.DD36:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD36)* 1.3);
k_Bauen:= 0;
k_bau_fertig:=0;
ELSIF t_bau_fertig =1 THEN
DBnr.DW40:= INT_TO_WOrD(WORD_TO_INT(DBnr.DW40) + 1);
DBnr.DW42:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW42))*2.2));
DBnr.DW44:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW44))*2.3));
DBnr.DW48:= INT_TO_WORD(REAL_TO_INT(INT_TO_REAL(WORD_TO_INT(DBnr.DW48))*1.7));
DBnr.DD50:= REAL_TO_DWORD(DWORD_TO_REAL (DBnr.DD50)* 1.3);
t_Bauen:= 0;
t_bau_fertig:=0;
END_IF;
END_FUNCTION_BLOCK
Das Problem ist jetzt das der Timer sofort durchschaltet. Bei PT:= ... Frage ich in meinem DB ein Wert ab mit dem Format TIME.
Vielen Dank schonmal.