Browse Source

update galil

chenkui 5 months ago
parent
commit
0231588bb5

+ 4 - 4
CyberX8_RT/Config/Devices/AxisProviderCfg.xml

@@ -5,7 +5,7 @@
     <!-- <Driver>Sim</Driver> -->
     <Units>deg</Units>
 	<!-- 1048576 cnts/rev 100:1 gearbox, 1 degree = 1048576*100 cnts/360 = 291271.1 cnts -->
-    <ScaleFactor>291271.1</ScaleFactor>
+    <ScaleFactor>1</ScaleFactor>
     <JogLimit>5</JogLimit>
 	<MinMoveTime>0.5</MinMoveTime>
     <Inputs>
@@ -17,7 +17,7 @@
     <Driver>Beckhoff</Driver>
     <!-- <Driver>Sim</Driver> -->
     <Units>deg</Units>
-    <ScaleFactor>291271.1</ScaleFactor>
+    <ScaleFactor>1</ScaleFactor>
     <JogLimit>5</JogLimit>
 	<MinMoveTime>0.5</MinMoveTime>
     <Inputs>
@@ -53,7 +53,7 @@
     <Driver>Beckhoff</Driver>
     <!-- <Driver>Sim</Driver> -->
     <Units>deg</Units>
-    <ScaleFactor>291271.1</ScaleFactor>
+    <ScaleFactor>1</ScaleFactor>
     <JogLimit>720</JogLimit>
 	<MinMoveTime>0.5</MinMoveTime>
     <Inputs>
@@ -65,7 +65,7 @@
     <Driver>Beckhoff</Driver>
     <!-- <Driver>Sim</Driver> -->
     <Units>deg</Units>
-    <ScaleFactor>291271.1</ScaleFactor>
+    <ScaleFactor>1</ScaleFactor>
     <JogLimit>720</JogLimit>
 	<MinMoveTime>0.5</MinMoveTime>
     <Inputs>

+ 100 - 0
CyberX8_RT/Config/Devices/GalilControllerCfg.xml

@@ -44,4 +44,104 @@
 		<PositiveTorqueLimit>20</PositiveTorqueLimit>
 	</GalilAxisConfig>
   </GalilDeviceConfig>
+	<GalilDeviceConfig Module="Loader1" IpAddress="10.0.0.20" Port="58679" SendTimeout="2000" RecvTimeout="2000">
+		<GalilAxisConfig Name="LSA" Index="0" Type="GalilLipsel">
+			<Speed>150000</Speed>
+			<Acceleration>200000</Acceleration>
+			<Deceleration>200000</Deceleration>
+			<HomingSpeed>30000</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>60000</HomingTimeOut>
+			<HomingAcceleration>200000</HomingAcceleration>
+			<HomingDeceleration>60000000</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="TiltA" Index="1" Type="Galil">
+			<Speed>150000</Speed>
+			<Acceleration>200000</Acceleration>
+			<Deceleration>200000</Deceleration>
+			<HomingSpeed>30000</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>60000</HomingTimeOut>
+			<HomingAcceleration>200000</HomingAcceleration>
+			<HomingDeceleration>10000000</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="SwingA" Index="2" Type="Galil">
+			<Speed>100</Speed>
+			<Acceleration>100</Acceleration>
+			<Deceleration>100</Deceleration>
+			<HomingSpeed>100</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>20000</HomingTimeOut>
+			<HomingAcceleration>100</HomingAcceleration>
+			<HomingDeceleration>100</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="Rotation" Index="3" Type="Galil">
+			<Speed>100</Speed>
+			<Acceleration>100</Acceleration>
+			<Deceleration>100</Deceleration>
+			<HomingSpeed>100</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>20000</HomingTimeOut>
+			<HomingAcceleration>100</HomingAcceleration>
+			<HomingDeceleration>100</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="LSB" Index="4" Type="GalilLipsel">
+			<Speed>150000</Speed>
+			<Acceleration>200000</Acceleration>
+			<Deceleration>200000</Deceleration>
+			<HomingSpeed>30000</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>60000</HomingTimeOut>
+			<HomingAcceleration>200000</HomingAcceleration>
+			<HomingDeceleration>60000000</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="TiltB" Index="5" Type="Galil">
+			<Speed>150000</Speed>
+			<Acceleration>200000</Acceleration>
+			<Deceleration>200000</Deceleration>
+			<HomingSpeed>30000</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>60000</HomingTimeOut>
+			<HomingAcceleration>200000</HomingAcceleration>
+			<HomingDeceleration>10000000</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+		<GalilAxisConfig Name="SwingB" Index="6" Type="Galil">
+			<Speed>100</Speed>
+			<Acceleration>100</Acceleration>
+			<Deceleration>100</Deceleration>
+			<HomingSpeed>100</HomingSpeed>
+			<HomingOffset>0</HomingOffset>
+			<HomingTimeOut>20000</HomingTimeOut>
+			<HomingAcceleration>100</HomingAcceleration>
+			<HomingDeceleration>100</HomingDeceleration>
+			<ReverseSoftwareLimit>-100</ReverseSoftwareLimit>
+			<ForwardSoftwareLimit>100</ForwardSoftwareLimit>
+			<NegativeTorqueLimit>130</NegativeTorqueLimit>
+			<PositiveTorqueLimit>20</PositiveTorqueLimit>
+		</GalilAxisConfig>
+	</GalilDeviceConfig>
 </GalilControllerConfig>

