using IWareCC.Properties;
using IWareCommon.Enum.Chaidie;
using IWareCommon.Help;
using S7.Net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace IWareCC.ChaiDie.Entity
{
public class ChaiDieEntity
{
///
/// 拆叠名称
///
public string ChaiDieName { get; set; }
///
/// PLCl连接字符串
///
public string PLCContionString { get; set; }
///
/// 设备编号
///
public int DeviceId { get; set; }
///
/// 根据心跳判断堆垛机是否在线
///
public bool IsOnline { get; set; }
///
/// 下线次数
///
public int OffLineTimes { get; set; }
///
/// 上一次心跳数
///
public int LastHandShake { get; set; }
///
/// 连接PLC对象
///
public PlcS7 RCDS71200 { get; set; }
///
/// 连接PLC写的对象
///
public PlcS7 WCDS71200 { get; set; }
#region 写入的值
///
/// 拆叠机编号
///
public string WChaiDieNo { get; set; }
///
/// 复位
///
public bool NeedCon { get; set; }
///
/// 写入成功标志
///
public bool WSTP { get; set; }
#endregion
#region 读取到的值
///
/// 心跳
///
public int RHandShake { get; set; }
///
/// 设备编号
///
public string RChaiDeiNo { get; set; }
///
/// 模式
///
public int RMode { get; set; }
///
/// 是否有报警
///
public bool RAlarm { get; set; }
///
/// 报警编号
///
public int RAlarmCode { get; set; }
///
/// 状态
///
public int RState { get; set; }
///
/// 接收写入成功反馈
///
public bool RACK { get; set; }
///
/// 光电1
///
public int PH1 { get; set; }
///
/// 光电2
///
public int PH2 { get; set; }
///
/// 是否满盘或空盘(0:置位;1空盘;2满盘)
///
public int EmptyStatus { get; set; }
#endregion
public OpcReadItem OpcReadItems { get; set; }
public OpcWriteItem OpcWriteItems { get; set; }
public ChaiDieEntity() { }
public ChaiDieEntity(string srmName, int deviceId, PlcS7 plc)
{
this.ChaiDieName = srmName;
this.DeviceId = deviceId;
this.RChaiDeiNo = deviceId.ToString();
this.WChaiDieNo = deviceId.ToString();
this.WCDS71200 = plc;
switch (srmName)
{
case "ChaiDei1":
OpcReadItems = new OpcReadItem
{
Mode = "DB600.DBW728",
Ph1 = "DB600.DBW730",
Ph2 = "DB600.DBW732",
State = "DB600.DBW734",
Alarm = "DB600.DBX736.0",
AlarmCode = "DB600.DBW738",
ACK = "DB600.DBX746.0",
EmptyStatus = "DB600.DBW748",
HandShake = "DB600.DBW0",
};
break;
case "ChaiDei2":
OpcReadItems = new OpcReadItem
{
Mode="DB600.DBW750",
Ph1 = "DB600.DBW752",
Ph2 = "DB600.DBW754",
State = "DB600.DBW756",
Alarm = "DB600.DBX758.0",
AlarmCode = "DB600.DBW760",
ACK = "DB600.DBX768.0",
EmptyStatus = "DB600.DBW770",
HandShake = "DB600.DBW0",
};
break;
case "ChaiDei3":
OpcWriteItems = new OpcWriteItem
{
NeedCon = "DB601.DBX270.0",
STP = "DB601.DBX270.1"
};
OpcReadItems = new OpcReadItem
{
Mode = "DB600.DBW772",
Ph1 = "DB600.DBW774",
Ph2 = "DB600.DBW776",
State = "DB600.DBW778",
Alarm = "DB600.DBX780.0",
AlarmCode = "DB600.DBW782",
ACK = "DB600.DBX790.0",
EmptyStatus = "DB600.DBW792",
HandShake = "DB600.DBW0",
};
break;
case "ChaiDei4":
OpcWriteItems = new OpcWriteItem
{
NeedCon = "DB601.DBX270.2",
STP = "DB601.DBX270.3"
};
OpcReadItems = new OpcReadItem
{
Mode = "DB600.DBW794",
Ph1 = "DB600.DBW796",
Ph2 = "DB600.DBW798",
State = "DB600.DBW800",
Alarm = "DB600.DBX802.0",
AlarmCode = "DB600.DBW804",
ACK = "DB600.DBX812.0",
EmptyStatus = "DB600.DBW814",
HandShake = "DB600.DBW0",
};
break;
}
}
public bool CanSendTask(int deviceId, out string msg)
{
msg = "";
if (!IsOnline)
{
msg = "已离线";
return false;
}
if (RMode != (int)EChaiDieModel.自动空闲模式)
{
msg = "当前非自动模式";
return false;
}
return true;
}
public bool SendTask(int deviceId, out string msg)
{
try
{
msg = "";
if (!CanSendTask(deviceId, out msg))
{
return false;
}
bool b1 = this.WriteValue(this.OpcWriteItems.NeedCon, 1);
bool b2 = this.WriteValue(this.OpcWriteItems.STP, 1);
if (!(b1&&b2))
{
msg = "写入OPC失败";
return false;
}
return true;
}
catch (Exception ex)
{
msg = ex.Message;
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "SendTask", msg);
return false;
}
}
public bool WriteValue(string addr, object value)
{
string msg = string.Empty;
if (!string.IsNullOrEmpty(addr))
{
try
{
if (!this.WCDS71200.IsConnected)
{
this.WCDS71200.Close();
Thread.Sleep(100);
this.WCDS71200.Open();
}
msg = this.WCDS71200.Write(addr, value).ToString();
if (msg != "NoError")
{
string msg1 = this.WCDS71200.Write(addr, value).ToString();
if (msg1 != "NoError")
{
this.WCDS71200.Close();
Thread.Sleep(100);
this.WCDS71200.Open();
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ChaiDieName + "WriteValue" + addr, msg);
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
catch
{
msg = addr + "写入失败 ";
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ChaiDieName+"WriteValue", msg);
return false;
}
}
else
{
msg = addr + "写入失败 ";
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ChaiDieName + "WriteValue", msg);
return false;
}
}
public object ReadValuePoint(string add)
{
try
{
if (!this.WCDS71200.IsConnected)
{
this.WCDS71200.Close();
Thread.Sleep(100);
this.WCDS71200.Open();
}
object MyPlcData = this.WCDS71200.Read(add);
return MyPlcData;
}
catch (Exception ex)
{
LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ChaiDieName + "ReadValuePoint", ex.Message);
return 0;
}
}
}
}