PCB LDI 实现周期自动更新 实现思路

一.基本思路整理如下:

二.封周期启动程序C#代码(部份代码)

       /// <summary>
        /// 单个生产型号 更新周期
        /// </summary>
        /// <param name="pdctno"></param>
        /// <param name="gpid"></param>
        /// <returns></returns>
        private MOD_ReturnDate BatUpdateWeek(string pdctno, int gpid)
        {

            string OutFilePath = Application.StartupPath + @"log\AutoUpdateWeek.txt";
            if (File.Exists(OutFilePath)) File.Delete(OutFilePath);
            string Script_Path = Application.StartupPath + @"\GenesisScript.exe";
            string strjob = pdctno.ToLower();
            Script_Run(Script_Path, gpid, strjob, "", "Param=AutoUpdateWeek");
            Stopwatch sw = new Stopwatch();
            sw.Start();
            MOD_ReturnDate ReturnDate;
            while (!File.Exists(OutFilePath))
            {
                Thread.Sleep(1000);
                if (sw.ElapsedMilliseconds > 60000) //一分钟后脚本还未执行返回信息,关闭进程
                {
                    Process[] arrayProcess = Process.GetProcesses();
                    foreach (Process p in arrayProcess)
                    {
                        if (p.ProcessName.ToLower() == "genesisscript")
                        {
                            p.Kill();
                        }
                    }
                    break;
                }
            }
            sw.Stop();
            string errinfo = "";
            if (File.Exists(OutFilePath))
            {
                string AutoUpdateWeekJSON = File.ReadAllText(OutFilePath);
                ReturnDate = JsonHelper.DeserializeJsonToObject<MOD_ReturnDate>(AutoUpdateWeekJSON);
            }
            else
            {
                errinfo = "超时";
                ReturnDate = new MOD_ReturnDate() { JobName = strjob, tgzJOBname = "", State = 0, ReturnInfo = errinfo };
            }
            return ReturnDate;
        }
        /// <summary>
        /// 启动循环遍历
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Click(object sender, EventArgs e)
        {
            string[] jobList =  {"A0001A0", "A0001A1" };   //手动赋值,在实际应用:这里数据应该是从DB数据库,由MES过数触发写入,
            foreach (var item in jobList)
            {
                int pid = getPIDonly();
                if (pid > -1)
                {
                    MOD_ReturnDate ReturnDate = BatUpdateWeek(item, pid);
                }
                else
                {
                    MessageBox.Show("未检测到G启动");
                    break;
                }
            }
        }

