/// <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); } } }
/// <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)); }
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)); }
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); }
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; })); }