zdj9道岔电路实现
This commit is contained in:
parent
ad87ad0bef
commit
4579f6729d
@ -1,5 +1,165 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"github.com/yohamta/donburi/filter"
|
||||
"joylink.club/ecs"
|
||||
)
|
||||
|
||||
// 继电器: true-吸合;false-未吸合
|
||||
type SwitchZdj9State struct {
|
||||
//定操继电器
|
||||
DCJ bool
|
||||
//反操继电器
|
||||
FCJ bool
|
||||
//允许操作继电器
|
||||
YCJ bool
|
||||
//总定表继电器
|
||||
ZDBJ bool
|
||||
//总反表继电器
|
||||
ZFBJ bool
|
||||
//表示电路变压器,将220V交流电变压后作为为道岔表示电路的电源
|
||||
//0-无电源;规定52端子为正,则,1-输出瞬时正电压;-1 - 输出瞬时负电压
|
||||
J1_BB int8
|
||||
//道岔第一启动继电器
|
||||
J1_1DQJ bool
|
||||
//道岔保护继电器
|
||||
J1_BHJ bool
|
||||
//道岔第二启动继电器
|
||||
J1_2DQJ bool
|
||||
//道岔第一启动继电器复示继电器
|
||||
J1_1DQJF bool
|
||||
//断相保护器
|
||||
J1_DBQ DBQState
|
||||
//定位表示继电器
|
||||
J1_DBJ bool
|
||||
//反位表示继电器
|
||||
J1_FBJ bool
|
||||
//道岔启动切断继电器
|
||||
J1_QDJ bool
|
||||
//道岔启动切断继电器的LC震荡电路保磁剩余时间,单位ms
|
||||
//最长保持时长3000ms
|
||||
J1_QDJ_LcTime int64
|
||||
//总保护继电器
|
||||
J1_ZBHJ bool
|
||||
//表示电路变压器,将220V交流电变压后作为为道岔表示电路的电源
|
||||
//0-无电源;规定52端子为正,则,1-输出瞬时正电压;-1 - 输出瞬时负电压
|
||||
J2_BB int8
|
||||
//道岔第一启动继电器
|
||||
J2_1DQJ bool
|
||||
//道岔保护继电器
|
||||
J2_BHJ bool
|
||||
//道岔第二启动继电器
|
||||
J2_2DQJ bool
|
||||
//道岔第一启动继电器复示继电器
|
||||
J2_1DQJF bool
|
||||
//断相保护器
|
||||
J2_DBQ DBQState
|
||||
//定位表示继电器
|
||||
J2_DBJ bool
|
||||
//反位表示继电器
|
||||
J2_FBJ bool
|
||||
}
|
||||
|
||||
// 带限时功能断相保护器
|
||||
// 限时13秒
|
||||
type DBQState struct {
|
||||
//是否缺相,true-缺相,false-三相电正常未缺相
|
||||
PhaseLoss bool
|
||||
//剩余限时时间,单位ms
|
||||
LimitedTime int64
|
||||
//当三相电正常时,断相保护器内的24V直流整流电路会正常输出24V直流电
|
||||
//当三相电不正常如缺相时,断相保护器内的24V直流整流电路不会输出24V直流电
|
||||
//BHJ道岔保护继电器的励磁线圈由该24V直流供电
|
||||
Dc24Voltage bool
|
||||
}
|
||||
|
||||
// 道岔ZDJ9电路状态组件
|
||||
var SwitchZdj9StateComponent = ecs.NewComponentType[SwitchZdj9State]()
|
||||
|
||||
// ZDJ9道岔系统
|
||||
type SwitchZdj9System struct {
|
||||
zdj9Query *ecs.Query
|
||||
}
|
||||
|
||||
func NewSwitchZdj9System() *SwitchZdj9System {
|
||||
return &SwitchZdj9System{zdj9Query: ecs.NewQuery(filter.Contains(SwitchZdj9StateComponent))}
|
||||
}
|
||||
|
||||
// world 执行
|
||||
func (me *SwitchZdj9System) Update(w ecs.World) {
|
||||
me.zdj9Query.Each(w, func(e *ecs.Entry) {
|
||||
zdj9State := SwitchZdj9StateComponent.Get(e)
|
||||
//断相保护器电路
|
||||
calculateDBQ(w, zdj9State)
|
||||
//断相保护继电器励磁电路
|
||||
calculateBHJ(w, zdj9State)
|
||||
//总保护继电器励磁电路
|
||||
calculateZBHJ(w, zdj9State)
|
||||
//道岔转换启动切断继电器励磁电路
|
||||
calculateQDJ(w, zdj9State)
|
||||
//道岔一次启动继电器励磁电路
|
||||
calculateDQJ(w, zdj9State)
|
||||
})
|
||||
}
|
||||
|
||||
// 断相保护电路运算
|
||||
func calculateDBQ(w ecs.World, state *SwitchZdj9State) {
|
||||
if state.J1_DBQ.LimitedTime > 0 {
|
||||
state.J1_DBQ.LimitedTime -= int64(w.Tick())
|
||||
} else {
|
||||
state.J1_DBQ.LimitedTime = 0
|
||||
}
|
||||
state.J1_DBQ.Dc24Voltage = !state.J1_DBQ.PhaseLoss
|
||||
//
|
||||
if state.J2_DBQ.LimitedTime > 0 {
|
||||
state.J2_DBQ.LimitedTime -= int64(w.Tick())
|
||||
} else {
|
||||
state.J2_DBQ.LimitedTime = 0
|
||||
}
|
||||
state.J2_DBQ.Dc24Voltage = !state.J2_DBQ.PhaseLoss
|
||||
}
|
||||
|
||||
// 断相保护继电器运算
|
||||
func calculateBHJ(w ecs.World, state *SwitchZdj9State) {
|
||||
state.J1_BHJ = state.J1_DBQ.Dc24Voltage
|
||||
state.J2_BHJ = state.J2_DBQ.Dc24Voltage
|
||||
}
|
||||
|
||||
// 总保护继电器运算
|
||||
func calculateZBHJ(w ecs.World, state *SwitchZdj9State) {
|
||||
//励磁
|
||||
method1 := state.J1_BHJ && state.J2_BHJ
|
||||
//励磁
|
||||
method2 := state.J1_ZBHJ && (state.J1_BHJ || state.J2_BHJ)
|
||||
//为总保护继电器励磁
|
||||
state.J1_ZBHJ = method1 || method2
|
||||
}
|
||||
|
||||
// 道岔转换启动切断继电器运算
|
||||
func calculateQDJ(w ecs.World, state *SwitchZdj9State) {
|
||||
//LC震荡电路运算
|
||||
fullLc := (!state.J1_BHJ && !state.J2_BHJ) || state.J1_ZBHJ
|
||||
if fullLc {
|
||||
state.J1_QDJ_LcTime = 3000
|
||||
} else {
|
||||
state.J1_QDJ_LcTime -= int64(w.Tick())
|
||||
if state.J1_QDJ_LcTime < 0 {
|
||||
state.J1_QDJ_LcTime = 0
|
||||
}
|
||||
}
|
||||
//自闭励磁电路
|
||||
self := state.J1_QDJ && state.J1_ZBHJ
|
||||
//为启动切断继电器励磁
|
||||
state.J1_QDJ = self || fullLc || state.J1_QDJ_LcTime > 0
|
||||
}
|
||||
|
||||
// 道岔第一启动继电器运算
|
||||
func calculateDQJ(w ecs.World, state *SwitchZdj9State) {
|
||||
//励磁电路
|
||||
j1DqjMethod1 := state.YCJ && (state.DCJ || state.FCJ)
|
||||
//自闭电路
|
||||
j1DqjSelf := state.J1_QDJ && state.J1_BHJ && state.J1_1DQJ
|
||||
//为J1第一启动继电器励磁
|
||||
state.J1_1DQJ = j1DqjMethod1 || j1DqjSelf
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user