+ 22 - 22
CyberX8_RT/Config/Station/StationPositionsCfg.xml

@@ -39,22 +39,22 @@
         <Station Name="Loader1.SwingB.CAMERA" Position="20" />
       </Stations>
     </Axis>
-    <Axis Name="Loader1.CRSA" MaterialSize="300">
+    <Axis Name="Loader1.LSA" MaterialSize="300">
       <ToleranceDefault>0.01</ToleranceDefault>
       <Stations>
-        <Station Name="Loader1.CRSA.Setup300" Position="0" />
-        <Station Name="Loader1.CRSA.Lock300" Position="0.3" ModifiedDate="3/31/2015 7:39:05 PM" />
-        <Station Name="Loader1.CRSA.Unlock300" Position="-1.9" />
-        <Station Name="Loader1.CRSA.Clean300" Position="-360" />
+        <Station Name="Loader1.LSA.Setup300" Position="0" />
+        <Station Name="Loader1.LSA.Lock300" Position="0.3" ModifiedDate="3/31/2015 7:39:05 PM" />
+        <Station Name="Loader1.LSA.Unlock300" Position="-1.9" />
+        <Station Name="Loader1.LSA.Clean300" Position="-360" />
       </Stations>
     </Axis>
-    <Axis Name="Loader1.CRSB" MaterialSize="300">
+    <Axis Name="Loader1.LSB" MaterialSize="300">
       <ToleranceDefault>0.01</ToleranceDefault>
       <Stations>
-        <Station Name="Loader1.CRSB.Setup300" Position="0" />
-        <Station Name="Loader1.CRSB.Lock300" Position="0.3" ModifiedDate="4/27/2015 8:14:21 PM" />
-        <Station Name="Loader1.CRSB.Unlock300" Position="-1.9" />
-        <Station Name="Loader1.CRSB.Clean300" Position="-360" />
+        <Station Name="Loader1.LSB.Setup300" Position="0" />
+        <Station Name="Loader1.LSB.Lock300" Position="0.3" ModifiedDate="4/27/2015 8:14:21 PM" />
+        <Station Name="Loader1.LSB.Unlock300" Position="-1.9" />
+        <Station Name="Loader1.LSB.Clean300" Position="-360" />
       </Stations>
     </Axis>
     <Axis Name="Loader1.Rotation" MaterialSize="300">
@@ -80,8 +80,8 @@
     <Axis Name="Loader1.TiltB" MaterialSize="200">
       <ToleranceDefault>0.1</ToleranceDefault>
       <Stations>
-        <Station Name="Loader1.TiltB.HORI" Position="90.7" ModifiedDate="2024-08-13 14:39:48.548" />
-        <Station Name="Loader1.TiltB.VERT" Position="1.14" ModifiedDate="2024-06-21 10:37:50.049" />
+        <Station Name="Loader1.TiltB.HORI" Position="200000" ModifiedDate="2024-08-13 14:39:48.548" />
+        <Station Name="Loader1.TiltB.VERT" Position="0" ModifiedDate="2024-06-21 10:37:50.049" />
         <Station Name="Loader1.TiltB.FLOAT" Position="79" ModifiedDate="5/12/2015 12:51:37 AM" />
         <Station Name="Loader1.TiltB.FLIP" Position="-91.99525" ModifiedDate="12/10/2020 3:40:44 PM" />
       </Stations>
@@ -106,22 +106,22 @@
         <Station Name="Loader1.SwingB.CAMERA" Position="39" ModifiedDate="4/10/2018 8:35:55 PM" />
       </Stations>
     </Axis>
-    <Axis Name="Loader1.CRSA" MaterialSize="200">
+    <Axis Name="Loader1.LSA" MaterialSize="200">
       <ToleranceDefault>0.01</ToleranceDefault>
       <Stations>
-        <Station Name="Loader1.CRSA.Setup300" Position="0" />
-        <Station Name="Loader1.CRSA.Lock300" Position="0.2500008" ModifiedDate="3/2/2020 6:21:09 PM" />
-        <Station Name="Loader1.CRSA.Unlock300" Position="-2.251181" ModifiedDate="2/25/2020 2:54:29 PM" />
-        <Station Name="Loader1.CRSA.Clean300" Position="-360" />
+        <Station Name="Loader1.LSA.Setup300" Position="0" />
+        <Station Name="Loader1.LSA.Lock300" Position="0.2500008" ModifiedDate="3/2/2020 6:21:09 PM" />
+        <Station Name="Loader1.LSA.Unlock300" Position="-2.251181" ModifiedDate="2/25/2020 2:54:29 PM" />
+        <Station Name="Loader1.LSA.Clean300" Position="-360" />
       </Stations>
     </Axis>
-    <Axis Name="Loader1.CRSB" MaterialSize="200">
+    <Axis Name="Loader1.LSB" MaterialSize="200">
       <ToleranceDefault>0.01</ToleranceDefault>
       <Stations>
