Browse Source

revise gold power bug

chenzk 4 weeks ago
parent
commit
9b14a737d0

+ 9 - 9
CyberX8_RT/Config/Devices/PowerSupplierCfg.xml

@@ -1,30 +1,30 @@
 <?xml version="1.0" encoding="utf-8"?>
 <PowerSupplierConfig>
   <PowerSupplierDeviceConfig Name="Power1" IpAddress="192.168.0.239" Port="820" Type="1" SendTimeout="2000" RecvTimeout="2000" > 
-    <Device Name="Power1-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000000" UnitScale="10000"/>
+    <Device Name="Power1-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000000" UnitScale="1000000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power2" IpAddress="10.0.10.102" Port="820" Type="1" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power2-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000000" UnitScale="10000" />
+    <Device Name="Power2-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000000" UnitScale="1000000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power3" IpAddress="192.168.0.220" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power3-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power3-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power4" IpAddress="10.0.10.104" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power4-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power4-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power5" IpAddress="10.0.10.105" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power5-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power5-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power6" IpAddress="10.0.10.106" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000" > 
-    <Device Name="Power6-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power6-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power7" IpAddress="10.0.10.107" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="Power7-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power7-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="Power8" IpAddress="10.0.10.108" Port="820" Type="0" SendTimeout="2000" RecvTimeout="2000" > 
-    <Device Name="Power8-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="Power8-1" Address="1" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
   <PowerSupplierDeviceConfig Name="CMMPower1" IpAddress="127.0.10.1"  Port="505" Type="0" SendTimeout="2000" RecvTimeout="2000"> 
-    <Device Name="CMMPower1-1" Address="2" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" />
+    <Device Name="CMMPower1-1" Address="2" VoltageUnitSetScale ="1000" UnitSetScale="1000" UnitScale="10000" VoltageUnitScale="10000"/>
   </PowerSupplierDeviceConfig>
 </PowerSupplierConfig>

+ 7 - 2
CyberX8_RT/Devices/PowerSupplier/CellPowerSupplier.cs

@@ -102,10 +102,14 @@ namespace CyberX8_RT.Devices.PowerSupplier
         /// </summary>
         private DateTime _connectTime = DateTime.Now;
         /// <summary>
-        /// 读取数值比例
+        /// 读取电流数值比例
         /// </summary>
         private int _unitScale = 10000;
         /// <summary>
+        /// 读取电压数值比例
+        /// </summary>
+        private int _voltageUnitScale = 10000;
+        /// <summary>
         /// 设置数值比例
         /// </summary>
         private int _unitSetScale = 1000;
@@ -178,6 +182,7 @@ namespace CyberX8_RT.Devices.PowerSupplier
                 _unitScale = _deviceParameter.UnitScale;
                 _unitSetScale= _deviceParameter.UnitSetScale;
                 _voltageUnitSetScale = _deviceParameter.VoltageUnitSetScale;
