Преглед на файлове

Modify Transporter UI and Galil simulator;

niuyx преди 4 седмици
родител
ревизия
b633e65162

+ 17 - 0
CyberX8_MainPages/ViewModels/TransporterViewModel.cs

@@ -29,6 +29,7 @@ namespace CyberX8_MainPages.ViewModels
         private const string IS_SWITCH_ON = "IsSwitchOn";
         private const string IS_HOMED = "IsHomed";
         private const string IS_MOVING = "IsMoving";
+        private const string FORWARD_LIMIT = "ForwardLimit";
         #endregion
         #region 内部变量
 
@@ -59,6 +60,7 @@ namespace CyberX8_MainPages.ViewModels
         private bool _loaderGantryMoving;
         private bool _loaderElevatorMoving;
         private bool _loaderElevatorInUpPlace;
+        private bool _loaderElevatorJam;
 
         private string _loaderBarcode;
 
@@ -83,6 +85,7 @@ namespace CyberX8_MainPages.ViewModels
         private bool _processGantryMoving;
         private bool _processElevatorMoving;
         private bool _processElevatorInUpPlace;
+        private bool _processElevatorJam;
 
         private string _processBarcode;
 
@@ -129,6 +132,10 @@ namespace CyberX8_MainPages.ViewModels
         /// Loader Homed状态
         /// </summary>
         public bool LoaderTransporterIsHomed { get { return _loaderTransporterIsHomed; } set { SetProperty(ref _loaderTransporterIsHomed, value); } }
+        // <summary>
+        /// ForwarLimit(钢带信号)
+        /// </summary>
+        public bool LoaderElevatorJam { get { return _loaderElevatorJam; } set { SetProperty(ref _loaderElevatorJam, value); } }
         #endregion
 
         #region Process Transporter
@@ -160,6 +167,10 @@ namespace CyberX8_MainPages.ViewModels
         /// Process Homed状态
         /// </summary>
         public bool ProcessTransporterIsHomed { get { return _processTransporterIsHomed; } set { SetProperty(ref _processTransporterIsHomed, value); } }
+        /// <summary>
+        /// ForwarLimit(钢带信号)
+        /// </summary>
+        public bool ProcessElevatorJam { get { return _processElevatorJam; } set { SetProperty(ref _processElevatorJam, value); } }
         #endregion
 
         #endregion
@@ -210,6 +221,8 @@ namespace CyberX8_MainPages.ViewModels
                     LoaderElevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.{IS_MOVING}");
                     LoaderTransporterIsHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.{IS_HOMED}");
                     LoaderBarcode = CommonFunction.GetValue<string>(_rtDataValueDic, $"{LoaderBarcodeReaderDeviceName}.BarcodeValue");
+                    LoaderElevatorJam = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter2}.{FORWARD_LIMIT}");
+
                     ProcessTransporterData = CommonFunction.GetValue<TransporterData>(_rtDataValueDic, $"{ModuleName.Transporter1}.{TRANSPORTER_DATA}");
                     ProcessGantryMotorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_SWITCH_ON}");
                     ProcessGantryHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Gantry.{IS_HOMED}");
@@ -219,6 +232,8 @@ namespace CyberX8_MainPages.ViewModels
                     ProcessElevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.{IS_MOVING}");
                     ProcessTransporterIsHomed = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.{IS_HOMED}");
                     ProcessBarcode = CommonFunction.GetValue<string>(_rtDataValueDic, $"{ProcessBarcodeReaderDeviceName}.BarcodeValue");
+                    ProcessElevatorJam = CommonFunction.GetValue<bool>(_rtDataValueDic, $"{ModuleName.Transporter1}.{FORWARD_LIMIT}");
+
                     string loaderElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ModuleName.Transporter2}.Elevator.CurrentStation"), $"{ModuleName.Transporter2}.Elevator");
                     LoaderElevatorIsInUpPlace = "UP".Equals(loaderElevatorStation) ? true : false;
                     string processElevatorStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ModuleName.Transporter1}.Elevator.CurrentStation"), $"{ModuleName.Transporter1}.Elevator");
@@ -330,6 +345,7 @@ namespace CyberX8_MainPages.ViewModels
             _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{IS_SWITCH_ON}");
             _rtDataKeys.Add($"{ModuleName.Transporter1}.Gantry.{IS_MOVING}");
             _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{IS_MOVING}");
+            _rtDataKeys.Add($"{ModuleName.Transporter1}.Elevator.{FORWARD_LIMIT}");
             _rtDataKeys.Add($"{ModuleName.Transporter2}.{TRANSPORTER_DATA}");
             _rtDataKeys.Add($"{ModuleName.Transporter2}.{IS_HOMED}");
             _rtDataKeys.Add($"{ModuleName.Transporter2}.Gantry.{IS_HOMED}");
@@ -339,6 +355,7 @@ namespace CyberX8_MainPages.ViewModels
             _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.CurrentStation");
             _rtDataKeys.Add($"{ModuleName.Transporter2}.Gantry.{IS_MOVING}");
             _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.{IS_MOVING}");