-        <Station Name="Loader1.CRSB.Setup300" Position="0" ModifiedDate="4/5/2018 5:25:08 PM" />
-        <Station Name="Loader1.CRSB.Lock300" Position="0.2465092" ModifiedDate="3/2/2020 6:21:21 PM" />
-        <Station Name="Loader1.CRSB.Unlock300" Position="-2.253547" ModifiedDate="2/24/2020 5:17:05 PM" />
-        <Station Name="Loader1.CRSB.Clean300" Position="-360" />
+        <Station Name="Loader1.LSB.Setup300" Position="0" ModifiedDate="4/5/2018 5:25:08 PM" />
+        <Station Name="Loader1.LSB.Lock300" Position="0.2465092" ModifiedDate="3/2/2020 6:21:21 PM" />
+        <Station Name="Loader1.LSB.Unlock300" Position="-2.253547" ModifiedDate="2/24/2020 5:17:05 PM" />
+        <Station Name="Loader1.LSB.Clean300" Position="-360" />
       </Stations>
     </Axis>
     <Axis Name="Loader1.Rotation" MaterialSize="200">

+ 3 - 117
CyberX8_RT/Devices/AXIS/Galil/GalilAxis.cs

@@ -56,7 +56,8 @@ namespace CyberX8_RT.Devices.AXIS.Galil
         /// </summary>
         protected override void InitializeParameter()
         {
-            //_accelerationRatio = 10000;
+            _accelerationRatio = 1;
+            _speedRatio = 1;
         }
         /// <summary>
         /// 初始化Routine
@@ -96,121 +97,6 @@ namespace CyberX8_RT.Devices.AXIS.Galil
         /// <param name="status"></param>
         public override void UpdateStatusWord(ushort status)
         {
-            if (status == 0)
-            {
-                _commandMotionData.Status = "Status Word is zero";
-                return;
-            }
-            byte bit0 = (byte)(status & 0b0001);
-            byte bit1 = (byte)((status & 0b0010) >> 1);
-            byte bit2 = (byte)((status & 0b0100) >> 2);
-            byte bit3 = (byte)((status & 0b1000) >> 3);
-            byte bit4 = (byte)((status & 0b10000) >> 4);
-            byte bit5 = (byte)((status & 0b100000) >> 5);
-            byte bit6 = (byte)((status & 0b1000000) >> 6);
-            byte bit7 = (byte)((status & 0b10000000) >> 7);
-            byte bit8 = (byte)((status & 0b100000000) >> 8);
-            byte bit9 = (byte)((status & 0b1000000000) >> 9);
-            byte bit10 = (byte)((status & 0b10000000000) >> 10);
-            byte bit11 = (byte)((status & 0b100000000000) >> 11);
-            byte bit12 = (byte)((status & 0b1000000000000) >> 12);
-            byte bit13 = (byte)((status & 0b10000000000000) >> 13);
-            byte bit14 = (byte)((status & 0b100000000000000) >> 14);
-            if (bit0 == 0 && bit1 == 0 && bit2 == 0 && bit3 == 0)
-            {
-                if (bit6 == 0)
-                {
-                    _commandMotionData.Status = "Not Ready to switch On";
-                }
-                else
-                {
-                    _commandMotionData.Status = "Switch On Disabled";
-                }
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 1 && bit2 == 0 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Ready to Switch On";
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 0 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Switched On";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Operation Enabled";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 0 && bit5 == 0 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Quick Stop Active";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Fault reaction active";
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 0 && bit1 == 0 && bit2 == 0 && bit3 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Fault";
-                UpdateSwitchOn(false);
-            }
-            if (bit3 == 1)
-            {
-                _isError = true;
-            }
-            else
-            {
-                _isError = false;
-            }
-            if (bit7 == 1)
-            {
-                _commandMotionData.Status = "Warning is occured";
-            }
-
-            if (bit4 == 0)
-            {
-                _commandMotionData.Status = "No Power";
-            }
-
-            if (_modeOfOperation == (byte)AxisModeOfOperation.HomingMode)
-            {
-                if (bit10 == 1 && bit12 == 1)
-                {
-                    _isHomed = true;
-                }
-                else
-                {
-                    _isHomed = false;
-                }
-            }
-            else if (_modeOfOperation == (byte)AxisModeOfOperation.ProfilePositionMode)
-            {
-                if (bit10 == 1)
-                {
-                    _inTargetPosition = true;
-                }
-            }
-        }
-        /// <summary>
-        /// 更新上电状态
-        /// </summary>
-        private void UpdateSwitchOn(bool isSwitchOn)
-        {
-            if (!_isSwitchOn && isSwitchOn)
-            {
-                _commandMotionData.IsSwitchOn = true;
-                ConfirmOperationState(MotionOperation.SwitchOn);
-            }
-            else if (_isSwitchOn && !isSwitchOn)
-            {
-                _commandMotionData.IsSwitchOn = false;
-                ConfirmOperationState(MotionOperation.SwitchOff);
-            }
-            _isSwitchOn = isSwitchOn;
         }
         /// <summary>
         /// EnableOperation
@@ -230,7 +116,7 @@ namespace CyberX8_RT.Devices.AXIS.Galil
                 return false;
             }
             MotionData.IsHomed = false;
-            _homeRoutine.Start(_homeTimeout, 0);
+            _homeRoutine.Start(_homeTimeout);
             IsHomeSwitchedTriggered = false;
             return true;
         }

+ 14 - 11
CyberX8_RT/Devices/AXIS/Galil/GalilHomeRoutine.cs

@@ -21,7 +21,9 @@ namespace CyberX8_RT.Devices.AXIS.Galil
             HomingSpeed,
             SetHomeModel,
             StartMotion,
+            Delay,
             CheckHomingEnd,
