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

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;
}
}
}