分布式智能控制-控制逻辑组件

来源:互联网 发布:java网络编程pdf下载 编辑:程序博客网 时间:2024/04/29 23:53

逻辑控制组件主要做的事情就是将前面几个组件组装起来,使之协调运行。

逻辑控制组件本身封装了状态机组件。和单体的状态机有所不同的是,单体状态机的状态切换后是调用一个python或lua函数来执行控制动作,而分布式的状态机则是显式触发一个动作组件。但这样一来,分布式状态机的描述能力就比不上单体状态机了,毕竟一个函数就是一个有着脚本语言支持的、拥有强大的逻辑操作能力的语句片段,远非一条简单的动作执行命令可比。

但是,脚本函数因无法识别其语义也就无法自动化,没有办法纳入到知识库中由系统优化,只能由技术人员维护。因而单体状态机的实现只会是固定的、预设的自动控制体制,永远不可能实现动态的、随动的、进化的智能控制体制。而动作式的分布式状态机虽然能力较弱,但可以通过动作的叠加与组合来灵活的组织功能实现,也就具备了实现智能控制的可能。

考虑到一次状态跃迁只能执行一个控制动作能力实在太低,类比产生式,最终为其增加了一次状态跃迁可以执行多个动作的能力。

几个组件之间的组装过程为:

  • 定义动作

  • 定义处理逻辑(内部已经封装了状态机),将动作装定到状态机跃迁的目标操作处

  • 定义输入信号源

  • 定义各种值识别的条件树

  • 有必要的话,为输入信号源绑定使能信号(就是将另一个输入源的信号用条件树加以过滤)

  • 为处理逻辑增加事件识别,即将从输入信号源取到的值用条件树识别为状态机中的一个事件(说起来觉得要做好多事,但由于前面都定义好了,其实就是一条语句而已)

下面的Python代码演示的是树莓派的1号gpio端口连接了一个按钮作为使能,15号端口连接了一个按钮来控制16号端口的led亮灭:

from cn.ijingxi.corpuscle.python import logicfrom cn.ijingxi.corpuscle.python import activefrom cn.ijingxi.corpuscle.python import conditionfrom cn.ijingxi.corpuscle.python import input#设置动作,16号gpio口a1=active.getActive_gpio("/pi1/16",active.HIGH)a2=active.getActive_gpio("/pi1/16",active.LOW)#处理逻辑,将输入、状态机、输出动作等组装在一起l=logic("smtest")l.addTrans("opend","close","closed",a1)l.addTrans("closed","open","opend",a2)l.setInitState("opend")#输入,1号、15号gpio口,带上拉电阻,提供防抖动功能i1=input.getInput_gpio("/pi1/15",input.PULL_UP,input.Flitter)i2=input.getInput_gpio("/pi1/1",input.PULL_UP,input.Flitter)#使能ce=condition.getCompare(condition.Equal,0)i1.addEnable(i2,ce)#输入条件c0=condition.getCompare(condition.Equal,0)l.addInput(i1,c0,"close")c1=condition.getCompare(condition.Equal,1)l.addInput(i1,c1,"open")

仔细想一下,其实这个功能就是带总控的开关灯,对比两者的实现,我们有如下的结论:

  • 单体状态机下的带总控开关灯实现,属于功能实现,从逻辑上看比较清晰,而分布式智能控制的实现是组装方式,所以逻辑不是很清晰

  • 由于进行了高度集成,分布式智能控制的实现更简约一点,但这是由于该功能非常简单,如果功能比较复杂,则结论未必成立

0 0
原创粉丝点击