说明:
TVictorFSM 是 FSM (Finite State Machine) 控件,可以结构化跳转多而复杂的程序。
头文件:
Vcl.VictorFSM.h
Fmx.VictorFSM.h
示例程序:
串口文件收发的例子,已经包含在控件包里面
相关控件:
TVictorFsmStateT<>, TYbCommDevice, TVictorComm
继承关系:
TObject
└TPersistent
└TComponent
└TVictorCustomFSM
└TVictorFSM
属性:
属性 |
类型 |
描述 |
State |
int |
状态 (状态的编号),整数值,可读写的属性。
给这个属性赋值,无论是在 FSM 内部还是在其他位置,比如其他控件的事件或消息处理里面给这个属性赋值,都会在当前函数结束时,立即执行这个状态的 OnProcessState 事件。
由于 TVictorFSM 设计为 FSM 的每个状态处理都是序列化的,不重入的,所以是在当前函数结束时立即执行这个状态的 OnProcessState 事件。 |
Elapsed |
DWORD |
从给 State 属性赋值到现在经历的时间,即 FSM 处于这个状态持续的时间 (毫秒)。
这个是可读写属性,所以经历的时间是允许被修改的。 |
Waiting |
DWORD |
FSM 处于等待状态,通过 Wait 方法或 WaitState 方法都能进入等待状态。
这是只读属性,不能直接修改这个属性值。
0: 不在等待状态,>0 在等待状态,这个值是设定的等待时间 (毫秒),不随时间的流逝而变化。
通过 WaitState 方法处于的等待状态可以通过 Elapsed 获取等待经过的时间。 |
Interval |
DWORD |
如果 FSM 不在等待状态,会每隔 Interval 时间 (毫秒) 执行一次 OnProcessState 事件,可以当作定时器使用。这是可读写属性,作为定时器使用的时间间隔精度为 1 毫秒,最小的时间间隔也是 1 毫秒。
给 State 属性赋值,会立即执行 OnProcessState 事件,并且定时器重新计数。
每次给 State 属性赋值之间的间隔都很短,都小于 Interval,就不会因为定时器的设定而进入 OnProcessState 事件,只有在长时间没有给 State 属性赋值,超出了 Interval 时间,才会因为定时器的设定而执行 OnProcessState 事件,此时可以通过 Elapsed 属性判断处于 State 状态持续的时间。 |
方法:
方法 |
描述 |
TVictorCustomFSM |
构造函数
__fastcall TVictorCustomFSM(TComponent *Owner); |
~TVictorCustomFSM |
析构函数
__fastcall ~TVictorCustomFSM(); |
Trigger |
触发立即执行 OnProcessState 事件。
定义:
virtual void __fastcall Trigger(void);
参数:
无
由于 TVictorFSM 设计为 FSM 各个状态序列化执行,不重入,所以会在当前状态的函数结束之后,立即触发和执行 OnProcessState 事件。 |
Wait |
FSM 挂起,等待 dwms 毫秒之后再继续执行。
定义:
virtual void __fastcall Wait(DWORD dwms); |
WaitState |
FSM 切换到 iState 并不立即触发和执行 OnProcessState 事件,而是等待 dwms 毫秒之后再触发和执行 OnProcessState 事件。等待期间可以用 Elapsed 属性得到处于等待状态持续的时间 (毫秒)。
定义:
virtual void __fastcall WaitState(int iState, DWORD dwms); |
ProcessState |
控件内部调用的方法,不要直接调用,会触发和执行 OnProcessState 事件。
定义:
virtual void __fastcall ProcessState(void); |
事件:
事件 |
描述 |
OnProcessState |
处理 FSM 状态的事件。
定义:
__property TNotifyEvent OnProcessState;
参数:
Sender: 产生事件的类或控件
请参考这个控件的各个属性和方法,它们触发这个事件的条件。 |
|