Example #1
0
 /// <summary>
 /// 相对运动 Trigger
 /// </summary>
 /// <param name="AxisNo">映射到实际的轴</param>
 /// <param name="Acc">加速度</param>
 /// <param name="Speed">速度</param>
 /// <param name="Distance">相对距离</param>
 /// <returns></returns>
 public bool MoveRel(int AxisNo, double Acc, double Speed, double Distance, EnumTriggerType TriggerType, double Interval)
 {
     lock (ComportLock)
     {
         try
         {
             if (AxisNo > 12 || AxisNo < 1)
             {
                 return(false);
             }
             SetMoveAcc(AxisNo, Acc);    //设置加速度
             int distancePuse = Convert.ToInt32(Distance * AxisStateList[AxisNo - 1].GainFactor);
             CommandMoveTrigger.TriggerType     = TriggerType == EnumTriggerType.ADC ? Enumcmd.HOST_CMD_MOVE_T_ADC : Enumcmd.HOST_CMD_MOVE_T_OUT;
             CommandMoveTrigger.AxisNo          = (byte)AxisNo;
             CommandMoveTrigger.Distance        = distancePuse;
             CommandMoveTrigger.SpeedPercent    = (byte)Speed;
             CommandMoveTrigger.TriggerInterval = (UInt16)(Interval * AxisStateList[AxisNo - 1].GainFactor);
             byte[] cmd = CommandMoveTrigger.ToBytes();
             this.ExcuteCmd(cmd);
             CheckAxisState(Enumcmd.HOST_CMD_MOVE, AxisNo);
             return(true);
         }
         catch (Exception ex)
         {
             return(false);
         }
     }
 }
