You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
419 lines
11 KiB
419 lines
11 KiB
using DotNetty.Codecs.Mqtt.Packets;
|
|
using HybirdFrameworkDriver.ModbusTcpMaster;
|
|
using HybirdFrameworkDriver.Session;
|
|
using HybirdFrameworkServices.Plc;
|
|
using Newtonsoft.Json.Linq;
|
|
using System.Net.NetworkInformation;
|
|
|
|
namespace Service.Init.Entity
|
|
{
|
|
public class PlcInfo
|
|
{
|
|
#region 字段
|
|
|
|
/// <summary>
|
|
/// 设备编号
|
|
/// </summary>
|
|
private string _devNo = "001";
|
|
|
|
/// <summary>
|
|
/// 设备名称
|
|
/// </summary>
|
|
private string _devname = "换电PLC";
|
|
|
|
/// <summary>
|
|
/// 服务端连接IP
|
|
/// </summary>
|
|
private string _ipaddr = "172.0.20.48";
|
|
|
|
/// <summary>
|
|
/// 服务端连接端口
|
|
/// </summary>
|
|
private int _port = 502;
|
|
|
|
/// <summary>
|
|
/// 站号
|
|
/// </summary>
|
|
private byte _site = 0x01;
|
|
|
|
/// <summary>
|
|
/// 连接超时时间。单位秒
|
|
/// </summary>
|
|
private int _connecttimeout = 10;
|
|
|
|
/// <summary>
|
|
/// 保持活跃时间。单位秒
|
|
/// </summary>
|
|
private int _keepalive = 30;
|
|
|
|
/// <summary>
|
|
/// 连接状态
|
|
/// </summary>
|
|
private ConnectState _connect_state = ConnectState.Disconnect;
|
|
|
|
#endregion 字段
|
|
|
|
public string ChannelId;
|
|
|
|
public int EqmSn;
|
|
|
|
public HostToPlc hostToPlc = new HostToPlc();
|
|
public PlcToHost plcToHost = new PlcToHost();
|
|
public PlcFault plcFault = new PlcFault();
|
|
|
|
#region
|
|
int DataTimeSeconds = 2;
|
|
DateTime DataValidityTime = DateTime.Now;
|
|
|
|
/// <summary>
|
|
/// plc是否连接
|
|
/// </summary>
|
|
public bool Connected { get; set; }
|
|
/// <summary>
|
|
/// plc是否处于远程模式
|
|
/// </summary>
|
|
public bool RemoteNot
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= DataTimeSeconds)
|
|
{
|
|
return RemoteNot;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
RemoteNot = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读入口雷达是否感应触发
|
|
/// </summary>
|
|
public bool EntranceRadar
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return EntranceRadar;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
EntranceRadar = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取通道定位状态(拍照是否OK)
|
|
/// </summary>
|
|
public bool ChannelLocationState
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return ChannelLocationState;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
ChannelLocationState = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取plc任务状态电池拆卸中
|
|
/// </summary>
|
|
public bool BatteryDisassembly
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return BatteryDisassembly;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
BatteryDisassembly = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取plc任务状态电池入库搬运中
|
|
/// </summary>
|
|
public bool StorageBatteries
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return StorageBatteries;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
StorageBatteries = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取plc任务状态电池出库搬运中
|
|
/// </summary>
|
|
public bool BatteryDelivery
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return BatteryDelivery;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
BatteryDelivery = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取plc任务状态电池安装中
|
|
/// </summary>
|
|
public bool BatteryInstallation
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return BatteryInstallation;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
BatteryInstallation = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读取plc任务状态电池安装完成
|
|
/// </summary>
|
|
public bool BatteryInstallationComplete
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return BatteryInstallationComplete;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
BatteryInstallationComplete = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 设置出口灯:绿灯(通知车辆可以驶离)
|
|
/// </summary>
|
|
public bool SetExitLightGreen
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return SetExitLightGreen;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
SetExitLightGreen = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 读出口雷达是否感应触发
|
|
/// </summary>
|
|
public bool ExitRadarSensingTrigger
|
|
{
|
|
get
|
|
{
|
|
if ((DateTime.Now - DataValidityTime).Seconds <= 2)
|
|
{
|
|
return ExitRadarSensingTrigger;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
set
|
|
{
|
|
ExitRadarSensingTrigger = value;
|
|
DataValidityTime = DateTime.Now;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 写入口灯绿
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool SendLightGreen()
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.LightIn.Value = 1000;
|
|
bResult = WriteUint16(hostToPlc.LightIn);
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 下发选包数据给plc(入仓位
|
|
/// </summary>
|
|
/// <param name="loc">1:缓存位舱位号 2-20 电池存储舱位</param>
|
|
/// <returns></returns>
|
|
public bool SendSelectRuleIn(ushort loc)
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.EntrySelection.Value = loc;
|
|
bResult = WriteUint16(hostToPlc.EntrySelection);
|
|
}
|
|
return bResult;
|
|
}
|
|
/// <summary>
|
|
/// 下发选包数据给plc(出仓位
|
|
/// </summary>
|
|
/// <param name="loc">1:缓存位舱位号 2-20 电池存储舱位</param>
|
|
/// <returns></returns>
|
|
public bool SendSelectRuleOut(ushort loc)
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.ExitSelection.Value = loc;
|
|
bResult = WriteUint16(hostToPlc.ExitSelection);
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 写入口灯:红灯
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool SendLightRed()
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.LightIn.Value = 1020;
|
|
bResult = WriteUint16(hostToPlc.LightIn);
|
|
}
|
|
return bResult;
|
|
}
|
|
/// <summary>
|
|
/// 下发plc开启换电任务
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool SendTaskType()
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.TaskType.Value = 1;
|
|
bResult = WriteUint16(hostToPlc.TaskType);
|
|
}
|
|
return bResult;
|
|
}
|
|
/// <summary>
|
|
/// 设置出口灯:绿灯
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool SendLightOutGreen()
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.LightOut.Value = 1000;
|
|
bResult = WriteUint16(hostToPlc.LightOut);
|
|
}
|
|
return bResult;
|
|
}
|
|
/// <summary>
|
|
/// 设置出口灯:红灯
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool SendLightOutRed()
|
|
{
|
|
bool bResult = false;
|
|
if (Connected)
|
|
{
|
|
hostToPlc.LightOut.Value = 1020;
|
|
bResult = WriteUint16(hostToPlc.LightOut);
|
|
}
|
|
return bResult;
|
|
}
|
|
#endregion
|
|
|
|
public PlcInfo(string channelId, int eqmSn)
|
|
{
|
|
ChannelId = channelId;
|
|
EqmSn = eqmSn;
|
|
}
|
|
|
|
public bool WriteUint16(ModbusProperty<UInt16> value)
|
|
{
|
|
bool bResult = false;
|
|
ModbusSession session = SessionMgr.GetModbusSession(ChannelId);
|
|
bResult = session.Write<UInt16>(value);
|
|
return bResult;
|
|
}
|
|
|
|
public bool Writeint16(ModbusProperty<Int16> value)
|
|
{
|
|
bool bResult = false;
|
|
ModbusSession session = SessionMgr.GetModbusSession(ChannelId);
|
|
bResult = session.Write<Int16>(value);
|
|
return bResult;
|
|
}
|
|
}
|
|
} |