rts-sim-module/sys/iscs_sys/iscs_bas_fan.go
2023-12-26 11:06:34 +08:00

91 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package iscs_sys
import (
"joylink.club/ecs"
"joylink.club/ecs/filter"
"joylink.club/rtsssimulation/component"
)
// FanSystem 风机
type FanSystem struct {
query *ecs.Query
}
func NewFanSystem() *FanSystem {
return &FanSystem{
query: ecs.NewQuery(filter.Contains(component.UidType, component.FanDeviceType, component.DeviceExceptionType)),
}
}
func (s *FanSystem) Update(w ecs.World) {
s.query.Each(w, func(entry *ecs.Entry) {
fan := component.FanDeviceType.Get(entry)
fan.Forward = fan.Fs.OnForward()
//
})
}
// 计算风机加速度
func (s *FanSystem) calculateAc(fan *component.FanDevice, fanEntry *ecs.Entry) float32 {
//大于0加速小于0减速
ac := float32(0)
if fan.Fs.Off() { //电源关闭
ac = -4 //4 r/ms
} else {
softStart := false
if fanEntry.HasComponent(component.FanSoftStartUnitType) {
softStart = component.FanSoftStartUnitType.Get(fanEntry).SoftStart
}
if fan.Fs.On() { //电源---正转或反转启动
if softStart {
ac = 0.02 // r/ms
} else {
ac = 1.5 // r/ms
}
}
}
//一般风机(3000 r/min)
if fanEntry.HasComponent(component.CommonFanTag) {
if fan.Speed > 3000 && ac > 0 {
ac = -1
}
return ac
}
//软启风机(100 r/min)
if fanEntry.HasComponent(component.SoftStartFanTag) {
if fan.Speed > 100 && ac > 0 {
ac = -1
}
return ac
}
//双速风机(Low 2000 r/min ; High 7000 r/min)
if fanEntry.HasComponent(component.HighLowSpeedFanTag) {
highMode := component.FanHighLowSpeedModeType.Get(fanEntry).HighMode
if highMode { //高速模式
if fan.Speed > 7000 && ac > 0 {
ac = -1
}
} else { //低速模式
if fan.Speed > 2000 && ac > 0 {
ac = -1
}
}
return ac
}
//变频旁路风机
//电机转速与变频器频率关系 计算公式n=60f/p其中n是同步转速f是频率P是磁极对数
//变频器的额定输出频率一般为0-100HZ
//假设风机磁极对数为1则n=60f
if fanEntry.HasComponent(component.FcBypassFanTag) {
fcUnit := component.FanFcUnitType.Get(fanEntry)
if fcUnit.Fc {
SPEED := 60 * fcUnit.F
if fan.Speed > float32(SPEED) && ac > 0 {
}
} else {
}
}
return ac
}