/* * * 换型任务 * * */ private void ChangeOverTask() { if (GenericOp.EStop || !GenericOp.AutoMode) { return;// 如果急停,或者手动模式,则不做换型检查。 } // 做换型检查 foreach (hyWorkFlow wf in workGroup.workFlowList) { if (wf.carrier.status == hyCarrier.STATUS.IN_STATION) {// 只对夹具状态为 IN_STATION 的夹具,进行换型检查。 // 查看当前是否有需要换型的夹具,主要是检查 endingTime if (SystemMinutes >= wf.carrier.endingTime) { // 系统时间到了夹具需要切换的时间后,需要进行切换处理。 wf.carrier.status = hyCarrier.STATUS.REQUEST_CHANGE_OVER; // 请求换型。请求换型状态不用保存到XML,只有正在换型才保存到XML。 //workGroup.UpdateXmlNodeCarrierStatus(wf.carrier.id, wf.carrier.status, wf.carrier.pos);// 更新夹具XML信息 // 创建任务 ABTask abTask = new ABTask(wf); abTask.AB_TASK_A = wf.carrier_pos; // 起点 abTask.AB_TASK_B = wf.NextCarrierPos(); // 终点 abTask.taskStatus = ABTask.STATUS.IDLE; // 任务状态 abTask.carrier = wf.carrier; //载具 layoutDrawing1.taskList.Add(abTask); // 添加到任务列表中去 } } } // ----------------------------------------------------------------- // // 以下部分就是:执行换型任务 // // 查询是否有需要换型的任务,并添加到任务列表中去。 // 查询夹具的状态 if (layoutDrawing1.currTask == null) { if (layoutDrawing1.taskList.Count != 0) { layoutDrawing1.currTask = layoutDrawing1.taskList[0]; // 获取当前任务 layoutDrawing1.currTask.carrier.status = hyCarrier.STATUS.DOING_CHANGE_OVER; //正在换型 workGroup.UpdateXmlNodeCarrierStatus(layoutDrawing1.currTask.carrier.id, layoutDrawing1.currTask.carrier.status, layoutDrawing1.currTask.carrier.pos); // 更新夹具XML信息 // 更新任务信息,记录到xml中 layoutDrawing1.currTask.carrier.pos = layoutDrawing1.currTask.AB_TASK_A; layoutDrawing1.UpdateXmlNodeTaskInfo(ABTask.STATUS.IDLE, layoutDrawing1.currTask.AB_TASK_A, layoutDrawing1.currTask.AB_TASK_B, layoutDrawing1.currTask.carrier.id); } } else { if (layoutDrawing1.currTask.taskStatus == ABTask.STATUS.STOP) { // 执行任务列表中的任务,执行完成的,就从任务列表中删除。 // layoutDrawing1.currTask.carrier.UpdateCarrierInfo(layoutDrawing1.currTask.AB_TASK_B); // 更新夹具位置(已经到达B点) layoutDrawing1.currTask.carrier.pos = layoutDrawing1.currTask.AB_TASK_B; workGroup.UpdateXmlNodeCarrierStatus(layoutDrawing1.currTask.carrier.id, layoutDrawing1.currTask.carrier.status, layoutDrawing1.currTask.carrier.pos); // 更新夹具XML信息. layoutDrawing1.taskList.Remove(layoutDrawing1.currTask); // 任务执行结束,就移除这个项目,在下一次循环的时候就会执行下一个任务。 layoutDrawing1.currTask = null; // 清空 } } }
private void timerLoadData_Tick(object sender, EventArgs e) { timerLoadData.Stop(); bool newflag = false; string path = "LOG\\"; string fname = path + "hyLog.log"; string dfname = "";// path + "hyData" + DateTime.Now.ToString("yyyyMMdd-HHmm") + ".xml"; byte[] dataByte = new byte[13]; try { if (!Directory.Exists(path)) {// 检查LOG目录是否存在 Directory.CreateDirectory(path); } if (!File.Exists(fname)) {// 检查LOG文件是否存在 FileStream fs = File.Create(fname); fs.Close(); } FileStream logfile = new FileStream(fname, FileMode.Open); logfile.Seek(0, SeekOrigin.Begin); logfile.Read(dataByte, 0, dataByte.Length); logfile.Close(); string date = System.Text.Encoding.ASCII.GetString(dataByte); dfname = path + "hyData" + date + ".xml"; if (!File.Exists(dfname)) { // 检查数据文件是否存在 newflag = true; // 新建数据文件 } else { DialogResult dr = MessageBox.Show("是否新建一个生产数据文件?", "提示", MessageBoxButtons.OKCancel); if (dr == DialogResult.OK) { // 新建数据文件 newflag = true; } } if (newflag) {// 新建数据文件 date = DateTime.Now.ToString("yyyyMMdd-HHmm"); dfname = path + "hyData" + date + ".xml"; logfile = new FileStream(fname, FileMode.Create); dataByte = System.Text.Encoding.Default.GetBytes(date); logfile.Write(dataByte, 0, dataByte.Length); logfile.Flush(); logfile.Close(); ABTask.Init(); workGroup = new hyWorkGroup(); layoutDrawing1.workGroup = workGroup; processPanelCtrl1.workGroup = workGroup; workGroup.NewWorkGroup(dfname);// 新建工作组 } else {// 加载原始数据 // 加载 workgroup 数据 ABTask.Init(); workGroup = new hyWorkGroup(); layoutDrawing1.workGroup = workGroup; processPanelCtrl1.workGroup = workGroup; workGroup.LoadWorkGroup(dfname); // 加载已有工作组 processPanelCtrl1.UpdateSequentialChart(); // 更新时序图 //TODO: 加载未完成任务信息 layoutDrawing1.LoadXmlNodeTaskInfo(); // 绘制尚未结束的夹具信息 foreach (hyWorkFlow wf in workGroup.workFlowList) { if ((wf.carrier.pos >= hyWorkFlow.POS_FIRST_STATION) && (wf.carrier.pos <= hyWorkFlow.POS_LAST_STATION)) { wf.carrier.currPosDraw = new ServoPoint(LayoutDrawing.loadPoints[wf.carrier.pos].X, LayoutDrawing.loadPoints[wf.carrier.pos].Z); layoutDrawing1.carrierList.Add(wf.carrier); } } layoutDrawing1.Invalidate();// 更新动画 } ManualForm.layoutDrawing1 = this.layoutDrawing1; // 手动界面绘图用。 timer1.Start(); // 加载完成后开启。 timer2.Start(); // 加载工艺列表 LoadProcessGroup(); // 加载人员列表 LoadPersonGroup(); } catch { } }