rts-sim-module/repository/repository_iscs.go

239 lines
8.2 KiB
Go
Raw Normal View History

2023-12-20 14:44:27 +08:00
package repository
import "joylink.club/rtsssimulation/repository/model/proto"
// ISCS模型仓库构建
func buildIscsModels(source *proto.Repository, repository *Repository) error {
//ISCS管线
for _, protoData := range source.Pipes {
2023-12-20 15:22:36 +08:00
m := NewPipe(protoData.Id, protoData.Code, protoData.PipeType)
repository.PipeMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS管件
for _, protoData := range source.PipeFittings {
m := NewPipeFitting(protoData.Id, protoData.Code, int8(protoData.Sum))
2023-12-20 15:22:36 +08:00
repository.PipeFittingMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS断路器
for _, protoData := range source.CircuitBreakers {
m := NewCircuitBreaker(protoData.Id, protoData.Code)
2023-12-20 15:22:36 +08:00
repository.CircuitBreakerMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS三工位开关
for _, protoData := range source.ThreePositionSwitches {
m := NewThreePositionSwitch(protoData.Id, protoData.Code)
2023-12-20 15:22:36 +08:00
repository.ThreePositionSwitchMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS手车
for _, protoData := range source.HandcartSwitches {
m := NewHandcartSwitch(protoData.Id, protoData.Code)
2023-12-20 15:22:36 +08:00
repository.HandcartSwitchMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS整流器
for _, protoData := range source.Rectifiers {
m := NewRectifier(protoData.Id, protoData.Code)
2023-12-20 15:22:36 +08:00
repository.RectifierMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS隔离开关
for _, protoData := range source.Disconnectors {
m := NewDisconnector(protoData.Id, protoData.Code)
2023-12-20 15:22:36 +08:00
repository.DisconnectorMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS变压器
for _, protoData := range source.VoltageTransformers {
2023-12-20 16:50:51 +08:00
m := NewVoltageTransformer(protoData.Id, protoData.Code, protoData.E1, protoData.E2)
2023-12-20 15:22:36 +08:00
repository.VoltageTransformerMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS电源
for _, protoData := range source.PowerSources {
2023-12-20 16:01:08 +08:00
m := NewPowerSource(protoData.Id, protoData.Code, protoData.Ac, protoData.Voltage)
2023-12-20 15:22:36 +08:00
repository.PowerSourceMap[m.Id()] = m
2023-12-20 14:44:27 +08:00
}
//ISCS避雷器
for _, protoData := range source.LightningArresters {
m := NewLightningArrester(protoData.Id, protoData.Code)
repository.LightningArresterMap[m.Id()] = m
}
//ISCS接地装置
for _, protoData := range source.EarthingDevices {
m := NewEarthingDevice(protoData.Id, protoData.Code)
repository.EarthingDeviceMap[m.Id()] = m
}
2023-12-22 15:29:57 +08:00
//ISCS网络交换机
for _, protoData := range source.NetworkSwitches {
m := NewNetworkSwitch(protoData.Id, protoData.Code)
repository.NetworkSwitchMap[m.Id()] = m
}
//ISCS线柜
for _, protoData := range source.WireCabinets {
m := NewWireCabinet(protoData.Id, protoData.Code)
repository.WireCabinetMap[m.Id()] = m
}
2023-12-20 14:44:27 +08:00
//
return nil
}
// ISCS模型关系构建
func buildIscsModelRelationship(source *proto.Repository, repository *Repository) error {
if e := buildIscsPipeModelRelationship(source, repository); e != nil {
return e
}
//
return nil
}
// ISCS模型关系构建---构建与管线Pipe相关的关系
func buildIscsPipeModelRelationship(source *proto.Repository, repository *Repository) error {
//PSCADA一次图关系数据都在proto管线中
for _, protoPipe := range source.Pipes {
pipeA := protoPipe.PortA
pipeB := protoPipe.PortB
pipeModel := (repository.FindById(source.Id)).(*Pipe)
//pipeModel的端口pipePort连接设备的端口portRelatedDevice
buildRelationship := func(pipePort proto.Port, portRelatedDevice *proto.DevicePort) error {
relatedDevice, e := repository.FindModel(portRelatedDevice.DeviceId, portRelatedDevice.DeviceType)
if e != nil {
return e
}
var pipePortRelatedDevice DevicePort
switch portRelatedDevice.DeviceType {
case proto.DeviceType_DeviceType_PipeFitting:
{
pipeFitting := relatedDevice.(*PipeFitting)
pipePortRelatedDevice = &PipeFittingPort{port: portRelatedDevice.Port, pipeFitting: pipeFitting}
//构建管件pipeFitting与管线的关系
switch portRelatedDevice.Port {
case proto.Port_A:
pipeFitting.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
pipeFitting.PortB = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_C:
pipeFitting.PortC = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_D:
pipeFitting.PortD = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_CircuitBreaker:
{
circuitBreaker := relatedDevice.(*CircuitBreaker)
pipePortRelatedDevice = &CircuitBreakerPort{port: portRelatedDevice.Port, breaker: circuitBreaker}
switch portRelatedDevice.Port {
case proto.Port_A:
circuitBreaker.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
circuitBreaker.PortB = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_LightningArrester:
{
lightningArrester := relatedDevice.(*LightningArrester)
pipePortRelatedDevice = &LightningArresterPort{port: portRelatedDevice.Port, arrester: lightningArrester}
switch portRelatedDevice.Port {
case proto.Port_A:
lightningArrester.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
lightningArrester.PortB = &PipePort{port: pipePort, pipe: pipeModel}
}
}
2023-12-20 14:44:27 +08:00
case proto.DeviceType_DeviceType_ThreePositionSwitch:
{
tps := relatedDevice.(*ThreePositionSwitch)
pipePortRelatedDevice = &ThreePositionSwitchPort{port: portRelatedDevice.Port, breaker: tps}
switch portRelatedDevice.Port {
case proto.Port_A:
tps.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
tps.PortB = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_C:
tps.PortC = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_HandcartSwitch:
{
hs := relatedDevice.(*HandcartSwitch)
pipePortRelatedDevice = &HandcartSwitchPort{port: portRelatedDevice.Port, breaker: hs}
switch portRelatedDevice.Port {
case proto.Port_A:
hs.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
hs.PortB = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_Rectifier:
{
rectifier := relatedDevice.(*Rectifier)
pipePortRelatedDevice = &RectifierPort{port: portRelatedDevice.Port, rectifier: rectifier}
switch portRelatedDevice.Port {
case proto.Port_A:
rectifier.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
rectifier.PortB = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_C:
rectifier.PortC = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_D:
rectifier.PortD = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_Disconnector:
{
disconnecter := relatedDevice.(*Disconnector)
pipePortRelatedDevice = &DisconnectorPort{port: portRelatedDevice.Port, breaker: disconnecter}
switch portRelatedDevice.Port {
case proto.Port_A:
disconnecter.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
disconnecter.PortB = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_VoltageTransformer:
{
vt := relatedDevice.(*VoltageTransformer)
pipePortRelatedDevice = &VoltageTransformerPort{port: portRelatedDevice.Port, vt: vt}
switch portRelatedDevice.Port {
case proto.Port_A:
vt.PortA = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_B:
vt.PortB = &PipePort{port: pipePort, pipe: pipeModel}
case proto.Port_C:
vt.PortC = &PipePort{port: pipePort, pipe: pipeModel}
}
}
case proto.DeviceType_DeviceType_PowerSource:
{
ps := relatedDevice.(*PowerSource)
pipePortRelatedDevice = &PowerSourcePort{ps: ps}
ps.PortA = &PipePort{port: pipePort, pipe: pipeModel}
}
case proto.DeviceType_DeviceType_EarthingDevice:
{
ed := relatedDevice.(*EarthingDevice)
ed.PortA = &PipePort{port: pipePort, pipe: pipeModel}
pipePortRelatedDevice = &EarthingDevicePort{ed: ed}
}
2023-12-20 14:44:27 +08:00
}
if pipePortRelatedDevice != nil {
if pipePort == proto.Port_A {
pipeModel.PortA = pipePortRelatedDevice
} else {
pipeModel.PortB = pipePortRelatedDevice
}
}
//
return nil
}
//
if pipeA != nil {
if e := buildRelationship(proto.Port_A, pipeA); e != nil {
return e
}
}
if pipeB != nil {
if e := buildRelationship(proto.Port_B, pipeB); e != nil {
return e
}
}
}
//
return nil
}