Add clearance logic to PamhagenPlant
This commit is contained in:
@@ -9,6 +9,13 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
|
||||
public readonly Trough MW1;
|
||||
public readonly Trough MW2;
|
||||
public readonly Pump MP1;
|
||||
public readonly Pump MP2;
|
||||
public readonly Pump P12;
|
||||
public readonly Pump P3;
|
||||
public readonly Pump P4;
|
||||
public readonly Pump P5;
|
||||
public readonly Pump P6;
|
||||
|
||||
public PamhagenGraph() {
|
||||
double mw2X = 180;
|
||||
@@ -38,31 +45,31 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
var pr1X = 750;
|
||||
var pr2X = 900;
|
||||
|
||||
var trough = new EntryTrough("Auffangwanne", mw1X + 70, 100);
|
||||
var trough = new EntryTrough("Auffangwanne", mw1X + 70, 100, () => App.Plant?.IsTroughAugerActive ?? false);
|
||||
Nodes.Add(trough);
|
||||
|
||||
var auger1 = new EncasedAuger("", (mw1X + mw2X) / 2 - 100, 200);
|
||||
var auger2 = new EncasedAuger("Pressen-\nQuerschnecke", 40, 200, 180);
|
||||
var auger3 = new EncasedAuger("", 120, 80, 135);
|
||||
var belt = new ConveyorBelt("", 90, 160);
|
||||
var auger1 = new EncasedAuger("", (mw1X + mw2X) / 2 - 100, 200, () => App.Plant?.IsAuger1Active ?? false);
|
||||
var auger2 = new EncasedAuger("Pressen-\nQuerschnecke", 40, 200, () => App.Plant?.IsPresseQuerSchneckeActive ?? false, 180);
|
||||
var auger3 = new EncasedAuger("", 120, 80, () => App.Plant?.IsAuger2Active ?? false, 135);
|
||||
var belt = new ConveyorBelt("", 90, 160, () => App.Plant?.IsBeltActive ?? false);
|
||||
Nodes.Add(belt);
|
||||
Nodes.Add(auger1);
|
||||
Nodes.Add(auger2);
|
||||
Nodes.Add(auger3);
|
||||
var rebler = new Rebler("Rebler", (mw1X + mw2X) / 2, 200);
|
||||
var rebler = new Rebler("Rebler", (mw1X + mw2X) / 2, 200, () => App.Plant?.IsReblerActive ?? false);
|
||||
Nodes.Add(rebler);
|
||||
|
||||
MW1 = new Trough("MW1", mw1X, mpY - 70, () => App.Plant?.FillLevelA1 ?? FillState.Unknown);
|
||||
MW2 = new Trough("MW2", mw2X, mpY - 70, () => App.Plant?.FillLevelA1 ?? FillState.Unknown);
|
||||
var mp1 = new Pump("MP1", mw1X, mpY);
|
||||
var mp2 = new Pump("MP2", mw2X, mpY);
|
||||
MP1 = new Pump("MP1", mw1X, mpY, () => App.Plant?.IsMP1Active ?? false, () => App.Plant?.MP1HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
MP2 = new Pump("MP2", mw2X, mpY, () => App.Plant?.IsMP2Active ?? false, () => App.Plant?.MP2HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
var x1 = new PipeJoin(mw1X, mpY + 40);
|
||||
var x2 = new PipeJoin(mw2X, mpY + 40);
|
||||
|
||||
CreateOutlet(MW1, mp1);
|
||||
CreateOutlet(MW2, mp2);
|
||||
CreatePipe(mp1, x1);
|
||||
CreatePipe(mp2, x2);
|
||||
CreateOutlet(MW1, MP1);
|
||||
CreateOutlet(MW2, MP2);
|
||||
CreatePipe(MP1, x1);
|
||||
CreatePipe(MP2, x2);
|
||||
|
||||
var v1 = CreateValve(1, mw1X, mpY + 70);
|
||||
var v2 = CreateValve(2, mw2X, mpY + 70);
|
||||
@@ -279,17 +286,17 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
CreateInlet(v43, t9);
|
||||
|
||||
var xp12 = new PipeJoin((t1X + t2X) / 2, tanksY + 80);
|
||||
var p12 = new Pump("P1/2", (t1X + t2X) / 2, tanksY + 110);
|
||||
P12 = new Pump("P1/2", (t1X + t2X) / 2, tanksY + 110, () => App.Plant?.IsP12Active ?? false, () => App.Plant?.P12HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
CreateOutlet(t1, xp12);
|
||||
CreateOutlet(t2, xp12);
|
||||
CreatePipe(xp12, p12);
|
||||
CreatePipe(xp12, P12);
|
||||
|
||||
var p3 = new Pump("P3", t3X, tanksY + 110);
|
||||
var p4 = new Pump("P4", t4X, tanksY + 110);
|
||||
var p5 = new Pump("P5", t5X, tanksY + 110);
|
||||
CreateOutlet(t3, p3);
|
||||
CreateOutlet(t4, p4);
|
||||
CreateOutlet(t5, p5);
|
||||
P3 = new Pump("P3", t3X, tanksY + 110, () => App.Plant?.IsP3Active ?? false, () => App.Plant?.P3HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
P4 = new Pump("P4", t4X, tanksY + 110, () => App.Plant?.IsP4Active ?? false, () => App.Plant?.P4HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
P5 = new Pump("P5", t5X, tanksY + 110, () => App.Plant?.IsP5Active ?? false, () => App.Plant?.P5HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
CreateOutlet(t3, P3);
|
||||
CreateOutlet(t4, P4);
|
||||
CreateOutlet(t5, P5);
|
||||
|
||||
var v44 = CreateValve(44, (t1X + t2X) / 2, tanksY + 150);
|
||||
var v45 = CreateValve(45, t3X, tanksY + 150);
|
||||
@@ -299,10 +306,10 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
var xv44 = new PipeJoin((t1X + t2X) / 2, tanksY + 180);
|
||||
var xv45 = new PipeJoin(t3X, tanksY + 180);
|
||||
var xv47 = new PipeJoin(t4X, tanksY + 180);
|
||||
CreatePipe(p12, v44);
|
||||
CreatePipe(p3, v45);
|
||||
CreatePipe(p4, v47);
|
||||
CreatePipe(p5, v48);
|
||||
CreatePipe(P12, v44);
|
||||
CreatePipe(P3, v45);
|
||||
CreatePipe(P4, v47);
|
||||
CreatePipe(P5, v48);
|
||||
CreatePipe(v44, xv44);
|
||||
CreatePipe(v45, xv45);
|
||||
CreatePipe(v47, xv47);
|
||||
@@ -316,14 +323,14 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
var xt6 = new PipeJoin(t6X, tanksY + 110);
|
||||
var xt7 = new PipeJoin(t7X, tanksY + 110);
|
||||
var xt8 = new PipeJoin(t8X, tanksY + 110);
|
||||
var p6 = new Pump("P6", t6X, tanksY + 150);
|
||||
P6 = new Pump("P6", t6X, tanksY + 150, () => App.Plant?.IsP6Active ?? false, () => App.Plant?.P6HasClearance ?? false, (x) => SelectedPaths.Any(p => p.Hops.Any(h => h.Node == x)));
|
||||
CreateOutlet(t6, xt6);
|
||||
CreateOutlet(t7, xt7);
|
||||
CreateOutlet(t8, xt8);
|
||||
CreateOutlet(t9, xt8);
|
||||
CreatePipe(xt8, xt7);
|
||||
CreatePipe(xt7, xt6);
|
||||
CreatePipe(xt6, p6);
|
||||
CreatePipe(xt6, P6);
|
||||
|
||||
var v49 = CreateValve(49, t4X, tanksY + 220);
|
||||
CreatePipe(xv47, v49);
|
||||
@@ -346,7 +353,7 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
CreatePipe(v6, xp1, true);
|
||||
CreatePipe(v8, xp2, true);
|
||||
CreatePipe(v49, xp3, true);
|
||||
CreatePipe(p6, xp4, true);
|
||||
CreatePipe(P6, xp4, true);
|
||||
CreatePipe(xp1, v51);
|
||||
CreatePipe(xp1, v55);
|
||||
CreatePipe(xp2, v52);
|
||||
@@ -367,7 +374,7 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
}
|
||||
|
||||
protected static Valve CreateValve(int n, double x, double y) {
|
||||
return new(n, x, y, () => App.Plant?.IsValveOpen(4) ?? false, () => App.Plant?.WantValveOpen(4) ?? false);
|
||||
return new(n, x, y, () => App.Plant?.IsValveOpen(n) ?? false, () => App.Plant?.WantValveOpen(n) ?? false);
|
||||
}
|
||||
|
||||
protected static Tank CreateTank(int n, double x, double y, int capacity) {
|
||||
@@ -400,10 +407,10 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
|
||||
public void AddPath(Path path) {
|
||||
_selectedPaths.Add(path);
|
||||
UpdateValvesAdjacientToPath(path, true);
|
||||
UpdateValvesAdjacientToPath(path, true, false);
|
||||
if (App.Plant is PamhagenPlant plant) {
|
||||
foreach (var (edge, _) in path.Hops) {
|
||||
if (edge is Valve v) {
|
||||
foreach (var (_, node) in path.Hops) {
|
||||
if (node is Valve v) {
|
||||
plant.OpenV(v.Nr);
|
||||
}
|
||||
}
|
||||
@@ -416,8 +423,8 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
UpdateValvesAdjacientToPath(path, false);
|
||||
foreach (var p in _selectedPaths) UpdateValvesAdjacientToPath(p, true);
|
||||
if (App.Plant is PamhagenPlant plant) {
|
||||
foreach (var (edge, _) in path.Hops) {
|
||||
if (edge is Valve v) {
|
||||
foreach (var (_, node) in path.Hops) {
|
||||
if (node is Valve v) {
|
||||
plant.CloseV(v.Nr);
|
||||
}
|
||||
}
|
||||
@@ -425,9 +432,18 @@ namespace PamhagenSysCtrl.Helpers {
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateValvesAdjacientToPath(Path path, bool locked) {
|
||||
private void UpdateValvesAdjacientToPath(Path path, bool locked, bool? wantOpen = null) {
|
||||
foreach (var (edge, node) in path.Hops) {
|
||||
TraverseSubgraph(node, valveAction: (v) => v.IsLocked = locked);
|
||||
TraverseSubgraph(node, valveAction: (v) => {
|
||||
v.IsLocked = locked;
|
||||
if (wantOpen.HasValue) {
|
||||
if (wantOpen.Value) {
|
||||
App.Plant?.OpenV(v.Nr);
|
||||
} else {
|
||||
App.Plant?.CloseV(v.Nr);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user