Browse Source

add reservoir relay power

chenzk 1 week ago
parent
commit
5123f33c07

+ 27 - 1
CyberX8_MainPages/ViewModels/StandardHotReservoirsViewModel.cs

@@ -655,6 +655,10 @@ namespace CyberX8_MainPages.ViewModels
         public ICommand ResetTotalCommand { get; set; }
         public ICommand GotoPMCounterCommand { get; set; }
         public ICommand JumpDosingSystemCommand { get; set; }
+        public ICommand HedPowerOnCommand { get; set; }
+        public ICommand HedPowerOffCommand { get; set; }
+        public ICommand ResPowerOnCommand { get; set; }
+        public ICommand ResPowerOffCommand { get; set; }
         #endregion
 
         /// <summary>
@@ -677,6 +681,11 @@ namespace CyberX8_MainPages.ViewModels
             ResetTotalCommand = new DelegateCommand(ResetTotalAction);
             GotoPMCounterCommand = new DelegateCommand<object>(GotoPMCounterAction);
             JumpDosingSystemCommand = new DelegateCommand<object>(JumpDosingSystemAction);
+            
+            HedPowerOnCommand = new DelegateCommand<object>(HedPowerOnAction);
+            HedPowerOffCommand = new DelegateCommand<object>(HedPowerOffAction);
+            ResPowerOnCommand = new DelegateCommand<object>(ResPowerOnAction);
+            ResPowerOffCommand = new DelegateCommand<object>(ResPowerOffAction);
         }
         /// <summary>
         /// 加载数据
@@ -887,7 +896,24 @@ namespace CyberX8_MainPages.ViewModels
         {
 
             GlobalEvents.OnSwitchFixedChildSubItem(Module, $"DosingSystem1");
-        }       
+        }
+        
+        private void HedPowerOnAction(object param)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{Module}.HedPowerOn");
+        }
+        private void HedPowerOffAction(object param)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{Module}.HedPowerOff");
+        }
+        private void ResPowerOnAction(object param)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{Module}.ResPowerOn");
+        }
+        private void ResPowerOffAction(object param)
+        {
+            InvokeClient.Instance.Service.DoOperation($"{Module}.ResPowerOff");
+        }
         #endregion
 
         /// <summary>

+ 21 - 0
CyberX8_MainPages/Views/StandardHotReservoirsView.xaml

@@ -516,6 +516,27 @@ Visibility="{Binding IsError,Converter={StaticResource boolToVisibility2}}" Canv
                 <Label Content="High Safety" FontSize="12" FontWeight="Bold" Margin="0,0,40,0" />
             </Grid>
         </Grid>
