2026-06-05 13:44:39 +09:00

113 lines
3.2 KiB
C#

using Aurora;
using Aurora.Api;
using AuroraDeviceCommon.Utils;
using AuroraIO;
using AuroraLaser;
using Hermes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static AuroraIO.AJINEXTEK.AjinIO.IOModuleInfo;
using static WeldingCommon.Devices.Laser.PAIX_PrismaticScanner;
namespace WeldingCommon.Devices.Laser
{
public class PAIX_PrismaticScanner : IODevice
{
public PAIX_PrismaticScanner(IAuroraEnvironment auroraEnv, string deviceId, bool isSimul) : base(auroraEnv, deviceId, isSimul)
{
}
public int WriteDoBit(ePrismaticDOAddress index, bool bit) => _iOUnit.WriteDoBit((int)index, bit);
public bool ReadDiBit(ePrismaticDIAddress index) => _iOUnit.ReadDiBit((int)index);
public enum ePrismaticDIAddress
{
CoreLaser_Laser_Ready = 9,
CoreLaser_Error_State,
CoreLaser_Laser_Output_State,
CoreLaser_Control_Status,
RingLaser_Laser_Ready,
RingLaser_Error_State,
RingLaser_Laser_Output_State,
RingLaser_Control_Status = 23,
}
public enum ePrismaticDOAddress
{
CoreLaser_Control = 9,
CoreLaser_ErrorClearing,
RingLaser_Control = 13,
RingLaser_ErrorClearing,
EX_Red_Control = 17,
}
}
public class LaserIOControl : Device
{
PAIX_PrismaticScanner _ioBoard;
public IODevice _IOLaser;
public IOUnit _iOUnit;
public LaserIOControl(PAIX_PrismaticScanner io)
{
_IOLaser = io;
_ioBoard = io;
_iOUnit = io._iOUnit;
}
protected override int DoActivate(IDeviceConfig config)
{
if (_ioBoard.IsActivated)
return E1.OK;
return E2.NOT_CONNECTED;
}
protected override int DoDeactivate()
{
return E1.OK;
}
public int SetEmmision(bool on)
{
_ioBoard.WriteDO(1, on);
return E1.OK;
}
public bool GetLaserReady()
{
bool coreReady = false;
bool ringReady = false;
GetLaserDIStatus(ePrismaticDIAddress.CoreLaser_Laser_Ready, out coreReady);
GetLaserDIStatus(ePrismaticDIAddress.RingLaser_Laser_Ready, out ringReady);
return coreReady && ringReady;
}
public int GetLaserDevice(ref IODevice _IOLaser)
{
if (IsActivated == false || _ioBoard == null)
{
return E1.GENERIC;
}
_IOLaser = _ioBoard;
return E1.OK;
}
private bool GetLaserDIStatus(ePrismaticDIAddress addr, out bool bValue)
{
bool[] arrDI = new bool[Convert.ToInt32(_IOLaser._iOUnit.GetDICount())];
int nRet = _IOLaser._iOUnit.GetDiArray(ref arrDI);
if (nRet == E1.OK && arrDI.Length != 0)
{
bValue = arrDI[Convert.ToInt32(addr)];
return true;
}
else
{
bValue = false;
return false;
}
}
}
}