+            DP,
             End
         }
 
@@ -32,7 +34,6 @@ namespace CyberX8_RT.Devices.AXIS.Galil
         #region 内部变量
         private JetAxisBase _axis;
         private int _timeout = 5000;
-        private byte _homingMethod = 0;
         #endregion
         public GalilHomeRoutine(string module,JetAxisBase axis) : base(module)
         {
@@ -47,11 +48,14 @@ namespace CyberX8_RT.Devices.AXIS.Galil
         public RState Monitor()
         {
             Runner.Run(HomeStep.HomingAcceleration, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingAccel); }, _delay_1ms)
-                .Run(HomeStep.HomingDeceleration, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingAccel); }, _delay_1ms)
-                .Run(HomeStep.HomingSpeed, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingVelocity); }, _delay_1ms)
+                .Run(HomeStep.HomingDeceleration, () => { return _axis.WriteDeceleration((int)_axis.MotionData.FileDeceleration); }, _delay_1ms)
+                .Run(HomeStep.HomingSpeed, () => { return _axis.WriteSpeed((int)_axis.MotionData.FileHomingVelocity); }, _delay_1ms)
                 .Run(HomeStep.SetHomeModel, () => { return _axis.WriteHomeAxisCommand(); }, _delay_1ms)
                 .Run(HomeStep.StartMotion, () => { return _axis.WriteStartMotion(); }, _delay_1ms)
-                .WaitWithStopCondition(HomeStep.CheckHomingEnd, () => { return _axis.MotionData.StopCode == HOME_STOP_CODE&&!_axis.IsRun; },CheckErrorOrWarning,_timeout)
+                .Delay(HomeStep.Delay,500)
+                .WaitWithStopCondition(HomeStep.CheckHomingEnd, () => { 
+                    return _axis.MotionData.StopCode == HOME_STOP_CODE&&!_axis.IsRun; },CheckErrorOrWarning,_timeout)
+                .Run(HomeStep.DP, () => { return _axis.WriteDPZero(); }, _delay_1ms)
                 .End(HomeStep.End,NullFun,100);
             return Runner.Status;
         }
@@ -61,18 +65,17 @@ namespace CyberX8_RT.Devices.AXIS.Galil
         /// <returns></returns>
         private bool CheckErrorOrWarning()
         {
-            byte stopCode = _axis.MotionData.StopCode;
-            if (stopCode != 0 && stopCode != HOME_STOP_CODE)
-            {
-                LOG.WriteLog(eEvent.ERR_AXIS, Module, $"axis home stopcode is {stopCode}");
-                return true;
-            }
+            //byte stopCode = _axis.MotionData.StopCode;
+            //if (stopCode != 0 && stopCode != HOME_STOP_CODE)
+            //{
+            //    LOG.WriteLog(eEvent.ERR_AXIS, Module, $"axis home stopcode is {stopCode}");
+            //    return true;
+            //}
             return false;
         }
         public RState Start(params object[] objs)
         {
             _timeout = (int)objs[0];
-            _homingMethod = (byte)objs[1];
             return Runner.Start(Module, "Home");
         }
     }

+ 2 - 116
CyberX8_RT/Devices/AXIS/GalilLipsel/GalilLipselAxis.cs

@@ -55,7 +55,8 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         /// </summary>
         protected override void InitializeParameter()
         {
-            //_accelerationRatio = 10000;
+            _accelerationRatio = 1;
+            _speedRatio = 1;
         }
         /// <summary>
         /// 初始化Routine
