This commit is contained in:
xzb 2023-09-21 15:49:46 +08:00
parent 7144799b29
commit 64eb0c10ba
5 changed files with 8 additions and 201 deletions

View File

@ -89,8 +89,8 @@ func addRelays(modelStorage *tstorages.ModelStorage) {
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-dbj", umi.JPXC_1000)) modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-dbj", umi.JPXC_1000))
modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-fbj", umi.JPXC_1000)) modelStorage.AddModel(tmodel.NewRelayModel("sw1-sjzdj9-j2-fbj", umi.JPXC_1000))
} }
func findRelayModel(modelStorage *tstorages.ModelStorage, id string) umi.IRelayModel { func findRelayModel(modelStorage *tstorages.ModelStorage, id string) umi.IDeviceModel {
return modelStorage.FindModelById(id).(umi.IRelayModel) return modelStorage.FindModelById(id)
} }
func addSwitchs(modelStorage *tstorages.ModelStorage) { func addSwitchs(modelStorage *tstorages.ModelStorage) {
sw1 := tmodel.NewSwitchModel("sw1") sw1 := tmodel.NewSwitchModel("sw1")

View File

@ -1,81 +0,0 @@
package tmodel
import (
"joylink.club/rtsssimulation/umi"
)
// 长轨道,道岔端点间的轨道
type LinkModel struct {
DeviceModel
//轨道A端口连接的道岔
PortA umi.ISwitchRef
//轨道B端口连接的道岔
PortB umi.ISwitchRef
//长度,单位mm
Length int64
}
func NewLinkModel(id string) *LinkModel {
return &LinkModel{DeviceModel: DeviceModel{Id: id, Type: umi.Link}}
}
// 获取轨道长度单位mm
func (me *LinkModel) Len() int64 {
return me.Length
}
// 轨道A端连接的道岔
func (me *LinkModel) PortASwitch() umi.ISwitchRef {
return me.PortA
}
// 轨道B端连接的道岔
func (me *LinkModel) PortBSwitch() umi.ISwitchRef {
return me.PortB
}
///////////////////////////////////////////////////////
// 轨道端口引用
type LinkRef struct {
Link umi.ILinkModel
//引用轨道的端口
Port umi.PortEnum
}
func NewLinkRef(link *LinkModel, port umi.PortEnum) *LinkRef {
return &LinkRef{Link: link, Port: port}
}
// 被引用的轨道模型
func (me *LinkRef) LinkModel() umi.ILinkModel {
return me.Link
}
// 被引用的轨道的端口
func (me *LinkRef) LinkPort() umi.PortEnum {
return me.Port
}
///////////////////////////////////////////////////////////
// 轨道偏移位置引用轨道A端为偏移起始位置
type LinkOffsetRef struct {
Link umi.ILinkModel
//偏移位置单位mm
Offset int64
}
func NewLinkOffsetRef(link *LinkModel, offset int64) *LinkOffsetRef {
return &LinkOffsetRef{Link: link, Offset: offset}
}
// 被引用的轨道模型
func (me *LinkOffsetRef) LinkModel() umi.ILinkModel {
return me.Link
}
// 偏移量单位mm
func (me *LinkOffsetRef) GetOffset() int64 {
return me.Offset
}

View File

@ -1,16 +0,0 @@
package tmodel
import (
"joylink.club/rtsssimulation/umi"
)
// 信号机
type SignalModel struct {
DeviceModel
//信号机所在轨道
LinkOffset *LinkOffsetRef
}
func NewSignalModel(id string) *SignalModel {
return &SignalModel{DeviceModel: DeviceModel{Id: id, Type: umi.Signal}}
}

View File

@ -7,7 +7,7 @@ import (
// 道岔电路系统中的继电器 // 道岔电路系统中的继电器
type SwitchRelay struct { type SwitchRelay struct {
//继电器模型 //继电器模型
Relay umi.IRelayModel Relay umi.IDeviceModel
//该继电器在该道岔电路系统中的组合类型 //该继电器在该道岔电路系统中的组合类型
RelayGroup string RelayGroup string
//该继电器在该道岔电路系统中的功能名称 //该继电器在该道岔电路系统中的功能名称
@ -17,12 +17,6 @@ type SwitchRelay struct {
// 道岔 // 道岔
type SwitchModel struct { type SwitchModel struct {
DeviceModel DeviceModel
//道岔A端口连接的轨道
PortA umi.ILinkRef
//道岔B端口连接的轨道
PortB umi.ILinkRef
//道岔C端口连接的轨道
PortC umi.ILinkRef
//道岔电路系统中的继电器 //道岔电路系统中的继电器
Relays []SwitchRelay Relays []SwitchRelay
} }
@ -34,29 +28,14 @@ func (me *SwitchModel) AddRelay(relay *SwitchRelay) {
me.Relays = append(me.Relays, *relay) me.Relays = append(me.Relays, *relay)
} }
// 道岔A端口连接的轨道 // FindCircuitRoleById 根据继电器id获取在具体电路中的电路角色
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 // relayId-继电器id
// relayGroup-继电器组合类型 // relayGroup-继电器组合类型
// relayName-继电器在电路中的名称 // relayName-继电器在电路中的名称
// find-true找到false未找到 // find-true找到false未找到
func (me *SwitchModel) FindCircuitRoleById(relayId string) (relayGroup string, relayName string, find bool) { func (me *SwitchModel) FindCircuitRoleById(relayId string) (relayGroup string, relayName string, find bool) {
for _, sr := range me.Relays { for _, sr := range me.Relays {
id := sr.Relay.(umi.IDeviceModel).GetId() id := sr.Relay.GetId()
if id == relayId { if id == relayId {
return sr.RelayGroup, sr.RelayName, true return sr.RelayGroup, sr.RelayName, true
} }
@ -64,10 +43,10 @@ func (me *SwitchModel) FindCircuitRoleById(relayId string) (relayGroup string, r
return "", "", false return "", "", false
} }
// 根据继电器具体电路角色来获取继电器设备模型 // FindRelayModelByCRole 根据继电器具体电路角色来获取继电器设备模型
// relayGroup-继电器组合类型 // relayGroup-继电器组合类型
// relayName-继电器在电路中的名称 // relayName-继电器在电路中的名称
func (me *SwitchModel) FindRelayModelByCRole(relayGroup string, relayName string) umi.IRelayModel { func (me *SwitchModel) FindRelayModelByCRole(relayGroup string, relayName string) umi.IDeviceModel {
for _, sr := range me.Relays { for _, sr := range me.Relays {
if sr.RelayGroup == relayGroup && sr.RelayName == relayName { if sr.RelayGroup == relayGroup && sr.RelayName == relayName {
return sr.Relay return sr.Relay
@ -75,26 +54,3 @@ func (me *SwitchModel) FindRelayModelByCRole(relayGroup string, relayName string
} }
return nil 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
}

View File

@ -44,52 +44,6 @@ type IDeviceModel interface {
GetType() DeviceType GetType() DeviceType
} }
// ILinkModel 仿真底层道岔模型
// 用户所有轨道模型定义须实现该接口
type ILinkModel interface {
//Len 获取轨道长度单位mm
Len() int64
//PortASwitch 轨道A端连接的道岔
PortASwitch() ISwitchRef
//PortBSwitch 轨道B端连接的道岔
PortBSwitch() ISwitchRef
}
// ILinkRef 轨道引用
type ILinkRef interface {
//LinkModel 被引用的轨道模型
LinkModel() ILinkModel
//LinkPort 被引用的轨道的端口
LinkPort() PortEnum
}
// ILinkOffsetRef 轨道偏移引用
type ILinkOffsetRef interface {
//LinkModel 被引用的轨道模型
LinkModel() ILinkModel
//GetOffset 偏移量单位mm
GetOffset() int64
}
// ISwitchModel 仿真底层道岔模型
// 用户所有道岔模型定义须实现该接口
type ISwitchModel interface {
//PortALink 道岔A端口连接的轨道
PortALink() ILinkRef
//PortBLink 道岔B端口连接的轨道
PortBLink() ILinkRef
//PortCLink 道岔C端口连接的轨道
PortCLink() ILinkRef
}
// ISwitchRef 道岔引用
type ISwitchRef interface {
//SwitchModel 被引用的道岔模型
SwitchModel() ISwitchModel
//SwitchPort 被引用的道岔的端口
SwitchPort() PortEnum
}
// IPsdModel 仿真底层屏蔽门模型 // IPsdModel 仿真底层屏蔽门模型
// 用户所有屏蔽门模型定义须实现该接口 // 用户所有屏蔽门模型定义须实现该接口
type IPsdModel interface { type IPsdModel interface {
@ -136,12 +90,6 @@ const (
JZXC_H18 JZXC_H18
) )
// IRelayModel 继电器模型
type IRelayModel interface {
//JType 该继电器类型
JType() RelayType
}
// IRelayCRole 获取继电器在具体电路中的角色(组合类型、功能名称) // IRelayCRole 获取继电器在具体电路中的角色(组合类型、功能名称)
// 如信号机3XH-1电路中点灯继电器组合类型-"3XH-1" 功能名称-"DDJ" // 如信号机3XH-1电路中点灯继电器组合类型-"3XH-1" 功能名称-"DDJ"
// 对应设备电路中有继电器的设备模型须实现该接口 // 对应设备电路中有继电器的设备模型须实现该接口
@ -155,5 +103,5 @@ type IRelayCRole interface {
//FindRelayModelByCRole 根据继电器具体电路角色来获取继电器设备模型 //FindRelayModelByCRole 根据继电器具体电路角色来获取继电器设备模型
//relayGroup-继电器组合类型 //relayGroup-继电器组合类型
//relayName-继电器在电路中的名称 //relayName-继电器在电路中的名称
FindRelayModelByCRole(relayGroup string, relayName string) IRelayModel FindRelayModelByCRole(relayGroup string, relayName string) IDeviceModel
} }