|
|
using Autofac;
|
|
|
using HybirdFrameworkCore.Autofac;
|
|
|
using Service.Plc.Msg;
|
|
|
|
|
|
namespace Service.Plc.Client;
|
|
|
|
|
|
public class PlcMgr
|
|
|
{
|
|
|
public static PlcClient? PlcClient;
|
|
|
public static readonly HostToPlc HostToPlcData = new HostToPlc();
|
|
|
public static readonly PlcToHost PlcToHostData = new PlcToHost();
|
|
|
public static readonly PlcFault PlcFaultData = new PlcFault();
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 数据有效时间。单位秒
|
|
|
/// </summary>
|
|
|
static int DataTimeSeconds = 3;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 数据刷新时间
|
|
|
/// </summary>
|
|
|
public static DateTime DataValidityTime = DateTime.Now;
|
|
|
|
|
|
public static bool Init()
|
|
|
{
|
|
|
if (PlcClient == null)
|
|
|
{
|
|
|
PlcClient = AppInfo.Container.Resolve<PlcClient>();
|
|
|
}
|
|
|
|
|
|
return PlcClient.Connect();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 写入口灯
|
|
|
/// 红灯:1020
|
|
|
/// 绿灯:1000
|
|
|
/// </summary>
|
|
|
/// <param name="value"></param>
|
|
|
/// <returns></returns>
|
|
|
public static bool WriteEntranceLamp(byte value)
|
|
|
{
|
|
|
if (PlcClient != null)
|
|
|
{
|
|
|
HostToPlcData.LightIn.Value = value;
|
|
|
return PlcClient.WriteValue(HostToPlcData.LightIn);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 是否远程模式
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static bool IsRemote()
|
|
|
{
|
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= DataTimeSeconds)
|
|
|
{
|
|
|
return PlcToHostData.RemoteLocalControlState.Value == 1010 ? true : false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 入口雷达检测
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static bool EntranceRadar()
|
|
|
{
|
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= DataTimeSeconds)
|
|
|
{
|
|
|
return PlcToHostData.RadarStatesIn.Value == 1000 ? true : false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 出口雷达检测
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static bool ExitRadar()
|
|
|
{
|
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= DataTimeSeconds)
|
|
|
{
|
|
|
return PlcToHostData.RadarStatesOut.Value == 1000 ? true : false;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 写出口灯
|
|
|
/// 红灯:1020
|
|
|
/// 绿灯:1000
|
|
|
/// </summary>
|
|
|
/// <param name="data"></param>
|
|
|
/// <returns></returns>
|
|
|
public static bool WriteExistLamp(int data)
|
|
|
{
|
|
|
if (PlcClient != null)
|
|
|
{
|
|
|
HostToPlc writeHostToPlc = new HostToPlc();
|
|
|
writeHostToPlc.LightOut.Value = (ushort)data;
|
|
|
return PlcClient.WriteValue(writeHostToPlc.LightIn);
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 下发选包
|
|
|
/// </summary>
|
|
|
/// <param name="inBinNo">入仓位,仓位号</param>
|
|
|
/// <param name="outBinNo">出仓位,仓位号</param>
|
|
|
/// <returns></returns>
|
|
|
public static bool DistributeBinNo(string inBinNo, string outBinNo)
|
|
|
{
|
|
|
if (PlcClient != null)
|
|
|
{
|
|
|
HostToPlc writeHostToPlc = new HostToPlc();
|
|
|
writeHostToPlc.EntrySelection.Value = Convert.ToUInt16(inBinNo);
|
|
|
writeHostToPlc.ExitSelection.Value = Convert.ToUInt16(outBinNo);
|
|
|
bool write1 = PlcClient.WriteValue(writeHostToPlc.EntrySelection);
|
|
|
bool write2 = PlcClient.WriteValue(writeHostToPlc.ExitSelection);
|
|
|
return write1 && write2;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 下发启动换电
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static bool StartSwapping()
|
|
|
{
|
|
|
if (PlcClient != null)
|
|
|
{
|
|
|
if (PlcToHostData.TaskType.Value == 0) //是否允许换电
|
|
|
return false;
|
|
|
|
|
|
HostToPlc writeHostToPlc = new HostToPlc();
|
|
|
writeHostToPlc.TaskType.Value = (ushort)1;
|
|
|
writeHostToPlc.TaskEnablement.Value = (ushort)1000;
|
|
|
bool write1 = PlcClient.WriteValue(writeHostToPlc.TaskType);
|
|
|
bool write2 = PlcClient.WriteValue(writeHostToPlc.TaskEnablement);
|
|
|
return write1 && write2;
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 查看拍照状态
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
public static byte ChannelStatus()
|
|
|
{
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
/// 读plc任务状态
|
|
|
/// </summary>
|
|
|
/// <returns>6未连接</returns>
|
|
|
public static int ReadPlcTaskStatus()
|
|
|
{
|
|
|
if (PlcClient != null)
|
|
|
{
|
|
|
return PlcToHostData.TaskType.Value;
|
|
|
}
|
|
|
|
|
|
return (-1);
|
|
|
}
|
|
|
} |