+            _rtDataKeys.Add($"{ModuleName.Transporter2}.Elevator.{FORWARD_LIMIT}");
         }
     }
 }

+ 4 - 2
CyberX8_MainPages/Views/TransporterView.xaml

@@ -40,7 +40,8 @@
                                               FromSelectedItem="{Binding LoaderFromSelectedItem,Mode=TwoWay}" ToSelectedItem="{Binding LoaderToSelectedItem,Mode=TwoWay}"
                                               IsHomed="{Binding LoaderTransporterIsHomed}"
                                               BarcodeReaderDeviceName="{Binding LoaderBarcodeReaderDeviceName}"
-                                              IsElevatorInUpPlace ="{Binding  LoaderElevatorIsInUpPlace}">
+                                              IsElevatorInUpPlace ="{Binding  LoaderElevatorIsInUpPlace}"
+                                              ForwardLimit="{Binding LoaderElevatorJam}">
         </UserControls:TransporterDebugControl>
         <UserControls:TransporterDebugControl Grid.Row="1" Grid.Column="2" ModuleName="Transporter1" ModuleTitle="Process Transporter"
                                        Lock1On="{Binding ProcessTransporterData.Lock}" Lock2On="{Binding ProcessTransporterData.Lock}" Unlock1On="{Binding ProcessTransporterData.Lock,Converter={StaticResource boolTobool}}"
@@ -53,7 +54,8 @@
                                        FromSelectedItem="{Binding ProcessFromSelectedItem,Mode=TwoWay}" ToSelectedItem="{Binding ProcessToSelectedItem,Mode=TwoWay}"
                                        IsHomed="{Binding ProcessTransporterIsHomed}"
                                        BarcodeReaderDeviceName="{Binding ProcessBarcodeReaderDeviceName}"
-                                       IsElevatorInUpPlace ="{Binding  ProcessElevatorIsInUpPlace}">
+                                       IsElevatorInUpPlace ="{Binding  ProcessElevatorIsInUpPlace}"
+                                       ForwardLimit="{Binding ProcessElevatorJam}">
         </UserControls:TransporterDebugControl>
 
         <Canvas Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2">

+ 12 - 4
CyberX8_RT/Devices/AXIS/JetAxisBase.cs

@@ -57,6 +57,7 @@ namespace CyberX8_RT.Devices.AXIS
         private const string SOFTWARE_LIMIT_MINUS= "SoftwareLimitMinus";
         private const string SOFTWARE_LIMIT_PLUS = "SoftwareLimitPlus";
         private const string STOP_CODE = "StopCode";
+        private const string FORWARD_LIMIT = "ForwardLimit";
         #endregion
 
         #region 内部变量
@@ -407,6 +408,7 @@ namespace CyberX8_RT.Devices.AXIS
             DATA.Subscribe($"{Module}.{Name}.IsError",()=>IsError, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.{Name}.IsMoving", () => _isRun, SubscriptionAttribute.FLAG.IgnoreSaveDB);
             DATA.Subscribe($"{Module}.{Name}.IsRun", () => _isRun, SubscriptionAttribute.FLAG.IgnoreSaveDB);
+            DATA.Subscribe($"{Module}.{Name}.{FORWARD_LIMIT}", () => _isRun, SubscriptionAttribute.FLAG.IgnoreSaveDB);
         }
         /// <summary>
         /// 初始化操作
@@ -609,6 +611,7 @@ namespace CyberX8_RT.Devices.AXIS
             {
                 _isSwitchOn = MotionData.IsSwitchOn;
             }
+
         }
 
         /// <summary>
@@ -806,10 +809,11 @@ namespace CyberX8_RT.Devices.AXIS
         {
             GalilAxisSubscribeUpdateVariable(IS_SWITCH_ON);
             GalilAxisSubscribeUpdateVariable(STOP_CODE);
-            GalilAxisSubscribeUpdateVariable( MOTOR_POSITION);
-            GalilAxisSubscribeUpdateVariable( POSITION_ERROR);
-            GalilAxisSubscribeUpdateVariable( ACTUAL_TORQUE);
-            GalilAxisSubscribeUpdateVariable( ACTUAL_VELOCITY);
+            GalilAxisSubscribeUpdateVariable(MOTOR_POSITION);
+            GalilAxisSubscribeUpdateVariable(POSITION_ERROR);
+            GalilAxisSubscribeUpdateVariable(ACTUAL_TORQUE);
+            GalilAxisSubscribeUpdateVariable(ACTUAL_VELOCITY);
+            GalilAxisSubscribeUpdateVariable(FORWARD_LIMIT);
         }
 
         /// <summary>
@@ -872,6 +876,10 @@ namespace CyberX8_RT.Devices.AXIS
             {
                 MotionData.TorqueLimit = $"-{MotionData.NegativeTorqueLimit}/+{MotionData.PositiveTorqueLimit}";
             }
+            if(variable == FORWARD_LIMIT)
+            {
+                MotionData.FwdLimited = (bool)value;
+            }
         }
 
         /// <summary>

+ 7 - 0
CyberX8_Simulator/Devices/GalilSocketSimulator.cs

