狀態圖 (State Diagram) 是表示狀態機的常用方法。不幸的是,它們可能很難開發。製作一幅具有視覺吸引力的草圖,通常需要花費大量時間。
其中一個解決方案是使用 Latex 排版程式。在某些方面,\LaTeX 就像您最喜歡的文字處理器。不同之處在於格式是使用文字描述控制的。此外,所有原始文件均以 .txt 或 .tex 檔案完成。當它們完成後,將使用 tex「編譯器」來產生最終產品,通常採用 .pdf 文件的形式。在某些方面,這就像使用 html 開發網頁一樣。
\LaTeX 的優點在於它能夠利用程式設計師可用的所有腳本和技巧,將複雜的文件拼接在一起。另外,關於基礎純文字文件的實用性和開放性也值得一提。
像 tikz 這樣的 \LaTeX 套件將繪製狀態表的程序變得十分簡單,具有代表性的結果如圖 1 和 2 所示。這些圖像是使用 TeXworks 繪製的。
小貼士:這個論壇對 \LaTeX 的支援暫時有限。這對於顯示數學方程式特別有用。例如,歐姆定律寫成 R = \dfrac{E}{I},然後將其放置在兩個 $ 符號之間,得出:
R = \dfrac{E}{I}
可惜,\LaTeX 的學習需要付出很大努力,我們不會嘗試在這篇短文中描述這個過程,反而,用於生成圖 1 和圖 2 的程式碼附加到本註釋中,不加任何註釋,希望它有用。
附:如果您對 \LaTeX 感興趣,請尋找線上教學。另外,請務必尋找可讓您搜尋繪製文字的線上資源。
圖 1:具有重設功能的簡單 CAM 操作狀態機的狀態圖。
圖 2:具有複雜狀態轉換的機器的狀態圖。
\documentclass{article}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}
\usepackage[latin1]{inputenc}
\usepackage{geometry}
\geometry{
letterpaper,
% total={170mm,257mm},
left=0.5in,
right =0.5in,
top=0.5in,
bottom=0.75in
}
\begin{document}
\begin{tikzpicture} [state/.style=state with output, ->,>=stealth',shorten >=1pt,auto,node distance=5.0cm, semithick]
\tikzstyle{every state}=[fill=blue!20,draw=black,text=black]
\node[initial,state] (1) {$Idle$ \nodepart{lower} $0000001$};
\node[state] (2) [above right of = 1] {$Alarm$ \nodepart{lower} $0010010$};
\node[state] (3) [right of = 2] {$Forward$ \nodepart{lower} $1000110$};
\node[state] (4) [below right of = 3] {$Delay$ \nodepart{lower} $0001010$};
\node[state] (5) [below left of = 4] {$Alarm$ \nodepart{lower} $0010010$};
\node[state] (6) [left of = 5] {$Reverse$ \nodepart{lower} $0100110$};
\path (1) edge [sloped, anchor=center, above, in=205, out= 65] node {Cycle PB} (2)
(2) edge [sloped, anchor=center, above, in=160, out= 20] node {Done} (3)
edge [sloped, anchor=center, below, in=20, out=-110] node {$Reset$} (1)
(3) edge [sloped, anchor=center, above, in=110, out=-20] node {5 seconds} (4)
edge [sloped, anchor=center, below, in=10, out=-135] node {$Reset$} (1)
(4) edge [sloped, anchor=center, below , in=20, out=-110] node {$3 seconds$} (5)
edge [sloped, anchor=center, below, in=-10, out=200] node {$Reset$} (1)
(5) edge [sloped, anchor=center, below, in=-20, out=200] node {Done} (6)
edge [sloped, anchor=center, below, in=-20, out=160] node {$Reset$} (1)
(6) edge [sloped, anchor=center, below, in=-70, out=155] node {5 seconds} (1)
edge [sloped, anchor=center, below, in=-30, out=110] node {$Reset$} (1)
; % Don't forget this semicolon
\end{tikzpicture}
\newpage
\begin{tikzpicture} [state/.style=state with output, ->,>=stealth',shorten >=1pt,auto,node distance=5.0cm, semithick]
\tikzstyle{every state}=[fill=blue!20,draw=black,text=black]
\node[initial,state] (1) {$1$ \nodepart{lower} $Retracting$};
\node[state] (2) [above right of=1] {$2$ \nodepart{lower} $Retracted$};
\node[state] (3) [below right of=2] {$3$ \nodepart{lower} $Extending$};
\node[state] (4) [below left of=3] {$4$ \nodepart{lower} $Extended$};
\node[state] (5) [below of=4] {$5$ \nodepart{lower} $Fault$};
\path (1) edge [sloped, anchor=center, above] node {xSenRet} (2)
edge [sloped, anchor=center, below, in=200, out=-20] node {$xEN$} (3)
edge [sloped, anchor=center, below, bend right] node {t $>$ timeMove} (5)
(2) edge [sloped, anchor=center, above] node {xEn} (3)
edge [sloped, anchor=center, below, min distance=7cm, in=10, out=-10] node {$\overline{xSenRet}$} (5)
(3) edge [sloped, anchor=center, above] node {xSenExt} (4)
edge [sloped, anchor=center, above, in=20, out=160] node {$\overline{xEN}$} (1)
edge [sloped, anchor=center, below, bend left] node {t $>$ timeMove} (5)
(4) edge [sloped, anchor=center, above] node {$\overline{xEN}$} (1)
edge [sloped, anchor=center, below] node {$\overline{xSenExt}$} (5)
(5) edge [sloped, anchor=center, below, min distance=2.5cm, in=230, out=170] node {xReset} (1)
; % Don't forget this semicolon
\end{tikzpicture}
\end{document}