@@ -95,121 +96,6 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         /// <param name="status"></param>
         public override void UpdateStatusWord(ushort status)
         {
-            if (status == 0)
-            {
-                _commandMotionData.Status = "Status Word is zero";
-                return;
-            }
-            byte bit0 = (byte)(status & 0b0001);
-            byte bit1 = (byte)((status & 0b0010) >> 1);
-            byte bit2 = (byte)((status & 0b0100) >> 2);
-            byte bit3 = (byte)((status & 0b1000) >> 3);
-            byte bit4 = (byte)((status & 0b10000) >> 4);
-            byte bit5 = (byte)((status & 0b100000) >> 5);
-            byte bit6 = (byte)((status & 0b1000000) >> 6);
-            byte bit7 = (byte)((status & 0b10000000) >> 7);
-            byte bit8 = (byte)((status & 0b100000000) >> 8);
-            byte bit9 = (byte)((status & 0b1000000000) >> 9);
-            byte bit10 = (byte)((status & 0b10000000000) >> 10);
-            byte bit11 = (byte)((status & 0b100000000000) >> 11);
-            byte bit12 = (byte)((status & 0b1000000000000) >> 12);
-            byte bit13 = (byte)((status & 0b10000000000000) >> 13);
-            byte bit14 = (byte)((status & 0b100000000000000) >> 14);
-            if (bit0 == 0 && bit1 == 0 && bit2 == 0 && bit3 == 0)
-            {
-                if (bit6 == 0)
-                {
-                    _commandMotionData.Status = "Not Ready to switch On";
-                }
-                else
-                {
-                    _commandMotionData.Status = "Switch On Disabled";
-                }
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 1 && bit2 == 0 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Ready to Switch On";
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 0 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Switched On";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 0 && bit5 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Operation Enabled";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 0 && bit5 == 0 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Quick Stop Active";
-                UpdateSwitchOn(true);
-            }
-            else if (bit0 == 1 && bit1 == 1 && bit2 == 1 && bit3 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Fault reaction active";
-                UpdateSwitchOn(false);
-            }
-            else if (bit0 == 0 && bit1 == 0 && bit2 == 0 && bit3 == 1 && bit6 == 0)
-            {
-                _commandMotionData.Status = "Fault";
-                UpdateSwitchOn(false);
-            }
-            if (bit3 == 1)
-            {
-                _isError = true;
-            }
-            else
-            {
-                _isError = false;
-            }
-            if (bit7 == 1)
-            {
-                _commandMotionData.Status = "Warning is occured";
-            }
-
-            if (bit4 == 0)
-            {
-                _commandMotionData.Status = "No Power";
-            }
-
-            if (_modeOfOperation == (byte)AxisModeOfOperation.HomingMode)
-            {
-                if (bit10 == 1 && bit12 == 1)
-                {
-                    _isHomed = true;
-                }
-                else
-                {
-                    _isHomed = false;
-                }
-            }
-            else if (_modeOfOperation == (byte)AxisModeOfOperation.ProfilePositionMode)
-            {
-                if (bit10 == 1)
-                {
-                    _inTargetPosition = true;
-                }
-            }
-        }
-        /// <summary>
-        /// 更新上电状态
-        /// </summary>
-        private void UpdateSwitchOn(bool isSwitchOn)
-        {
-            if (!_isSwitchOn && isSwitchOn)
-            {
-                _commandMotionData.IsSwitchOn = true;
-                ConfirmOperationState(MotionOperation.SwitchOn);
-            }
-            else if (_isSwitchOn && !isSwitchOn)
-            {
-                _commandMotionData.IsSwitchOn = false;
-                ConfirmOperationState(MotionOperation.SwitchOff);
-            }
-            _isSwitchOn = isSwitchOn;
         }
         /// <summary>
         /// EnableOperation

+ 30 - 8
CyberX8_RT/Devices/AXIS/GalilLipsel/GalilLipselHomeRoutine.cs

@@ -28,6 +28,7 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
             ForwardMotion,
             StartForwardMotion,
             CheckForwardMotion,
+            DP,
             End
         }
 
@@ -43,6 +44,8 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         private int _timeout = 5000;
         private double _motionPosition = 0;
         private GalilLipselStopPositionRoutine _stopRoutine;
+        private DateTime _stayTime=DateTime.Now;
+        private bool _isStay = false;
         #endregion
         /// <summary>
         /// 构造函数
@@ -63,8 +66,8 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         public RState Monitor()
         {
             Runner.Run(HomeStep.HomingAcceleration, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingAccel); }, _delay_1ms)
-                .Run(HomeStep.HomingDeceleration, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingAccel); }, _delay_1ms)
-                .Run(HomeStep.HomingSpeed, () => { return _axis.WriteAcceleration((int)_axis.MotionData.FileHomingVelocity); }, _delay_1ms)
+                .Run(HomeStep.HomingDeceleration, () => { return _axis.WriteDeceleration((int)_axis.MotionData.FileDeceleration); }, _delay_1ms)
+                .Run(HomeStep.HomingSpeed, () => { return _axis.WriteSpeed((int)_axis.MotionData.FileHomingVelocity); }, _delay_1ms)
                 .Run(HomeStep.ReversePrPosition, () => { return _axis.WriteReferencePosition(PR_POSITION); }, _delay_1ms)
                 .Run(HomeStep.StartMotion, () => { return _axis.WriteStartMotion(); }, _delay_1ms)
                 .WaitWithStopCondition(HomeStep.CheckMotion, CheckMotion,CheckErrorOrWarning,_timeout)
@@ -74,6 +77,7 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
                 .Run(HomeStep.ForwardMotion, () => { return _axis.WriteReferencePosition(RIGHT_PR_POSITION); }, _delay_1ms)
                 .Run(HomeStep.StartForwardMotion, () => { return _axis.WriteStartMotion(); }, _delay_1ms)
                 .WaitWithStopCondition(HomeStep.CheckForwardMotion, CheckRightMotionEnd, CheckErrorOrWarning, _timeout)
+                .Run(HomeStep.DP, () => { return _axis.WriteDPZero(); }, _delay_1ms)
                 .End(HomeStep.End,NullFun,100);
             return Runner.Status;
         }
@@ -91,6 +95,23 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
             if(_axis.MotionData.MotorPosition<_motionPosition)
             {
                 _motionPosition = _axis.MotionData.MotorPosition;
+                _isStay = false;
+                return false;
+            }
+            else if (_axis.MotionData.MotorPosition == _motionPosition)
+            {
+                if (!_isStay)
+                {
+                    _isStay = true;
+                    _stayTime = DateTime.Now;
+                }
+                else
+                {
+                    if (DateTime.Now.Subtract(_stayTime).TotalMilliseconds >= 1000)
+                    {
+                        return true;
+                    }
+                }
                 return false;
             }
             return true;
