rts-sim-module/examples/test1/tmodel/switch_model.go
2023-09-15 10:13:25 +08:00

101 lines
2.4 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 tmodel
import (
"joylink.club/rtsssimulation/umi"
)
// 道岔电路系统中的继电器
type SwitchRelay struct {
//继电器模型
Relay umi.IRelayModel
//该继电器在该道岔电路系统中的组合类型
RelayGroup string
//该继电器在该道岔电路系统中的功能名称
RelayName string
}
// 道岔
type SwitchModel struct {
DeviceModel
//道岔A端口连接的轨道
PortA umi.ILinkRef
//道岔B端口连接的轨道
PortB umi.ILinkRef
//道岔C端口连接的轨道
PortC umi.ILinkRef
//道岔电路系统中的继电器
Relays []SwitchRelay
}
func NewSwitchModel(id string) *SwitchModel {
return &SwitchModel{DeviceModel: DeviceModel{Id: id, Type: umi.Switch}}
}
func (me *SwitchModel) AddRelay(relay *SwitchRelay) {
me.Relays = append(me.Relays, *relay)
}
// 道岔A端口连接的轨道
func (me *SwitchModel) PortALink() umi.ILinkRef {
return me.PortA
}
// 道岔B端口连接的轨道
func (me *SwitchModel) PortBLink() umi.ILinkRef {
return me.PortB
}
// 道岔C端口连接的轨道
func (me *SwitchModel) PortCLink() umi.ILinkRef {
return me.PortC
}
// 根据继电器id获取在具体电路中的电路角色
// relayId-继电器id
// relayGroup-继电器组合类型
// relayName-继电器在电路中的名称
// find-true找到false未找到
func (me *SwitchModel) FindCircuitRoleById(relayId string) (relayGroup string, relayName string, find bool) {
for _, sr := range me.Relays {
id := sr.Relay.(umi.IDeviceModel).GetId()
if id == relayId {
return sr.RelayGroup, sr.RelayName, true
}
}
return "", "", false
}
// 根据继电器具体电路角色来获取继电器设备模型
// relayGroup-继电器组合类型
// relayName-继电器在电路中的名称
func (me *SwitchModel) FindRelayModelByCRole(relayGroup string, relayName string) umi.IRelayModel {
for _, sr := range me.Relays {
if sr.RelayGroup == relayGroup && sr.RelayName == relayName {
return sr.Relay
}
}
return nil
}
//////////////////////////////////////////////////////////
// 道岔端口引用
type SwitchRef struct {
Switch umi.ISwitchModel
//引用道岔的端口
Port umi.PortEnum
}
func NewSwitchRef(switchModel *SwitchModel, port umi.PortEnum) *SwitchRef {
return &SwitchRef{Switch: switchModel, Port: port}
}
// 被引用的道岔模型
func (me *SwitchRef) SwitchModel() umi.ISwitchModel {
return me.Switch
}
// 被引用的道岔的端口
func (me *SwitchRef) SwitchPort() umi.PortEnum {
return me.Port
}