scchart T3A2 { bool KIO_LN_0_1, KIO_LN_0_0, IC_ST_1_0, IC_ST_2_0, IC_ST_3_0, IC_ST_3_1; bool IC_ST_1_1, KH_ST_3_1, KH_ST_3_0, IC_LN_5_0, IC_ST_2_1, IC_LN_5_1, IC_LN_4_1; bool second; int counter, counter2, counter3; //Count Delay seems not to work region "KH Station 3": initial state init --> waiting immediate with / 'settrack(railway, KH_ST_3, REV, 100)'; 'setpoint(railway, 1, BRANCH)'; 'setpoint(railway, 3, BRANCH)'; 'setpoint(railway, 2, STRAIGHT)'; state waiting --> slowdown immediate with KH_ST_3_1 / 'settrack(railway, KH_ST_3, REV, 40)'; state slowdown --> stop immediate with KH_ST_3_0 / counter2=0; 'settrack(railway, KH_ST_3, BRAKE, 0)'; state stop --> waiting with counter2==5 / 'settrack(railway, KH_ST_3, REV, 100)' --> stop with second / counter2=counter2+1; region "IC Station 1": initial state init --> waiting immediate with / 'settrack(railway, IC_ST_1, FWD, 100)'; state waiting --> slowdown immediate with IC_ST_1_0 / 'settrack(railway, IC_ST_1, FWD, 40)'; 'printf("slowdown")'; state slowdown --> stop immediate with IC_ST_1_1 / counter=0; 'settrack(railway, IC_ST_1, BRAKE, 0)'; state stop --> waiting with counter==5 / 'settrack(railway, IC_ST_1, FWD, 100)'; 'setpoint(railway, 24, STRAIGHT)'; 'setpoint(railway, 29, BRANCH)'; 'setpoint(railway, 9, BRANCH)'; counter3 = 5 //Do not collide with other train --> stop with second / counter=counter+1; region "IC Station 2": initial state init --> waiting immediate with / 'settrack(railway, IC_ST_2, FWD, 100)'; 'setpoint(railway, 24, BRANCH)'; 'setpoint(railway, 23, BRANCH)'; 'setpoint(railway, 29, STRAIGHT)'; state waiting --> slowdown immediate with IC_ST_2_0 / 'settrack(railway, IC_ST_2, FWD, 40)'; 'printf("slowdown")'; state slowdown --> stop immediate with IC_ST_2_1 / counter3=0; 'settrack(railway, IC_ST_2, BRAKE, 0)'; state stop --> waiting with counter3==5 / 'settrack(railway, IC_ST_2, FWD, 100)'; 'setpoint(railway, 24, BRANCH)'; 'setpoint(railway, 23, BRANCH)'; 'setpoint(railway, 29, STRAIGHT)' --> stop with second / counter3=counter3+1; region "IC": initial state waitForTrain --> waitForTrain with IC_LN_5_0 / 'setpoint(railway, 18, STRAIGHT)'; //Main routes are powered on 100; only KHST1 in use region "Main": initial state start --> set immediate with / 'settrack(railway, IC_ST_4, FWD, 100)'; 'settrack(railway, IC_ST_0, FWD, 100)'; 'settrack(railway, IC_LN_1, FWD, 100)'; 'settrack(railway, IC_LN_2, FWD, 100)'; 'settrack(railway, IC_LN_3, FWD, 100)'; 'settrack(railway, IC_LN_4, FWD, 100)'; 'settrack(railway, IC_LN_5, FWD, 100)'; 'settrack(railway, IC_LN_0, FWD, 100)'; 'settrack(railway, IC_JCT_0, FWD, 100)'; 'settrack(railway, KH_ST_0, REV, 100)'; 'settrack(railway, KH_LN_0, REV, 100)'; 'settrack(railway, KH_ST_6, REV, 100)'; 'settrack(railway, KH_LN_1, REV, 100)'; 'settrack(railway, OC_ST_4, REV, 100)'; 'settrack(railway, OC_ST_0, REV, 100)'; 'settrack(railway, KIO_LN_0, REV, 100)'; 'settrack(railway, KIO_LN_1, REV, 100)'; 'setpoint(railway, 0, BRANCH)'; 'setpoint(railway, 1, BRANCH)'; 'setpoint(railway, 3, BRANCH)'; 'setpoint(railway, 2, STRAIGHT)'; 'setpoint(railway, 8, BRANCH)'; 'setpoint(railway, 7, STRAIGHT)'; 'setpoint(railway, 6, BRANCH)'; final state set; //Assign arriving trains to free IC Station region "IC Station": initial state init --> wait1 with '!trackused(railway, IC_ST_1)' / 'setpoint(railway, 20, STRAIGHT)' --> wait2 with '!trackused(railway, IC_ST_2)' / 'setpoint(railway, 20, BRANCH)'; 'setpoint(railway, 19, BRANCH)' --> wait3 with '!trackused(railway, IC_ST_3)' / 'setpoint(railway, 20, BRANCH)'; 'setpoint(railway, 19, STRAIGHT)'; state wait1 --> init immediate with IC_ST_1_1; state wait2 --> init immediate with IC_ST_2_1; state wait3 --> init immediate with IC_ST_3_1; region "Secure KH-IC": initial state init --> critical with IC_LN_4_1 --> init with KIO_LN_0_1 / 'setpoint(railway, 16, BRANCH)'; 'printf("HDS")'; 'setpoint(railway, 17, BRANCH)'; 'setpoint(railway, 18, BRANCH)'; state critical --> slowdown immediate with KIO_LN_0_1 / 'settrack(railway, KIO_LN_0, REV, 40)' --> init with IC_ST_1_1 | IC_ST_2_1 | IC_ST_3_1; state slowdown --> stop with KIO_LN_0_0 / 'settrack(railway, KIO_LN_0, BRAKE, 0)'; state stop --> init with IC_ST_1_1 | IC_ST_2_1 | IC_ST_3_1 / 'settrack(railway, KIO_LN_0, REV, 100)'; 'setpoint(railway, 16, BRANCH)'; 'printf("HDS")'; 'setpoint(railway, 17, BRANCH)'; 'setpoint(railway, 18, BRANCH)'; }