@@ -109,18 +130,19 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         /// <returns></returns>
         private bool CheckErrorOrWarning()
         {
-            byte stopCode = _axis.MotionData.StopCode;
-            if (stopCode != 0 && stopCode != MOTION_STOP_CODE)
-            {
-                LOG.WriteLog(eEvent.ERR_AXIS, Module, $"axis home stopcode is {stopCode}");
-                return true;
-            }
+            //byte stopCode = _axis.MotionData.StopCode;
+            //if (stopCode != 0 && stopCode != MOTION_STOP_CODE)
+            //{
+            //    LOG.WriteLog(eEvent.ERR_AXIS, Module, $"axis home stopcode is {stopCode}");
+            //    return true;
+            //}
             return false;
         }
         public RState Start(params object[] objs)
         {
             _timeout = (int)objs[0];
             _motionPosition = 0;
+            _isStay = false;
             return Runner.Start(Module, "Home");
         }
     }

+ 1 - 1
CyberX8_RT/Devices/AXIS/GalilLipsel/GalilLipselStopPositionRoutine.cs

@@ -75,7 +75,7 @@ namespace CyberX8_RT.Devices.AXIS.GalilLipsel
         {
             double scale = _rotationProviderAxis.ScaleFactor;
             _targetPosition = (int)Math.Ceiling(_axis.MotionData.MotorPosition * scale);
-            return _axis.WriteVariable(TARGET_POSITION, _targetPosition);
+            return _axis.WriteAbsolutePosition(_targetPosition);
         }
         public RState Start(params object[] objs)
         {

+ 19 - 0
CyberX8_RT/Devices/AXIS/JetAxisBase.cs

@@ -56,6 +56,7 @@ namespace CyberX8_RT.Devices.AXIS
         private const string MANUF_STATUS="ManufStatus";
         private const string SOFTWARE_LIMIT_MINUS= "SoftwareLimitMinus";
         private const string SOFTWARE_LIMIT_PLUS = "SoftwareLimitPlus";
+        private const string STOP_CODE = "StopCode";
         #endregion
 
         #region 内部变量
@@ -591,6 +592,10 @@ namespace CyberX8_RT.Devices.AXIS
                     property.SetValue(MotionData, value);
                 }
             }
+            if (variable == IS_SWITCH_ON)
+            {
+                _isSwitchOn = MotionData.IsSwitchOn;
+            }
         }
 
         /// <summary>
@@ -786,6 +791,7 @@ namespace CyberX8_RT.Devices.AXIS
         protected void SubscribeValueAction()
         {
             GalilAxisSubscribeUpdateVariable(IS_SWITCH_ON);
+            GalilAxisSubscribeUpdateVariable(STOP_CODE);
             GalilAxisSubscribeUpdateVariable( MOTOR_POSITION);
             GalilAxisSubscribeUpdateVariable( POSITION_ERROR);
             GalilAxisSubscribeUpdateVariable( ACTUAL_TORQUE);
@@ -1144,6 +1150,19 @@ namespace CyberX8_RT.Devices.AXIS
             return GalilControllerCfgManager.Instance.SetAxisCommand(Module, Name, "HM", null);
         }
         /// <summary>
+        /// 手动置零
+        /// </summary>
+        /// <returns></returns>
+        public bool WriteDPZero()
+        {
+            bool result= GalilControllerCfgManager.Instance.SetAxisCommand(Module, Name, "DP", 0);
+            if (result)
+            {
+                return GalilControllerCfgManager.Instance.SetAxisCommand(Module, Name, "DE", 0);
+            }
+            return false;
+        }
+        /// <summary>
         /// 写入控制字
         /// </summary>
         /// <param name="controlWord"></param>

+ 105 - 105
CyberX8_RT/Devices/Loader/LoaderTiltAxisInterLock.cs

@@ -46,114 +46,114 @@ namespace CyberX8_RT.Devices.Loader
         /// <exception cref="NotImplementedException"></exception>
         public bool CheckGotoPosition(string station)
         {
-            if (!_axis.IsHomed)
-            {
-                LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Name} is not home, Cannot execute GotoSavedPosition");
-                return false;
-            }
+            //if (!_axis.IsHomed)
+            //{
+            //    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{Name} is not home, Cannot execute GotoSavedPosition");
+            //    return false;
+            //}
 
