50 lines
2.4 KiB
Go
50 lines
2.4 KiB
Go
package iscs_sys
|
||
|
||
import (
|
||
"joylink.club/ecs"
|
||
"joylink.club/ecs/filter"
|
||
"joylink.club/rtsssimulation/component"
|
||
"joylink.club/rtsssimulation/consts"
|
||
)
|
||
|
||
// ManualFireAlarmButtonSystem 手动火灾报警按钮
|
||
//
|
||
// 报警按钮有红色报警确认灯,报警按钮启动零件动作,报警确认灯点亮,并保持至报警状态被复位。
|
||
// 报警按钮形状有方形和长方形,颜色为红色(正常工作状态为闪烁状态,如果不闪烁说明设备损坏;如场所内所有设备都不亮说明消防系统被停用
|
||
//
|
||
// 按下手动报警按钮3-5s(最长不超过10s)后,手动报警按钮上的火警确认灯会点亮,这个状态灯表示火灾报警控制器已经收到火警信号,并且确认了现场位置。
|
||
// 控制室值班人员应第一时间前往现场确认火情;报警按钮一般有三种形式:吸盘复位型、钥匙复位和更换有机玻璃进行复位型。须人工复位。
|
||
//
|
||
// 报警后,如控制器在自动工作状态,声光报警器、消防广播、防火卷帘、防排烟系统等设备会动作,非消防电梯停止运行,切断该区域非消防用电……因此,非警勿动;
|
||
type ManualFireAlarmButtonSystem struct {
|
||
query *ecs.Query
|
||
}
|
||
|
||
func NewManualFireAlarmButtonSystem() *ManualFireAlarmButtonSystem {
|
||
return &ManualFireAlarmButtonSystem{
|
||
query: ecs.NewQuery(filter.Contains(component.UidType, component.ManualFireAlarmButtonType)),
|
||
}
|
||
}
|
||
func (s *ManualFireAlarmButtonSystem) Update(w ecs.World) {
|
||
s.query.Each(w, func(entry *ecs.Entry) {
|
||
button := component.ManualFireAlarmButtonType.Get(entry)
|
||
//故障、通信中断
|
||
exception := consts.DeviceExceptionNon
|
||
if entry.HasComponent(component.DeviceFaultTag) {
|
||
exception = consts.DeviceFault
|
||
}
|
||
if entry.HasComponent(component.DeviceCommunicationInterruptTag) {
|
||
exception = consts.DeviceCommunicationInterrupt
|
||
}
|
||
button.Exception = exception
|
||
//没有异常且没有被按下且没有被隔离,此时按钮处于正常状态
|
||
if button.Exception == consts.DeviceExceptionNon && !button.Pressed && button.State == component.MfabNon {
|
||
button.State = component.MfabNormal
|
||
}
|
||
//如果按钮处于正常工作状态且被按下,则向火灾报警控制器发送火警信号
|
||
//todo
|
||
//当火灾报警控制器确认收到该按钮按下信号后,按钮状态变为火警状态,表示火灾报警控制器收到该按钮报警信号
|
||
//todo
|
||
})
|
||
}
|