+        <Grid Canvas.Left="20" Canvas.Top="240">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="100"/>
+                <ColumnDefinition Width="30"/>
+                <ColumnDefinition Width="40"/>
+                <ColumnDefinition Width="40"/>
+            </Grid.ColumnDefinitions>
+            <Grid.RowDefinitions>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+                <RowDefinition Height="25"/>
+            </Grid.RowDefinitions>
+            <Ellipse Grid.Row="0" Grid.Column ="1" Margin="0 0 0 0"  Width="16" Height="16"  Fill="{Binding ReservoirData.HedPowerOn, Converter={StaticResource boolToColor}}"    Stroke="Gray"/>
+            <Ellipse Grid.Row="1" Grid.Column ="1" Margin="0 0 0 0"  Width="16" Height="16"  Fill="{Binding ReservoirData.ResPowerOn, Converter={StaticResource boolToColor}}"    Stroke="Gray"/>
+            <Label Grid.Row="0" Grid.Column ="0" Content="HedPowerOn" FontSize="12" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+            <Label Grid.Row="1" Grid.Column ="0" Content="ResPowerOn" FontSize="12" FontWeight="Bold" VerticalContentAlignment="Center" HorizontalContentAlignment="Left" VerticalAlignment="Center" HorizontalAlignment="Center"/>
+            <Button Grid.Row="0" Grid.Column ="2" IsEnabled="{Binding IsAutoEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding HedPowerOnCommand}" Margin="0,0,0,0" Height="20" Width="30" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="ON"></Button>
+            <Button Grid.Row="0" Grid.Column ="3" IsEnabled="{Binding IsAutoEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding HedPowerOffCommand}" Margin="0,0,0,0" Height="20" Width="30" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="OFF"></Button>
+            <Button Grid.Row="1" Grid.Column ="2" IsEnabled="{Binding IsAutoEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding ResPowerOnCommand}" Margin="0,0,0,0" Height="20" Width="30" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="ON"></Button>
+            <Button Grid.Row="1" Grid.Column ="3" IsEnabled="{Binding IsAutoEnabled}" Style="{StaticResource SysBtnStyle}" Command="{Binding ResPowerOffCommand}" Margin="0,0,0,0" Height="20" Width="30" HorizontalAlignment="Center" VerticalAlignment="Center"  Content="OFF"></Button>
+        </Grid>
         <ctrls:TextboxWithLabel TextBoxValue="{Binding MetalDataCollection[0].CellFlow,StringFormat=\{0:F1\} L/min}" Canvas.Top="533" Canvas.Left="613" LabelValue="Flow"  TextBoxColor="White" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
         <TextBlock FontSize="14" Width="70" Canvas.Top="406" Canvas.Left="102" HorizontalAlignment="Left" VerticalAlignment="Center" Text="DI Replen" RenderTransformOrigin="0.5,0.5"></TextBlock>
         <TextBlock FontSize="14" Width="72" Canvas.Top="625" Canvas.Left="702" HorizontalAlignment="Left" VerticalAlignment="Top" Text="Circulation" RenderTransformOrigin="0.5,0.5"></TextBlock>

+ 12 - 30
CyberX8_RT/Config/Devices/PowerSupplierCfg.xml

@@ -1,48 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
 <PowerSupplierConfig>
-  <PowerSupplierDeviceConfig Name="Power1" IpAddress="192.168.0.239" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="Power1" IpAddress="10.0.10.101" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="Power1-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power2" IpAddress="127.0.0.1" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="Power2" IpAddress="10.0.10.102" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="Power2-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power3" IpAddress="127.0.0.1" Port="504" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="Power3" IpAddress="10.0.10.103" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="Power3-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power4" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="Power4" IpAddress="10.0.10.104" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="Power4-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power5" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power5-1" Address="2" />
+  <PowerSupplierDeviceConfig Name="Power5" IpAddress="10.0.10.105" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+    <Device Name="Power5-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power6" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power6-1" Address="2" />
+  <PowerSupplierDeviceConfig Name="Power6" IpAddress="10.0.10.106" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+    <Device Name="Power6-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power7" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power7-1" Address="2" />
+  <PowerSupplierDeviceConfig Name="Power7" IpAddress="10.0.10.107" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+    <Device Name="Power7-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power8" IpAddress="10.0.0.108" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="Power8" IpAddress="10.0.10.108" Port="820" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="Power8-1" Address="1" />
   </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power9" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power9-1" Address="2" />
-  </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power10" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power10-1" Address="2" />
-  </PowerSupplierDeviceConfig>  
-  <PowerSupplierDeviceConfig Name="Power11" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power11-1" Address="2" />
-  </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power12" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power12-1" Address="2" />
-  </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power13" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power13-1" Address="2" />
-  </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="Power14" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power14-1" Address="2" />
-  </PowerSupplierDeviceConfig>
-  <PowerSupplierDeviceConfig Name="CMMPower1" IpAddress="127.0.0.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
+  <PowerSupplierDeviceConfig Name="CMMPower1" IpAddress="127.0.10.1" Port="505" SendTimeout="2000" RecvTimeout="2000"> 
     <Device Name="CMMPower1-1" Address="2" />
   </PowerSupplierDeviceConfig>
 </PowerSupplierConfig>

+ 84 - 2
CyberX8_RT/Devices/Reservoir/StandardHotReservoirDevice.cs

@@ -29,6 +29,7 @@ using CyberX8_RT.Devices.Safety;
 using MECF.Framework.Common.ProcessCell;
 using MECF.Framework.Common.Alarm;
 using MECF.Framework.Common.IOCore;
