123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595 |
- 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.RT.OperationCenter;
- using Aitex.Core.RT.SCCore;
- 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);
- DATA.Subscribe($"{Name}.PosFeedBack0", () => _diPosFeedback0.Value);
- DATA.Subscribe($"{Name}.PosFeedBack1", () => _diPosFeedback1.Value);
- DATA.Subscribe($"{Name}.PosFeedBack2", () => _diPosFeedback2.Value);
- DATA.Subscribe($"{Name}.Ready", () => _diReady.Value);
- DATA.Subscribe($"{Name}.OnTarget", () => _diOnTarget.Value);
- DATA.Subscribe($"{Name}.OnError", () => _diOnError.Value);
- DATA.Subscribe($"{Name}.OnLeftLimit", () => _diOnLeftLimit.Value);
- DATA.Subscribe($"{Name}.OnRightLimit", () => _diOnRightLimit.Value);
- DATA.Subscribe($"{Name}.HomeSensor", () => _diHomeSensor.Value);
- DATA.Subscribe($"{Name}.DoStartMoving", () => _doStartMoving.Value);
- DATA.Subscribe($"{Name}.DoPosSet0", () => _doPosSet0.Value);
- DATA.Subscribe($"{Name}.DoPosSet1", () => _doPosSet1.Value);
- DATA.Subscribe($"{Name}.DoPosSet2", () => _doPosSet2.Value);
- DATA.Subscribe($"{Name}.DoHome", () => _doHome.Value);
- DATA.Subscribe($"{Name}.DoSetFree", () => _doSetFree.Value);
- DATA.Subscribe($"{Name}.DoStop", () => _doStop.Value);
- DATA.Subscribe($"{Name}.DoResetAlarm", () => _doResetAlarm.Value);
- DATA.Subscribe($"{Name}.DoJogFwd", () => _doJogFwd.Value);
- DATA.Subscribe($"{Name}.DoJogRev", () => _doJogRev.Value);
- DATA.Subscribe($"{Name}.Status", () => DeviceState.ToString());
- OP.Subscribe($"{Name}.SetDo", (method, args) =>
- {
- SetDo(method, args);
- return true;
- });
- }
- private void SetDo(string method, object[] args)
- {
- bool value = args[1].ToString() == "ON";
- switch(args[0])
- {
- case "_doStartMoving":
- _doStartMoving.SetTrigger(value, out _);
- break;
- case "_doPosSet0":
- _doPosSet0.SetTrigger(value, out _);
- break;
- case "_doPosSet1":
- _doPosSet1.SetTrigger(value, out _);
- break;
- case "_doPosSet2":
- _doPosSet2.SetTrigger(value, out _);
- break;
- case "_doHome":
- _doHome.SetTrigger(value, out _);
- break;
- case "_doSetFree":
- _doSetFree.SetTrigger(value, out _);
- break;
- case "_doStop":
- _doStop.SetTrigger(value, out _);
- break;
- case "_doResetAlarm":
- _doResetAlarm.SetTrigger(value, out _);
- break;
- case "_doJogFwd":
- _doJogFwd.SetTrigger(value, out _);
- break;
- case "_doJogRev":
- _doJogRev.SetTrigger(value, out _);
- break;
- }
-
- }
- 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("ErrorSignal");
- }
- 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)
- {
- IsBusy = false;
- if (_diHomeSensor.Value && _diOnTarget.Value && _diHomeSensor.Value && _diReady.Value)
- {
- _doHome.SetTrigger(false, out _);
- return true;
- }
-
- return false;
- }
- protected override bool fMonitorMove(object[] param)
- {
- IsBusy = false;
- if(_diOnTarget.Value && _diReady.Value && GetCurrentStation() == TargetStation)
- {
- _doStartMoving.SetTrigger(false, out _);
- //_doPosSet0.SetTrigger(false, out _);
- //_doPosSet1.SetTrigger(false, out _);
- //_doPosSet2.SetTrigger(false, out _);
- return true;
- }
- return false;
-
- }
- 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 _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- return true;
- }
- protected override bool fInitComplete(object[] param)
- {
- IsBusy = false;
- 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)
- {
- IsBusy = false;
- _doStartMoving.SetTrigger(false, out _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- return true;
- }
- protected override bool fStartReset(object[] param)
- {
- IsBusy = false;
- _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,
- };
- }
- }
- }
- public class IOWalkingAxisHHTd02 : WalkingAxisBaseDevice
- {
- private R_TRIG _trigMonitorError = new R_TRIG();
- public IOWalkingAxisHHTd02(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];
- _diHomeComplete = dis[6];
- _diMoveComplete = dis[7];
- _doStartMoving = dos[0];
- _doPosSet0 = dos[1];
- _doPosSet1 = dos[2];
- _doPosSet2 = dos[3];
- _doPause = dos[4];
- _doModeSelect = dos[5];
- _doResetAlarm = dos[6];
- _doJogRev = dos[7];
- DATA.Subscribe($"{Module}.{Name}.DeviceData", () => DeviceData);
- DATA.Subscribe($"{Name}.PosFeedBack0", () => _diPosFeedback0.Value);
- DATA.Subscribe($"{Name}.PosFeedBack1", () => _diPosFeedback1.Value);
- DATA.Subscribe($"{Name}.PosFeedBack2", () => _diPosFeedback2.Value);
- DATA.Subscribe($"{Name}.Ready", () => _diReady.Value);
- DATA.Subscribe($"{Name}.OnTarget", () => _diOnTarget.Value);
- DATA.Subscribe($"{Name}.OnError", () => _diOnError.Value);
- DATA.Subscribe($"{Name}.HomeSensor", () => _diHomeComplete.Value);
- DATA.Subscribe($"{Name}.MoveComplete", () => _diMoveComplete.Value);
- DATA.Subscribe($"{Name}.DoStartMoving", () => _doStartMoving.Value);
- DATA.Subscribe($"{Name}.DoPosSet0", () => _doPosSet0.Value);
- DATA.Subscribe($"{Name}.DoPosSet1", () => _doPosSet1.Value);
- DATA.Subscribe($"{Name}.DoPosSet2", () => _doPosSet2.Value);
- DATA.Subscribe($"{Name}.DoPause", () => _doPause.Value);
- DATA.Subscribe($"{Name}.DoModeSelect", () => _doModeSelect.Value);
- DATA.Subscribe($"{Name}.DoResetAlarm", () => _doResetAlarm.Value);
- DATA.Subscribe($"{Name}.DoJogRev", () => _doJogRev.Value);
- DATA.Subscribe($"{Name}.Status", () => DeviceState.ToString());
- OP.Subscribe($"{Name}.SetDo", (method, args) =>
- {
- SetDo(method, args);
- return true;
- });
- }
- private void SetDo(string method, object[] args)
- {
- bool value = args[1].ToString() == "ON";
- switch (args[0])
- {
- case "_doStartMoving":
- _doStartMoving.SetTrigger(value, out _);
- break;
- case "_doPosSet0":
- _doPosSet0.SetTrigger(value, out _);
- break;
- case "_doPosSet1":
- _doPosSet1.SetTrigger(value, out _);
- break;
- case "_doPosSet2":
- _doPosSet2.SetTrigger(value, out _);
- break;
- case "_doPause":
- _doPause.SetTrigger(value, out _);
- break;
- case "_doModeSelect":
- _doModeSelect.SetTrigger(value, out _);
- break;
-
- case "_doResetAlarm":
- _doResetAlarm.SetTrigger(value, out _);
- break;
- case "_doJogRev":
- _doJogRev.SetTrigger(value, out _);
- break;
- }
- }
- 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 _diHomeComplete;
- private readonly IoSensor _diMoveComplete;
- private readonly IoTrigger _doStartMoving;
- private readonly IoTrigger _doPosSet0;
- private readonly IoTrigger _doPosSet1;
- private readonly IoTrigger _doPosSet2;
- private readonly IoTrigger _doPause;
- private readonly IoTrigger _doModeSelect;
- private readonly IoTrigger _doResetAlarm;
- private readonly IoTrigger _doJogRev;
- public override void Monitor()
- {
- _trigMonitorError.CLK = !_diOnError.Value;
- if (_trigMonitorError.Q)
- OnError("ErrorSignal");
- }
- protected override bool fStop(object[] param)
- {
- _doStartMoving.SetTrigger(false, out _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- _doResetAlarm.SetTrigger(false, out _);
- _doJogRev.SetTrigger(false, out _);
- return base.fStop(param);
- }
- protected override bool fMonitorInit(object[] param)
- {
- IsBusy = false;
- if(DateTime.Now - _dtActionStart >TimeSpan.FromSeconds(TimeLimitHome))
- {
- OnError("InitTimeout");
- _doStartMoving.SetTrigger(false, out _);
- return true;
- }
- if (_diHomeComplete.Value)
- {
- _doStartMoving.SetTrigger(false, out _);
- return true;
- }
- return false;
- }
- protected override bool fMonitorMove(object[] param)
- {
- IsBusy = false;
- if (DateTime.Now - _dtActionStart > TimeSpan.FromSeconds(TimeLimitMove))
- {
- OnError("MoveTimeout");
- _doStartMoving.SetTrigger(false, out _);
- return true;
- }
- if (_diOnTarget.Value && _diReady.Value && GetCurrentStation() == TargetStation)
- {
- _doStartMoving.SetTrigger(false, out _);
- //_doPosSet0.SetTrigger(false, out _);
- //_doPosSet1.SetTrigger(false, out _);
- //_doPosSet2.SetTrigger(false, out _);
- return true;
- }
- return false;
- }
- protected override bool fStartInit(object[] param)
- {
- _doStartMoving.SetTrigger(false, out _);
- _doJogRev.SetTrigger(false, out _);
- _doResetAlarm.SetTrigger(false, out _);
- _doStartMoving.SetTrigger(false, out _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- _doModeSelect.SetTrigger(true, out _);
- Thread.Sleep(200);
- _doStartMoving.SetTrigger(true, out _);
- _dtActionStart = DateTime.Now;
- return true;
- }
- protected override bool fInitComplete(object[] param)
- {
- IsBusy = false;
- return true;
- }
- protected override bool fStartMove(object[] param)
- {
- _dtActionStart = DateTime.Now;
- 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 _);
- _doModeSelect.SetTrigger(true, out _);
- Thread.Sleep(200);
- _doStartMoving.SetTrigger(true, out _);
- Thread.Sleep(500);
- return true;
- }
- protected override bool fMoveComplete(object[] param)
- {
- IsBusy = false;
- _doStartMoving.SetTrigger(false, out _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- return true;
- }
- protected override bool fStartReset(object[] param)
- {
- IsBusy = false;
- _doStartMoving.SetTrigger(false, out _);
- _doPosSet0.SetTrigger(false, out _);
- _doPosSet1.SetTrigger(false, out _);
- _doPosSet2.SetTrigger(false, out _);
- //_doResetAlarm.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 (!_diReady.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,
- DiOnHomeSensor = _diHomeComplete.Value,
- DoStart = _doStartMoving.Value,
- DoPos1 = _doPosSet0.Value,
- DoPos2 = _doPosSet1.Value,
- DoPos3 = _doPosSet2.Value,
- DoReset = _doResetAlarm.Value,
- DoJogRev = _doJogRev.Value,
- CurrentStatus = DeviceState.ToString(),
- //State = _state,
- };
- }
- }
- }
- }
|