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 本章知识结构图

下面这张图把本章的核心知识点串起来了。你可以把它当作一张「速查地图」,写脚本时忘了什么,回来瞄一眼就行。

Python脚本基础回顾 - 知识结构图 Python脚本基础回顾 语法速览 变量与数据类型 条件判断与循环 函数定义 缩进规则(4空格) 注释:单行 # / 多行 """ int / float / str / bool 列表 list / 字典 dict 类型转换:int() str() if / elif / else 条件分支 for 循环:遍历步骤序列 while 循环:等待条件满足 def 函数名(参数): 参数:位置 / 默认 / 关键字 返回值 return / 文档字符串 💡 核心思路:掌握这四块,就能写出80%的配方切换脚本 后续章节会基于这些基础,构建完整的自动切换系统

2.6 本章小结

这一章我们快速过了一遍Python在配方脚本里最常用的几个基础点:

  • 语法速览——记住缩进规则,这是Python的命根子
  • 变量与数据类型——字典是配方数据的最佳容器,别忘了类型转换
  • 条件判断与循环——if-else做决策,for/while做重复,while记得加超时
  • 函数定义——把切换逻辑打包成函数,复用性强,代码干净