Hi srd,
a solution for you in ST
//write time in Minutes to MB
//this is for testing
//if you need time input by User, use an D-block and make MB`s remanent
MB65:= 3; //V1-5
MB66:= 4; //V6-8
MB67:= 8; //V9-10
// Step chain
CASE MB100 OF
0: //Init step
MW01:= 0; //all outputs false
M17:= true; //reset Timer
MB100:= 1; //go to step 1
1: //wait for start
MW01:= 0;
IF I01 AND I02 THEN //If Start, go to next step
MW51:= MB65*60; //load time V 1-5 in seconds to MW51
M17:= true; //reset Timer
MB100:= 2;
END_IF;
2: //Sequence start with V1
M17:= false;
MW01:= 1; //V1 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 3; //next step
END_IF;
3: // V2
M17:= false;
MW01:= 2; //V2 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 4; //next step
END_IF;
4: // V3
M17:= false;
MW01:= 4; //V3 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 5; //next step
END_IF;
5: // V4
M17:= false;
MW01:= 8; //V4 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 6; //next step
END_IF;
6: // V5
M17:= false;
MW01:= 16; //V5 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MW51:= MB66*60; //load time V 6-8
MB100:= 7; //next step
END_IF;
7: // V6
M17:= false;
MW01:= 32; //V6 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 8; //next step
END_IF;
8: // V7
M17:= false;
MW01:= 64; //V7 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 9; //next step
END_IF;
9: // V8
M17:= false;
MW01:= 128; //V8 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MW51:= MB67*60; //load time V 9-10
MB100:= 10; //next step
END_IF;
10: // V9
M17:= false;
MW01:= 256; //V9 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 11; //next step
END_IF;
11: // V10
M17:= false;
MW01:= 512; //V10 on
IF NOT I02 THEN //stop, go to step0
MB100:= 0;
ELSIF T01Q1 THEN //time expired
M17:= true; //reset Timer
MB100:= 1; //go back to start
END_IF; //end of sequence
ELSE
MB100:= 0; //Something went wrong, go to init
END_CASE;
//timer
T01 (
EN := (MB100 > 1),
RE := M17,
ST := ,
I1 := MW51, //time in seconds
I2 := ,
Q1 => ,
QV => );
//write MW01 to Outputs
Q01:= M01;
Q02:= M02;
Q03:= M03;
Q04:= M04;
Q17:= M05;
Q18:= M06;
Q19:= M07;
Q20:= M08;
Q21:= M09;
Q22:= M10;
Thomas