/// <summary> /// 輸入Robot設定PNS name, 讀取並執行PNS /// e.q. PNS0101 /// </summary> /// <param name="PNSname"></param> public bool ExecutePNS(string PNSname) { Array UI = new short[18]; Array UOInfo = new short[18]; MvRobotUIOParameter UIO = new MvRobotUIOParameter(); String PNScode; if (PNSname.Length == 7 && PNSname.Substring(0, 3) == "PNS") { PNScode = Convert.ToString(Convert.ToInt32(PNSname.Substring(5)), 2); PNScode = PNScode.PadLeft(8, '0'); } else { throw new System.ArgumentException("PNS Name is NOT match Rule; PNS name:" + PNSname); } //Write Default UI Setting UI.SetValue(UIO.UI1_IMSTP, 0); UI.SetValue(UIO.UI2_HOLD, 1); UI.SetValue(UIO.UI3_SFSPD, 2); UI.SetValue(UIO.UI4_CycleStop, 3); UI.SetValue(UIO.UI5_FaultReset_NEGEDGE, 4); UI.SetValue(UIO.UI6_Start_NEGEDGE_NoUsed, 5); UI.SetValue(UIO.UI7_Home_NoUSed, 6); UI.SetValue(UIO.UI8_ENABLE, 7); // Select PNS Code for (int idx = 0; idx < PNScode.Length; idx++) { UI.SetValue(Convert.ToInt16(PNScode.Substring(7 - idx, 1)), 8 + idx); } #region Program Start UI Request //Program Start UI timing Request //1. Trobe = 1 keep 30ms -> PNS讀取(<130ms) //2. ProdStart = 1; trobe =1 and ProdStart keep > 100ms //3. ProdStart = 0; trobe =1 and ProdStart = 0 , PROGRUN start in 35 ms //4. trobe = 0; Finish All back to 0 Array UI17_PNStrobe_ProgTiming = new short[4] { 1, 1, 1, 0 }; Array UI18_PNSstart_ProgTiming = new short[4] { 0, 1, 0, 0 }; for (int i = 0; i < 4; i++) { UI.SetValue(UI17_PNStrobe_ProgTiming.GetValue(i), 16); // PNStrobe UI.SetValue(UI18_PNSstart_ProgTiming.GetValue(i), 17); // ProdStart mobjCore.WriteSDO(1, ref UI, 18); Thread.Sleep(200); } #endregion // Excution Result alarm message return(PrgRunningCheck()); }
public void SystemRecoverAuto() { try { isUnderSystemRecoverAuto = true; //int UI1_IMSTP = 1; //Always ON. ON:Normal, OFF:Emergent Stop //int UI2_HOLD = 1; //Always ON. ON:Normal, OFF:PAUSE //int UI3_SFSPD = 1; //Always ON, ON:Normal, OFF:Safty Speed //int UI4_CycleStop = 0; //ON: [True]Abort, OFF: NA //int UI5_FaultReset_NEGEDGE = 1; //Negtive Edge trigger(1 ->0) //int UI6_Start_NEGEDGE_NoUsed = 1; //int UI7_Home_NoUSed = 0; //int UI8_ENABLE = 1; //Always ON, ON:ENavle Robot Action,OFF:Otherwise //Array UI9to16_PNS = new int[8]; //8bit PNS selection //int UI17_PNStrobe_POSEDGE = 0; //Positive Edge trigger(0 ->1) //int UI18_ProdStart = 0; //ON keep >100ms, then Off tonegtive trigger Array UO3_ProgRunnungValue = new short[1]; bool IsRestSUccess; //bool IsRWSucess = false; // 移除未使用的變數。by YMWANGN, 2016/11/17。 MvRobotUIOParameter UIO = new MvRobotUIOParameter(); Array UI = new short[18]; Array UOInfo = new short[18]; Array UI18_ProdStart = new short[1]; Array UI4_CycleStop = new short[1]; IsRestSUccess = AlarmReset(); UIO.UI17_PNStrobe_POSEDGE = 0; //UI[17]:________(30ms)Positive edge trigger(Keep 30ms ), then fetch PNS:10000000 UI.SetValue(UIO.UI1_IMSTP, 0); UI.SetValue(UIO.UI2_HOLD, 1); UI.SetValue(UIO.UI3_SFSPD, 2); UI.SetValue(UIO.UI4_CycleStop, 3); UI.SetValue(UIO.UI5_FaultReset_NEGEDGE, 4); UI.SetValue(UIO.UI6_Start_NEGEDGE_NoUsed, 5); UI.SetValue(UIO.UI7_Home_NoUSed, 6); UI.SetValue(UIO.UI8_ENABLE, 7); UI.SetValue(UIO.UI9to16_PNS.GetValue(0), 8); //PNS Code =10000000 UI.SetValue(UIO.UI9to16_PNS.GetValue(1), 9); UI.SetValue(UIO.UI9to16_PNS.GetValue(2), 10); UI.SetValue(UIO.UI9to16_PNS.GetValue(3), 11); UI.SetValue(UIO.UI9to16_PNS.GetValue(4), 12); UI.SetValue(UIO.UI9to16_PNS.GetValue(5), 13); UI.SetValue(UIO.UI9to16_PNS.GetValue(6), 14); UI.SetValue(UIO.UI9to16_PNS.GetValue(7), 15); UI.SetValue(UIO.UI17_PNStrobe_POSEDGE, 16); //UI[17]:___________ LOW first, Positive edge trigger(Keep 30ms ), thenfetch PNS:10000000 UI.SetValue(UIO.UI18_ProdStart, 17); // ___________ //UI[18]: (100ms)HIGH firs, negedge edge trigger(posedge keep 100ms first) mobjCore.WriteSDO(1, ref UI, 18); //Initial State mobjCore.ReadUO(1, ref UOInfo, 18); Thread.Sleep(200); UIO.UI6_Start_NEGEDGE_NoUsed = 1; //No use UIO.UI7_Home_NoUSed = 0; //No use // ________ UIO.UI17_PNStrobe_POSEDGE = 1; //UI[17]:________|(30ms)Positive edge trigger(Keep 30ms ), then fetch PNS:10000000 UIO.UI18_ProdStart = 1; // ________ //UI[18]: (100ms)|________negedge edge trigger(posedge keep 100ms first) UI.SetValue(UIO.UI1_IMSTP, 0); UI.SetValue(UIO.UI2_HOLD, 1); UI.SetValue(UIO.UI3_SFSPD, 2); UI.SetValue(UIO.UI4_CycleStop, 3); UI.SetValue(UIO.UI5_FaultReset_NEGEDGE, 4); UI.SetValue(UIO.UI6_Start_NEGEDGE_NoUsed, 5); UI.SetValue(UIO.UI7_Home_NoUSed, 6); UI.SetValue(UIO.UI8_ENABLE, 7); UI.SetValue(UIO.UI17_PNStrobe_POSEDGE, 16); UI.SetValue(UIO.UI18_ProdStart, 17); mobjCore.WriteSDO(1, UI, 17); mobjCore.ReadUO(1, ref UOInfo, 18); Thread.Sleep(200); if (Convert.ToInt32(UOInfo.GetValue(2).ToString()) == 1 || //Program is runnung Convert.ToInt32(UOInfo.GetValue(3).ToString()) == 1) //Program is paused { UI4_CycleStop.SetValue((short)1, 0); //Abort first mobjCore.WriteSDO(4, ref UI4_CycleStop, 1); Thread.Sleep(100); UI4_CycleStop.SetValue((short)0, 0); mobjCore.WriteSDO(4, ref UI4_CycleStop, 1); } UI18_ProdStart.SetValue((short)0, 0); //negedge edge trigger(posedgekeep 100ms first) mobjCore.WriteSDO(18, ref UI18_ProdStart, 1); Thread.Sleep(35); } finally { isUnderSystemRecoverAuto = false; } }