| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | using Aitex.Core.Common.DeviceData;using Aitex.Core.RT.DataCenter;using Aitex.Core.RT.Device;using Aitex.Core.RT.Device.Unit;using Aitex.Core.RT.Fsm;using Aitex.Core.RT.Log;using Aitex.Core.Util;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;using System.Threading.Tasks;namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.WalkingAixs{    public class IOWalkingAxisHH :WalkingAxisBaseDevice    {        private R_TRIG _trigMonitorError = new R_TRIG();        public IOWalkingAxisHH(string module,string name,IoSensor[] dis,IoTrigger[] dos):base(module,name)        {            _diPosFeedback0 = dis[0];            _diPosFeedback1 = dis[1];            _diPosFeedback2 = dis[2];            _diReady = dis[3];            _diOnTarget = dis[4];            _diOnError = dis[5];            _diOnLeftLimit = dis[6];            _diOnRightLimit = dis[7];            _diHomeSensor = dis[8];            _doStartMoving = dos[0];            _doPosSet0 = dos[1];            _doPosSet1 = dos[2];            _doPosSet2 = dos[3];            _doHome = dos[4];            _doSetFree = dos[5];            _doStop = dos[6];            _doResetAlarm = dos[7];            _doJogFwd = dos[8];            _doJogRev = dos[9];            DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);        }        private readonly IoSensor _diPosFeedback0;        private readonly IoSensor _diPosFeedback1;        private readonly IoSensor _diPosFeedback2;        private readonly IoSensor _diReady;        private readonly IoSensor _diOnTarget;        private readonly IoSensor _diOnError;        private readonly IoSensor _diOnLeftLimit;        private readonly IoSensor _diOnRightLimit;        private readonly IoSensor _diHomeSensor;        private readonly IoTrigger _doStartMoving;        private readonly IoTrigger _doPosSet0;        private readonly IoTrigger _doPosSet1;        private readonly IoTrigger _doPosSet2;        private readonly IoTrigger _doHome;        private readonly IoTrigger _doSetFree;                private readonly IoTrigger _doStop;        private readonly IoTrigger _doResetAlarm;        private readonly IoTrigger _doJogFwd;        private readonly IoTrigger _doJogRev;        public override void Monitor()        {            _trigMonitorError.CLK = _diOnError.Value;            if (_trigMonitorError.Q)                 OnError(null);        }        protected override bool fStop(object[] param)        {                        _doStartMoving.SetTrigger(false, out _);            _doPosSet0.SetTrigger(false, out _);            _doPosSet1.SetTrigger(false, out _);            _doPosSet2.SetTrigger(false, out _);            _doHome.SetTrigger(false, out _);            _doSetFree.SetTrigger(false, out _);            _doStop.SetTrigger(true, out _);            _doResetAlarm.SetTrigger(false, out _);            _doJogFwd.SetTrigger(false, out _);            _doJogRev.SetTrigger(false, out _);            return base.fStop(param);        }        protected override bool fMonitorInit(object[] param)        {            if(_diHomeSensor.Value && _diOnTarget.Value && _diHomeSensor.Value && _diReady.Value)                OnActionDone(param);            return true;        }        protected override bool fMonitorMove(object[] param)        {            if (_diOnTarget.Value && _diReady.Value && GetCurrentStation() == TargetStation)                          OnActionDone(param);                       return true; ;        }        protected override bool fStartInit(object[] param)        {            _doStop.SetTrigger(false, out _);            _doJogRev.SetTrigger(false, out _);            _doJogFwd.SetTrigger(false, out _);            _doSetFree.SetTrigger(false, out _);            _doResetAlarm.SetTrigger(false, out _);            _doStartMoving.SetTrigger(false, out _);            _doHome.SetTrigger(true,out _);            return true;        }        protected override bool fInitComplete(object[] param)        {            _doHome.SetTrigger(false, out _);            return true;        }        protected override bool fStartMove(object[] param)        {            int stationIndex = (int)param[0];            if (stationIndex > 7 || stationIndex <0) return false;            _doPosSet0.SetTrigger((stationIndex & 0x1) == 0x1, out _);            _doPosSet1.SetTrigger((stationIndex & 0x2) == 0x2, out _);            _doPosSet2.SetTrigger((stationIndex & 0x4) == 0x4, out _);            Thread.Sleep(200);            _doStartMoving.SetTrigger(true, out _);            Thread.Sleep(500);            return true;        }        protected override bool fMoveComplete(object[] param)        {            _doStartMoving.SetTrigger(false, out _);            _doPosSet0.SetTrigger(false, out _);            _doPosSet1.SetTrigger(false, out _);            _doPosSet2.SetTrigger(false, out _);                        return true;        }        protected override bool fStartReset(object[] param)        {            _doStartMoving.SetTrigger(false, out _);            _doPosSet0.SetTrigger(false, out _);            _doPosSet1.SetTrigger(false, out _);            _doPosSet2.SetTrigger(false, out _);            _doHome.SetTrigger(false, out _);            _doSetFree.SetTrigger(false, out _);            _doStop.SetTrigger(false, out _);            //_doResetAlarm.SetTrigger(false, out _);            _doJogFwd.SetTrigger(false, out _);            _doJogRev.SetTrigger(false, out _);            _doResetAlarm.SetTrigger(true, out _);            Thread.Sleep(1000);            _doResetAlarm.SetTrigger(false, out _);            return true;        }        public override bool IsReady()        {            if (_diOnError.Value) return false;            if (_diOnLeftLimit.Value) return false;            if (_diOnRightLimit.Value) return false;            return base.IsReady();        }        public override int GetCurrentStation()        {            return (_diPosFeedback0.Value ? 1 : 0) + (_diPosFeedback1.Value ? 2 : 0) +                (_diPosFeedback2.Value ? 4 : 0);        }        private AITServoMotorData DeviceData        {            get            {                return new AITServoMotorData()                {                    DiPosFeedBack1 = _diPosFeedback0.Value,                    DiPosFeedBack2 = _diPosFeedback1.Value,                    DiPosFeedBack3 = _diPosFeedback2.Value,                    DiReady = _diReady.Value,                    DiOnTarget = _diOnTarget.Value,                    DiOnError = _diOnError.Value,                    DiOnLeftLimit = _diOnLeftLimit.Value,                    DiOnRightLimit = _diOnRightLimit.Value,                    DiOnHomeSensor = _diHomeSensor.Value,                    DoStart = _doStartMoving.Value,                    DoPos1 = _doPosSet0.Value,                    DoPos2 = _doPosSet1.Value,                    DoPos3 = _doPosSet2.Value,                    DoHomeOn = _doHome.Value,                    DoFreeOn = _doSetFree.Value,                    DoStop = _doStop.Value,                    DoReset = _doResetAlarm.Value,                    DoJogFwd = _doJogFwd.Value,                    DoJogRev = _doJogRev.Value,                    CurrentStatus = DeviceState.ToString(),                    //State = _state,                };            }        }    }}
 |