基本概念
CSM模块
(CSM Module)
CSM 是 Communicable State Machine 的缩写. 在 Wiki 中,CSM 通常也表示基于 CSM 编写的程序模块。
在 LabVIEW 中,从文件形式上看,
CSM模块
是一个 vi 文件;从编程角度看,CSM 是一个典型的状态机。
状态
(State)
代码上对应了 CSM 条件结构中的一个分支,是 CSM 的基本逻辑单元。CSM 内部不同的状态之间基于一定的逻辑实现状态跳转,完成具体的功能。
在 LabVIEW 中,
状态
是 case 条件结构中的一个分支,相比其它状态机不同的是,CSM 总的 case 条件结构数据类型为字符串,且满足特定的语法规则。
-
宏状态
(Macro)一类特殊的
状态
, 可以解释为多个状态
的组合,实现固定状态的组合逻辑。在 CSM 模板中,默认包含用于描述整个启动过程状态变化(“Macro: Initialize”),和退出时的整个状态变化(”Macro: Exit”) 两个宏状态
。
消息
(Message)
消息
是 CSM模块
间的通讯方式,主要用于1:1
的模块间交互,消息
又发送端CSM发出后,收到消息
的CSM 将进入同名的状态。例如模块 A 发送了 “API: DoSth” 到模块 B, 模块 B 将进入 “API: DoSth” 状态。
在 LabVIEW 中,
消息
是一段满足特定的语法规则的字符串,其中包含了消息符号
、状态
、响应
和参数
,CSM 的 vi 选版中提供了消息生成 vi,帮助用户更便捷的生成消息
字符串。
-
消息类型
(Message Type)消息类型
是根据消息
的处理方式不同对消息进行的分类。目前的消息类型主要分为:同步消息
和异步消息
。其中,异步消息
基于应用场景的不同,又分为有返回的异步消息
,无返回的异步消息
。 -
消息符号
(Message Symbol)消息符号
是在字符串中表示消息类型的特殊字符。目前的消息符号有 ‘-@
’,’->
’,’->\|
’ 三种,分别代表:同步消息
,有返回的异步消息
,无返回的异步消息
三个消息类型
。 -
同步消息
(Sync Message)同步消息
是消息
的一种。CSM 发出同步消息
后,将暂停状态
变化,等待被调用方完成消息
处理。同步消息
通过-@
描述。 -
异步消息
(Async Message)异步消息
是消息的一种。CSM 发出异步消息
后,不等待被调用方完成消息处理,继续进行状态
变化。异步消息
也分为两种:有返回的异步消息
:通过->
描述。被调用方完成消息
处理后,将通知调用方无返回的异步消息
:通过->\|
描述,被调用方不会通知调用方
响应
(Response)
响应
是被调用模块对于消息
的返回。
在 LabVIEW 中,
响应
就是一个由用户定义的字符串。例如当模块 A 发送了 “API: DoSth” 到模块 B, 模块 B 将进入 “API: DoSth” 状态后,模块 A 希望得到一个来自模块 B 返回字符串 “Reveived” 以确认模块 B 已经收到,此时返回的字符串信息就是响应
。 请注意 CSM vi 模板中的状态响应
默认均为空字符串。
同步消息
会通过 “Response”状态处理响应。有返回的异步消息
会通过 “Async Response”状态处理响应。
广播
(Broadcasting)
广播
是 CSM 通知外部自身状态变化的特殊消息,用于支撑1:N
的模块间交互方式。广播
的收发模式采用了订阅机制,即,外部模块需要先注册广播,注册成功后才会接收到被订阅模块的广播消息。
广播
的订阅制工作模式上和当前基Pub\Sub模式
的各种 MQ 机制类似。目前 CSM广播消息
仅支持 LabVIEW 的同一应用的内部模块交互,尚不支持跨应用和跨机器的模块间交互。
参数
(Arguments)
消息
、响应
、广播
都能携带数据,这些数据被叫做参数
。
同步调用
(Sync-Call)
一个 CSM模块
通过同步消息
对另一个模块的调用,叫做同步调用。同步调用的过程
异步调用
(Async-Call)
一个 CSM模块
通过异步消息
对另一个模块的调用,叫做异步调用。异步调用的过程