三.更新周期脚本C#代码(部份代码)

        /// <summary>
        /// 自动调TGZ更新周期
        /// </summary>
        /// <param name="JOBname"></param>
        /// <param name="ReturnInfo"></param>
        /// <param name="ParentTechName">外层干膜|阻焊|字符  填写其中一个或者不填检测全部</param>
        /// <returns>1成功   0失败(异常)   -1不存在周期</returns>
        public static int AutoUpdateWeekScript(string JOBname, ref string tgzJOBname, ref string ReturnInfo, string ParentTechName = "")
        {
            string WeekFormat = ""; //WWYY YYWW等
            string WeekFormatNum = "";//2618  1826 等
            int isOK = 0;
            isOK = AutoUpdateWeek.getWeekFormat(JOBname, ref WeekFormat, ref ReturnInfo, ParentTechName); //抓取流程指示 周期格式
            if (isOK == 1)
            {
                isOK = InputTGZ(JOBname, ref tgzJOBname, ref ReturnInfo);//导入TGZ
                if (isOK == 1)
                {
                    int AddDay = 0;//延后封周期天数
                    DateTime CurrentDateWeekTime = getDateTimeNow(JOBname, ref AddDay);//获取封周期时间
                    WeekFormatNum = AutoUpdateWeek.getWeek(CurrentDateWeekTime, WeekFormat, AddDay);

                    string job = tgzJOBname;
                    isOK = AutoUpdateWeek.UpdateWeekScript(job, WeekFormatNum, ref ReturnInfo); //UI 更新genesis JOB 周期  (处理当前Job,处理后不关闭Job窗口)
                    if (isOK == 1)
                    {
                        g.COM($"check_inout,mode=out,type=job,job={job}");
                        g.COM($"save_job,job={job},override=no");
                        string OutDir = "E:/work/" + job + "/";
                        if (!Directory.Exists(OutDir)) Directory.CreateDirectory(OutDir);
                        g.COM($"export_job,job={job},path={OutDir},mode=tar_gzip,submode=full,overwrite=yes");
                    }
                    g.COM($"check_inout,mode=in,type=job,job={job}");
                    g.COM($"close_job,job={job}");
                    g.COM($"close_form,job={job}");
                    g.COM($"close_flow,job={job}");
                }
            }
            return isOK; //1成功   0失败(异常)   -1不存在周期
        }

     /// <summary>
        /// UI 更新genesis JOB 周期  (处理当前Job,处理后不关闭Job窗口)
        /// </summary>
        /// <param name="JOBname"></param>
        /// <param name="WeekFormatNum"></param>
        /// <param name="ReturnInfo"></param>
        /// <returns></returns>
        public static int UpdateWeekScript(string JOBname, string WeekFormatNum, ref string ReturnInfo)
        {
            if (string.IsNullOrEmpty(WeekFormatNum))
            {
                ReturnInfo = "周期未计算,不允许执行";
                return 0;
            }

            job job_ = new G_Helper.job();
            step step_ = new G_Helper.step(JOBname);
            List<string> SETstepList = new List<string> { "cam", "set" };
            List<string> stepList = job_.get_step_list(JOBname).Where(tt => SETstepList.IndexOf(tt) > -1).ToList();
            List<string> layerList = new List<string>();
            if (stepList.Count > 0)
            {
                layerList = step_.get_layer_list(stepList[0]).Where(tt => tt.StartsWith("datecode")).ToList();
            }
            int WeekLength = WeekFormatNum.Length;
            int UpdateDateCodeLayerNum = 0;
            bool WeekLengthDiff = false;
            string UpdateDateCodeStr = "周期更新信息\r\n";
            if (layerList.Count > 0)
            {
                foreach (var stepname_ in stepList)
                {
                    bool isStepUpdate = false;
                    step_.open_step(stepname_);
                    foreach (var layername in layerList)
                    {
                        g.COM($"display_layer,name={layername},display=yes,number=1");
                        g.COM($"work_layer,name={layername}");
                        g.COM("filter_reset,filter_name=popup");
                        g.COM("adv_filter_set,filter_name=popup,update_popup=yes,fontname=datecode");
                        g.COM("adv_filter_set,filter_name=popup,update_popup=no,txt_types=string");
                        g.COM("filter_area_strt");
                        g.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no");
                        int datecodeCount = int.Parse(g.COM(g._get_select_count));  //datecode字体个数
                        if (datecodeCount > 0)
                        {
                            g.COM("clear_highlight");
                            g.COM("sel_clear_feat");
                            g.COM($"adv_filter_set,filter_name=popup,update_popup=yes,str_len=yes,min_str_len={WeekLength},max_str_len={WeekLength}");
                            g.COM("filter_area_strt");
                            g.COM("filter_area_end,layer=,filter_name=popup,operation=select,area_type=none,inside_area=no,intersect_area=no");
                            int datecodeWeekLengthCount = int.Parse(g.COM(g._get_select_count));//datecode字体且长度相同个数
                            if (datecodeWeekLengthCount > 0 && datecodeWeekLengthCount == datecodeCount)
                            {
                                g.COM("sel_change_txt,text=" + WeekFormatNum);
                                UpdateDateCodeStr = UpdateDateCodeStr + $"Step名:{stepname_}  Layer名:{layername}  成功 \r\n";
                                UpdateDateCodeLayerNum++;
                                isStepUpdate = true;
                            }
                            else if (datecodeWeekLengthCount > 0 && datecodeWeekLengthCount != datecodeCount)
                            {
                                UpdateDateCodeStr = UpdateDateCodeStr + $"Step名:{stepname_}  Layer名:{layername}  失败(多种周期长度) \r\n";
                                WeekLengthDiff = true;
                            }
                            else
                            {
                                UpdateDateCodeStr = UpdateDateCodeStr + $"Step名:{stepname_}  Layer名:{layername}  失败(周期长不致) \r\n";
                                WeekLengthDiff = true;
                            }
                        }
                        g.COM("filter_reset,filter_name=popup");
                    }
                    if (!isStepUpdate)
                    {
                        step_.close_step();
                    }
                }
            }
            else
            {
                ReturnInfo = "未检测datecode层,无法更新周期";
                return 0;
            }
            if (UpdateDateCodeLayerNum > 0 && !WeekLengthDiff)
            {
                ReturnInfo = UpdateDateCodeStr;
                return 1;
            }
            else if (WeekLengthDiff)
            {
                ReturnInfo = "datecode字体长度与更新周期字体长度不一致\r\n" + UpdateDateCodeStr;
                return 0;
            }
            else
            {
                ReturnInfo = "未检测datecode字体,无法更新周期";
                return 0;
            }
        }

原文地址:https://www.cnblogs.com/pcbren/p/9235766.html

时间: 2024-10-18 04:47:16

PCB LDI 实现周期自动更新 实现思路的相关文章

PCB LDI文件 自动化输出(改造)实现思路

由于工厂采用Liunxs系统输出LDI文件,由于我们数据库是用的Windows Server,编程语言是.net 无法与Liunxs系统进行有效对接, 所以造成才会造成LDI 资料输效率极低,人员工作量大(一天要运行300-400次脚本),连运行脚本都是个力气活了, 看着他们这样工作,感受无比自责,目前LDI改造现状已接近快上线了,现将实现思路整理如下,作个记号 原文地址:https://www.cnblogs.com/pcbren/p/9301801.html