+                _voltageUnitScale = _deviceParameter.VoltageUnitScale;
             }
             else
             {
@@ -244,7 +249,7 @@ namespace CyberX8_RT.Devices.PowerSupplier
                 {
                     if (double.TryParse(value.ToString(), out double doubleValue))
                     {
-                        property.SetValue(PowerSupplierData, doubleValue / _unitScale);
+                        property.SetValue(PowerSupplierData, doubleValue / _voltageUnitScale);
                     }
                     else
                     {

+ 34 - 3
CyberX8_RT/Devices/PowerSupplier/PowerSupplierStepRoutine.cs

@@ -42,6 +42,10 @@ namespace CyberX8_RT.Devices.PowerSupplier
         /// 等待时长
         /// </summary>
         private int _waitTime = 500;
+        /// <summary>
+        /// 输出时间
+        /// </summary>
+        private DateTime _outputTime = DateTime.MinValue;
         #endregion
         /// <summary>
         /// 构造函数
@@ -65,25 +69,52 @@ namespace CyberX8_RT.Devices.PowerSupplier
                 .Run(PowerSupplierStep.SwitchStepModel, () => { return _powerSupplier.SwitchPowerRunModel((int)PowerRunModelEnum.Step); }, () => { return _powerSupplier.PowerSupplierData.PowerRunModel == (int)PowerRunModelEnum.Step; }, _delay_2s)
                 .Run(PowerSupplierStep.WriteStepParameter, () => { return _powerSupplier.SetStepPeriod("", new object[] { "", _stepPeriodDatas }); }, NullFun, _delay_1ms)
                 .Run(PowerSupplierStep.StartStepParameter, () => { return _powerSupplier.StartStepPeriod((ushort)_stepPeriodDatas.Count, 1); }, NullFun, _delay_1ms)
-                .Run(PowerSupplierStep.EnableOutput, () => { return _powerSupplier.EnableOutput(); }, () => { return _powerSupplier.PowerSupplierData.Enabled; }, _delay_3s)
+                .Run(PowerSupplierStep.EnableOutput, EnableOutPut, () => { return _powerSupplier.PowerSupplierData.Enabled; }, _delay_3s)
                 .Delay(PowerSupplierStep.Delay, 1000)
-                .Wait(PowerSupplierStep.WaitStep, () => { return _powerSupplier.PowerSupplierData.Current == 0; }, _waitTime)
+                .Wait(PowerSupplierStep.WaitStep, CheckWaitTimeCurrentFinish, _waitTime)
                 .Run(PowerSupplierStep.LastCloseOutPut, () => { return _powerSupplier.DisableOutput(); }, () => { return !_powerSupplier.PowerSupplierData.Enabled; }, _delay_2s)
                 .Run(PowerSupplierStep.SwitchNormal, () => { return _powerSupplier.SwitchPowerRunModel((int)PowerRunModelEnum.Normal); }, () => { return _powerSupplier.PowerSupplierData.PowerRunModel == (int)PowerRunModelEnum.Normal; }, _delay_2s)
                 .End(PowerSupplierStep.End, NullFun, _delay_1ms);
             return Runner.Status;
         }
+        /// <summary>
+        /// 启动输出
+        /// </summary>
+        /// <returns></returns>
+        private bool EnableOutPut()
+        {
+            return _powerSupplier.EnableOutput();
+        }
+        /// <summary>
+        /// 校验时间电流是否为0
+        /// </summary>
+        /// <returns></returns>
+        private bool CheckWaitTimeCurrentFinish()
+        {
+            if (_outputTime == DateTime.MinValue)
+            {
+                _outputTime = DateTime.Now;
+                return false;
+            }
+            //waittime比总时间多出1000,上面delay1000,判定修后一步的最后1s是否为0电流
+            if (DateTime.Now.Subtract(_outputTime).TotalMilliseconds >= _waitTime-3000)
+            {
+                return _powerSupplier.PowerSupplierData.Current == 0;
+            }
+            return false;
+        }
 
         public RState Start(params object[] objs)
         {
             _powerSupplier = DEVICE.GetDevice<CellPowerSupplier>(Module);
             _stepPeriodDatas = (List<PowerSupplierStepPeriodData>)objs[1];
-            
+            _waitTime = 0;
             foreach(PowerSupplierStepPeriodData item in _stepPeriodDatas)
             {
                 _waitTime += (item.Hour * 3600 + item.Minute * 60 + item.Second) * 1000 + item.Microsecond;
             }
             _waitTime += 1 * 1000;//多增加1秒
+            _outputTime = DateTime.MinValue;
             return Runner.Start(Module, "PowerSupplier Step");
         }
     }

+ 2 - 0
Framework/Common/Device/PowerSupplier/PowerSupplierDevice.cs

@@ -35,6 +35,8 @@ namespace MECF.Framework.Common.Device.PowerSupplier
         public int UnitScale { get; set; }
         [XmlAttribute(AttributeName = "VoltageUnitSetScale", Form = XmlSchemaForm.Unqualified, DataType = "int")]
         public int VoltageUnitSetScale { get; set; }
+        [XmlAttribute(AttributeName = "VoltageUnitScale", Form = XmlSchemaForm.Unqualified, DataType = "int")]
+        public int VoltageUnitScale { get; set; }
         #endregion
     }
 }