在考慮如何用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已經將上面的狀態躍遷圖封裝了,就很難改變了。這時就只能先畫出狀態躍遷圖,然後利用場景所提供的能力根據狀態躍遷圖自行定義狀態機來實現了。就目前的情況看,畫出狀態躍遷圖還是需要一定的訓練的,我們提供了狀態機的相關課程,加油吧!
====================================================================================================
關注我的公衆號及時獲取推送的最新文章