T3A1: Round and Round!

T3A1.c

 SampleController.c

T3A1.sct

 

T3A2: To boldly model where no one has modeled before...

Der Zug auf dem IC hat vorfahrt. Passiert er IC_LN_4 wir der Zug vom KH bei KIO_LN_0 sanft gebremst und wartet, bis der andere im Bahnhof ist. Sind beide Züge in der IC Station, hat der Zug auf IC_ST_1 vorfahrt, IC_ST_2 muss warten.

T3A2.sct

Fehlen tut noch, dass die Züge gestoppt werden, wenn die IC Station voll ist. Das sieht dann ungefähr so aus:

  //Check, whether IC Station has space
  region "isICfree":
  initial state no_space
   --> is_free with '!trackused(railway, IC_ST_1)'
  | '!trackused(railway, IC_ST_2)'
  | '!trackused(railway, IC_ST_3)'
  / IC_free = true;
 
 state is_free
   --> no_space with 'trackused(railway, IC_ST_1)'
  & 'trackused(railway, IC_ST_2)'
  & 'trackused(railway, IC_ST_3)'
  / IC_free = false;
 
 //Is IC train in a critical section?
  region "isCritical":
  initial state ok
   --> critical with IC_LN_4_1 / crit = true;
   
 state critical
   --> ok with IC_ST_1_1 | IC_ST_2_1 | IC_ST_3_1 / crit = false;
 
 //Does KH train have to stop?
region "Stop KH train":
initial state init
--> slowdown with KIO_LN_0_1 & (!IC_free | crit) / 'settrack(railway, KIO_LN_0, REV, 40)';

state slowdown
--> stop with KIO_LN_0_0 / 'settrack(railway, KIO_LN_0, BRAKE, 0)';

state stop
--> init with IC_free & !crit / 'settrack(railway, KIO_LN_0, REV, 100)';
'setpoint(railway, 16, BRANCH)';
'setpoint(railway, 17, BRANCH)';
'setpoint(railway, 18, BRANCH)';

 

Leider hängt sich Kieler ab dem Punkt beim C code generieren kommentarlos auf. Analog würde dann auch der Zug auf dem IC auf IC_LN_5 halten und warten bis ein Platz frei ist.

T3A3: Important Thoughts

  • Einen *.sct zu *.c Knopf, der einem das von Hand transformieren spart
  • Beim erstellen der .c vordefinierte Sachen automatisch hinzufügen (includes usw.)
  • Ab und zu wären Fehlermeldungen sehr hilfreich, z.B. bei write-write Konflikten oder instantanen Schleifen. Sieht man zwar in den Zwischenschritten, aber grade wenn das Programm größer wird guckt man sich das ja nicht jedesmal bis ins Detail durch
  • Sich einzelne regions ohne Umwege getrennt vom Rest anschauen zu können (also das Diagramm) wäre gerade bei größeren SCCharts sehr nützlich, die für sich zu unübersichtlich werden

 

 

Tags: