Procházet zdrojové kódy

1:添加buffer 正负极限报警
2:添加buffer serveron di
3:对接ELK02点位(buffer axis/z axis/r axis)
4:完成Boat position 1/2/3位置调整

git-svn-id: http://10.4.3.168:50001/svn/Furnace@64 dbcde07d-dcf5-c148-8a84-ac3097b7778e

Jiangjinyuan před 1 měsícem
rodič
revize
65e159b8e2

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1867 - 1868
Furnace/FurnaceRT/Config/IO/ELK/DeviceModelPM.xml


+ 2 - 2
Furnace/FurnaceRT/Config/IO/ELK/_ioDefinePM.xml

@@ -486,7 +486,7 @@
 		<DI_ITEM Index="3214" Name="" BufferOffset="3214" Addr="D200.14" Description="SpareE BoatRAxis" />
 		<DI_ITEM Index="3215" Name="" BufferOffset="3215" Addr="D200.15" Description="SpareF BoatRAxis" />
 
-		<DI_ITEM Index="3216" Name="DI_PwrBusyBufferAxis" BufferOffset="3216" Addr="D201.0" Description="Buffer servo power on doing" />
+		<DI_ITEM Index="3216" Name="DI_BufferPowerOn" BufferOffset="3216" Addr="D201.0" Description="Buffer servo power on" />
 		<DI_ITEM Index="3217" Name="DI_PwrErrBufferAxis" BufferOffset="3217" Addr="D201.1" Description="Buffer servo power error" />
 		<DI_ITEM Index="3218" Name="DI_StopBusyBufferAxis" BufferOffset="3218" Addr="D201.2" Description="Buffer servo stop doing" />
 
@@ -2799,7 +2799,7 @@
 		<AO_ITEM Index="6" Name="AO_BufferRotationDec" BufferOffset="8" Addr="D10016" Description="Buffer Rotation Dec"/>
 
 		<AO_ITEM Index="9" Name="AO_BoatPosition" BufferOffset="55" Addr="D10110" Description="Boat Position"/>
-		<AO_ITEM Index="10" Name="AO_BoatRotationSpeed" BufferOffset="56" Addr="D10112" Description="Boat Rotation Speed"/>
+		<AO_ITEM Index="10" Name="AO_BoatZAxisSpeed" BufferOffset="56" Addr="D10112" Description="Boat Z Speed"/>
 		<AO_ITEM Index="11" Name="AO_BoatRotationAcc" BufferOffset="57" Addr="D10114" Description="Boat Rotation Acc"/>
 		<AO_ITEM Index="12" Name="AO_BoatRotationDec" BufferOffset="58" Addr="D10116" Description="Boat Rotation Dec"/>
 

+ 22 - 4
Furnace/FurnaceRT/Devices/IoBufferMotor.cs

@@ -26,6 +26,7 @@ namespace FurnaceRT.Devices
             Stopping,
         }
         protected State _state = State.Idle;
+        protected DIAccessor _diServoOn;
         protected DIAccessor _diMoving;
         protected DIAccessor _diSensor1;
         protected DIAccessor _diSensor2;
@@ -37,6 +38,8 @@ namespace FurnaceRT.Devices
         protected DIAccessor _diSensor8;
         protected DIAccessor _diWarning;
         protected DIAccessor _diAlarm;
+        protected DIAccessor _diNegativeLimit;
+        protected DIAccessor _diPositiveLimit;
         protected DIAccessor _diPositionA1;
         protected DIAccessor _diPositionB1;
         protected DIAccessor _diPositionC1;
@@ -171,14 +174,15 @@ namespace FurnaceRT.Devices
         {
             get
             {
-                if (_doServoOn == null)
+                if (_diServoOn == null)
                     return true;
-                return _doServoOn.Value;
+                return _diServoOn.Value;
             }
         }
         public int TargetPositionFb => (int)(_aiTargetPosFb.FloatValue + 0.00001);
         public string ErrorCode => $"{(_aiDriverErrorCode != null ? ((int)(_aiDriverErrorCode.FloatValue + 0.00001)).ToString("X") : "")}/{(_aiMotionErrorCode != null ? ((int)(_aiMotionErrorCode.FloatValue + 0.00001)).ToString("X") : "")}";
-
+        private R_TRIG _negativeLimitTrig = new R_TRIG();
+        private R_TRIG _positiveLimitTrig = new R_TRIG();
         #endregion
 
         public IoBufferMotor(string module, XmlElement node, string ioModule = "")
@@ -191,7 +195,9 @@ namespace FurnaceRT.Devices
             _isFloatAioType = !string.IsNullOrEmpty(node.GetAttribute("aioType")) && (node.GetAttribute("aioType") == "float");
 
             var scRootPath = string.IsNullOrEmpty(node.GetAttribute("scRootPath")) ? Module : node.GetAttribute("scRootPath");
-
+            _diNegativeLimit = ParseDiNode("diNegativeLimit", node, ioModule);
+            _diPositiveLimit = ParseDiNode("diPositiveLimit", node, ioModule);
+            _diServoOn = ParseDiNode("diServoOn", node, ioModule);
             _diMoving = ParseDiNode("diMoving", node, ioModule);
             _diSensor1 = ParseDiNode("diSensor1", node, ioModule);
             _diSensor2 = ParseDiNode("diSensor2", node, ioModule);
@@ -325,6 +331,18 @@ namespace FurnaceRT.Devices
 
         public virtual void Monitor()
         {
+            if (_diNegativeLimit != null)
+            {
+                _negativeLimitTrig.CLK = _diNegativeLimit.Value;
+                if (_negativeLimitTrig.Q)
+                    EV.PostWarningLog(Module, $"{Module} {Name} at negative limit position");
+            }
+            if (_diPositiveLimit != null)
+            {
+                _positiveLimitTrig.CLK = _diPositiveLimit.Value;
+                if (_positiveLimitTrig.Q)
+                    EV.PostWarningLog(Module, $"{Module} {Name} at positive limit position");
+            }
             if (_diWarning != null)
             {
                 _warningTrig.CLK = _diWarning.Value;

+ 6 - 6
Furnace/FurnaceRT/Devices/IoFurnaceMotor.cs

@@ -649,7 +649,7 @@ namespace FurnaceRT.Devices
             {
                 case "Position1":
                     ServoMoveSpeedSet = speed > 0 ? speed : (float)_scServoMoveSpeed.DoubleValue;
-                    ServoMovePositionSet = 2;
+                    ServoMovePositionSet = 1;
                     //_doMove.SetValue(true, out reason);
                     _timer.Start(0);
                     _state = State.MoveToPosition;
@@ -657,7 +657,7 @@ namespace FurnaceRT.Devices
                 case "CapPosition":
                 case "Position2":
                     ServoMoveSpeedSet = speed > 0 ? speed : (float)_scServoMoveSpeed.DoubleValue;
-                    ServoMovePositionSet = 3;
+                    ServoMovePositionSet = 2;
                     //_doMove.SetValue(true, out reason);
                     _timer.Start(0);
                     _state = State.MoveToPosition;
@@ -665,7 +665,7 @@ namespace FurnaceRT.Devices
                 case "HomePosition":
                 case "Position3":
                     ServoMoveSpeedSet = speed > 0 ? speed : (float)_scServoMoveSpeed.DoubleValue;
-                    ServoMovePositionSet = 1;
+                    ServoMovePositionSet = 3;
                     //_doMove.SetValue(true, out reason);
                     _timer.Start(0);
                     _state = State.MoveToPosition;
@@ -753,11 +753,11 @@ namespace FurnaceRT.Devices
             int target = (int)(_aoTargetPosition.FloatValue + 0.0001);
             switch (target)
             {
-                case 2:
+                case 1:
                     return _diPosition1.Value;
-                case 3:
+                case 2:
                     return _diPosition2.Value;
-                case 1:
+                case 3:
                     return _diPosition3.Value;
             }
 

+ 23 - 22
Furnace/FurnaceRT/Equipments/PMs/PMModuleRecipeExecutor.cs

@@ -14,6 +14,7 @@ using System.Diagnostics;
 using System.IO;
 using System.Linq;
 using System.Xml;
+using static Aitex.Core.RT.Device.Unit.IoBoat;
 
 namespace FurnaceRT.Equipments.PMs
 {
@@ -22,7 +23,7 @@ namespace FurnaceRT.Equipments.PMs
         public bool IsMainRecipeComplete { get; set; }
         public bool IsHeaterProfile { get; set; }
         public bool IsHeaterProfileSuccess { get; set; }
-        public bool IsBoatMoveToLoadPosition{ get; private set; }
+        public bool IsBoatMoveToLoadPosition { get; private set; }
         public bool IsWaitBoatMoveComplete { get; private set; }
         private string _boatTargetPosition;
         private R_TRIG _profileTrig = new R_TRIG();
@@ -97,7 +98,7 @@ namespace FurnaceRT.Equipments.PMs
                         float.TryParse(paramArray[1], out float speed1);
                         float.TryParse(paramArray[2], out float speed2);
                         float.TryParse(paramArray[3], out float speed3);
-                        ZAxisDevice.SetServoMoveTo("Position2", out _, speed1);
+                        ZAxisDevice.SetServoMoveTo("Position1", out _, speed1);
                     }
                     break;
                 case "boatunload":
@@ -166,20 +167,20 @@ namespace FurnaceRT.Equipments.PMs
                 return false;
             }
             var paramArray = param[0].ToString().Split(';');
-            for(int i=0; i< paramArray.Length;i++)
+            for (int i = 0; i < paramArray.Length; i++)
             {
                 var item = paramArray[i];
                 if (string.IsNullOrEmpty(item))
                     continue;
                 var valveDatas = item.Split(',');
-                if(valveDatas != null && valveDatas.Length > 1)
+                if (valveDatas != null && valveDatas.Length > 1)
                 {
                     var valveName = valveDatas[0];
                     var valveSet = valveDatas[1];
                     if (valveSet == "Continue")
                         continue;
                     bool.TryParse(valveSet, out bool set);
-                    switch(valveName.ToUpper())
+                    switch (valveName.ToUpper())
                     {
                         case "F2CLN":
                             IsF2ClnOn = set;
@@ -276,7 +277,7 @@ namespace FurnaceRT.Equipments.PMs
                             }
                             break;
                     }
-     
+
                 }
             }
             LOG.Write($"SetValves exec time {stopwatch.ElapsedMilliseconds}");
@@ -304,7 +305,7 @@ namespace FurnaceRT.Equipments.PMs
                         float.TryParse(paramArray[3], out float speed3);
                         IsWaitBoatMoveComplete = true;
                         IsBoatMoveToLoadPosition = true;
-                        _boatTargetPosition = "Position2";
+                        _boatTargetPosition = BoatPosition.Position1.ToString();
                         //ZAxisDevice.SetServoMoveTo(_boatTargetPosition, out _, speed1);
                         boatModule.BoatMove("boatload", _boatTargetPosition, speed1);
                     }
@@ -316,14 +317,14 @@ namespace FurnaceRT.Equipments.PMs
                         float.TryParse(paramArray[2], out float speed2);
                         float.TryParse(paramArray[3], out float speed3);
                         IsWaitBoatMoveComplete = true;
-                        _boatTargetPosition = "Position3";
+                        _boatTargetPosition = BoatPosition.Position3.ToString();
                         //ZAxisDevice.SetServoMoveTo(_boatTargetPosition, out _, speed1);
                         boatModule.BoatMove("boatunload", _boatTargetPosition, speed1);
                     }
                     break;
                 case "boatloaderhome":
                     IsWaitBoatMoveComplete = true;
-                    _boatTargetPosition = "HomePosition";
+                    _boatTargetPosition = BoatPosition.HomePosition.ToString();
                     //ZAxisDevice.SetServoMoveTo(_boatTargetPosition, out _);
                     boatModule.BoatMove("boatloaderhome", _boatTargetPosition, 0);
                     break;
@@ -332,7 +333,7 @@ namespace FurnaceRT.Equipments.PMs
                     {
                         float.TryParse(paramArray[1], out float speed);
                         IsWaitBoatMoveComplete = true;
-                        _boatTargetPosition = "CapPosition";
+                        _boatTargetPosition = BoatPosition.CapPosition.ToString();
                         //ZAxisDevice.SetServoMoveTo(_boatTargetPosition, out _, speed);
                         boatModule.BoatMove("boatcap2", _boatTargetPosition, speed);
                     }
