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