+using Aitex.Core.RT.Routine;
 
 
 namespace CyberX8_RT.Devices.Reservoir
@@ -198,7 +199,6 @@ namespace CyberX8_RT.Devices.Reservoir
         private bool _isAutoDIReplenError = false;
         private bool _isSafetyHigh = false;
         private bool _isSystemAutoMode = false;
-        private bool _reservoirPowerOn = false;
         /// <summary>
         /// 用于控制打印错误log
         /// </summary>
@@ -709,7 +709,8 @@ namespace CyberX8_RT.Devices.Reservoir
             DATA.Subscribe($"{Module}.HedFlow", () => _reservoirData.HedFlow, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.PHEnable", () => _reservoirData.PHFlowValve, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.IsDIReplenInFault", () => _isDiReplenInFault, SubscriptionAttribute.FLAG.IgnoreSaveDB);
-            DATA.Subscribe($"{Module}.ReservoirPowerOn", () => _reservoirPowerOn, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.ReservoirPowerOn", () => _reservoirData.ResPowerOn, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.HedPowerOn", () => _reservoirData.HedPowerOn, SubscriptionAttribute.FLAG.IgnoreSaveDB);
         }
         /// <summary>
         /// 初始化操作
@@ -734,6 +735,85 @@ namespace CyberX8_RT.Devices.Reservoir
             OP.Subscribe($"{Module}.StopManualDosing", StopManualDosing);
             OP.Subscribe($"{Module}.ResetBottleVolume", ResetBottleVolume);
             OP.Subscribe($"{Module}.DosingInitialize", DosingInitialize);
+            
+            OP.Subscribe($"{Module}.HedPowerOn", HedPowerOnAction);
+            OP.Subscribe($"{Module}.HedPowerOff", HedPowerOffAction);
+            OP.Subscribe($"{Module}.ResPowerOn", ResPowerOnAction);
+            OP.Subscribe($"{Module}.ResPowerOff", ResPowerOffAction);
+
+        }
+
+        private bool HedPowerOnAction(string cmd, object[] args)
+        {
+            string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{HEDPOWERON}");
+            if (!string.IsNullOrEmpty(ioName))
+            {
+                bool result = IOModuleManager.Instance.WriteIoValue(ioName, true);
+                if (!result)
+                {
+                    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"Open HED Power Relay failed");
+                    return false;
+                }
+                return true;
+            }
+            else
+            {
+                return true;
+            }
+        }
+        private bool HedPowerOffAction(string cmd, object[] args)
+        {
+            string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{HEDPOWERON}");
+            if (!string.IsNullOrEmpty(ioName))
+            {
+                bool result = IOModuleManager.Instance.WriteIoValue(ioName, false);
+                if (!result)
+                {
+                    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"Close HED Power Relay failed");
+                    return false;
+                }
+                return true;
+            }
+            else
+            {
+                return true;
+            }
+        }
+        private bool ResPowerOnAction(string cmd, object[] args)
+        {
+            string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{RESPOWERON}");
+            if (!string.IsNullOrEmpty(ioName))
+            {
+                bool result = IOModuleManager.Instance.WriteIoValue(ioName, true);
+                if (!result)
+                {
+                    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"Open Res Power Relay failed");
+                    return false;
+                }
+                return true;
+            }
+            else
+            {
+                return true;
+            }
+        }
+        private bool ResPowerOffAction(string cmd, object[] args)
+        {
+            string ioName = BeckhoffModuleIOManager.Instance.GetIoNameByInnerModuleName($"{Module}.{RESPOWERON}");
+            if (!string.IsNullOrEmpty(ioName))
+            {
+                bool result = IOModuleManager.Instance.WriteIoValue(ioName, false);
+                if (!result)
+                {
+                    LOG.WriteLog(eEvent.ERR_RESERVOIR, Module, $"Close Res Power Relay failed");
+                    return false;
+                }
+                return true;
+            }
+            else
+            {
+                return true;
+            }
         }
 
         #region Operation