@@ -601,6 +601,8 @@ namespace CyberX8_Simulator.Devices
             _galilControlData.GalilAxisDatas[index].ReferencePosition = data.TargetPosition;
             _galilControlData.GalilAxisDatas[index].Torque = data.ActualTorque;
             _galilControlData.GalilAxisDatas[index].StopCode = data.StopCode;
+            _galilControlData.GalilAxisDatas[index].Switches = (byte)(_galilControlData.GalilAxisDatas[index].Switches & 0xF9
+                | ((data.ForwardLimit ? 1 : 0) << 3) | ((data.ReverseLimit ? 1 : 0) << 2));
         }
         /// <summary>
         /// 模拟器UI更新inputs数据
@@ -715,6 +717,11 @@ namespace CyberX8_Simulator.Devices
         {
             MotorSimulator.Instance.SetMotionData(_nameAxisList[axis - 'A'], HOMING_SIGNAL, true);
         }
+
+        public void SetForwardLimit()
+        {
+
+        }
         #endregion
     }
 }

+ 3 - 3
CyberX8_Themes/UserControls/TransporterDebugControl.xaml

@@ -80,9 +80,9 @@
                                 </Grid.RowDefinitions>
 
                             
-                                <!--<Label Content="Ready To Lock" Grid.Row="1" VerticalAlignment="Center"></Label>
-                                <Ellipse Grid.Row="1" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=ReadyToLock1On,Converter={StaticResource boolToColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="160,0,0,0"/>
-                                <Ellipse Grid.Row="1" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=ReadyToLock2On,Converter={StaticResource boolToColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="200,0,0,0"/>-->
+                                <Label Content="Jam" Grid.Row="2" VerticalAlignment="Center"></Label>
+                                <Ellipse Grid.Row="2" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=ReadyToLock1On,Converter={StaticResource boolToColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="180,0,0,0"/>
+
 
                                 <Label Content="WS Present" Grid.Row="1" VerticalAlignment="Center"></Label>
                                 <Ellipse Grid.Row="1" Width="16" Height="16"  Fill="{Binding ElementName=self,Path=WHPresent1,Converter={StaticResource boolToColor}}" Stroke="Silver" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="180,0,0,0"/>

+ 16 - 0
CyberX8_Themes/UserControls/TransporterDebugControl.xaml.cs

@@ -458,6 +458,22 @@ namespace CyberX8_Themes.UserControls
                 this.SetValue(IsElevatorInUpPlaceProperty, value);
             }
         }
+        public static readonly DependencyProperty ForwardLimitProperty = DependencyProperty.Register("ForwardLimit", typeof(bool), typeof(TransporterDebugControl),
+         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
+        /// <summary>
+        /// ForwardLimit
+        /// </summary>
+        public bool ForwardLimit
+        {
+            get
+            {
+                return (bool)this.GetValue(ForwardLimitProperty);
+            }
+            set
+            {
+                this.SetValue(ForwardLimitProperty, value);
+            }
+        }
         #endregion
         public TransporterDebugControl()
         {

+ 2 - 0
Framework/Common/Simulator/MotorSimulator.cs

@@ -350,6 +350,7 @@ namespace MECF.Framework.Common.Simulator
                         motionData.MotionSignal = false;
                         //motionData.MotionPhase = MotionPhase.Accelerating;
                         motionData.ActualPosition = fwdLimit ? motionData.FwdSoftLimit : motionData.TargetPosition;
+                        motionData.ForwardLimit = fwdLimit;
                         motionData.ActualVelocity = 0;
                     }
                 }
@@ -365,6 +366,7 @@ namespace MECF.Framework.Common.Simulator
                         motionData.MotionSignal = false;
                         //motionData.MotionPhase = MotionPhase.Accelerating;
                         motionData.ActualPosition = revLimit ? motionData.RevSoftLimit : motionData.TargetPosition;
+                        motionData.ReverseLimit = revLimit;
                         motionData.ActualVelocity = 0;
                     }
                 }

+ 14 - 0
Framework/Common/Simulator/SimulatorMotionData.cs

@@ -180,6 +180,18 @@ namespace MECF.Framework.Common.Simulator
             get { return _moduleName; }
             set { _moduleName = value; InvokePropertyChanged(nameof(ModuleName)); }
         }
+        [DataMember]
+        public bool ForwardLimit
+        {
+            get { return _forwardLimit; }
+            set { _forwardLimit = value; InvokePropertyChanged(nameof(ForwardLimit)); }
+        }
+        [DataMember]
+        public bool ReverseLimit
+        {
+            get { return _reverseLimit; }
+            set { _reverseLimit = value; InvokePropertyChanged(nameof(ReverseLimit)); }
+        }
         #endregion
 
         #region 内部变量
@@ -190,6 +202,8 @@ namespace MECF.Framework.Common.Simulator
         private bool _motionSignal;       
         private bool _stopSignal;
         private MotionPhase _motionPhase;
+        private bool _forwardLimit;
+        private bool _reverseLimit;
         #endregion
 
         private byte _stopCode;