using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Model.Models;
|
using WIDESEAWCS_QuartzJob.DTO;
|
using WIDESEAWCS_QuartzJob;
|
using WIDESEA_Common.Log;
|
using System.Xml.Linq;
|
using SixLabors.ImageSharp;
|
using WIDESEAWCS_QuartzJob.Service;
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
|
|
namespace WIDESEAWCS_Tasks.StackerCraneJob
|
{
|
|
|
public class GetDeviceAddress
|
{
|
/// <summary>
|
/// 传入设备,获取当前位置位置
|
/// </summary>
|
/// <param name="ChildPosiDeviceCode">设备</param>
|
/// <returns></returns>
|
public static int GetEquipmentlocation(string ChildPosiDeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
|
SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
|
if (speStackerCrane == null) return 0;
|
DeviceProDTO? deviceProDTO = speStackerCrane.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == ChildPosiDeviceCode && x.DeviceProParamName == "RGVCurrentlocation" && x.DeviceProParamType == "RGVCurrentlocation");
|
int MCGStatus = GetDeviceAddress.RGVGetLine(speStackerCrane, deviceProDTO.DeviceProAddress);
|
return MCGStatus;
|
}
|
|
/// <summary>
|
/// 传入设备,返回设备信息
|
/// </summary>
|
/// <param name="ChildPosiDeviceCode">设备</param>
|
/// <returns></returns>
|
public static GetStackerObject GetChildDeviceCode(string ChildPosiDeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
|
SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
|
if (speStackerCrane == null)
|
{
|
Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},002");
|
return null;
|
}
|
GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
|
return getStackerObject;
|
}
|
|
|
/// <summary>
|
/// 传入设备,返回当前设备信息
|
/// </summary>
|
/// <param name="ChildPosiDeviceCode">设备</param>
|
/// <returns></returns>
|
public static int GetEquipmentInformation(string ChildPosiDeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
|
SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
|
if (speStackerCrane == null)
|
{
|
Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},003");
|
return 0;
|
}
|
GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
|
if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
|
getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
|
{
|
return getStackerObject.RGVCurrentlocation;
|
}
|
else
|
{
|
return 0;
|
}
|
|
}
|
|
/// <summary>
|
/// 传入设备,返回当前设备信息(入库母车,需要加入是否有货判断)
|
/// </summary>
|
/// <param name="ChildPosiDeviceCode">设备</param>
|
/// <returns></returns>
|
public static int GetEquipmentInMuche(string ChildPosiDeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
|
SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
|
if (speStackerCrane == null)
|
{
|
Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},004");
|
return 0;
|
}
|
GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
|
if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
|
getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction && getStackerObject.RgvCraneStatusValue == RgvEquipmentStatus.NoCargo)
|
{
|
return getStackerObject.RGVCurrentlocation;
|
}
|
else
|
{
|
return 0;
|
}
|
|
}
|
|
|
/// <summary>
|
/// 传入设备编号,判断设备状态是否可进入
|
/// </summary>
|
/// <param name="ChildPosiDeviceCode"></param>
|
/// <returns></returns>
|
public static bool ReturnCurrentStatus(string ChildPosiDeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == ChildPosiDeviceCode);
|
SpeStackerCrane speStackerCrane = (SpeStackerCrane)device;
|
if (speStackerCrane == null)
|
{
|
Console.WriteLine($"读取到设备为空,设备编号:{ChildPosiDeviceCode},005");
|
return false;
|
}
|
GetStackerObject getStackerObject = new GetStackerObject(speStackerCrane);
|
if (getStackerObject.RgvCraneAutoStatusValue == RgvCraneAutoStatus.Automatic &&
|
getStackerObject.StaclerkJobJobStatusValue == RGV_Rgvtaskstutas.Ready && getStackerObject.RgvCraneWorkStatusValue == RGVStepprocess.NoAction)
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
|
/// <summary>
|
/// 查询HCJ站台设备
|
/// </summary>
|
/// <param name="Commonstacker"></param>
|
/// <param name="SCAddress"></param>
|
/// <param name="Interactivet"></param>
|
/// <returns></returns>
|
public static DeviceProDTO? GetDeviceProDTO(CommonConveyorLine Commonstacker, string SCAddress, string Interactivet)
|
{
|
return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet && x.DeviceProParamType == "ReadDeviceCommand");
|
}
|
|
/// <summary>
|
/// 查询RGV设备
|
/// </summary>
|
/// <param name="Commonstacker"></param>
|
/// <param name="SCAddress"></param>
|
/// <param name="Interactivet"></param>
|
/// <returns></returns>
|
public static DeviceProDTO? GetRGVDeviceProDTO(SpeStackerCrane Commonstacker, string SCAddress, string Interactivet)
|
{
|
return Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == SCAddress && x.DeviceProParamName == Interactivet && x.DeviceProParamType == "RGV_Rgvtaskstutas");
|
}
|
/// <summary>
|
/// 读取设备信息
|
/// </summary>
|
/// <param name="conveyorLine"></param>
|
/// <param name="DeviceProDataBlock"></param>
|
/// <returns></returns>
|
public static int GetLine(CommonConveyorLine Commonstacker, string DeviceProDataBlock)
|
{
|
return Commonstacker.Communicator.Read<short>(DeviceProDataBlock);
|
}
|
|
public static int RGVGetLine(SpeStackerCrane Commonstacker, string DeviceProDataBlock)
|
{
|
return Commonstacker.Communicator.Read<short>(DeviceProDataBlock);
|
}
|
|
|
/// <summary>
|
/// 日志记录
|
/// </summary>
|
/// <param name="SCLLinStack">设备名称</param>
|
/// <param name="Filename">文件名称</param>
|
/// <param name="Logtype">日志类型</param>
|
/// <param name="Magessadd">内容</param>
|
public void wcsWriteLog(string SCLLinStack,string Filename, string Logtype, string Magessadd)
|
{
|
WriteLog.Write_Log(SCLLinStack, Filename, Logtype, new { 信息 = Magessadd });
|
}
|
|
/// <summary>
|
/// 传入站台编号,判断是否有货
|
/// </summary>
|
/// <param name="Platformnumber">站台编号</param>
|
public static bool HCJIsstock(string Platformnumber)
|
{
|
//获取需要区分是否去入库与去不合格载货台任务
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
|
CommonConveyorLine Commonstacker = (CommonConveyorLine)device;
|
DeviceProDTO? deviceProDTO = GetDeviceProDTO(Commonstacker, Platformnumber.ToString(), "HCJ_GoodsStatus");
|
int HCJGStatus = GetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (HCJGStatus == 0) //为无货
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 判断设备是否有货
|
/// </summary>
|
public static bool Mucheywhaddres(string DeviceCode)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == DeviceCode);
|
SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
|
|
DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeviceCode && x.DeviceProParamName == "RgvEquipmentStatus" && x.DeviceProParamType == "RgvEquipmentStatus");
|
int MCGStatus = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if(MCGStatus== (int)RgvEquipmentStatus.NoCargo)
|
{
|
return true;
|
}
|
return false;
|
}
|
|
/// <summary>
|
/// 判断3个站台
|
/// </summary>
|
public static bool AQMStatus(List<AGVStation> aGVStatList)
|
{
|
try
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
|
CommonConveyorLine Commonstacker = (CommonConveyorLine)device;
|
foreach (var item in aGVStatList)
|
{
|
DeviceProDTO? deviceProDTO = GetDeviceProDTO(Commonstacker, item.Station_code.ToString(), "HCJ_GoodsStatus");
|
int HCJGStatus = GetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (HCJGStatus != 0) //为无货
|
{
|
return false;
|
}
|
}
|
return true;
|
}
|
catch (Exception ex)
|
{
|
return false;
|
throw;
|
}
|
|
}
|
|
public static List<string> StationareaList = new List<string>() { "RGV111", "RGV116", "RGV110", "RGV112", "RGV114", "RGV115","RGV118" };
|
public static List<string> InStationareaList = new List<string>() { "RGV101", "RGV103", "RGV105", "RGV108", "RGV109", "RGV104","RGV107" };
|
|
public static bool OutbounMotherChildCartbool(string DeviceChildCode)
|
{
|
if (StationareaList.Contains(DeviceChildCode))
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
public static bool OutbounMotherChildCartbool2(string DeviceChildCode)
|
{
|
if (DeviceChildCode=="RGV104" || DeviceChildCode == "RGV107")
|
{
|
return true;
|
}
|
else
|
{
|
return false;
|
}
|
}
|
|
/// <summary>
|
/// 读取子是否为手动
|
/// </summary>
|
public static bool OutRGVStatice()
|
{
|
bool rgvbool=true;
|
foreach (string AGVStation in StationareaList)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == AGVStation);
|
if (device == null) continue;
|
SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
|
|
DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == AGVStation && x.DeviceProParamName == "RgvCraneAutoStatus" && x.DeviceProParamType == "RgvCraneAutoStatus");
|
int RGVState = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (RGVState == 1)
|
{
|
return false;
|
}
|
}
|
return rgvbool;
|
}
|
|
public static bool InRGVStatice()
|
{
|
bool rgvbool = true;
|
foreach (string AGVStation in InStationareaList)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == AGVStation);
|
if (device == null) continue;
|
SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
|
|
DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == AGVStation && x.DeviceProParamName == "RgvCraneAutoStatus" && x.DeviceProParamType == "RgvCraneAutoStatus");
|
int RGVState = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (RGVState == 1)
|
{
|
return false;
|
}
|
}
|
return rgvbool;
|
}
|
|
/// <summary>
|
/// 出库,读取RGV是否为空闲
|
/// </summary>
|
/// <returns></returns>
|
public static bool OutRGVRGVStepprocess()
|
{
|
bool rgvbool = true;
|
foreach (string AGVStation in StationareaList)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == AGVStation);
|
if (device == null) continue;
|
SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
|
|
DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == AGVStation && x.DeviceProParamName == "RGVStepprocess" && x.DeviceProParamType == "RGVStepprocess");
|
int RGVState = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (RGVState != 0)
|
{
|
return false;
|
}
|
}
|
return rgvbool;
|
}
|
|
public static bool InRGVRGVStepprocess()
|
{
|
bool rgvbool = true;
|
foreach (string AGVStation in InStationareaList)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == AGVStation);
|
if (device == null) continue;
|
SpeStackerCrane Commonstacker = (SpeStackerCrane)device;
|
|
DeviceProDTO? deviceProDTO = Commonstacker.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == AGVStation && x.DeviceProParamName == "RGVStepprocess" && x.DeviceProParamType == "RGVStepprocess");
|
int RGVState = GetDeviceAddress.RGVGetLine(Commonstacker, deviceProDTO.DeviceProAddress);
|
if (RGVState != 0)
|
{
|
return false;
|
}
|
}
|
return rgvbool;
|
}
|
|
public static bool WriteSecurityDoorpolice(string DeviceCode,string WriteType,int Writevalue)
|
{
|
try
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
|
if (device == null) return false;
|
CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
|
DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == DeviceCode && x.DeviceProParamName == WriteType && x.DeviceProParamType == "DeviceCommand");
|
return commonConveyorLine.Communicator.Write<short>(deviceProDTO.DeviceProAddress, (short)Writevalue);
|
}
|
catch (Exception)
|
{
|
return false;
|
throw;
|
}
|
}
|
|
|
public static List<string> AQMListdata = new List<string>() { "AQM001", "AQM002"};
|
/// <summary>
|
/// 判断安全门状态
|
/// </summary>
|
/// <param name="aqmtype">1为出库安全门3号,2为入库安全门判断</param>
|
/// <returns></returns>
|
public static bool ReadAqmDecicStice(int aqmtype)
|
{
|
IDevice? device = Storage.Devices.FirstOrDefault(x => x.DeviceCode == "HCJ2000");
|
CommonConveyorLine commonConveyorLine = (CommonConveyorLine)device;
|
if (aqmtype == 1)
|
{
|
DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == "AQM003" && x.DeviceProParamName == "IndicatorStatus" && x.DeviceProParamType == "ReadDeviceCommand");
|
short AQMldeng = commonConveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProDataBlock);
|
if (AQMldeng == 2) return false;
|
}
|
else
|
{
|
foreach (string aqmname in AQMListdata)
|
{
|
DeviceProDTO? deviceProDTO = commonConveyorLine.DeviceProDTOs.FirstOrDefault(x => x.DeviceChildCode == aqmname && x.DeviceProParamName == "IndicatorStatus" && x.DeviceProParamType == "ReadDeviceCommand");
|
short AQMldeng = commonConveyorLine.Communicator.Read<short>(deviceProDTO.DeviceProDataBlock);
|
if (AQMldeng == 2) return false;
|
}
|
}
|
return true;
|
}
|
|
|
}
|
}
|