123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using Aitex.Core.Common;
- using Aitex.Core.RT.DataCenter;
- using Aitex.Core.RT.Device;
- using Aitex.Core.RT.Device.Unit;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.Fsm;
- using Aitex.Core.RT.OperationCenter;
- using Aitex.Core.RT.Routine;
- using Aitex.Core.RT.SCCore;
- using Aitex.Core.Utilities;
- using Aitex.Sorter.Common;
- using MECF.Framework.Common.Alarms;
- using MECF.Framework.Common.Equipment;
- using MECF.Framework.Common.Event;
- using MECF.Framework.Common.Schedulers;
- using MECF.Framework.Common.SubstrateTrackings;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
- using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.RobotBase;
- using FurnaceRT.Equipments.Systems;
- using FurnaceRT.Devices;
- using IoDoor = FurnaceRT.Devices.IoDoor;
- using Aitex.Core.Util;
- namespace FurnaceRT.Equipments.CarrierRobots
- {
- public partial class CarrierRobotModule
- {
- private List<AlarmEventItem> _triggeredAlarmList = new List<AlarmEventItem>();
- private int _alarmNumber;
- public IoTrigger TrigActionCommand => _trigActionCommand;
- public RobotBaseDevice CarrierRobotDevice { get; set; }
- public IoBufferMotor BufferDevice { get; set; }
- private IoTrigger _trigAlarmReset;
- private IoTrigger _trigActionCommand;
- private IoAlarmSignal _alarmSignaRobotAlarm;
- private R_TRIG _alarmSignaRobotAlarmTrig = new R_TRIG();
- public IoDoor DoorDevice { get; set; }
- public IoAlarmSignal AlarmSignaFOUPRobotTPStatusWarning { get; set; }
- private Dictionary<string, int> _actionCommand;
- public void InitDevice()
- {
- CarrierRobotDevice = DEVICE.GetDevice<RobotBaseDevice>($"{Module}");
- BufferDevice = DEVICE.GetDevice<IoBufferMotor>($"PM1.BufferServo");
- DoorDevice = DEVICE.GetDevice<IoDoor>($"PM1.AGVDoor");
- AlarmSignaFOUPRobotTPStatusWarning = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaFOUPRobotTPStatusWarning");
- _alarmSignaRobotAlarm = DEVICE.GetDevice<IoAlarmSignal>($"PM1.AlarmSignaFOUPRobotAlarm");
- _trigAlarmReset = DEVICE.GetDevice<IoTrigger>($"PM1.TrigFOUPRobotAlarmReset");
- _trigActionCommand = DEVICE.GetDevice<IoTrigger>($"PM1.TrigFOUPRobotActionCommand");
- CarrierManager.Instance.SubscribeLocation(Module, 1, SC.GetValue<int>("System.CassetteSlotCount"));
- WaferManager.Instance.SubscribeLocation(Module, SC.GetValue<int>("System.CassetteSlotCount"));
- this.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
- CarrierRobotDevice.OnDeviceAlarmStateChanged += OnModuleDeviceAlarmStateChanged;
- _actionCommand = new Dictionary<string, int>()
- {
- {"C01.Pick",1 },
- {"C01.Place",2 },
- {"C02.Pick",3 },
- {"C02.Place",4 },
- {"C03.Pick",5 },
- {"C03.Place",6 },
- {"C04.Pick",7 },
- {"C04.Place",8 },
- {"C05.Pick",9 },
- {"C05.Place",10 },
- {"C06.Pick",11 },
- {"C06.Place",12 },
- {"C07.Pick",13 },
- {"C07.Place",14 },
- {"C08.Pick",15 },
- {"C08.Place",16 },
- {"C09.Pick",17 },
- {"C09.Place",18 },
- {"C10.Pick",19 },
- {"C10.Place",20 },
- {"C11.Pick",21 },
- {"C11.Place",22 },
- {"C12.Pick",23 },
- {"C12.Place",24 },
- };
- }
- public void OnModuleDeviceAlarmStateChanged(string deviceId, AlarmEventItem alarmItem)
- {
- if (alarmItem.IsTriggered)
- {
- EventLevel level = alarmItem.Level;
- _triggeredAlarmList.Add(alarmItem);
- if (level == EventLevel.Alarm)
- {
- try
- {
- EV.PostAlarmLog(Module, alarmItem);
- }
- catch (Exception ex)
- {
- EV.WriteEvent(ex.Message.ToString());
- }
- }
- else
- {
- EV.PostWarningLog(Module, alarmItem);
- }
- }
- else
- {
- }
- }
- public void SetCassetteRobotReset()
- {
- CarrierRobotDevice.RobotReset();
- }
- public bool SetCassetteRobotHome(out string reason)
- {
- reason = string.Empty;
- return CarrierRobotDevice.HomeModule(null);
- }
- public bool SetSpeed(int speed, out string reason)
- {
- reason = string.Empty;
- return CarrierRobotDevice.SetSpeed("SetSpeed", speed);
- }
- public bool RequestCassettePresent(Hand hand, out string reason)
- {
- reason = string.Empty;
- RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
- List<object> paras = new List<object>() { "CurrentStatus", arm };
- return CarrierRobotDevice.ReadParameter(paras.ToArray());
- }
- public bool RobotPick(ModuleName target, int targetSlot, Hand hand, out string reason)
- {
- reason = string.Empty;
- RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
- return CarrierRobotDevice.Pick(arm, target.ToString(), targetSlot);
- }
- public bool RobotPlace(ModuleName target, int targetSlot, Hand hand, out string reason)
- {
- reason = string.Empty;
- RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Both;
- return CarrierRobotDevice.Place(arm, target.ToString(), targetSlot);
- }
- public bool RobotGoto(ModuleName target, int targetSlot, Hand hand, bool isPickReady, out string reason)
- {
- reason = string.Empty;
- RobotArmEnum arm = hand == Hand.Blade1 ? RobotArmEnum.Blade1 : RobotArmEnum.Blade2;
- List<object> paras = new List<object>() { arm, target, targetSlot, isPickReady ? "PickReady" : "PlaceReady" };
- return CarrierRobotDevice.GoTo(paras.ToArray());
- }
- public void Stop()
- {
- CarrierRobotDevice.Stop();
- }
- public void SetBufferTargetPosition(string module)
- {
- int.TryParse(module.Replace("Stocker", ""), out int target);
- BufferDevice.SetServoTargetPosition(target);
- }
- public bool SetBufferMoveTo()
- {
- return BufferDevice.SetServoMoveTo();
- }
- public bool CheckBufferTargetPosition(string module)
- {
- int.TryParse(module.Replace("Stocker", ""), out int target);
- return (int)(BufferDevice.ServoMovePositionSet + 0.00001) == target && BufferDevice.TargetPositionFb == target;
- }
- public void SetRobotActionCommand(ModuleName traget, EnumTransferType transferType)
- {
- if (!CarrierRobotDevice.ModuleAssociateStationDic.ContainsKey(traget.ToString()))
- return;
- var station = CarrierRobotDevice.ModuleAssociateStationDic[traget.ToString()];
- if(!_actionCommand.ContainsKey($"{station}.{transferType}"))
- return;
- _trigActionCommand.SetAOTrigger(_actionCommand[$"{station}.{transferType}"], out _);
- }
- public bool CheckRobotActionCommand(ModuleName traget, EnumTransferType transferType)
- {
- if (!CarrierRobotDevice.ModuleAssociateStationDic.ContainsKey(traget.ToString()))
- return false;
- var station = CarrierRobotDevice.ModuleAssociateStationDic[traget.ToString()];
- if (!_actionCommand.ContainsKey($"{station}.{transferType}"))
- return false;
- return Math.Abs( _trigActionCommand.AIValue - _actionCommand[$"{station}.{transferType}"]) < 0.001;
- }
- public void ResetRobotActionCommand()
- {
- _trigActionCommand?.SetAOTrigger(0, out _);
- }
- }
- }
|