一.基本思路整理如下:

二.封周期启动程序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();
if (sw.ElapsedMilliseconds > ) //一分钟后脚本还未执行返回信息,关闭进程
{
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 = , 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 > -)
{
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 = ;
isOK = AutoUpdateWeek.getWeekFormat(JOBname, ref WeekFormat, ref ReturnInfo, ParentTechName); //抓取流程指示 周期格式
if (isOK == )
{
isOK = InputTGZ(JOBname, ref tgzJOBname, ref ReturnInfo);//导入TGZ
if (isOK == )
{
int AddDay = ;//延后封周期天数
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 == )
{
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 ;
} 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) > -).ToList();
List<string> layerList = new List<string>();
if (stepList.Count > )
{
layerList = step_.get_layer_list(stepList[]).Where(tt => tt.StartsWith("datecode")).ToList();
}
int WeekLength = WeekFormatNum.Length;
int UpdateDateCodeLayerNum = ;
bool WeekLengthDiff = false;
string UpdateDateCodeStr = "周期更新信息\r\n";
if (layerList.Count > )
{
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 > )
{
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 > && datecodeWeekLengthCount == datecodeCount)
{
g.COM("sel_change_txt,text=" + WeekFormatNum);
UpdateDateCodeStr = UpdateDateCodeStr + $"Step名:{stepname_} Layer名:{layername} 成功 \r\n";
UpdateDateCodeLayerNum++;
isStepUpdate = true;
}
else if (datecodeWeekLengthCount > && 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 ;
}
if (UpdateDateCodeLayerNum > && !WeekLengthDiff)
{
ReturnInfo = UpdateDateCodeStr;
return ;
}
else if (WeekLengthDiff)
{
ReturnInfo = "datecode字体长度与更新周期字体长度不一致\r\n" + UpdateDateCodeStr;
return ;
}
else
{
ReturnInfo = "未检测datecode字体,无法更新周期";
return ;
}
}

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

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

    由于工厂采用Liunxs系统输出LDI文件,由于我们数据库是用的Windows Server,编程语言是.net 无法与Liunxs系统进行有效对接, 所以造成才会造成LDI 资料输效率极低,人员工作 ...

  2. 使用七牛云存储实现Android的自动更新

    为了修复Bug或更新软件,我们通常需要实现自动更新,没有哪一个牛逼的人能够搞到每一个用户的机子去帮他们更新. 1.自动更新的流程 我们将了解一下自动更新的思路.既然软件要自动更新,那么它必须知道自己是 ...

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

    目前我们做的上位机项目还是以Winform为主,在实际应用过程中,可能还会出现一些细节的修改.对于这种情况,如果上位机带有自动更新功能,我们只需要将更新后的应用程序打包放在指定的路径下,可以让用户自己 ...

  4. EntityFrameworkCore 模型自动更新(上)

    话题 嗯,距离上一次写博文已经过去近整整十个月,还是有一些思考,但还是变得懒惰了,心思也不再那么专注,有点耗费时间,学习也有点停滞不前,那就顺其自然,随心所欲吧,等哪天心血来潮,想写了就写写 模型自动 ...

  5. 谈一款MOBA类游戏《码神联盟》的服务端架构设计与实现(更新优化思路)

    注:本文仅用于在博客园学习分享,还在随着项目不断更新和完善中,多有不足,暂谢绝各平台或个人的转载和推广,感谢支持. 一.前言 <码神联盟>是一款为技术人做的开源情怀游戏,每一种编程语言都是 ...

  6. hibernate查询出的实体,set值后,自动更新到数据库

    1.问题症状描述      最近在处理一个新需求问题,代码的大致逻辑是获取一个实体对象,调用该对象的set方法设置其中的某些字段,然后把修改后的实体作为参数供其他地方调用,根据返回值来决定是否更新这个 ...

  7. HBuilderX开发app实现自动更新版本

      需求说明:使用MUI+Vue等技术并且通过HBuilderX打包开发移动app,在有版本更新时需要自动提示用户有新版本,并且可以点击下载自动安装. 思路说明: 应用打开时(使用Vue的生命周期mo ...

  8. QML 从无到有 3 (自动更新)

    新的需求出来啦,需要自动更新功能,不怕程序升级了. 自动更新,QML不好写,需要c++来辅助,这里就涉及QML中调用c++功能(这里就不写了,百度一下,很多). 思路:获取版本>下载程序> ...

  9. 分析nuget源码,用nuget + nuget.server实现winform程序的自动更新

    源起 (个人理解)包管理最开始应该是从java平台下的maven开始吧,因为java的开发大多数是基于开源组件开发的,一个开源包在使用时很可能要去依赖其他的开源包,而且必须是特定的版本才可以.以往在找 ...

随机推荐

  1. 11、scala函数式编程

    1.将函数赋值给变量 2.匿名函数 3.高阶函数 4.高阶函数的类型推断 5.Scala的常用高级函数 6.闭包 7.SAM转换 8.Currying函数 9.return 1.将函数赋值给变量 Sc ...

  2. (转)分布式文件存储FastDFS(三)FastDFS配置

    http://blog.csdn.net/xingjiarong/article/details/50559768 在上一节中我们一起搭建了一个单节点的FastDFS系统,但是仅仅将系统搭建起来是远远 ...

  3. PHP 之base16加密解密封装

    /** * @Description: base16加密 * @Author: Yang * @param $data * @return string */ function base16_enco ...

  4. Docker是什么?可以用Docker做什么?

    作者:刘允鹏 链接:https://www.zhihu.com/question/28300645/answer/67707287 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  5. 怎么设置font awesome图标的大小?

    <i class="fa fa-camera-retro fa-lg"></i> fa-lg <i class="fa fa-camera- ...

  6. 第五节:numpy之数组维度处理

  7. jQuery学习----简单介绍,基本使用,操作样式,动画

    jQuery简单介绍 jq是js的插件库,说白了,jq就是一个js文件 凡事能用jq实现的,js都能实现.但是js能实现的,jq不一定能够实现 jq的引入 http://www.bootcdn.cn ...

  8. GlobalSign 增强型(EV) SSL 证书

    GlobalSign 增强型(EV) SSL 证书,属于最高验证级别的EV SSL,验证域名所有权,进行严格的企业真实身份验证,证书标识企业组织机构名称,强化信任度,浏览器地址栏变绿色.提供40位/5 ...

  9. Maven学习总结(4)——Maven核心概念

    Maven学习总结(四)--Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Maven坐标主要组成 groupId:组织标识 ...

  10. 暑假集训D19总结

    考试 日常爆炸 T1   辣么简单,淼到极致的DP,我竟然打挂了= =,打挂了= =,只拿了75分啊,不能接受啊= = T2   随便找找规律,瞎XX模拟一下就能A的鬼东西,我竟然打了个暴力+Floy ...