-            //Puf vertical is park
-            if (ModuleHelper.IsInstalled(ModuleName.PUF1))
-            {
-                JetAxisBase puf1VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF1}.Vertical");
-                if (puf1VerticalAxis != null)
-                {
-                    double puf1VerticalPosition = puf1VerticalAxis.MotionData.MotorPosition;
-                    if (!puf1VerticalAxis.CheckPositionIsInStation(puf1VerticalPosition, "Park"))
-                    {
-                        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF1} {puf1VerticalPosition} is not in Park,  Cannot execute GotoSavedPosition");
-                        return false;
-                    }
-                }
-            }
-            if (ModuleHelper.IsInstalled(ModuleName.PUF2))
-            {
-                JetAxisBase puf2VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF2}.Vertical");
-                if (puf2VerticalAxis != null)
-                {
-                    double puf2VerticalPosition = puf2VerticalAxis.MotionData.MotorPosition;
-                    if (!puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Park"))
-                    {
-                        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF2} {puf2VerticalPosition} is not in Park,  Cannot execute GotoSavedPosition");
-                        return false;
-                    }
-                }
-            }
-            JetAxisBase swingAxis = null;
-            double swingPosition = 0;
-            if (Name == "TiltA")
-            {
-                swingAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingA");
-                swingPosition=swingAxis.MotionData.MotorPosition;
-                if (!swingAxis.IsSwitchOn)
-                {
-                    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingA is switch off");
-                    return false;
-                }
-                if (swingAxis.IsRun)
-                {
-                    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingA is running,Cannot execute GotoSavedPosition");
-                    return false;
-                }
-            }
-            else
-            {
-                swingAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingB");
-                swingPosition=swingAxis.MotionData.MotorPosition;
+            ////Puf vertical is park
+            //if (ModuleHelper.IsInstalled(ModuleName.PUF1))
+            //{
+            //    JetAxisBase puf1VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF1}.Vertical");
+            //    if (puf1VerticalAxis != null)
+            //    {
+            //        double puf1VerticalPosition = puf1VerticalAxis.MotionData.MotorPosition;
+            //        if (!puf1VerticalAxis.CheckPositionIsInStation(puf1VerticalPosition, "Park"))
+            //        {
+            //            LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF1} {puf1VerticalPosition} is not in Park,  Cannot execute GotoSavedPosition");
+            //            return false;
+            //        }
+            //    }
+            //}
+            //if (ModuleHelper.IsInstalled(ModuleName.PUF2))
+            //{
+            //    JetAxisBase puf2VerticalAxis = DEVICE.GetDevice<JetAxisBase>($"{ModuleName.PUF2}.Vertical");
+            //    if (puf2VerticalAxis != null)
+            //    {
+            //        double puf2VerticalPosition = puf2VerticalAxis.MotionData.MotorPosition;
+            //        if (!puf2VerticalAxis.CheckPositionIsInStation(puf2VerticalPosition, "Park"))
+            //        {
+            //            LOG.WriteLog(eEvent.ERR_LOADER, Module, $"{ModuleName.PUF2} {puf2VerticalPosition} is not in Park,  Cannot execute GotoSavedPosition");
+            //            return false;
+            //        }
+            //    }
+            //}
+            //JetAxisBase swingAxis = null;
+            //double swingPosition = 0;
+            //if (Name == "TiltA")
+            //{
+            //    swingAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingA");
+            //    swingPosition=swingAxis.MotionData.MotorPosition;
+            //    if (!swingAxis.IsSwitchOn)
+            //    {
+            //        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingA is switch off");
+            //        return false;
+            //    }
+            //    if (swingAxis.IsRun)
+            //    {
+            //        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingA is running,Cannot execute GotoSavedPosition");
+            //        return false;
+            //    }
+            //}
+            //else
+            //{
+            //    swingAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.SwingB");
+            //    swingPosition=swingAxis.MotionData.MotorPosition;
 
-                if (!swingAxis.IsSwitchOn)
-                {
-                    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingB is switch off");
-                    return false;
-                }
+            //    if (!swingAxis.IsSwitchOn)
+            //    {
+            //        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingB is switch off");
+            //        return false;
+            //    }
 
-                if (swingAxis.IsRun)
-                {
-                    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingB is running,Cannot execute GotoSavedPosition");
-                    return false;
-                }
-            }
-            JetAxisBase rotationAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Rotation");
-            if (!rotationAxis.IsSwitchOn)
-            {
-                LOG.WriteLog(eEvent.ERR_LOADER, Module, $"rotation is switch off");
-                return false;
-            }
-            if (rotationAxis.IsRun)
-            {
-                LOG.WriteLog(eEvent.ERR_LOADER, Module, $"rotation is running,Cannot execute GotoSavedPosition");
-                return false;
-            }
-            if(swingAxis.CheckPositionIsEmpty(swingPosition))
-            {
-                return true;
-            }
-            //Swing在CLOSED,不可以去某一Station
-            if (swingAxis.CheckPositionIsInStation(swingPosition, "CLOSED"))
-            {
-                //LOG.WriteLog(eEvent.ERR_LOADER, Module, "Swing is CLOSED, Cannot execute GotoSavedPosition");
-                //return false;
-                return true;
-            }
-            //Swing在OPEN/OPENB,除了FLIP外其他位置都可以去
-            if (swingAxis.CheckPositionIsInStation(swingPosition, "OPEN")||
-                swingAxis.CheckPositionIsInStation(swingPosition,"OPENB"))
-            {
-                if(station.EndsWith("FLIP"))
-                {
-                    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Swing {swingPosition} is OPEN/OPENB, Cannot Goto Flip");
-                    return false;
-                }
-                else
-                {
-                    return true;
-                }
-            }
-            //Swing在Clean
-            if(swingAxis.CheckPositionIsInStation(swingPosition,"CLEAN"))
-            {
-                return true;
-            }
+            //    if (swingAxis.IsRun)
+            //    {
+            //        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"SwingB is running,Cannot execute GotoSavedPosition");
+            //        return false;
+            //    }
+            //}
+            //JetAxisBase rotationAxis = DEVICE.GetDevice<JetAxisBase>($"{Module}.Rotation");
+            //if (!rotationAxis.IsSwitchOn)
+            //{
+            //    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"rotation is switch off");
+            //    return false;
+            //}
+            //if (rotationAxis.IsRun)
+            //{
+            //    LOG.WriteLog(eEvent.ERR_LOADER, Module, $"rotation is running,Cannot execute GotoSavedPosition");
+            //    return false;
+            //}
+            //if(swingAxis.CheckPositionIsEmpty(swingPosition))
+            //{
+            //    return true;
+            //}
+            ////Swing在CLOSED,不可以去某一Station
+            //if (swingAxis.CheckPositionIsInStation(swingPosition, "CLOSED"))
+            //{
+            //    //LOG.WriteLog(eEvent.ERR_LOADER, Module, "Swing is CLOSED, Cannot execute GotoSavedPosition");
+            //    //return false;
+            //    return true;
+            //}
+            ////Swing在OPEN/OPENB,除了FLIP外其他位置都可以去
+            //if (swingAxis.CheckPositionIsInStation(swingPosition, "OPEN")||
+            //    swingAxis.CheckPositionIsInStation(swingPosition,"OPENB"))
+            //{
+            //    if(station.EndsWith("FLIP"))
+            //    {
+            //        LOG.WriteLog(eEvent.ERR_LOADER, Module, $"Swing {swingPosition} is OPEN/OPENB, Cannot Goto Flip");
+            //        return false;
+            //    }
+            //    else
+            //    {
+            //        return true;
+            //    }
+            //}
+            ////Swing在Clean
+            //if(swingAxis.CheckPositionIsInStation(swingPosition,"CLEAN"))
+            //{
+            //    return true;
+            //}
             return true;
         }
        

