-> Hier kostenlos registrieren
Hallo zusammen,
ich stehe gerade auf dem Schlauch.
Ich muss eine variable Pulsfolge erzeugen. Ähnlich einem PWM Signal.
Es wird eine High Time von 200ms und eine Pausenzeit von 500ms vorgeben.
Die Anzahl der Pule soll variabel sein.
Im fertigen Baustein soll auch die Pausen und die High Time einstellbar sein.
Ich habe mal ein Prototyp in SCL erstellt. Die Pulse werden auch erzeugt, aber er zählt die Pulse nicht.
Kann der eingeschlagene weg überhaupt zum erfolg führen?
ich stehe gerade auf dem Schlauch.
Ich muss eine variable Pulsfolge erzeugen. Ähnlich einem PWM Signal.
Es wird eine High Time von 200ms und eine Pausenzeit von 500ms vorgeben.
Die Anzahl der Pule soll variabel sein.
Im fertigen Baustein soll auch die Pausen und die High Time einstellbar sein.
Ich habe mal ein Prototyp in SCL erstellt. Die Pulse werden auch erzeugt, aber er zählt die Pulse nicht.
Kann der eingeschlagene weg überhaupt zum erfolg führen?
Code:
FUNCTION_BLOCK "FB10_puls"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
number_of_pulses : Int;
duration : Time;
breake_time : Time;
start : Bool;
END_VAR
VAR_OUTPUT
Q : Bool;
finished : Bool;
END_VAR
VAR
HM_start : Bool;
HM_01 : Bool;
HM_02 : Bool;
HM_03 : Bool;
R_Trig_start {InstructionName := 'R_TRIG'; LibVersion := '1.0'} : R_TRIG;
HM_number_of_pulses : Int;
HM_breake_time : Time;
HM_duration : Time;
"counter" : Int;
TP_Pulse {InstructionName := 'TP_TIME'; LibVersion := '1.0'} : TP_TIME;
F_Trig_1 {InstructionName := 'F_TRIG'; LibVersion := '1.0'} : F_TRIG;
TP_Breake {InstructionName := 'TP_TIME'; LibVersion := '1.0'} : TP_TIME;
xxx : Int;
END_VAR
Code:
BEGIN
#R_Trig_start(CLK:=#start,
Q=>#HM_start);
IF (#HM_start = TRUE) THEN
#HM_number_of_pulses := #number_of_pulses;
#HM_duration := #duration;
#HM_breake_time := #breake_time;
END_IF;
FOR #counter := 0 TO #HM_number_of_pulses DO
#TP_Pulse(IN := #HM_start OR #HM_03,
PT := #HM_duration,
Q => #Q);
#F_Trig_1(CLK := #TP_Pulse.Q,
Q => #HM_01);
#TP_Breake(IN := #HM_01,
PT := #HM_breake_time,
Q => #HM_02);
"F_TRIG_DB"(CLK := #HM_02,
Q => #HM_03);
END_FOR;
END_FUNCTION_BLOCK