scchart a2controller { region IC_Train: initial state IC_Station_2 { int counterICT; initial state init --> count immediate with / counterICT = 0; state count --> done immediate with counterICT == 10 --> count_check immediate; state count_check --> count_to_count immediate with 'second' --> count_pause immediate; state count_pause --> count; state count_to_count --> count_tick immediate with / counterICT = counterICT + 1; state count_tick --> count; final state done; } >-> About_To_Leave_IC_Station; state About_To_Leave_IC_Station --> Leaving_IC_Station immediate with '!used[IC_ST_4]' / 'used[IC_ST_4] = 1; used[IC_LN_0] = 1; mysetpoint(23, BRANCH); mysetpoint(24, BRANCH); mysetpoint(29, STRAIGHT); mysettrack(IC_ST_2, FWD, 100); mysettrack(IC_ST_4, FWD, 100); mysettrack(IC_LN_0, FWD, 100)'; state Leaving_IC_Station --> About_To_Drive_IC with 'contacts[IC_LN_0][0]' / 'used[IC_LN_0] = 1; used[IC_LN_1] = 1; used[IC_LN_2] = 1; used[IC_LN_3] = 1; used[IC_LN_4] = 1; used[IC_JCT_0] = 1; used[IC_LN_5] = 1; mysetpoint(13, STRAIGHT); mysetpoint(11, STRAIGHT); mysettrack(IC_LN_1, FWD, 100); mysettrack(IC_LN_2, FWD, 100); mysettrack(IC_LN_3, FWD, 100); mysettrack(IC_LN_4, FWD, 100); mysettrack(IC_JCT_0, FWD, 100); mysettrack(IC_LN_5, FWD, 100); mysettrack(IC_ST_2, OFF, 0); used[IC_ST_2] = 0'; state About_To_Drive_IC --> Driving_IC with 'contacts[IC_LN_0][1]' / 'mysettrack(IC_ST_4, OFF, 0); used[IC_ST_4]= 0'; state Driving_IC --> About_To_Enter_IC_Station with 'contacts[IC_LN_5][0]' / 'mysettrack(IC_LN_0, OFF, 0); mysettrack(IC_LN_1, OFF, 0); mysettrack(IC_LN_2, OFF, 0); mysettrack(IC_LN_3, OFF, 0); mysettrack(IC_LN_4, OFF, 0); used[IC_LN_0] = 0; used[IC_LN_1] = 0; used[IC_LN_2] = 0; used[IC_LN_3] = 0; used[IC_LN_4] = 0; mysettrack(IC_LN_5, FWD, 40)'; state About_To_Enter_IC_Station --> Entering_IC_Station with '!used[IC_ST_0] && !used[IC_ST_2]' / 'mysettrack(IC_JCT_0, OFF, 0); used[IC_JCT_0] = 0; used[IC_ST_0] = 1; used[IC_ST_2] = 1; mysetpoint(18, STRAIGHT); mysetpoint(20, BRANCH); mysetpoint(19, BRANCH); mysettrack(IC_LN_5, FWD, 100); mysettrack(IC_ST_0, FWD, 100); mysettrack(IC_ST_2, FWD, 100)' --> About_To_Enter_IC_Station with 'contacts[IC_LN_5][1]' / 'mysettrack(IC_LN_5, BRAKE, 0); mysettrack(IC_JCT_0, OFF, 0); used[IC_JCT_0] = 0'; state Entering_IC_Station --> Entering_IC_Station with 'contacts[IC_ST_2][0]' / 'mysettrack(IC_ST_2, FWD, 40)' --> IC_Station_2 with 'contacts[IC_ST_2][1]' / 'mysettrack(IC_ST_2, BRAKE, 0); mysettrack(IC_LN_5, OFF, 0); mysettrack(IC_ST_0, OFF, 0); used[IC_LN_5] = 0; used[IC_ST_0] = 0'; region KH_Train: initial state KH_Station_3 { int counterKHT_KH; initial state init --> count immediate with / counterKHT_KH = 0; state count --> done immediate with counterKHT_KH == 5 --> count_check immediate; state count_check --> count_to_count immediate with 'second' --> count_pause immediate; state count_pause --> count; state count_to_count --> count_tick immediate with / counterKHT_KH = counterKHT_KH + 1; state count_tick --> count; final state done; } >-> About_To_Leave_KH_Station; state About_To_Leave_KH_Station --> Leaving_KH_Station with '!used[KH_ST_0] && !used[KIO_LN_0]' / 'used[KH_ST_0] = 1; used[KIO_LN_0] = 1; mysetpoint(3, BRANCH); mysetpoint(2, STRAIGHT); mysetpoint(1, BRANCH); mysetpoint(0, BRANCH); mysettrack(KH_ST_0, REV, 100); mysettrack(KH_ST_3, REV, 100); mysettrack(KIO_LN_0, REV, 100)'; state Leaving_KH_Station --> About_To_Enter_IC_Station with 'contacts[KIO_LN_0][1]' / 'mysettrack(KIO_LN_0, REV, 40); mysettrack(KH_ST_3, OFF, 0); used[KH_ST_3] = 0'; state About_To_Enter_IC_Station --> Entering_IC_Station with '!used[IC_ST_0] && !used[IC_ST_2]' / 'used[OC_ST_4] = 1; used[IC_ST_0] = 1; used[IC_ST_2] = 1; mysetpoint(16, BRANCH); mysetpoint(17, BRANCH); mysetpoint(18, BRANCH); mysetpoint(20, BRANCH); mysetpoint(19, BRANCH); mysettrack(OC_ST_4, REV, 100); mysettrack(IC_ST_0, FWD, 100); mysettrack(IC_ST_2, FWD, 100); mysettrack(KIO_LN_0, REV, 100); mysettrack(KH_ST_0, OFF, 0); used[KH_ST_0] = 0' --> About_To_Enter_IC_Station with 'contacts[KIO_LN_0][0]' / 'mysettrack(KIO_LN_0, BRAKE, 0); mysettrack(KH_ST_0, OFF, 0); used[KH_ST_0] = 0'; state Entering_IC_Station --> IC_Station_2 with 'contacts[IC_ST_2][1]' / 'mysettrack(IC_ST_2, BRAKE, 0); mysettrack(IC_ST_0, OFF, 0); used[IC_ST_0] = 0' --> Entering_IC_Station with 'contacts[IC_ST_2][0]' / 'mysettrack(IC_ST_2, FWD, 40); mysettrack(KIO_LN_0, OFF, 0); mysettrack(OC_ST_4, OFF, 0); used[KIO_LN_0] = 0; used[OC_ST_4] = 0'; state IC_Station_2 { int counterKHT_IC; initial state init --> count immediate with / counterKHT_IC = 0; state count --> done immediate with counterKHT_IC == 10 --> count_check immediate; state count_check --> count_to_count immediate with 'second' --> count_pause immediate; state count_pause --> count; state count_to_count --> count_tick immediate with / counterKHT_IC = counterKHT_IC + 1; state count_tick --> count; final state done; } >-> About_To_Leave_IC_Station; state About_To_Leave_IC_Station --> Leaving_IC_Station with '!used[IC_ST_4]' / 'used[IC_ST_4] = 1; used[OC_ST_0] = 1; used[KIO_LN_1] = 1; mysetpoint(23, BRANCH); mysetpoint(24, BRANCH); mysetpoint(29, BRANCH); mysetpoint(27, STRAIGHT); mysetpoint(28, STRAIGHT); mysettrack(IC_ST_4, FWD, 100); mysettrack(IC_ST_2, FWD, 100); mysettrack(OC_ST_0, REV, 100); mysettrack(KIO_LN_1, REV, 100)'; state Leaving_IC_Station --> Entering_KH_Station with 'contacts[KIO_LN_1][1]' / 'mysettrack(IC_ST_2, OFF, 0); used[IC_ST_2] = 0; used[KH_ST_6] = 1; used[KH_ST_3] = 1; mysetpoint(9, BRANCH); mysetpoint(8, BRANCH); mysetpoint(7, STRAIGHT); mysetpoint(6, BRANCH); mysettrack(KH_ST_6, REV, 100); mysettrack(KH_ST_3, REV, 100)'; state Entering_KH_Station --> Entering_KH_Station with 'contacts[KH_ST_3][1]' / 'mysettrack(KH_ST_3, REV, 40); mysettrack(OC_ST_0, OFF, 0); mysettrack(IC_ST_4, OFF, 0); mysettrack(KIO_LN_1, OFF, 0); used[OC_ST_0] = 0; used[IC_ST_4] = 0; used[KIO_LN_1] = 0' --> KH_Station_3 with 'contacts[KH_ST_3][0]' / 'mysettrack(KH_ST_3, BRAKE, 0); mysettrack(KH_ST_6, OFF, 0); used[KH_ST_6] = 0'; }