July 14th, 2015

Photo

FSM интересное решение

Писал я пару дней назад вопрос про графы-диаграммы. Спасибо всем откликнувшимся.

В процессе поиска нашел я интересный вариант. Это Graphwiz. Содержит псевдоязык и автоматические генераторы графов. Получается что-то такое:



Исходный код вполне читаем и представляет собой что-то такое, описывающее узлы и связи между ними:
[Spoiler (click to open)]
digraph finite_state_machine {

  rankdir = TD;
  size = "20";

  node [ shape = hexagon, style = filled, fillcolor = green, fontname = Verdana, fontsize = 8, label = "DR Flush" ] start;
  node [ shape = hexagon, style = filled, fillcolor = green, fontname = Verdana, fontsize = 8, label = "End" ] end;

  node [ shape = point, fillcolor = red, width = 0.2 ]; end10;

  node [ shape = rectangle, label = "Send CMD106", style = filled, color = black, fillcolor = white ]; a1;

  node [ shape = ellipse, style = filled, color = black, fillcolor = lightblue, label = "CMD106_WAIT 10" ]; fsm10; 

  # labels
  node [ shape = plaintext, label = "--> STOP\nTR10/01", fontname = Verdana, fontsize = 8, fillcolor = white ]; label_10_01;
  node [ shape = plaintext, label = "TransactionTimeout\nTR10/02", fontname = Verdana, fontsize = 8, fillcolor = white ]; label_10_02;
  node [ shape = plaintext, label = "CMD106 response received\nTR10/03", fontname = Verdana, fontsize = 8, fillcolor = white ]; label_10_03;

  #edges
  start -> a1:n; a1:s -> fsm10;

  fsm10:w -> label_10_01:n; label_10_01:s -> end10;
  fsm10 -> label_10_02:n; label_10_02:s -> end;
  fsm10:e -> label_10_03:n; label_10_03:s -> end;

}


Интересный и приятный продукт.