2、脚本基础回顾:Python语法速览、变量与数据类型、条件判断与循环、函数定义
说实话,很多做自动化的人一听到「学编程」就头大。我当年也是这么过来的。但后来我发现,你不需要成为Python专家,只需要掌握几个核心套路,就能搞定90%的配方切换脚本。
这一章,我就带你快速过一遍这些核心套路。别怕,咱们不讲那些花里胡哨的语法糖,只讲你在配方脚本里真正用得上的东西。
2.1 Python语法速览:先看个大概
Python这语言,说白了就是「用缩进代替大括号」。你想想看,写C#或Java时,一个花括号忘了对齐,编译就报错。Python更狠——它直接看你的缩进层级来判断代码块。
核心原则:同一层级的代码,缩进必须一致。我习惯用4个空格,不用Tab。为什么?因为不同编辑器对Tab的解释不一样,容易出鬼。
来看个最简单的例子:
# 这是我的第一个配方脚本雏形
recipe_name = "胶水A"
print("当前配方:", recipe_name)
if recipe_name == "胶水A":
print("开始执行胶水A的工艺参数")
# 这里缩进了4个空格
else:
print("切换到其他配方")
# 这里也缩进了4个空格
看到了吗?if 和 else 下面的代码都缩进了。Python就是靠这个来识别「哪些代码属于这个条件分支」。
我的习惯:在VS Code里设置「将Tab转换为空格」,然后缩进宽度设为4。一劳永逸。
2.2 变量与数据类型:配方里的「容器」
变量是什么?就是给数据贴个标签。在配方脚本里,变量用来存配方名称、温度设定值、压力上限、计时器数值……
Python的变量不需要声明类型,直接赋值就行。但这不代表类型不重要——我踩过这个坑。
2.2.1 常用数据类型
| 类型 | 写法示例 | 配方场景举例 |
|---|---|---|
| 整数 (int) | temp = 120 |
温度设定值、计时秒数 |
| 浮点数 (float) | pressure = 3.5 |
压力值、流量比例 |
| 字符串 (str) | name = "胶水A" |
配方名称、批号、操作员ID |
| 布尔值 (bool) | is_active = True |
配方启用状态、报警标志 |
| 列表 (list) | steps = ["加热", "搅拌", "冷却"] |
工艺步骤序列、参数集合 |
| 字典 (dict) | recipe = {"name":"胶水A", "temp":120} |
配方完整参数表 |
我个人最常用的是字典。为什么?因为一个配方就是一堆键值对——配方名、温度、压力、时间……用字典存,结构清晰,取用方便。
# 一个典型的配方字典
recipe_params = {
"name": "胶水A",
"mix_temp": 120,
"mix_pressure": 2.5,
"mix_time": 180,
"cool_temp": 40
}
# 取值
print(recipe_params["mix_temp"]) # 输出 120
# 改值
recipe_params["mix_temp"] = 130
我曾经踩过的坑:从PLC读回来的数据,经常是字符串格式的"120",不是整数120。直接拿去做数学运算会报错。所以每次从外部接口拿数据,我都会先做类型转换:temp = int(raw_value)。
2.3 条件判断与循环:让脚本「做决策」
配方自动切换的核心逻辑,说白了就是两件事:判断当前状态和重复执行动作。条件判断和循环就是干这个的。
2.3.1 if / elif / else 判断
配方切换时,最常见的判断就是「当前在跑哪个配方?下一步该切到哪个?」
current_recipe = "胶水A"
next_recipe = "胶水B"
if current_recipe == "胶水A" and next_recipe == "胶水B":
print("执行A→B切换流程")
# 这里写切换逻辑:关闭A阀门,打开B阀门,调整温度……
elif current_recipe == "胶水B" and next_recipe == "胶水C":
print("执行B→C切换流程")
else:
print("未定义的切换路径,请检查配方表")
# 这里可以触发报警
你想想看,如果生产线有10种配方,两两组合就有45种切换路径。用if-else硬写会疯掉。后面章节我会教你用「切换矩阵」来优雅解决这个问题。
2.3.2 for 循环与 while 循环
循环在配方脚本里主要干两件事:遍历配方步骤和等待条件满足。
# 遍历配方步骤(for循环)
recipe_steps = ["预热", "加料", "搅拌", "冷却", "出料"]
for step in recipe_steps:
print(f"正在执行步骤: {step}")
# 实际项目中,这里会调用PLC接口执行该步骤
# 并等待步骤完成信号
# 等待温度到达设定值(while循环)
set_temp = 120
current_temp = 25
while current_temp < set_temp:
print(f"当前温度: {current_temp}°C, 目标: {set_temp}°C")
# 这里模拟温度上升
current_temp += 5
# 实际项目中,这里会读取PLC温度值
print("温度已到达设定值")
避坑指南:while循环一定要有退出条件,否则就是死循环。我曾经在调试时忘了更新循环变量,结果脚本卡死,PLC那边一直收不到下一步指令。后来我养成了一个习惯:在while循环里加一个超时计数器,超过一定次数就强制退出并报警。
2.4 函数定义:把逻辑「打包」
函数是什么?就是把一段重复用的代码打包,起个名字,随叫随到。
在配方脚本里,函数特别适合封装那些「反复出现」的操作,比如:读取配方参数、执行切换步骤、记录日志。
# 定义一个函数:执行配方切换
def switch_recipe(from_recipe, to_recipe):
"""
从当前配方切换到目标配方
参数:
from_recipe: 当前配方名称
to_recipe: 目标配方名称
返回:
True 表示切换成功,False 表示失败
"""
print(f"开始切换: {from_recipe} → {to_recipe}")
# 1. 停止当前配方
stop_current_recipe(from_recipe)
# 2. 执行清洗/吹扫(如果需要)
if need_clean(from_recipe, to_recipe):
run_clean_cycle()
# 3. 加载目标配方参数
load_recipe_params(to_recipe)
# 4. 启动目标配方
start_recipe(to_recipe)
print("切换完成")
return True
# 调用函数
result = switch_recipe("胶水A", "胶水B")
if result:
print("切换成功,继续生产")
else:
print("切换失败,请人工干预")
你看,把切换逻辑封装成函数后,主程序就变得非常清晰。而且这个函数可以在多个地方复用——手动切换、自动切换、异常恢复时都能调用。
2.4.1 函数的参数与返回值
| 概念 | 说明 | 配方场景示例 |
|---|---|---|
| 位置参数 | 按顺序传入 | switch_recipe("A", "B") |
| 默认参数 | 不传时使用默认值 | def switch_recipe(from_r, to_r, auto_clean=True) |
| 返回值 | 函数执行后返回结果 | return True/False 表示切换成败 |
| 文档字符串 | 函数说明,方便别人理解 | 用三引号写在函数第一行 |
我的建议:每个函数都写文档字符串。哪怕这个脚本只有你一个人用。为什么?因为三个月后你再看自己写的代码,如果没有注释,你可能会问「这谁写的?」——然后发现就是你自己。
2.5 本章知识结构图
下面这张图把本章的核心知识点串起来了。你可以把它当作一张「速查地图」,写脚本时忘了什么,回来瞄一眼就行。
2.6 本章小结
这一章我们快速过了一遍Python在配方脚本里最常用的几个基础点:
- 语法速览——记住缩进规则,这是Python的命根子
- 变量与数据类型——字典是配方数据的最佳容器,别忘了类型转换
- 条件判断与循环——if-else做决策,for/while做重复,while记得加超时
- 函数定义——把切换逻辑打包成函数,复用性强,代码干净