EP10 · 讲义
Genesis2000 Python 脚本实战 · 第10集 实战整合——一个完整的自动化流程
本集学什么
- 零基础可懂
- 学完能写出自己的自动化流程
- 每一步标注出自哪一集
这集是收官实战。我们从头写一个真实场景的自动化脚本,六步走完一次标准料号处理。 每一步都标注它用到的封装出自哪一集——你会发现,前九集的知识点全部上场。
回顾:工具箱盘点
- 通信(2集)
- 查询(3集)
- 命令(4集)
- 入口(5集)
- 业务(6集)
- 界面(7集)
- 数据库(8集)
- 外围(9集)
- 九集走下来,工具箱已经完整
- 这一集把它们拼成一台会自己跑的机器
九集走下来,我们有了完整的工具箱:通信、查询、命令、入口、业务、界面、数据库、外围模块。 这一集把它们拼成一台会自己跑的机器。任务定义成六步,现在开始。
任务定义
- 打开料号
- 锁定检查
- 矩阵层别
- ERP 参数
- 生成结果
- 企微通知
任务是这样的:脚本启动时,Genesis 已经把料号名放进环境变量。我们要检查它有没有打开,没有就打开。 然后检查锁定、读矩阵层别、查 ERP 参数、生成输出,最后推送通知。六步走完,一次标准料号处理结束。
骨架:入口与环境变量(第 5 集)
from MainClasses import Main
Do = Main()
job = os.environ.get('JOB', '').lower() # Genesis 注入- Main 实例化只是初始化,通信从下一次方法调用开始
骨架从入口开始,第 5 集讲过:实例化 Main,从环境变量拿料号名。 第 5 集也讲过:Main 实例化只是初始化,真正的通信从下一个方法调用开始。
第一步:打开与锁定检查(第 2/4/7 集)
if not Do.isjobopened(job):
Do.openjob(job)
lock = Do.get_job_lock_list()
if job in lock:
Gui.errorbox(mess="被占用")
- 第 2 集的命令往返 + 第 4 集的锁定列表 + 第 7 集的弹窗
第一步,检查料号是否已打开,没有就打开——第 2 集讲过的命令往返,在这里就是一行。 锁定检查用第 4 集讲过的 get_job_lock_list:读锁定列表,被占用就弹错误框告诉操作员是谁在占用——第 7 集的界面封装。
第二步:读取矩阵层别(第 3 集)
matrix = Do.ask_matrix_info(job)
sm_lays = matrix.get('防焊层别', [])drl_lays = matrix.get('钻孔层别', [])第二步读矩阵。第 3 集讲过的 ask_matrix_info,一次调用拿到全部层别,按中文类别取用。 防焊层、钻孔层直接按类别名取列表——第 3 集那些正则归类的脏活,已经替你干完了。
第三步:ERP 参数(第 6/8 集)
erp = my_value() # 组合注入(第 6 集)
panel = erp.get_panel_info_pro(job) # 一次取齐
- 30+ 字段变体的归一在方法内部完成
- 底层数据库操作走第 8 集的封装
第三步查 ERP。第 6 集讲过的 my_value,实例化时把数据库、界面、命令服务全部注入。 get_panel_info_pro 一个调用把拼板参数一次拿齐——三十多个字段变体的归一在方法内部完成;底层数据库操作走第 8 集的封装。
第四步:生成输出(第 4 集)
Do.dataoutput(...)
# 底层:VOF 关错误中断 → skip hook → COM → VON 恢复
- 第 4 集的四步套路(VOF 错误跳过版),站好最后一班岗
第四步生成输出。第 4 集讲过的 dataoutput,参数传好,一行完成。 底层还是那个四步套路:关错误中断、跳钩子、执行、恢复。一百二十个命令共用的骨架,在这里站好最后一班岗。
第五步:校验与通知(第 9 集)
md5 = MainMd5()._get_file_md5_code(输出文件) # 校验
WeChatMessage().send_text_message(
to_users=['CAM管理员'], text='流程完成') # 通知
第五步收尾。先用第 9 集讲过的 MD5 校验确认产出完整,再推企微通知。 到这里六步全部完成:入口、打开、检查、查询、生成、通知。每一行的背后,都是前九集讲过的封装在默默工作。
健壮性收尾(第 5/6/7 集)
- STATUS 返回码判断
- 异常弹窗提示
- restart_program 自愈重启
实战脚本还要考虑健壮性。每个关键操作判断返回码;数据库异常弹窗提示——第 6 集那四十处错误处理的模式。 长时间任务状态异常时,用第 5 集讲的 restart_program 原地重启自愈。防御措施加齐,脚本才敢交给生产环境无人值守。
四层回顾:一条命令的一生(第 1-5 集)
Do.xxx() → Main → MainLCM → MainInfo → InCAM
→ stdout 协议帧 → Genesis → stdin 应答 → 返回值
- 整个 py3_package,就是这条链路的工程化
收官之际,回头看那条链路。你调用的每一个方法,都从上往下穿过四层,最终变成标准输出里一行带前缀的命令。 而 Genesis 的应答,又沿着同样的路径原路返回,变成你代码里的一个返回值。整个 py3_package,就是这条链路的工程化。
完整脚本一览
# 入口(第5集)
Do = Main(); job = os.environ.get('JOB')# 打开与锁定(第2/4/7集)
Do.openjob(job) if not Do.isjobopened(job)
lock = Do.get_job_lock_list()
# 矩阵(第3集)
matrix = Do.ask_matrix_info(job)
# ERP(第6/8集)
panel = my_value().get_panel_info_pro(job)
# 输出(第4集)
Do.dataoutput(...)
# 通知(第9集)
WeChatMessage().send_text_message(...)
把六步合起来看全貌:入口、打开、检查、查询、生成、通知,总共二十几行代码。 没有这一套封装的话,这二十几行背后要自己写通信协议、解析查询结果、拼接几十条命令、对接通知接口——几百行的活。这就是 py3_package 的价值:把精力放在业务上,而不是协议细节上。
系列总结
十集讲完了。我们从最底层的通信协议出发,走过查询、命令封装、主类入口,再进入料号业务、界面交互、数据库、外部接口,最后完成实战整合。 希望这个系列,让你写脚本的时候更有底气——现在你不仅会用这个包,还知道它每一层为什么这样设计。谢谢观看,我们下一个系列见。
零壹AI工作室出品 · 《用 Python 驱动 Genesis2000》免费公开课 · www.binwindai.com