+ 3 - 3
Framework/Common/Device/Galil/GalilAxisData.cs

@@ -71,9 +71,9 @@ namespace MECF.Framework.Common.Device.Galil
             Velocity = data.Velocity;
             Torque = data.Torque;
             Res = data.Res;
-            IsSwitchOn= IsSwitchOn;
-            ForwardLimit= ForwardLimit;
-            ReverseLimit= ReverseLimit;
+            IsSwitchOn= data.IsSwitchOn;
+            ForwardLimit= data.ForwardLimit;
+            ReverseLimit= data.ReverseLimit;
         }
     }
 }

+ 2 - 2
Framework/Common/Device/Galil/GalilControllerCfgManager.cs

@@ -201,7 +201,7 @@ namespace MECF.Framework.Common.Device.Galil
                 object targetValue = info.GetValue(targetData);
                 if (sourceValue.ToString() != targetValue.ToString())
                 {
-                    GalilAxisManager.Instance.UpdateIoValue(moduleName, targetValue);
+                    GalilAxisManager.Instance.UpdateIoValue($"{moduleName}.{info.Name}", targetValue);
                 }
             }
         }
@@ -237,7 +237,7 @@ namespace MECF.Framework.Common.Device.Galil
                 }
                 else
                 {
-                    strCommand = $"{commad};";
+                    strCommand = $"{commad}{axis};";
                 }
                 return _moduleGalilTcpDeviceDictionary[module].SetGalilCommand(strCommand);
             }

+ 4 - 0
Framework/Common/Device/Galil/GalilMessage.cs

@@ -137,6 +137,10 @@ namespace MECF.Framework.Common.Device.Galil
             {
                 ProtocolHeadBytesLength = 4;
             }
+            else
+            {
+                ProtocolHeadBytesLength = 1;
+            }
             return ASCIIEncoding.ASCII.GetBytes(data.SetData);     
         }
 

+ 6 - 2
Framework/Common/Device/Galil/GalilTcpDevice.cs

@@ -81,11 +81,11 @@ namespace MECF.Framework.Common.Device.Galil
             if (result.IsSuccess)
             {
                 ApplyAllDatas();
-                LOG.WriteLog(eEvent.INFO_FESTO, _module, $"connect {_ip}:{_port} success");
+                LOG.WriteLog(eEvent.INFO_GALIL, _module, $"connect {_ip}:{_port} success");
             }
             else
             {
-                LOG.WriteLog(eEvent.INFO_FESTO, _module, $"connect {_ip}:{_port} failed");
+                LOG.WriteLog(eEvent.INFO_GALIL, _module, $"connect {_ip}:{_port} failed");
             }
 
             _periodicJob.Start();
@@ -152,6 +152,10 @@ namespace MECF.Framework.Common.Device.Galil
                 WriteErrMsg($"write value {command.SetData} failed,{netResult.Message}");
                 return false;
             }
+            else
+            {
+                LOG.WriteLog(eEvent.INFO_GALIL, _module, $"write value {command.SetData} success");
+            }
             return true;
         }
         /// <summary>

+ 0 - 29
Framework/Common/TwinCat/BeckhoffIOManager.cs

@@ -247,35 +247,6 @@ namespace MECF.Framework.Common.TwinCat
             }
             return TwincatAdoManager.Instance.WriteValue(name, value);
         }
-        /// <summary>
-        /// 写入IO数值
-        /// </summary>
-        /// <param name="name"></param>
-        /// <param name="value"></param>
-        /// <returns></returns>
-        public bool WriteIoValueDINT(string name, object value)
-        {
-            if (ScalingManager.Instance.IsContained(name))
-            {
-                if (double.TryParse(value.ToString(), out var output))
-                {
-                    var result = ScalingManager.Instance.CalculateTwincatValueByInputDINT(name, output);
-                    if (result.Item1)
-                    {
-                        return TwincatAdoManager.Instance.WriteValue(name, result.Item2);
-                    }
-                    else
-                    {
-                        return TwincatAdoManager.Instance.WriteValue(name, value);
-                    }
-                }
-                else
-                {
-                    return TwincatAdoManager.Instance.WriteValue(name, value);
-                }
-            }
-            return TwincatAdoManager.Instance.WriteValue(name, value);
-        }
         #endregion
 
         #region 获取Accessor和Item