예제 #1
0
        /*
         *
         *     换型任务
         *
         * */

        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;                                                                                                                        // 清空
                }
            }
        }
예제 #2
0
        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
            {
            }
        }