@@ -1947,6 +2027,8 @@ namespace CyberX8_RT.Devices.Reservoir
             BeckhoffIoSubscribeUpdateVariable(LOW_LEVEL);
             BeckhoffIoSubscribeUpdateVariable(HIGH_LEVEL);
             BeckhoffIoSubscribeUpdateVariable(SAFETY_HIGH_LEVEL);
+            BeckhoffIoSubscribeUpdateVariable(RESPOWERON);
+            BeckhoffIoSubscribeUpdateVariable(HEDPOWERON);
             for (int i = 0; i < _replenNum; i++)
             {
                 BeckhoffIoSubscribeUpdateVariable($"Replen{i + 1}Level");

+ 4 - 3
CyberX8_Setup/CyberX8_RT.iss

@@ -33,9 +33,10 @@ Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
 
 
 [Files]
-Source: "..\CyberX8_RT\bin\Release\*";Excludes:"Config,Recipes,Logs,Objects"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
-Source: "..\CyberX8_RT\bin\Release\Config\*"; Excludes:"*.data,*.bak";DestDir: "{app}\Config";  Flags: recursesubdirs
-
+Source: "..\CyberX8_RT\bin\Release\*";Excludes:"Config,Recipes,Logs,Objects,LotTrack"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
+Source: "..\CyberX8_RT\bin\Release\Config\*"; Excludes:"*.data,*.bak";DestDir: "{app}\Config";  Flags: recursesubdirs onlyifdoesntexist
+Source: "..\CyberX8_RT\bin\Release\Config\DBModel.sql"; DestDir: "{app}\Config";
+Source: "..\CyberX8_RT\bin\Release\Config\System.sccfg"; DestDir: "{app}\Config";
 
 
 [Icons]

+ 3 - 3
CyberX8_Setup/CyberX8_UI.iss

@@ -32,10 +32,10 @@ UsePreviousAppDir=no
 Name: "english"; MessagesFile: "compiler:Default.isl"
 
 [Files]
-//Source: "..\CyberX8_UI\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
-; NOTE: Don't use "Flags: ignoreversion" on any shared system files
-Source: "..\CyberX8_UI\bin\Release\*";Excludes:"Config"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
+
+Source: "..\CyberX8_UI\bin\Release\*";Excludes:"Config,{#MyAppName}.exe.config"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs
 Source: "..\CyberX8_UI\bin\Release\Config\*"; DestDir: "{app}\Config"; Flags: onlyifdoesntexist
+Source: "..\CyberX8_UI\bin\Release\{#MyAppName}.exe.config"; DestDir: "{app}"; Flags: onlyifdoesntexist
 
 [Icons]
 Name: "{userdesktop}\{#MyAppName}";Filename: "{app}\{#MyAppName}.exe"; WorkingDir: "{app}"

+ 4 - 1
Framework/Common/CommonData/Reservoir/StandardHotReservoirData.cs

@@ -20,6 +20,8 @@ namespace MECF.Framework.Common.CommonData.Reservoir
         private bool _highLevel;
         private bool _safetyHighLevel;
         private double _hedFlow;
+        private bool _resPowerOn;
+        private bool _hedPowerOn;
         private List<bool> _replenLevel;
         #endregion
 
@@ -45,7 +47,8 @@ namespace MECF.Framework.Common.CommonData.Reservoir
         public double HedFlow { get { return _hedFlow; } set { _hedFlow = value;InvokePropertyChanged(nameof(HedFlow)); } } 
 
         public bool IsDataInitialized { get { return _isDataInitialized; } set { _isDataInitialized = value; InvokePropertyChanged(nameof(IsDataInitialized)); } }
-
+        public bool HedPowerOn { get { return _hedPowerOn; } set { _hedPowerOn = value; InvokePropertyChanged(nameof(HedPowerOn)); } }
+        public bool ResPowerOn { get { return _resPowerOn; } set { _resPowerOn = value; InvokePropertyChanged(nameof(ResPowerOn)); } }
         public List<bool> ReplenLevel { get { return _replenLevel; } set { _replenLevel = value; InvokePropertyChanged(nameof(ReplenLevel)); } }
 
         #endregion