Example #2
0
        /// <summary>
        /// 绝对运动,Trigger
        /// </summary>
        /// <param name="AxisNo">映射到实际的轴号</param>
        /// <param name="Acc">绝对运动加速度</param>
        /// <param name="Speed">速度</param>
        /// <param name="Pos">绝对位置</param>
        /// <returns></returns>
        public bool MoveAbs(int AxisNo, double Acc, double Speed, double Pos, EnumTriggerType TriggerType, double Interval)
        {
            try
            {
                if (AxisNo > 12 || AxisNo < 1)
                {
                    return(false);
                }
                double RelPos = 0;
                if (GetMcsuState(AxisNo, out AxisArgs axisArgs))
                {
                    if (axisArgs != null)
                    {
                        lock (axisArgs.AxisLock)
                        {
                            if (axisArgs.ErrorCode == 0 || axisArgs.ErrorCode == 0x83 || axisArgs.ErrorCode == 0x84)
                            {
                                RelPos = Pos - axisArgs.CurAbsPos / axisArgs.Unit.Factor;
                            }
                        }
                    }
                }
                else
                {
                    return(false);
                }

                return(MoveRel(AxisNo, Acc, Speed, RelPos, TriggerType, Interval));
                //return WaitLongChenck(AxisNo);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
        /// <summary>
        /// 绝对运动,Trigger
        /// </summary>
        /// <param name="AxisNo">映射到实际的轴号</param>
        /// <param name="Acc">绝对运动加速度</param>
        /// <param name="Speed">速度</param>
        /// <param name="Pos">绝对位置</param>
        /// <returns></returns>
        public bool MoveAbs(int AxisNo, double Acc, double Speed, double Pos, EnumTriggerType TriggerType, UInt16 Interval)
        {
            if (AxisNo > MAX_AXIS - MIN_AXIS || AxisNo < 0)
            {
                return(false);
            }
            int axisIndex = AxisNo + 1;

            return(_controller.MoveAbs(axisIndex, Acc, Speed, Pos, TriggerType, Interval));
        }
Example #4
0
        public static TriggerTemplate Create(EnumTriggerType iTriggerType)
        {
            TriggerTemplate trigTemplate = new TriggerTemplate(iTriggerType);

            string configOption = GetTriggerConfiguration(iTriggerType);

            var trigTemplateFile = ConfigurationManager.AppSettings["TriggerTemplateXML"];

            var doc = XDocument.Load(trigTemplateFile);

            trigTemplate.TriggerScriptDirective = (string)doc.Descendants("TriggerScriptDirective")
                                                  .Descendants("TriggerScript")
                                                  .First()
                                                  .Attribute("directive");

            var listOfConfiguration = doc.Descendants(configOption);



            trigTemplate.TriggerCreateSyntax = (string)listOfConfiguration.Descendants("TriggerCreateSyntax")
                                               .First()
                                               .Attribute("syntax");


            trigTemplate.TriggerBodySyntax = (string)listOfConfiguration.Descendants("TriggerBodySyntax")
                                             .First()
                                             .Attribute("syntax");


            trigTemplate.TriggerBodyCondition = (string)listOfConfiguration.Descendants("TriggerBodyCondition")
                                                .First()
                                                .Attribute("syntax");

            trigTemplate.InsertHistorytable = (string)listOfConfiguration.Descendants("Historytable")
                                              .First()
                                              .Attribute("flag")
            ;

            trigTemplate.HistoryTableInsert = (string)listOfConfiguration.Descendants("Historytable")
                                              .First()
                                              .Attribute("syntax")
            ;

            trigTemplate.HistoryTablequalifier = (string)listOfConfiguration.Descendants("Historytable")
                                                 .First()
                                                 .Attribute("qualifier")
            ;

            return(trigTemplate);
        }
        /// <summary>
        /// 相对运动 Trigger
        /// </summary>
        /// <param name="AxisNo">映射到实际的轴</param>
        /// <param name="Acc">加速度</param>
        /// <param name="Speed">速度</param>
        /// <param name="Distance">相对距离</param>
        /// <returns></returns>
        public bool MoveRel(int AxisNo, double Acc, double Speed, double Distance, EnumTriggerType TriggerType, UInt16 Interval)
        {
            if (AxisNo > MAX_AXIS - MIN_AXIS || AxisNo < 0)
            {
                return(false);
            }
            int axisIndex = AxisNo + 1;

            if (!IsPosValid(AxisNo, Distance))
            {
                throw new Exception($"Axis{AxisNo} can't reach the specified location");
            }
            return(_controller.MoveRel(axisIndex, Acc, Speed, Distance, TriggerType, Interval));
        }
Example #6
0
        private static string GetTriggerConfiguration(EnumTriggerType iTriggerType)
        {
            string configOption;

            switch (iTriggerType)
            {
            case EnumTriggerType.RowBeforeInsert:
                configOption = "RowBeforeInsert";
                break;

            case EnumTriggerType.RowAfterInsert:
                configOption = "RowAfterInsert";
                break;

            case EnumTriggerType.RowBeforeUpdate:
                configOption = "RowBeforeUpdate";
                break;

            case EnumTriggerType.RowAfterUpdate:
                configOption = "RowAfterUpdate";
                break;

            case EnumTriggerType.RowBeforeDelete:
                configOption = "RowBeforeDelete";
                break;

            case EnumTriggerType.RowAfterDelete:
                configOption = "RowAfterDelete";
                break;

            case EnumTriggerType.StatementBeforeInsert:
                configOption = "StatementBeforeInsert";
                break;

            case EnumTriggerType.StatementAfterInsert:
                configOption = "StatementAfterInsert";
                break;

            case EnumTriggerType.StatementBeforeUpdate:
                configOption = "StatementBeforeUpdate";
                break;

            case EnumTriggerType.StatementAfterUpdate:
                configOption = "StatementAfterUpdate";
                break;

            case EnumTriggerType.StatementBeforeDelete:
                configOption = "StatementBeforeDelete";
                break;

            case EnumTriggerType.StatementAfterDelete:
                configOption = "StatementAfterDelete";
                break;

            default:
                configOption = "Invalid";
                break;
            }

            return(configOption);
        }
Example #7
0
 public TriggerTemplate(EnumTriggerType iTriggerType)
 {
     TriggerType = iTriggerType;
 }
        /// <summary>
        /// MoveRel With trigger
        /// </summary>
        /// <param name="AxisNo"></param>
        /// <param name="Acc"></param>
        /// <param name="Speed"></param>
        /// <param name="Distance"></param>
        /// <param name="TriggerType">目前只支持一种Trig,就是ADCTrigger</param>
        /// <param name="Interval"></param>
        /// <returns></returns>
        public async Task <bool> MoveRel(int AxisNo, double Acc, double Speed, double Distance, EnumTriggerType TriggerType, double Interval)
        {
            if (!IsAxisInRange(AxisNo))
            {
                return(false);
            }
            int axisIndex = AxisNo + 1;

            if (!IsPosValid(AxisNo, Distance))
            {
                throw new Exception($"Axis{AxisNo} can't reach the specified location");
            }
            if (Enum.IsDefined(typeof(M12.Definitions.UnitID), axisIndex))
            {
                int    StepsInt     = (int)(Distance * AxisArgsList[AxisNo].GainFactor);
                byte   SpeedInt     = (byte)Speed;
                UInt16 IntervalUInt = (UInt16)(Interval * AxisArgsList[AxisNo].GainFactor);
                try
                {
                    _controller.MoveTriggerADC((M12.Definitions.UnitID)axisIndex, StepsInt, SpeedInt, IntervalUInt);
                }
                catch
                {
                    return(false);
                }
                return(true);
            }
            else
            {
                return(false);
            }
        }
 /// <summary>
 /// 绝对运动,Trigger
 /// </summary>
 /// <param name="AxisNo">映射到实际的轴号</param>
 /// <param name="Acc">绝对运动加速度</param>
 /// <param name="Speed">速度</param>
 /// <param name="Pos">绝对位置</param>
 /// <returns></returns>
 public async Task <bool> MoveAbs(int AxisNo, double Acc, double Speed, double Pos, EnumTriggerType TriggerType, UInt16 Interval)
 {
     return(await Task.Run(() =>
     {
         if (!IsAxisInRange(AxisNo))
         {
             return false;
         }
         int axisIndex = AxisNo + 1;
         if (Enum.IsDefined(typeof(M12.Definitions.UnitID), axisIndex))
         {
             var state = _controller.GetUnitState((M12.Definitions.UnitID)axisIndex);
             int CurPos = state.AbsPosition;
             int TargetPos = (int)(AxisArgsList[AxisNo].GainFactor *Pos);
             int StepsInt = TargetPos - CurPos;
             UInt16 IntervalPause = (UInt16)(Interval *AxisArgsList[AxisNo].GainFactor);
             try
             {
                 _controller.MoveTriggerADC((M12.Definitions.UnitID)(axisIndex), StepsInt, (byte)Speed, IntervalPause);
             }
             catch
             {
                 return false;
             }
         }
         return true;
     }));
 }