public override void DoWork(PLCMsg msg) { return; CurrMsg = msg; if (CurrMsg.STATUS == 1)//判断挡停放行 { //判断挡停后边专机空闲 var nxtDevice = DeviceBase.GetDevice("E0100201"); if (nxtDevice.CurrMsg?.STATUS == 0) { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行挡停 } } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; if (CurrMsg.STATUS == 1)//判断专机放行 { //放行后等5秒再次放行 if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) { return; } LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; Task.Run(() => { //System.Threading.Thread.Sleep(5000);//5秒后放行 GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//启动专机 }); } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; AskPallet_Fujiao(); //判断专机满表启动插针 if (CurrMsg.PALLET_COUNT == 8 && !(CurrMsg.STATUS == 1 || CurrMsg.STATUS == 2 || CurrMsg.STATUS == 3)) { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 } if (CurrMsg.STATUS == 1) //判断插针就绪 { //判断其他专机非放行状态 var d2 = DeviceBase.GetDevice("E02202"); if (d2.CurrMsg?.STATUS == 2) { return; } var d3 = DeviceBase.GetDevice("E02203"); if (d3.CurrMsg?.STATUS == 2) { return; } var d4 = DeviceBase.GetDevice("E02204"); if (d4.CurrMsg?.STATUS == 2) { return; } //放行后等10秒再次放行 if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 10) { return; } LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; Task.Run(() => { //System.Threading.Thread.Sleep(5000);//5s后放行 GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行专机 }); } else { } }
private void MQ_singleArrivalEvent(string data) { ShowMsg(data); MsgBase msg = null; try { msg = JsonConvert.DeserializeObject <MsgBase>(data); } catch (Exception ex) { string errMsg = "协议格式错误!"; MyLog.WriteLog(errMsg, ex); ShowMsg(errMsg); return; } //判断时间戳在启动时间之前的信息丢弃 DateTime dtMsg; if (DateTime.TryParse(msg.time_stamp, out dtMsg)) { if (dtMsg < dtStart) { return; } } List <string> jiaobiaoNos = new List <string>() { "E00113", "E00114", "E00115", "E00117", "E02001", "E02101", "E02201"//先跑初调1和复校1 }; try { if (msg.MESSAGE_TYPE == "plc") { if (!jiaobiaoNos.Contains(msg.NO)) { return; } var dev = DeviceBase.GetDevice(msg.NO); PLCMsg plcMsg = JsonConvert.DeserializeObject <PLCMsg>(data); dev.DoWork(plcMsg); this.Dispatcher.Invoke(() => { if (!dgDevices.Items.Contains(dev)) { dgDevices.Items.Add(dev); } }); } } catch (Exception ex) { ShowMsg(ex.Message + ex.StackTrace); } }
private static int LastNo = 1;//专机号1,2 = no%2+1 public override void DoWork(PLCMsg msg) { CurrMsg = msg; return; if (CurrMsg.STATUS == 1)//判断挡停放行 { bool canpass = true; if (count == 8) { //判断托盘到位 string strLastNo = "E0210" + LastNo; var lastDevice = DeviceBase.GetDevice(strLastNo); if (lastDevice.CurrMsg?.PALLET_COUNT == 8)//8个托盘到位了 { //发送3 ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = "E021", NO = strLastNo, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 canpass = true; LastNo++; //换下一个专机 LastNo = LastNo % 2 + 1; count = 0; } else { canpass = false; } } if (canpass) { count++; var ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = (LastNo + 1),//放行命令23 = no + 1 MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行挡停 } } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; if (CurrMsg.STATUS == 1)//TODO:判断专机启用 { //放行后等5秒再次放行 //if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) //{ // return; //} //LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 } else if (CurrMsg.STATUS == 4) //完成,判断后续空闲 { if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) { return; } LAST_PASS_TIME = DateTime.Now; var nxtDevice = DeviceBase.GetDevice("E0100103"); if (nxtDevice.CurrMsg != null && nxtDevice.CurrMsg.STATUS == 0) { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行专机 } } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; //if (CurrMsg.STATUS == 1) //{ // ControlMsg ctlMsg = new ControlMsg() // { // DEVICE_TYPE = msg.DEVICE_TYPE, // NO = msg.NO, // COMMAND_ID = 2, // MESSAGE_TYPE = "control", // time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") // }; // GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行挡停 //} }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; if (CurrMsg.STATUS == 1)//TODO:判断专机启用 { ////放行后等5秒再次放行 //if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) //{ // return; //} //LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, //#if PASS // COMMAND_ID = 2,//直接放行 //#else COMMAND_ID = 3, //#endif MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 } else if (CurrMsg.STATUS == 4) //完成 { //放行后等5秒再次放行 if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) { return; } LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行专机 } else { } }
public override void DoWork(PLCMsg msg) { //if (CurrMsg != null && (Convert.ToDateTime(msg.time_stamp) - Convert.ToDateTime(CurrMsg.time_stamp)).Seconds < 3) // return; CurrMsg = msg; //判断专机满表启动插针 if (CurrMsg.PALLET_COUNT == 3 && !(CurrMsg.STATUS == 1 || CurrMsg.STATUS == 2 || CurrMsg.STATUS == 3)) { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 } if (CurrMsg.STATUS == 1) //判断插针就绪 { //放行后等5秒再次放行 if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) { return; } LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; Task.Run(() => { //System.Threading.Thread.Sleep(5000);//5s后放行 GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行专机 }); } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; if (CurrMsg.STATUS == 1)// { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//启动专机 } else { } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; //判断专机满表启动插针 if (CurrMsg.PALLET_COUNT == 6 && !(CurrMsg.STATUS == 1 || CurrMsg.STATUS == 2 || CurrMsg.STATUS == 3)) { ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg)); //启动专机 } if (CurrMsg.STATUS == 1) //判断插针就绪 { //放行后等5秒再次放行 if (LAST_PASS_TIME.HasValue && (DateTime.Now - LAST_PASS_TIME.Value).Seconds < 3) { return; } LAST_PASS_TIME = DateTime.Now; ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行专机 } else { } }
public abstract void DoWork(PLCMsg msg);
public override void DoWork(PLCMsg msg) { CurrMsg = msg; if (CurrMsg.STATUS == 4 || CurrMsg.STATUS == 0) //机器人抓完后 { if ((DateTime.Now - LastStatus4).Seconds < 10) //两次状态4之间超过10秒认为机器人抓完 { return; } LastStatus4 = DateTime.Now; var stopBefore = DeviceBase.GetDevice("E00216"); var stopAfter = DeviceBase.GetDevice("E00217"); //判断前面托盘到位 && 判断后边托盘到位 if (stopBefore.CurrMsg?.STATUS == 1 && stopAfter.CurrMsg?.STATUS == 1) { #region 启动机器人 ControlMsg pickMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = flags[i % flags.Count], MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; i++; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(pickMsg)); #endregion #region 放行机器人后挡停 Task.Run(() => { System.Threading.Thread.Sleep(6000);//等5秒机器人放完 ControlMsg ctl_af_Msg = new ControlMsg() { NO = stopAfter.NO, DEVICE_TYPE = stopAfter.DEVICE_TYPE, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctl_af_Msg)); }); #endregion #region 放行机器人前挡停 if (i > 0 && i % flags.Count == 0)//判断抓完6个 { Task.Run(() => { System.Threading.Thread.Sleep(2000);//等2秒机器人抓走 ControlMsg ctl_br_Msg = new ControlMsg() { NO = stopBefore.NO, DEVICE_TYPE = stopBefore.DEVICE_TYPE, COMMAND_ID = 2, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctl_br_Msg)); }); } #endregion } } }
private static int LastNo = 1;//专机号1,2,3,4 = (no % 4) + 1 public override void DoWork(PLCMsg msg) { CurrMsg = msg; return; if (CurrMsg.STATUS == 1)//判断挡停放行 { bool canpass = true; if (count == 8) { //判断托盘到位 string strLastNo = "E0220" + LastNo; var lastDevice = DeviceBase.GetDevice(strLastNo); if (lastDevice.CurrMsg?.PALLET_COUNT == 8)//8个托盘到位了 { //发送3 ControlMsg ctlMsg = new ControlMsg() { DEVICE_TYPE = "E022", NO = strLastNo, COMMAND_ID = 3, MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//启动专机 canpass = true; LastNo++;//换下一个专机 LastNo = LastNo % 4 + 1; count = 0; } else { canpass = false; } } if (canpass) { count++; var ctlMsg = new ControlMsg() { DEVICE_TYPE = msg.DEVICE_TYPE, NO = msg.NO, COMMAND_ID = (LastNo + 1),//放行命令2345 = no + 1 MESSAGE_TYPE = "control", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") }; GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行挡停 } //int cmdid = 0; ////判断挡停后边专机空闲 //var nxtDevice1 = DeviceBase.GetDevice("E02201"); //var nxtDevice2 = DeviceBase.GetDevice("E02202"); //var nxtDevice3 = DeviceBase.GetDevice("E02203"); //var nxtDevice4 = DeviceBase.GetDevice("E02204"); //if (nxtDevice1.CurrMsg?.PALLET_COUNT < 8) //{ // cmdid = 2; //} //else if (nxtDevice2.CurrMsg?.STATUS < 8) //{ // cmdid = 3; //} //else if (nxtDevice3.CurrMsg?.STATUS < 8) //{ // cmdid = 4; //} //else if (nxtDevice4.CurrMsg?.STATUS < 8) //{ // cmdid = 5; //} //else //{ //} //if (cmdid != 0 && (DateTime.Now - LastCount8).Seconds > 20)//每放8个等20秒 //{ // count++; // if (count % 8 == 0) // LastCount8 = DateTime.Now; // var ctlMsg = new ControlMsg() // { // DEVICE_TYPE = msg.DEVICE_TYPE, // NO = msg.NO, // COMMAND_ID = cmdid, // MESSAGE_TYPE = "control", // time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") // }; // GlobalData.MQ.SentMessage(JsonConvert.SerializeObject(ctlMsg));//放行挡停 //} } else { } }
private void MiReSendMsg_Click(object sender, RoutedEventArgs e) { MenuItem mi = sender as MenuItem; ContextMenu ctxMenu = mi.Parent as ContextMenu; DataGrid dataGrid = ctxMenu.PlacementTarget as DataGrid; if (dataGrid.SelectedItems != null && dataGrid.SelectedItems.Count > 0) { foreach (var item in dataGrid.SelectedItems) { DeviceBase device = item as DeviceBase; if (device is StopDevice) { try { StopDevice stop = device as StopDevice; PLCMsg msg = new PLCMsg() { NO = stop.NO, DEVICE_TYPE = stop.DEVICE_TYPE, PALLET_COUNT = stop.PALLET_COUNT, STATUS = stop.STATUS, MESSAGE_TYPE = "plc", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") }; string strMsg = JsonConvert.SerializeObject(msg); viewModel?.mqClient?.SentMessage(strMsg); MessageBox.Show("发送挡停信息完毕!"); } catch (Exception ex) { MyLogLib.MyLog.WriteLog("手动发送挡停信息失败!", ex); MessageBox.Show("发送挡停信息失败!"); } } else if (device is MachineDevice) { try { MachineDevice machine = device as MachineDevice; PLCMsg msg = new PLCMsg() { NO = machine.NO, DEVICE_TYPE = machine.DEVICE_TYPE, PALLET_COUNT = machine.PALLET_COUNT, STATUS = machine.STATUS, MESSAGE_TYPE = "plc", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") }; string strMsg = JsonConvert.SerializeObject(msg); viewModel?.mqClient?.SentMessage(strMsg); MessageBox.Show("发送挡停信息完毕!"); } catch (Exception ex) { MyLogLib.MyLog.WriteLog("手动发送专机信息失败!", ex); MessageBox.Show("发送专机信息失败!"); } } else if (device is ScanDevice) { try { StopDevice stop = (device as ScanDevice).Stop; if (stop == null) { return; } PLCMsg msg = new PLCMsg() { NO = stop.NO, DEVICE_TYPE = stop.DEVICE_TYPE, PALLET_COUNT = stop.PALLET_COUNT, STATUS = stop.STATUS, MESSAGE_TYPE = "plc", time_stamp = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") }; string strMsg = JsonConvert.SerializeObject(msg); viewModel?.mqClient?.SentMessage(strMsg); MessageBox.Show("上传档停状态完毕!"); } catch (Exception ex) { MyLogLib.MyLog.WriteLog("手动发送挡停信息失败!", ex); MessageBox.Show("发送挡停信息失败!"); } } } } }
public override void DoWork(PLCMsg msg) { CurrMsg = msg; }
public override void DoWork(PLCMsg msg) { }