用PythonPi实现门禁系统-功能实现

Posted by 小一在此 on January 16, 2017

在考虑如何用PythonPi来实现门禁功能时,我们首先要梳理有多少状态变量:

  • 出门按钮,有开关两个状态

  • 读卡器,有读到有效卡号(即有权限在本场景中使用)与未读到

  • 电锁,有开关两个状态

  • 自动锁门定时器,有触发与未触发两个状态

状态分析:

  • 当读卡器读到卡并完成权限裁决后,其等价于出门按钮,即给出一个触发信号(如闭合),而其反向的状态(如开启)可以忽略

  • 定时器只有超时触发状态有效

因此,根据三个状态变量(门开关按钮状态,锁关闭状态,定时器超时状态)我们可整合为三个状态,初始状态为(0,0,0):

  • 开门状态(1,1,0):收到开门信号,则关闭电锁,启动定时器

  • 超时关门状态(x,1,1):定时器超时,则启动电锁,但此时门尚未关闭

  • 关门状态(0,0,0):门闭合

然后我们可以画出状态跃迁图:

状态跃迁图

有了这个最基础的状态跃迁图,则根据我们在分布式智能控制系统中的说明,使用控制逻辑组件,组合输入组件、动作组件,设置值过滤,定义状态跃迁即可。

不过这个状态跃迁图所实现的只是最基础的单门门禁功能,还缺少了几个比较重要的功能:

  • 关门状态下在未收到开门信号的情况下,门打开了。这是非常严重的安全事件,不管是真有非法侵入还是锁损坏,都必须向安保中心发出高等级安全风险告警,需安保人员紧急处置

  • 正常开门后,门却长时间未关闭。由于门是合法打开的,所以这种情况只是存在安全风险的隐患,所以一般是在本地发出风险提示即可

为了避免忽略安全警示会造成人员的麻痹大意,所以一般情况下,当出现告警后,系统会强制停摆,必须手动消警才能恢复正常。所以在上述两种情况下,如果启用了相应的告警功能,则还需要配置对应的消警功能。

何种安全风险如何处置属于安全防范的过程处置问题,因此,系统实现时并不对此进行限定

根据目前的实现,利用python和java的变参能力,可以轻松的实现双开门能力,但就目前的工程实践来看,双开门的实用意义不大,工程上还是以单门或单开门为主。

door也可定义多个读卡器,即可轻松实现进出都需刷卡,只是这多个读卡器的作用是相同的(只要读到有权通过的卡就给出开门信号)。但我们可以通过角色绑定来实现前面文章里举过的单向行进的例子:

#添加门前、门后两个读卡器
d.addRecognizer(rFront)
d.addRecognizer(rBack)
#添加角色通过的权利关联
d.addRole("游客",rFront)
d.addRole("工作人员",rFront)
d.addRole("工作人员",rBack)

这样一来,游客有在门前的读卡器刷卡通过的权利,但没有在门后的读卡器刷卡通过的权利;而工作人员则具有同时在门前门后的读卡器刷卡通过的权利,这就实现了游客只能单向行进,而工作人员则可以双向进出。

如果还需要更复杂的功能,则由于door已经将上面的状态跃迁图封装了,就很难改变了。这时就只能先画出状态跃迁图,然后利用场景所提供的能力根据状态跃迁图自行定义状态机来实现了。就目前的情况看,画出状态跃迁图还是需要一定的训练的,我们提供了状态机的相关课程,加油吧!

====================================================================================================

关注我的公众号及时获取推送的最新文章

公众号