@@ -409,7 +410,7 @@ namespace FurnaceRT.Equipments.PMs
             var ret = true;
             foreach (var heater in _heaters)
             {
-                if(!heater.CheckWaitCondition(out string info))
+                if (!heater.CheckWaitCondition(out string info))
                 {
                     reason += $"{info} \n";
                     ret = false;
@@ -419,9 +420,9 @@ namespace FurnaceRT.Equipments.PMs
         }
         public void AbortRecipe()
         {
-            _processMFCs.ForEach(x=>x.Terminate());
-            _heaters.ForEach(x=>x.Terminate());
-            _valves.ForEach(x=>x.Terminate());
+            _processMFCs.ForEach(x => x.Terminate());
+            _heaters.ForEach(x => x.Terminate());
+            _valves.ForEach(x => x.Terminate());
             ZAxisDevice.ServoStop();
             RAxisDevice.ServoStop();
             APC.Terminate();
@@ -439,7 +440,7 @@ namespace FurnaceRT.Equipments.PMs
             {
                 IsHeaterProfile = true;
                 var ret = true;
-                foreach(var heater in _heaters)
+                foreach (var heater in _heaters)
                 {
                     if (!heater.CheckProfileFinish(out string info))
                     {
@@ -466,8 +467,8 @@ namespace FurnaceRT.Equipments.PMs
                 {
                     IsHeaterProfileSuccess = true;
                     _profileTrig.CLK = true;
-                    _heaters.ForEach(x=>x.DeviceData.ProfileStatus = "Normal End");
-                    _heaters.ForEach(x=>x.ProfileFinish());
+                    _heaters.ForEach(x => x.DeviceData.ProfileStatus = "Normal End");
+                    _heaters.ForEach(x => x.ProfileFinish());
                     if (_profileTrig.Q)
                         SaveHeaterProflieToCorrectTable(_heaters[0].CurrentCorrectFileName, _heaters[0].CurrentCorrectIndex);//更新profile table
                 }
@@ -507,7 +508,7 @@ namespace FurnaceRT.Equipments.PMs
             }
 
             XmlElement targetStepNode = nodeSteps[tableIndex - 1] as XmlElement;
-            if(targetStepNode != null)
+            if (targetStepNode != null)
             {
                 var correctionDataString = targetStepNode.GetAttribute("CorrectionData");
                 if (string.IsNullOrEmpty(correctionDataString))
@@ -524,7 +525,7 @@ namespace FurnaceRT.Equipments.PMs
                 }
 
                 List<string> newCorrectionDatas = new List<string>();
-                for (int i=0;i< correctionDatas.Length;i++)
+                for (int i = 0; i < correctionDatas.Length; i++)
                 {
                     var datas = correctionDatas[i];
                     var dataArry = datas.Split(';');
@@ -572,11 +573,11 @@ namespace FurnaceRT.Equipments.PMs
                     }
 
                     FurnaceRT.Devices.IoHeater heater = null;
-                    if(_heaters.Count > i)
+                    if (_heaters.Count > i)
                     {
                         heater = _heaters[i];
                     }
-                    if(heater != null)
+                    if (heater != null)
                     {
                         newCorrectionDatas.Add($"Index:{correctParameter.No};Name:{correctParameter.Name};ProfileTemp:{heater.DeviceData.HeaterPV};ProfileCorrect:{(heater.DeviceData.HeaterPV - heater.DeviceData.CascadePV).ToString("f1")};CascadeTCCorrect:{heater.DeviceData.CascadePV};ProfileTCCalib:{correctParameter.ProfileTCCalib}");
                         heater.DeviceData.ProfileResult = correctParameter.ProfileCorrect;
@@ -595,7 +596,7 @@ namespace FurnaceRT.Equipments.PMs
                     doc.Save(fileStream);
                 }
             }
-            
+
         }
         private bool SetAlarmConditionTable(object[] param)
         {

+ 3 - 4
Furnace/FurnaceSimulator/Config/ELK/_ioDefinePM.xml

@@ -443,7 +443,7 @@
 		<DI_ITEM Index="1909" Name="DI_FoupRobotStationAccessSignal" BufferOffset="1909" Addr="D119.5" Description="Foup robot station access signal" />
 		<DI_ITEM Index="1910" Name="DI_FoupRobotPedantMode" BufferOffset="1910" Addr="D119.6" Description="Foup robot pedant mode" />
 		<DI_ITEM Index="1911" Name="DI_FoupRobotEachHandWaferStatus" BufferOffset="1911" Addr="D119.7" Description="Foup robot each hand wafer status" />
-		<DI_ITEM Index="1912" Name="DI_FoupRobotAlarmSignal" BufferOffset="1912" Addr="D119.8" Description="Foup robot alarm signal" />
+		<DI_ITEM Index="1912" Name="DI_FOUPRobotAlarmSignal" BufferOffset="1912" Addr="D119.8" Description="Foup robot alarm signal" />
 		<DI_ITEM Index="1913" Name="DI_FoupRobotReserveDI1" BufferOffset="1913" Addr="D119.9" Description="Foup robot reserve DI1" />
 		<DI_ITEM Index="1914" Name="DI_FoupRobotReserveDI2" BufferOffset="1914" Addr="D119.10" Description="Foup robot reserve DI2" />
 		<DI_ITEM Index="1915" Name="DI_FoupRobotReserveDI3" BufferOffset="1915" Addr="D119.11" Description="Foup robot reserve DI3" />
@@ -486,7 +486,7 @@
 		<DI_ITEM Index="3214" Name="" BufferOffset="3214" Addr="D200.14" Description="SpareE BoatRAxis" />
 		<DI_ITEM Index="3215" Name="" BufferOffset="3215" Addr="D200.15" Description="SpareF BoatRAxis" />
 
-		<DI_ITEM Index="3216" Name="DI_PwrBusyBufferAxis" BufferOffset="3216" Addr="D201.0" Description="Buffer servo power on doing" />
+		<DI_ITEM Index="3216" Name="DI_BufferPowerOn" BufferOffset="3216" Addr="D201.0" Description="Buffer servo power on" />
 		<DI_ITEM Index="3217" Name="DI_PwrErrBufferAxis" BufferOffset="3217" Addr="D201.1" Description="Buffer servo power error" />
 		<DI_ITEM Index="3218" Name="DI_StopBusyBufferAxis" BufferOffset="3218" Addr="D201.2" Description="Buffer servo stop doing" />
 
@@ -702,7 +702,6 @@
 		<DI_ITEM Index="5283" Name="DI_MainWaterFlowAlarm" BufferOffset="5283" Addr="D330.3" Description="MainWaterFlowAlarm" />
 		<DI_ITEM Index="5284" Name="DI_BufferRemoteIOAlarm" BufferOffset="5284" Addr="D330.4" Description="BufferRemoteIOAlarm_b" />
 		<DI_ITEM Index="5285" Name="DI_APCCommAlarm" BufferOffset="5285" Addr="D330.5" Description="APC Comm Alarm" />
-	  <DI_ITEM Index="5285" Name="DI_APCCommAlarm" BufferOffset="5285" Addr="D330.5" Description="APC Comm Alarm" />
 
 		<DI_ITEM Index="5440" Name="DI_VAC1" BufferOffset="5440" Addr="D340.0" Description="VAC1" />
 		<DI_ITEM Index="5441" Name="DI_VAC2" BufferOffset="5441" Addr="D340.1" Description="VAC2" />
@@ -2800,7 +2799,7 @@
 		<AO_ITEM Index="6" Name="AO_BufferRotationDec" BufferOffset="8" Addr="D10016" Description="Buffer Rotation Dec"/>
 
 		<AO_ITEM Index="9" Name="AO_BoatPosition" BufferOffset="55" Addr="D10110" Description="Boat Position"/>
-		<AO_ITEM Index="10" Name="AO_BoatRotationSpeed" BufferOffset="56" Addr="D10112" Description="Boat Rotation Speed"/>
+		<AO_ITEM Index="10" Name="AO_BoatZAxisSpeed" BufferOffset="56" Addr="D10112" Description="Boat Z Speed"/>
 		<AO_ITEM Index="11" Name="AO_BoatRotationAcc" BufferOffset="57" Addr="D10114" Description="Boat Rotation Acc"/>
 		<AO_ITEM Index="12" Name="AO_BoatRotationDec" BufferOffset="58" Addr="D10116" Description="Boat Rotation Dec"/>
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1941 - 1495
Furnace/FurnaceSimulator/Config/_ioDefinePM.xml


+ 8 - 8
Furnace/FurnaceSimulator/Instances/SimulatorSystem.cs

@@ -898,24 +898,24 @@ namespace FurnaceSimulator.Instances
         {
             if ((int)(IO.AO[$"{module}.AO_BoatPosition"].FloatValue + 0.00001) == 1)
             {
-                IO.DI[$"{module}.DI_HmPosBoatZAxis"].Value = true;
-                IO.DI[$"{module}.DI_MiddlePos3BoatZAxis"].Value = true;
-                IO.DI[$"{module}.DI_MiddlePos1BoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_HmPosBoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_MiddlePos1BoatZAxis"].Value = true;
                 IO.DI[$"{module}.DI_MiddlePos2BoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_MiddlePos3BoatZAxis"].Value = false;
             }
             if ((int)(IO.AO[$"{module}.AO_BoatPosition"].FloatValue + 0.00001) == 2)
             {
                 IO.DI[$"{module}.DI_HmPosBoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_MiddlePos1BoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_MiddlePos2BoatZAxis"].Value = true;
                 IO.DI[$"{module}.DI_MiddlePos3BoatZAxis"].Value = false;
-                IO.DI[$"{module}.DI_MiddlePos1BoatZAxis"].Value = true;
-                IO.DI[$"{module}.DI_MiddlePos2BoatZAxis"].Value = false;
             }
             if ((int)(IO.AO[$"{module}.AO_BoatPosition"].FloatValue + 0.00001) == 3)
             {
-                IO.DI[$"{module}.DI_HmPosBoatZAxis"].Value = false;
-                IO.DI[$"{module}.DI_MiddlePos3BoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_HmPosBoatZAxis"].Value = true;
                 IO.DI[$"{module}.DI_MiddlePos1BoatZAxis"].Value = false;
-                IO.DI[$"{module}.DI_MiddlePos2BoatZAxis"].Value = true;
+                IO.DI[$"{module}.DI_MiddlePos2BoatZAxis"].Value = false;
+                IO.DI[$"{module}.DI_MiddlePos3BoatZAxis"].Value = true;
             }
 
             IO.AI[$"{module}.AI_BoatTargetPosFb"].FloatValue = IO.AO[$"{module}.AO_BoatPosition"].FloatValue;

+ 4 - 4
Furnace/FurnaceUI/Views/Maintenances/BoatRobotView.xaml

@@ -96,14 +96,14 @@
                     <TextBlock Text="At Position1" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="14"  VerticalAlignment="Center" />
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="5" Grid.Column="1">
-                    <deviceControl:AITSensor CustomColorOn="#FF07FF07" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding BoatZAxisAtPosition2}" EnableToolTip="False"/>
+                    <deviceControl:AITSensor CustomColorOn="#FF07FF07" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding BoatZAxisAtPosition1}" EnableToolTip="False"/>
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="5" Grid.Column="2" Grid.ColumnSpan="2">
                     <Button Content="Move To Position1" Width="150" Height="30" Margin="0,0,10,0" IsEnabled="{Binding IsSystemStaus}">
                         <i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="MoveTo">
-                                    <cal:Parameter Value="Position2" />
+                                    <cal:Parameter Value="Position1" />
                                 </cal:ActionMessage>
                             </i:EventTrigger>
                         </i:Interaction.Triggers>
@@ -114,14 +114,14 @@
                     <TextBlock Text="At Position2" TextWrapping="Wrap" Foreground="{DynamicResource FG_Black}" FontSize="14"  VerticalAlignment="Center" />
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="6" Grid.Column="1">
-                    <deviceControl:AITSensor CustomColorOn="#FF07FF07" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding BoatZAxisAtPosition1}" EnableToolTip="False"/>
+                    <deviceControl:AITSensor CustomColorOn="#FF07FF07" IsCustomRender="True" CustomColorOff="Gray" LightOnValue="{Binding BoatZAxisAtPosition2}" EnableToolTip="False"/>
                 </Border>
                 <Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="0,0,1,1" Background="{DynamicResource Table_BG_Content}" Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2">
                     <Button Content="Move To Position2" Width="150" Height="30" Margin="0,0,10,0" IsEnabled="{Binding IsSystemStaus}">
                         <i:Interaction.Triggers>
                             <i:EventTrigger EventName="Click">
                                 <cal:ActionMessage MethodName="MoveTo">
-                                    <cal:Parameter Value="Position1" />
+                                    <cal:Parameter Value="Position2" />
                                 </cal:ActionMessage>
                             </i:EventTrigger>
                         </i:Interaction.Triggers>