@@ 132,15 132,19 @@
\node [draw,right of=S,node distance=1.5cm] (idle) {待机}
edge[<-] (S);
\node [draw,right of=idle] (move) {升降}
- edge[<-] node [above] {就绪任务} (idle);
- \node [draw,above of=move] (load) {装载}
- edge[<-,bend left] node [right,scale=.8] {到达任务楼层} (move)
- edge[->,bend right] node [left, scale=.8] {就绪任务} (move)
- edge[->,bend right] node [above left, scale=.8] {无就绪任务} (idle);
- \node [draw, below of=move] (es) {紧急}
- edge[<-] node [right] {异常/紧急停止} (move)
- edge[<-] node [left] {异常/紧急停止} (idle)
- edge[<-,bend right=60] node [right] {异常/紧急停止} (load);
+ edge[<-] node [below,scale=.6] {就绪} (idle);
+ \node [draw,right of=move] (load) {装载}
+ edge[<-,bend left=15] node [below,scale=.6] {到达} (move)
+ edge[->,bend right=15] node [above,scale=.6] {就绪} (move)
+ edge[->,bend right] node [above, scale=.6] {无就绪} (idle);
+ \node [draw,double,above of=move] (ws) {停止}
+ edge[<-] node [above right,scale=.6] {停止} (move)
+ edge[<-] node [left,scale=.6] {停止} (idle)
+ edge[<-] node [right,scale=.6] {停止} (load);
+ \node [draw,double,below of=move] (es) {紧急}
+ edge[<-] node [left,scale=.6] {异常} (move)
+ edge[<-] node [below left,scale=.6] {异常} (idle)
+ edge[<-] node [below right,scale=.6] {异常} (load);
\end{tikzpicture}
\caption{\label{fig:running-dfa}运行状态转移图}
\end{figure}
@@ 157,20 161,26 @@
\node [right of=S,draw,node distance=1.5cm] (F0) {F0}
edge[<-] (S);
\node [draw,below of=F0, node distance=3cm] (B1) {B1}
- edge[bend left] node [left] {上升} (F0)
- edge[<-,bend right] node [right] {下降} (F0);
+ edge[bend left] node [left,scale=.6] {上升} (F0)
+ edge[<-,bend right] node [right,scale=.6] {下降} (F0);
\node [draw,right of=F0] (F1) {F1}
- edge[<-,bend left] node [below] {上升} (F0)
- edge[bend right] node [above] {下降} (F0);
+ edge[<-,bend left] node [scale=.6] [above] {上升} (F0)
+ edge[bend right] node [above,scale=.6] {下降} (F0);
\node [draw,right of=F1] (F2) {F2}
- edge[<-,bend left] node [below] {上升} (F1)
- edge[bend right] node [above] {下降} (F1);
+ edge[<-,bend left] node [scale=.6] [above] {上升} (F1)
+ edge[bend right] node [above,scale=.6] {下降} (F1);
\node [right of=F2] (dots) {$\dots$}
- edge[<-,bend left] node [below] {上升} (F2)
- edge[bend right] node [above] {下降} (F2);
+ edge[<-,bend left] node [scale=.6] [above] {上升} (F2)
+ edge[bend right] node [above,scale=.6] {下降} (F2);
\node [draw,right of=dots] (Fn) {Fn}
- edge[<-,bend left] node [below] {上升} (dots)
- edge[bend right] node [above] {下降} (dots);
+ edge[<-,bend left] node [above,scale=.6] {上升} (dots)
+ edge[bend right] node [above,scale=.6] {下降} (dots);
+ \node [draw,double,below of=dots] (qt) {$q_t$}
+ edge[<-] node [below,scale=.6] {} (F0)
+ edge[<-] node [below,scale=.6] {终止} (B1)
+ edge[<-] node [right,scale=.6] {终止} (F1)
+ edge[<-] node [below,scale=.6] {} (F2)
+ edge[<-] node [right,scale=.6] {终止} (Fn);
\end{tikzpicture}
\caption{\label{fig:floor-dfa}楼层状态转移图}
\end{figure}
@@ 267,6 277,8 @@ doLoad :: Lift -> Lift
onExcept :: Lift -> Lift
doExcept :: Lift -> Lift
+
+doStop :: Lift -> Lift
\end{lstlisting}
\subsection{状态转换模块}
@@ 282,6 294,7 @@ data LiftState = LiftIdle
| LiftMove LiftMoveT
| LiftLoad
| LiftException
+ | LiftStop
deriving (Eq, Show, Read)
data LiftMoveT = LiftMoveUp | LiftMoveDown
@@ 317,6 330,8 @@ exceptS :: State Lift LiftFloor
moveSUp :: State Lift LiftFloor
moveSDown :: State Lift LiftFloor
+
+stopS :: State Lift LiftFloor
\end{lstlisting}
\chapter{使用说明}
@@ 10,7 10,7 @@ module Lift
, (-:-)
, (-:)
, moveLUp, moveLDown
- , idleS, loadS, exceptS, moveSUp, moveSDown
+ , idleS, loadS, exceptS, moveSUp, moveSDown, stopS
, runState, evalState, execState, mapState, withState
, initLift
) where
@@ 28,6 28,7 @@ data LiftState = LiftIdle
| LiftMove LiftMoveT
| LiftLoad
| LiftException
+ | LiftStop
deriving (Eq, Show, Read)
data LiftMoveT = LiftMoveUp | LiftMoveDown
@@ 110,6 111,12 @@ exceptS = do
put $ s { curState = LiftException }
return $ curFloor s
+stopS :: State Lift LiftFloor
+stopS = do
+ s <- get
+ put $ s { curState = LiftStop }
+ return $ curFloor s
+
-- | move lift state to up, this state transformation do change 'curState'.
moveSUp :: State Lift LiftFloor
moveSUp = do