H5+ app自动更新思路

第一种是一次自动更新 1.在服务器需要一个json或html文件,json最好 1 { 2 "state":"yes",//是否自动更新 3 "mark":"1.0.6",//版本号 4 "url":"http:\/\/xx\/appproject\/mm.apk"//更新的应用下载地址 5 } 2.自动更新函数 t是你当前正在运行的app的版本号 //检查自动更新 function s

WinForm通用自动更新器AutoUpdater项目实战

一.项目背景介绍 最近单位开发一个项目,其中需要用到自动升级功能.因为自动升级是一个比较常用的功能,可能会在很多程序中用到,于是,我就想写一个自动升级的组件,在应用程序中,只需要引用这个自动升级组件,并添加少量代码,即可实现自动升级功能.因为我们的程序中可能包含多个类型的文件,比如exe.dll. config.xml.bat等等自定义格式的后缀名文件,所以要支持多文件类型的更新. 本期同样带给大家分享的是阿笨在实际工作中遇到真实项目场景,请跟随阿笨的视角去如何开发实现WinForm通用自动更新

Linux 自动更新系统及手动查看、修改系统时间

当我们在虚拟机装完一个新的centos系统后,虽然在安装时己在ntp设置中选择了上海,但进入到系统,输入date命令时,查看到的系统时间与现时时间是不一样的,我们可以用以上方法来查看,自动更新和修改系统时间 查看系统时间: [[email protected] ~]# date Sat Mar 25 00:47:59 CST 2017 一. Linux 自动更新时间 使用ntpdate命令进行更新: [[email protected] ~]# ntpdate time.nist.gov 24 

在windows平台下electron-builder实现前端程序的打包与自动更新

由于8月份上旬公司开发一款桌面应用程序,在前端开发程序打包更新时遇到一些困扰多日的问题,采用electron-builder最终还是得到解决~ 以下是踩坑的过程及对electron打包与更新思路的梳理,electron打包与更新的正确姿势应该如下图所示 下面将逐一展开描述说明     一.windows系统下环境配置 NPM是随NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用户从NPM服务器下载并安装别人编

cocos2dx 3.1.1 在线热更新 自动更新(使用AssetsManager更新游戏资源包)

为什么要在线更新资源和脚本文件? 简单概括,如果你的游戏项目已经在google play 或Apple Store 等平台上架了,那么当你项目需要做一些活动或者修改前端的一些代码等那么你需要重新提交一个新版本给平台.但是平台审核和具体的上架时间是个不确定的.具体什么时候能上架,主要由具体的平台决定. 如果游戏项目是使用脚本语言进行编写的(如lua.js),那么一旦需要更新,则可以通过从服务器下载最新的脚本和资源,从而跳过平台直接实现在线更新.(有些平台是禁止在线更新资源方式的,但是你懂得) 闲话

高逼格,超简单,实现App自动更新,一个方法搞定

前言 前段时间写了一个篇APP自动更新下载的文章自动更新,一个方法搞定,使用系统的DownloadManager 方法超简洁的实现了apk的下载,不过有好多网友反映有一些机型上面这个方法无法实现下载,经过小编的实验在部分机型上确实会有这个问题,所以其中下载的部分只能通过其它方法搞定了.正好看到网上好多关于使用Retrofit实现下载并且监听进度的文章,并且我一直在看Retrofit的东西但是一直没有机会用到,所以我正好拿这个练练手,最终我使用Retrofit + OkHttp + RxBus +

通过Git WebHooks+脚本实现自动更新发布代码之shell脚本

前文讲述了<通过Git WebHooks+脚本实现自动更新发布代码>,里面提供了一种自动更新发布代码的脚本编写思路.本文的脚本与前文中的思路不太不同.本脚本以capistrano中的一些思想和理念为依据,用简单好理解的shell脚本实现capistrano原本实现的自动化部署部分. 脚本的一些特点和功能: 解决脚本的符号链接问题,准确获取脚本工作目录(从tomcat脚本中学到): 颜色显示,不同级别的信息用不同的颜色显示(共两种方案,前一种从一位不知名的国外工程师处得到,后一种从lnmp1.2

[经验分享]如何让你的网站每天自动更新

相信很多刚刚做网站的站长朋友都有这样的感慨,每天更新网站真的是太累人了.想要提高自己网站的权重就得做到网站每天有更新,又不能一下子就把好几天的文章都给更新了,因为这在搜索引擎看来还是当天发布的,对网站的权重没有任何的作用,有没有什么办法可以让网站做到自动更新呢? 大家知道经常更新对于网站的重要性,搜索引擎喜欢新鲜的内容,如果你的站长期不更新,轻则排名下降,重则被k.好了,闲话少说,下面介绍下网站自动更新思路. 一,老站 这里说的老站不仅是指建站时间长的网站,这样的站不仅有了一定权重,网站也有一定