using IWareCC.Properties; using IWareCommon.Enum.Conveyor; 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.Conveyor.Entity { public class ConveyorEntity { private System.Text.ASCIIEncoding ascii = new System.Text.ASCIIEncoding(); public int ConveyorType { get; set; } /// /// 输送线名称 /// public string ConveyorName { get; set; } /// /// PLCl连接字符串 /// public string PLCContionString { get; set; } /// /// 设备Id /// public int DeviceId { get; set; } /// /// 是否在线 /// public bool IsOnline { get; set; } /// /// 下线次数 /// public int OffLineTimes { get; set; } /// /// 上一次心跳数 /// public int LastHandShake { get; set; } /// /// 连接PLC读的对象 /// public PlcS7 RCVS71500 { get; set; } /// /// 连接PLC写的对象 /// public PlcS7 WCVS71500 { get; set; } #region 输送线信息写入 public int WHandShake { get; set; } /// /// 设备编号 /// public string WConveyorNo { get; set; } /// /// 任务号 /// public int WTaskNo { get; set; } /// /// 目标端口点 /// public int WToStationNo { get; set; } /// /// 急停 /// public bool WEStop { get; set; } /// /// 任务取消 /// public bool WTaskCancel { get; set; } /// /// 确认收到任务完成 /// public bool WConfirmTaskFinish { get; set; } /// /// 任务下完成信号 /// public bool WSTP { get; set; } #endregion #region 输送线信息读取 /// /// 心跳 /// public int RHandShake { get; set; } /// /// 设备编号 /// public string RConveyorNo { get; set; } /// /// 任务号 /// public int RTaskNo { get; set; } /// /// 当前目标位置 /// public int RDestination { get; set; } /// /// 是否有报警 /// public bool RAlarm { get; set; } /// /// 光电1状态(1有货;2无货) /// public int RPh1 { get; set; } /// /// /// /// 光电2状态(1有货;2无货) /// /// public int RPh2 { get; set; } /// /// 光电1状态(1有货;2无货) /// public int RPh3 { get; set; } /// /// 任务完成 /// public bool RTaskfinish { get; set; } /// /// 报警代码 /// public int RAlarmCode { get; set; } /// /// 外形检测(0通过,1前超,2后超,3左超,4右超,5超高) /// public int RShape { get; set; } /// /// 任务收到确认 /// public bool RAck { get; set; } /// /// 模式 /// public int RMode { get; set; } /// /// 状态 /// public int RState { get; set; } /// /// 状态,输送线的光电检测高度 /// public int RHeight { get; set; } #endregion public OpcReadItem OpcReadItems { get; set; } public OpcWriteItem OpcWriteItems { get; set; } public ConveyorEntity() { } public ConveyorEntity(string conveyorName, int deviceId, int type, PlcS7 plc) { this.ConveyorType = type; this.ConveyorName = conveyorName; this.DeviceId = deviceId; this.WCVS71500 = plc; switch (conveyorName) { #region 入库口线体 case "Line1030": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD232", ToStationNo = "DB601.DBW236", EStop = "DB601.DBX238.0", TaskCancel = "DB601.DBX238.1", STP = "DB601.DBX238.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW640", Ph1 = "DB600.DBW642", Ph2 = "DB600.DBW644", State = "DB600.DBW646", Alarm = "DB600.DBX648.0", AlarmCode = "DB600.DBW650", TaskNo = "DB600.DBD652", Destination = "DB600.DBW656", Ack = "DB600.DBX658.0", Shape = "DB600.DBW644", HandShake = "DB600.DBW0", }; break; case "Line1031": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD240", ToStationNo = "DB601.DBW244", EStop = "DB601.DBX246.0", TaskCancel = "DB601.DBX246.1", STP = "DB601.DBX246.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW662", Ph1 = "DB600.DBW664", Ph2 = "DB600.DBW666", State = "DB600.DBW668", Alarm = "DB600.DBX670.0", AlarmCode = "DB600.DBW672", TaskNo = "DB600.DBD674", Destination = "DB600.DBW678", Ack = "DB600.DBX680.0", Shape = "DB600.DBW682", HandShake = "DB600.DBW0", }; break; case "Line1032": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD248", ToStationNo = "DB601.DBW252", EStop = "DB601.DBX254.0", TaskCancel = "DB601.DBX254.1", STP = "DB601.DBX254.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW684", Ph1 = "DB600.DBW686", Ph2 = "DB600.DBW688", State = "DB600.DBW690", Alarm = "DB600.DBX692.0", AlarmCode = "DB600.DBW694", TaskNo = "DB600.DBD696", Destination = "DB600.DBW700", Ack = "DB600.DBX702.0", Shape = "DB600.DBW704", HandShake = "DB600.DBW0", }; break; case "Line1033": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD256", ToStationNo = "DB601.DBW260", EStop = "DB601.DBX262.0", TaskCancel = "DB601.DBX262.1", STP = "DB601.DBX262.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW706", Ph1 = "DB600.DBW708", Ph2 = "DB600.DBW710", State = "DB600.DBW712", Alarm = "DB600.DBX714.0", AlarmCode = "DB600.DBW716", TaskNo = "DB600.DBD718", Destination = "DB600.DBW722", Ack = "DB600.DBX724.0", Shape = "DB600.DBW726", HandShake = "DB600.DBW0", }; break; #endregion #region 出库口线体 case "Line1016": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD120", ToStationNo = "DB601.DBW124", EStop = "DB601.DBX126.0", TaskCancel = "DB601.DBX126.1", STP = "DB601.DBX126.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW332", Ph1 = "DB600.DBW334", Ph2 = "DB600.DBW336", State = "DB600.DBW338", Alarm = "DB600.DBX340.0", AlarmCode = "DB600.DBW342", TaskNo = "DB600.DBD344", Destination = "DB600.DBW348", Ack = "DB600.DBX350.0", Shape = "DB600.DBW352", HandShake = "DB600.DBW0", }; break; case "Line1015": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD112", ToStationNo = "DB601.DBW116", EStop = "DB601.DBX118.0", TaskCancel = "DB601.DBX118.1", STP = "DB601.DBX118.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW310", Ph1 = "DB600.DBW312", Ph2 = "DB600.DBW314", State = "DB600.DBW316", Alarm = "DB600.DBX318.0", AlarmCode = "DB600.DBW320", TaskNo = "DB600.DBD322", Destination = "DB600.DBW326", Ack = "DB600.DBX328.0", Shape = "DB600.DBW330", HandShake = "DB600.DBW0", }; break; case "Line1014": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD104", ToStationNo = "DB601.DBW108", EStop = "DB601.DBX110.0", TaskCancel = "DB601.DBX110.1", STP = "DB601.DBX110.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW288", Ph1 = "DB600.DBW290", Ph2 = "DB600.DBW292", State = "DB600.DBW294", Alarm = "DB600.DBX296.0", AlarmCode = "DB600.DBW298", TaskNo = "DB600.DBD300", Destination = "DB600.DBW304", Ack = "DB600.DBX306.0", Shape = "DB600.DBW308", HandShake = "DB600.DBW0", }; break; case "Line1013": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD96", ToStationNo = "DB601.DBW100", EStop = "DB601.DBX102.0", TaskCancel = "DB601.DBX102.1", STP = "DB601.DBX102.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW266", Ph1 = "DB600.DBW268", Ph2 = "DB600.DBW270", State = "DB600.DBW272", Alarm = "DB600.DBX274.0", AlarmCode = "DB600.DBW276", TaskNo = "DB600.DBD278", Destination = "DB600.DBW282", Ack = "DB600.DBX284.0", Shape = "DB600.DBW286", HandShake = "DB600.DBW0", }; break; #endregion #region 入库小盘线体 case "Line1021": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD160", ToStationNo = "DB601.DBW164", EStop = "DB601.DBX166.0", TaskCancel = "DB601.DBX166.1", STP = "DB601.DBX166.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW442", Ph1 = "DB600.DBW444", Ph2 = "DB600.DBW446", State = "DB600.DBW448", Alarm = "DB600.DBX450.0", AlarmCode = "DB600.DBW452", TaskNo = "DB600.DBD454", Destination = "DB600.DBW458", Ack = "DB600.DBX460.0", Shape = "DB600.DBW462", HandShake = "DB600.DBW0", }; break; case "Line1022": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD168", ToStationNo = "DB601.DBW172", EStop = "DB601.DBX174.0", TaskCancel = "DB601.DBX174.1", STP = "DB601.DBX174.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW464", Ph1 = "DB600.DBW466", Ph2 = "DB600.DBW468", State = "DB600.DBW470", Alarm = "DB600.DBX472.0", AlarmCode = "DB600.DBW474", TaskNo = "DB600.DBD476", Destination = "DB600.DBW480", Ack = "DB600.DBX482.0", Shape = "DB600.DBW484", HandShake = "DB600.DBW0", }; break; case "Line1023": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD176", ToStationNo = "DB601.DBW180", EStop = "DB601.DBX182.0", TaskCancel = "DB601.DBX182.1", STP = "DB601.DBX182.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW486", Ph1 = "DB600.DBW488", Ph2 = "DB600.DBW490", State = "DB600.DBW492", Alarm = "DB600.DBX494.0", AlarmCode = "DB600.DBW496", TaskNo = "DB600.DBD498", Destination = "DB600.DBW502", Ack = "DB600.DBX504.0", Shape = "DB600.DBW506", HandShake = "DB600.DBW0", }; break; case "Line1024": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD184", ToStationNo = "DB601.DBW188", EStop = "DB601.DBX190.0", TaskCancel = "DB601.DBX190.1", STP = "DB601.DBX190.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW508", Ph1 = "DB600.DBW510", Ph2 = "DB600.DBW512", State = "DB600.DBW514", Alarm = "DB600.DBX516.0", AlarmCode = "DB600.DBW518", TaskNo = "DB600.DBD520", Destination = "DB600.DBW524", Ack = "DB600.DBX526.0", Shape = "DB600.DBW528", HandShake = "DB600.DBW0", }; break; #endregion #region 入库大盘线体 case "Line1026": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD200", ToStationNo = "DB601.DBW204", EStop = "DB601.DBX206.0", TaskCancel = "DB601.DBX206.1", STP = "DB601.DBX206.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW552", Ph1 = "DB600.DBW554", Ph2 = "DB600.DBW556", State = "DB600.DBW558", Alarm = "DB600.DBX560.0", AlarmCode = "DB600.DBW562", TaskNo = "DB600.DBD564", Destination = "DB600.DBW568", Ack = "DB600.DBX570.0", Shape = "DB600.DBW572", HandShake = "DB600.DBW0", }; break; case "Line1027": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD208", ToStationNo = "DB601.DBW212", EStop = "DB601.DBX214.0", TaskCancel = "DB601.DBX214.1", STP = "DB601.DBX214.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW574", Ph1 = "DB600.DBW576", Ph2 = "DB600.DBW578", State = "DB600.DBW580", Alarm = "DB600.DBX582.0", AlarmCode = "DB600.DBW584", TaskNo = "DB600.DBD586", Destination = "DB600.DBW590", Ack = "DB600.DBX592.0", Shape = "DB600.DBW594", HandShake = "DB600.DBW0", }; break; case "Line1028": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD216", ToStationNo = "DB601.DBW220", EStop = "DB601.DBX222.0", TaskCancel = "DB601.DBX222.1", STP = "DB601.DBX222.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW596", Ph1 = "DB600.DBW598", Ph2 = "DB600.DBW600", State = "DB600.DBW602", Alarm = "DB600.DBX604.0", AlarmCode = "DB600.DBW606", TaskNo = "DB600.DBD608", Destination = "DB600.DBW612", Ack = "DB600.DBX614.0", Shape = "DB600.DBW616", HandShake = "DB600.DBW0", }; break; case "Line1029": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD224", ToStationNo = "DB601.DBW228", EStop = "DB601.DBX230.0", TaskCancel = "DB601.DBX230.1", STP = "DB601.DBX230.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW618", Ph1 = "DB600.DBW620", Ph2 = "DB600.DBW622", State = "DB600.DBW624", Alarm = "DB600.DBX626.0", AlarmCode = "DB600.DBW628", TaskNo = "DB600.DBD630", Destination = "DB600.DBW634", Ack = "DB600.DBX636.0", Shape = "DB600.DBW638", HandShake = "DB600.DBW0", }; break; #endregion #region 人工分拣线体 case "Line1001": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD0", ToStationNo = "DB601.DBW4", EStop = "DB601.DBX6.0", TaskCancel = "DB601.DBX6.1", STP = "DB601.DBX6.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW2", Ph1 = "DB600.DBW4", Ph2 = "DB600.DBW6", State = "DB600.DBW8", Alarm = "DB600.DBX10.0", AlarmCode = "DB600.DBW12", TaskNo = "DB600.DBD14", Destination = "DB600.DBW18", Ack = "DB600.DBX20.0", Shape = "DB600.DBW22", HandShake = "DB600.DBW0", }; break; #endregion #region 助力臂分拣1线体 case "Line1002": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD8", ToStationNo = "DB601.DBW12", EStop = "DB601.DBX14.0", TaskCancel = "DB601.DBX14.1", STP = "DB601.DBX14.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW24", Ph1 = "DB600.DBW26", Ph2 = "DB600.DBW28", State = "DB600.DBW30", Alarm = "DB600.DBX32.0", AlarmCode = "DB600.DBW34", TaskNo = "DB600.DBD36", Destination = "DB600.DBW40", Ack = "DB600.DBX42.0", Shape = "DB600.DBW44", HandShake = "DB600.DBW0", }; break; case "Line1003": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD16", ToStationNo = "DB601.DBW20", EStop = "DB601.DBX22.0", TaskCancel = "DB601.DBX22.1", STP = "DB601.DBX22.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW46", Ph1 = "DB600.DBW48", Ph2 = "DB600.DBW50", State = "DB600.DBW52", Alarm = "DB600.DBX54.0", AlarmCode = "DB600.DBW56", TaskNo = "DB600.DBD58", Destination = "DB600.DBW62", Ack = "DB600.DBX64.0", Shape = "DB600.DBW66", HandShake = "DB600.DBW0", }; break; case "Line1006": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD40", ToStationNo = "DB601.DBW44", EStop = "DB601.DBX46.0", TaskCancel = "DB601.DBX46.1", STP = "DB601.DBX46.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW112", Ph1 = "DB600.DBW114", Ph2 = "DB600.DBW116", State = "DB600.DBW118", Alarm = "DB600.DBX120.0", AlarmCode = "DB600.DBW122", TaskNo = "DB600.DBD124", Destination = "DB600.DBW128", Ack = "DB600.DBX130.0", Shape = "DB600.DBW132", HandShake = "DB600.DBW0", }; break; #endregion #region 助力臂分拣2线体 case "Line1007": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD48", ToStationNo = "DB601.DBW52", EStop = "DB601.DBX54.0", TaskCancel = "DB601.DBX54.1", STP = "DB601.DBX54.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW134", Ph1 = "DB600.DBW136", Ph2 = "DB600.DBW138", State = "DB600.DBW140", Alarm = "DB600.DBX142.0", AlarmCode = "DB600.DBW144", TaskNo = "DB600.DBD146", Destination = "DB600.DBW150", Ack = "DB600.DBX152.0", Shape = "DB600.DBW154", HandShake = "DB600.DBW0", }; break; case "Line1008": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD56", ToStationNo = "DB601.DBW60", EStop = "DB601.DBX62.0", TaskCancel = "DB601.DBX62.1", STP = "DB601.DBX62.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW156", Ph1 = "DB600.DBW158", Ph2 = "DB600.DBW160", State = "DB600.DBW162", Alarm = "DB600.DBX164.0", AlarmCode = "DB600.DBW166", TaskNo = "DB600.DBD168", Destination = "DB600.DBW172", Ack = "DB600.DBX174.0", Shape = "DB600.DBW176", HandShake = "DB600.DBW0", }; break; case "Line1012": OpcWriteItems = new OpcWriteItem { TaskNo = "DB601.DBD88", ToStationNo = "DB601.DBW92", EStop = "DB601.DBX94.0", TaskCancel = "DB601.DBX94.1", STP = "DB601.DBX94.2", }; OpcReadItems = new OpcReadItem { Mode = "DB600.DBW244", Ph1 = "DB600.DBW246", Ph2 = "DB600.DBW248", State = "DB600.DBW250", Alarm = "DB600.DBX252.0", AlarmCode = "DB600.DBW254", TaskNo = "DB600.DBD256", Destination = "DB600.DBW260", Ack = "DB600.DBX262.0", Shape = "DB600.DBW264", HandShake = "DB600.DBW0", }; break; #endregion } } /// /// 发送任务 /// /// /// /// /// /// /// /// /// public bool SendTask(int deviceId, int taskId, string toPlace, int palltype, out string msg) { try { msg = ""; if (!CanSendTask(deviceId, out msg)) { return false; } bool b2 = this.WriteValue(this.OpcWriteItems.ToStationNo, toPlace); bool b1 = this.WriteValue(this.OpcWriteItems.TaskNo, taskId); // bool b3 = this.WriteValue(this.OpcWriteItems.STP, 1); bool b4 = true; if (this.ConveyorName == "Line1021") { b4 = this.WriteValue("DB601.DBW268", palltype); } if (this.ConveyorName == "Line1026") { b4 = this.WriteValue("DB601.DBW266", palltype); } if (!(b1 && b2 && b4)) { msg = string.Format("向输送线{0}发送任务{1}失败", ConveyorName, taskId); return false; } return true; } catch (Exception ex) { msg = ex.Message; return false; } } /// /// 任务删除 /// /// /// /// /// public bool DeleteTask(int deviceId, out string msg) { try { msg = ""; bool b1 = this.WriteValue(this.OpcWriteItems.TaskCancel, 1); if (!(b1)) { msg = string.Format("写入OPC失败", ConveyorName); return false; } return true; } catch (Exception ex) { msg = ex.Message; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), "DeleteTask", msg); return false; } } /// /// 确认任务完成 /// /// /// /// /// public bool ConfirmStp(int deviceId, out string msg) { try { msg = ""; var flag = this.WriteValue(this.OpcWriteItems.STP, false); if (!flag) { msg = string.Format("向输送线{0}发送确认任务下发成功信号失败", ConveyorName); return false; } return true; } catch (Exception ex) { msg = ex.Message; return false; } } /// /// 判断任务是否完成 /// /// /// /// /// public bool IsTaskFinish(int deviceId, int taskId, out string msg) { try { msg = ""; if (this.RTaskNo == taskId) { return this.RTaskfinish; } return false; } catch (Exception ex) { msg = ex.Message; return false; } } public bool CanSendTask(int deviceId, out string msg) { msg = ""; if (!IsOnline) { msg = "已离线"; return false; } if (RMode != (int)EConveyorMode.自动空闲模式) { msg = "当前非自动模式"; return false; } if (RState != (int)EConveyorState.空闲) { msg = "设备状态非空闲,无法执行其他任务"; return false; } return true; } public bool WriteValue(string addr, object value) { string msg = string.Empty; if (!string.IsNullOrEmpty(addr)) { try { if (!this.WCVS71500.IsConnected) { this.WCVS71500.Close(); Thread.Sleep(100); this.WCVS71500.Open(); } msg = this.WCVS71500.Write(addr, value).ToString(); if (msg != "NoError") { string msg1 = this.WCVS71500.Write(addr, value).ToString(); if (msg1 != "NoError") { this.WCVS71500.Close(); Thread.Sleep(100); this.WCVS71500.Open(); LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue" + addr, msg); return false; } else { return true; } } else { return true; } } catch { msg = addr + "写入失败 "; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue", msg); return false; } } else { msg = addr + "写入失败 "; LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "WriteValue", msg); return false; } } public object ReadValuePoint(string add) { try { if (!this.WCVS71500.IsConnected) { this.WCVS71500.Close(); Thread.Sleep(100); this.WCVS71500.Open(); } object MyPlcData = this.WCVS71500.Read(add); if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10") { MyPlcData = this.WCVS71500.Read(add); if (MyPlcData.ToString() == "WrongVarFormat" || MyPlcData.ToString() == "10") { MyPlcData = this.WCVS71500.Read(add); } } return MyPlcData; } catch (Exception ex) { LogTextHelper.WriteLog(Resources.LogDir, this.ToString(), this.ConveyorName + "ReadValuePoint", ex.Message); return 0; } } } }