rts-sim-module/repository/iscs_bas_dxt.go
2023-12-27 18:11:27 +08:00

340 lines
8.3 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 repository
import "joylink.club/rtsssimulation/repository/model/proto"
//ISCS BAS 大系统相关
// AirPavilion 风亭(排、送)
type AirPavilion struct {
Identity
Code string
PavilionType proto.AirPavilion_Type //风亭子类型
PortA DevicePort //风亭A端口连接的设备
}
func NewAirPavilion(id string, code string, pavilionType proto.AirPavilion_Type) *AirPavilion {
return &AirPavilion{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_AirPavilion},
Code: code,
PavilionType: pavilionType,
}
}
func (p *AirPavilion) PortNum() int {
return 1
}
// AirPavilionPort 风亭端口
//
// implement DevicePort
type AirPavilionPort struct {
port proto.Port
device *AirPavilion
}
func (p *AirPavilionPort) Port() proto.Port {
return p.port
}
func (p *AirPavilionPort) Device() PortedDevice {
return p.device
}
///////////////////////////////////////////////////////////
// Valve 阀门(电动调节阀、电动风阀)
type Valve struct {
Identity
Code string
ValveType proto.Valve_Type //阀门子类型
PortA DevicePort //阀门A端口连接的设备
PortB DevicePort //阀门B端口连接的设备
}
func NewValve(id string, code string, valveType proto.Valve_Type) *Valve {
return &Valve{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_Valve},
Code: code,
ValveType: valveType,
}
}
func (p *Valve) PortNum() int {
return 2
}
// ValvePort 阀门端口
//
// implement DevicePort
type ValvePort struct {
port proto.Port
device *Valve
}
func (p *ValvePort) Port() proto.Port {
return p.port
}
func (p *ValvePort) Device() PortedDevice {
return p.device
}
//////////////////////////////////////////////////
// GasMixingChamber 混合室静压箱(气体)
// 有四个端口ABC三个端口为输入口D端口为输出口
type GasMixingChamber struct {
Identity
Code string
PortA DevicePort //A端口连接的设备
PortB DevicePort //B端口连接的设备
PortC DevicePort //C端口连接的设备
PortD DevicePort //D端口连接的设备
}
func NewGasMixingChamber(id string, code string) *GasMixingChamber {
return &GasMixingChamber{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_GasMixingChamber},
Code: code,
}
}
func (p *GasMixingChamber) PortNum() int {
return 4
}
// GasMixingChamberPort 混合室静压箱端口
//
// implement DevicePort
type GasMixingChamberPort struct {
port proto.Port
device *GasMixingChamber
}
func (p *GasMixingChamberPort) Port() proto.Port {
return p.port
}
func (p *GasMixingChamberPort) Device() PortedDevice {
return p.device
}
////////////////////////////////////////////////
// CombinationAirConditioner 组合式空调
// 有四个端口新风输入端口A,工作风输出端口B
// 端口C输出风再通过端口D输入通过C->D实现对风再处理。
type CombinationAirConditioner struct {
Identity
Code string
PortA DevicePort //新风输入A端口连接的设备
PortB DevicePort //工作风输出B端口连接的设备
PortC DevicePort //C端口连接的设备
PortD DevicePort //D端口连接的设备
}
func NewCombinationAirConditioner(id string, code string) *CombinationAirConditioner {
return &CombinationAirConditioner{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_CombinationAirConditioner},
Code: code,
}
}
func (p *CombinationAirConditioner) PortNum() int {
return 4
}
func (p *CombinationAirConditioner) Outputs() []DevicePort {
var out []DevicePort
if p.PortB != nil {
out = append(out, p.PortB)
}
if p.PortC != nil {
out = append(out, p.PortC)
}
return out
}
func (p *CombinationAirConditioner) Inputs() []DevicePort {
var in []DevicePort
if p.PortA != nil {
in = append(in, p.PortA)
}
if p.PortD != nil {
in = append(in, p.PortD)
}
return in
}
// CombinationAirConditionerPort 组合式空调端口
//
// implement DevicePort
type CombinationAirConditionerPort struct {
port proto.Port
device *CombinationAirConditioner
}
func (p *CombinationAirConditionerPort) Port() proto.Port {
return p.port
}
func (p *CombinationAirConditionerPort) Device() PortedDevice {
return p.device
}
/////////////////////////////////////////////////////////////////
// AirPurificationDevice 净化装置(对组合式空调B端口输出的工作风进行净化)
// 有两个端口端口A输入端口B输出
type AirPurificationDevice struct {
Identity
Code string
PortA DevicePort //A端口连接的设备
PortB DevicePort //B端口连接的设备
}
func NewAirPurificationDevice(id string, code string) *AirPurificationDevice {
return &AirPurificationDevice{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_AirPurificationDevice},
Code: code,
}
}
func (p *AirPurificationDevice) PortNum() int {
return 2
}
// AirPurificationDevicePort 净化装置端口
//
// implement DevicePort
type AirPurificationDevicePort struct {
port proto.Port
device *AirPurificationDevice
}
func (p *AirPurificationDevicePort) Port() proto.Port {
return p.port
}
func (p *AirPurificationDevicePort) Device() PortedDevice {
return p.device
}
/////////////////////////////////////////////////////////
// AirCurtain 空气幕
type AirCurtain struct {
Identity
Code string
}
func NewAirCurtain(id string, code string) *AirCurtain {
return &AirCurtain{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_AirCurtain},
Code: code,
}
}
//////////////////////////////////////////////////////////
// Fan 风机
type Fan struct {
Identity
Code string
FanType proto.Fan_Type
*fanRunningModel
PortA DevicePort //A端口连接的设备风机出风口即排风口,输出端口
PortB DevicePort //B端口连接的设备风机进风口输入端口
}
func NewFan(id string, code string, fanType proto.Fan_Type) *Fan {
return &Fan{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_Fan},
Code: code,
FanType: fanType,
fanRunningModel: newFanRunningModel(fanType),
}
}
func (p *Fan) PortNum() int {
return 2
}
func (p *Fan) Outputs() []DevicePort {
if p.PortA == nil {
return nil
}
return []DevicePort{p.PortA}
}
func (p *Fan) Inputs() []DevicePort {
if p.PortB == nil {
return nil
}
return []DevicePort{p.PortB}
}
// FanPort 风机端口
//
// implement DevicePort
type FanPort struct {
port proto.Port
device *Fan
}
func (p *FanPort) Port() proto.Port {
return p.port
}
func (p *FanPort) Device() PortedDevice {
return p.device
}
type fanRunningModel struct {
maxSpeed float32
acTime uint16
}
func (m *fanRunningModel) MotorMaxSpeed() float32 {
return m.maxSpeed
}
func (m *fanRunningModel) MotorAcTime() uint16 {
return m.acTime
}
func newFanRunningModel(fanType proto.Fan_Type) *fanRunningModel {
switch fanType {
case proto.Fan_CommonFan:
return &fanRunningModel{maxSpeed: 3000, acTime: 2000}
case proto.Fan_HighLowSpeedFan:
return &fanRunningModel{maxSpeed: 6000, acTime: 4000}
case proto.Fan_FcBypassFan:
return &fanRunningModel{maxSpeed: 6000, acTime: 3000}
case proto.Fan_SoftStartFan:
return &fanRunningModel{maxSpeed: 100, acTime: 4000}
default:
return &fanRunningModel{maxSpeed: 3000, acTime: 2000}
}
}
////////////////////////////////////////////////
// GasEnvironment 气体环境(正常空气+有害烟雾)
// 有多个输入口统一为端口A用来为环境补充新鲜空气
// 有多个输出口统一为端口B用户将环境的混浊气体排除
// 排出气体动力源为该环境。
type GasEnvironment struct {
Identity
Code string
PortsA []DevicePort // 有多个输入口统一为端口A用来为环境补充新鲜空气
PortsB []DevicePort // 有多个输出口统一为端口B用户将环境的混浊气体排除
}
func NewGasEnvironment(id string, code string) *GasEnvironment {
return &GasEnvironment{
Identity: &identity{id: id, deviceType: proto.DeviceType_DeviceType_GasEnvironment},
Code: code,
}
}
func (p *GasEnvironment) PortNum() int {
return len(p.PortsA) + len(p.PortsB)
}
// GasEnvironmentPort 气体环境端口
//
// implement DevicePort
type GasEnvironmentPort struct {
port proto.Port
device *GasEnvironment
}
func (p *GasEnvironmentPort) Port() proto.Port {
return p.port
}
func (p *GasEnvironmentPort) Device() PortedDevice {
return p.device
}