123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.Routine;
- using MECF.Framework.Common.Routine;
- using CyberX8_Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Aitex.Core.RT.SCCore;
- namespace CyberX8_RT.Devices.LinMot
- {
-
- public class LinMotStartContinueCurveRoutine : RoutineBase, IRoutine
- {
- private enum LinMotStartContinueStep
- {
- WriteCurveIdRam,
- CurveIdDelay,
- WriteAmplitudeRam,
- AmplitudeDelay,
- WriteTimeScaleRam,
- Delay,
- CommandTable,
- CommandTableDelay,
- CommandTableCheckRun,
- ReCommandTable,
- End
- }
- #region 内部变量
- private LinMotAxis _axis;
- private int _speed;
- /// <summary>
- /// Linmot检测运动时间
- /// </summary>
- private int _holdoffMilliseconds = 5000;
- /// <summary>
- /// 是否运动
- /// </summary>
- private bool _isRun = false;
- #endregion
- public LinMotStartContinueCurveRoutine(string module,LinMotAxis axis) : base(module)
- {
- _axis = axis;
- }
- public void Abort()
- {
- Runner.Stop("Manual Abort");
- }
- public RState Monitor()
- {
- //Runner.Run(LinMotStartContinueStep.WriteCurveIdRam, () => { return _axis.WriteRamIntValue(0xC8, 0x14, 1); }, 100)
- // .Delay(LinMotStartContinueStep.CurveIdDelay, 200)
- Runner.Run(LinMotStartContinueStep.WriteAmplitudeRam, () => { return _axis.WriteRamIntValue(0xCA, 0x14, 50 * 10); }, 100)
- .Delay(LinMotStartContinueStep.AmplitudeDelay, 100)
- .Run(LinMotStartContinueStep.WriteTimeScaleRam, () => { return _axis.WriteRamIntValue(0xCB,0x14,_speed*100); }, 100)
- .Delay(LinMotStartContinueStep.Delay, 100)
- .Run(LinMotStartContinueStep.CommandTable, () => { return _axis.SendCommandTableOperation(1); },_delay_1ms)
- .Delay(LinMotStartContinueStep.CommandTableDelay,500)
- .Run(LinMotStartContinueStep.CommandTableCheckRun, () => { _isRun = _axis.IsMotorOn; return true; },_delay_1ms)
- .RunIf(LinMotStartContinueStep.ReCommandTable,!_isRun, () => { return _axis.SendCommandTableOperation(1); },
- () => _axis.IsMotorOn,_holdoffMilliseconds-_delay_1s)
- .End(LinMotStartContinueStep.End, NullFun);
- return Runner.Status;
- }
- public RState Start(params object[] objs)
- {
- _speed = (int)(objs[0]);
- if (!CheckPreCondition())
- {
- return RState.Failed;
- }
- if (SC.ContainsItem("Linmot.LinmotHoldoffMilliseconds"))
- {
- _holdoffMilliseconds = SC.GetValue<int>("Linmot.LinmotHoldoffMilliseconds");
- }
- _isRun = false;
- return Runner.Start(Module, "Start Curve");
- }
- /// <summary>
- /// 前置条件
- /// </summary>
- /// <returns></returns>
- private bool CheckPreCondition()
- {
- if (!_axis.IsSwitchOn)
- {
- LOG.WriteLog(eEvent.ERR_LINMOT, Module, "axis is not switch on");
- return false;
- }
- if (!_axis.IsHomed)
- {
- LOG.WriteLog(eEvent.ERR_LINMOT, Module, "axis is not homed");
- return false;
- }
- if (!_axis.IsConnectd)
- {
- LOG.WriteLog(eEvent.ERR_LINMOT, Module, "axis is not connected");
- return false;
- }
- if (_axis.IsError)
- {
- LOG.WriteLog(eEvent.ERR_LINMOT, Module, "axis is in error");
- return false;
- }
- return true;
- }
- }
- }
|