2、PLC基础回顾:PLC的工作原理、扫描周期、I/O映射、常用编程语言(梯形图、结构化文本)及与AI集成的接口基础
在AI+PLC架构设计中,PLC(可编程逻辑控制器)是连接物理世界与智能算法的关键执行层。无论是传感器数据采集、模型推理结果的落地执行,还是上位机的调度指令下发,最终都需要通过PLC的I/O通道与现场设备交互。因此,深入理解PLC的工作原理、扫描周期、I/O映射机制以及编程语言特性,是设计可靠AI控制系统的前提。本节将系统梳理这些基础概念,并重点分析它们与AI系统集成时的接口要点。
2.1 PLC工作原理与扫描周期
核心原理:循环扫描的工作方式
PLC本质上是一台专用于工业控制的实时计算机。与普通PC不同,PLC采用循环扫描的工作模式,即CPU按照固定顺序周而复始地执行一系列任务。这种设计保证了控制逻辑的确定性和实时性——无论程序多复杂,每个扫描周期内所有指令都会被执行一次,不存在"某个逻辑被饿死"的情况。
一个完整的扫描周期通常包含以下五个阶段:
| 阶段 | 功能 | 耗时占比 | AI集成关注点 |
|---|---|---|---|
| ① 输入采样 | 读取所有数字量/模拟量输入模块的状态,存入过程映像输入表(PII) | 5%~10% | 采样时刻的一致性决定数据对齐质量 |
| ② 程序执行 | CPU从第一条指令开始执行用户程序,基于PII计算,结果写入过程映像输出表(PIQ) | 60%~80% | 程序执行时间直接影响最小扫描周期 |
| ③ 输出刷新 | 将PIQ中的值一次性传送给物理输出模块,驱动执行器动作 | 5%~10% | 输出刷新是AI决策落地到物理世界的时刻 |
| ④ 通信服务 | 处理与编程器、HMI、上位机、其他PLC的通信请求 | 5%~15% | AI数据采集的实时性受此阶段影响 |
| ⑤ 系统管理 | 自诊断、看门狗复位、系统时间更新等 | <5% | 故障诊断信息对AI运维有价值 |
判断方法:如何评估扫描周期是否满足AI控制需求
在AI+PLC架构中,扫描周期决定了控制回路的基础节拍。评估方法如下:
- 测量当前扫描周期:通过PLC编程软件(如TIA Portal、GX Works、Codesys)的在线监控功能,直接读取当前扫描时间(如"Cycle Time"或"Scan Time")。
- 计算最坏情况:在程序中加入定时器,记录最长扫描周期。通常取"最大值+20%余量"作为设计依据。
- 对比控制需求:如果AI模型推理周期为100ms,而PLC扫描周期为20ms,则PLC可以在5个扫描周期内完成一次模型输出的执行;如果扫描周期为150ms,则AI决策无法在每个扫描周期内被及时执行,需要调整架构。
- 检查通信占用:当AI上位机频繁读写PLC数据时,通信阶段耗时增加,可能导致扫描周期波动。可通过限制通信数据量或使用异步通信方式缓解。
2.2 I/O映射机制:从物理信号到内存变量
核心原理:过程映像与直接访问
PLC通过I/O映射将物理输入/输出信号与内存地址关联。现代PLC普遍采用过程映像(Process Image)机制:
- 过程映像输入表(PII):在输入采样阶段,所有输入模块的信号被批量复制到内存的PII区域。程序执行时只读取PII,不直接访问物理输入端子。
- 过程映像输出表(PIQ):程序执行阶段将计算结果写入PIQ,输出刷新阶段再将PIQ整体推送到物理输出模块。
- 立即I/O访问:某些特殊场合(如高速中断处理)需要绕过过程映像,直接读写物理I/O。此时使用立即指令(如西门子的"立即读/立即写"),但会延长扫描周期。
I/O映射的地址分配规则因PLC品牌而异,但逻辑一致。以西门子S7-1200为例:
// I/O地址映射示例
// 数字量输入:I0.0 ~ I0.7(8位一组)
// 数字量输出:Q0.0 ~ Q0.7
// 模拟量输入:IW64(16位,对应0~27648)
// 模拟量输出:QW80
// 在结构化文本中访问
VAR
sensor_value : INT; // 存储模拟量值
valve_cmd : BOOL; // 阀门控制
END_VAR
sensor_value := IW64; // 读取模拟量输入
valve_cmd := Q0.0; // 直接访问输出位
操作流程:建立AI数据接口的I/O映射表
当AI系统需要与PLC交互时,建议按以下流程设计I/O映射:
- 列出所有需要交换的信号:包括AI需要的传感器数据(输入)、AI输出的控制指令(输出)、状态标志(如"模型运行中")、参数(如阈值设定)。
- 分配数据块(DB):在PLC中创建专用的数据块(如"AI_Interface_DB"),将所有AI交互变量集中存放。这比分散在I/O区更易管理。
- 定义数据类型:明确每个变量的数据类型(BOOL、INT、REAL、ARRAY等),确保与AI侧的数据类型匹配。
- 建立通信映射:通过OPC UA或Modbus将DB变量映射到通信地址,供上位机读写。
| 变量名 | 数据类型 | 地址/偏移 | 方向 | 说明 |
|---|---|---|---|---|
| AI_Sensor_Temp | REAL | DB10.DBD0 | PLC→AI | 温度传感器值(℃) |
| AI_Sensor_Press | REAL | DB10.DBD4 | PLC→AI | 压力值(MPa) |
| AI_Cmd_Valve | BOOL | DB10.DBX8.0 | AI→PLC | 模型输出的阀门开关指令 |
| AI_Setpoint | REAL | DB10.DBD12 | AI→PLC | 模型给出的设定值 |
| AI_Status | BYTE | DB10.DBB16 | PLC→AI | 状态字(0=空闲,1=运行,2=故障) |
2.3 常用编程语言:梯形图与结构化文本
核心原理:IEC 61131-3标准语言
IEC 61131-3定义了PLC的5种编程语言:梯形图(LD)、结构化文本(ST)、功能块图(FBD)、指令表(IL)、顺序功能图(SFC)。在AI+PLC架构中,梯形图和结构化文本最为常用。
梯形图(Ladder Diagram, LD):起源于继电器控制电路,以图形化方式表达逻辑。左母线代表电源,右母线代表地,触点(常开/常闭)串联表示"与",并联表示"或",线圈表示输出。梯形图直观易懂,适合电气工程师维护,但在处理复杂数学运算、循环、数组操作时显得笨拙。
结构化文本(Structured Text, ST):类似Pascal的高级文本语言,支持IF-THEN-ELSE、CASE、FOR、WHILE等控制结构,以及函数、函数块、数组、结构体等复杂数据类型。ST在算法实现、数据处理、与AI模型对接方面具有天然优势。
对比分析:何时选择哪种语言
| 维度 | 梯形图(LD) | 结构化文本(ST) |
|---|---|---|
| 可读性 | 电气工程师易理解 | 软件工程师易理解 |
| 逻辑表达 | 适合位逻辑、互锁、顺序控制 | 适合复杂算法、数据处理 |
| 数学运算 | 较弱,需调用功能块 | 强,直接书写表达式 |
| 数组/结构体 | 不支持或支持有限 | 完整支持 |
| 调试方式 | 在线监控触点/线圈状态 | 变量监视、断点(部分支持) |
| AI集成适配性 | 适合简单开关量控制 | 适合接收模型输出、处理浮点数据 |
在实际项目中,推荐混合编程策略:基础逻辑(急停、互锁、手/自动切换)用梯形图实现,保证电气安全审查的直观性;AI相关逻辑(数据预处理、模型输出解析、设定值计算)用结构化文本实现,提高开发效率和可维护性。
案例拆解:用ST实现AI模型输出的平滑处理
背景与约束:某注塑机AI优化项目,模型输出一个保压压力设定值(REAL类型,范围0~180MPa),但模型推理周期为200ms,而PLC扫描周期为20ms。如果直接在每个扫描周期内更新设定值,会导致压力波动剧烈。
初始现象:直接连接后,压力曲线出现明显锯齿状波动,影响产品质量。
分析判断:问题根源在于模型输出频率(5Hz)与PLC控制频率(50Hz)不匹配,且模型输出值存在微小抖动。
实际操作步骤:
- 在PLC中创建AI接口数据块,增加"模型输出值"和"平滑后设定值"两个变量。
- 编写ST程序,实现一阶低通滤波:
// 一阶低通滤波,平滑模型输出
// 输入:AI_Model_Output(模型原始输出)
// 输出:AI_Setpoint_Smooth(平滑后设定值)
// 参数:FILTER_ALPHA = 0.3(滤波系数,越小越平滑)
VAR
AI_Model_Output : REAL; // 来自AI的原始输出
AI_Setpoint_Smooth : REAL; // 平滑后的设定值
FILTER_ALPHA : REAL := 0.3; // 滤波系数
prev_smooth : REAL; // 上一周期平滑值
END_VAR
// 在每个扫描周期执行
AI_Setpoint_Smooth := FILTER_ALPHA * AI_Model_Output + (1.0 - FILTER_ALPHA) * prev_smooth;
prev_smooth := AI_Setpoint_Smooth;
// 限幅保护
IF AI_Setpoint_Smooth > 180.0 THEN
AI_Setpoint_Smooth := 180.0;
ELSIF AI_Setpoint_Smooth < 0.0 THEN
AI_Setpoint_Smooth := 0.0;
END_IF;
- 将平滑后的设定值用于PID控制回路。
结果对比:滤波后压力波动幅度从±5MPa降至±1.2MPa,产品合格率从91.3%提升至97.8%。
风险与代价:滤波引入了约100ms的相位滞后,对于快速响应场景需谨慎调整滤波系数。复盘经验:AI输出与PLC执行之间的"节奏匹配"是集成设计的关键,不能简单直连。
2.4 与AI集成的接口基础
核心原理:通信方式与数据模型
PLC与AI系统(通常运行在PC、边缘网关或云服务器上)的接口方式主要有三类:
- OPC UA(OPC Unified Architecture):工业4.0核心通信标准,跨平台、内置信息安全机制,支持复杂数据模型。现代PLC(如西门子S7-1500、罗克韦尔CompactLogix)原生支持或通过网关支持。
- Modbus TCP:简单、开放、广泛支持,适合中小型系统。但数据模型简单(仅寄存器/线圈),需自行映射。
- MQTT/HTTP REST:适合云端AI平台接入,通过IoT网关将PLC数据转换为MQTT消息或REST API。
无论采用哪种通信方式,核心设计原则是:在PLC侧建立清晰的数据接口层,将AI交互变量集中管理,避免AI直接操作分散的I/O地址。
操作流程:配置OPC UA服务器与AI客户端
- PLC侧配置:在PLC中启用OPC UA服务器功能,设置安全策略(如Basic256Sha256),创建用户账号并分配读写权限。
- 数据暴露:将AI接口数据块(如"AI_Interface_DB")设置为"可访问"状态,OPC UA服务器会自动将其暴露为节点。
- AI客户端连接:在Python中使用
opcua库或asyncua库连接PLC:
# Python OPC UA 客户端示例
from opcua import Client
client = Client("opc.tcp://192.168.1.100:4840")
client.connect()
# 读取AI接口数据
temp_node = client.get_node("ns=3;s=AI_Interface_DB.AI_Sensor_Temp")
temp_value = temp_node.get_value()
print(f"当前温度: {temp_value}")
# 写入模型输出
setpoint_node = client.get_node("ns=3;s=AI_Interface_DB.AI_Setpoint")
setpoint_node.set_value(85.5)
client.disconnect()
- 数据同步策略:根据实时性要求选择订阅(Subscription)或轮询(Polling)。订阅模式由PLC主动推送变化数据,适合高频数据;轮询模式由AI侧定时读取,适合低频参数。
ns=3;s=DB名称.变量名,罗克韦尔使用标签路径。在开发前务必通过UA Expert等工具浏览服务器地址空间,确认节点ID格式。
常见误区与总结复盘
| 误区 | 后果 | 正确做法 |
|---|---|---|
| AI直接读写物理I/O地址 | 地址冲突、安全风险、维护困难 | 通过专用数据块中转 |
| 忽略扫描周期对AI数据的影响 | 数据时间戳不一致,模型输入失真 | 在PLC侧为AI数据打时间戳 |
| 通信数据量过大 | 扫描周期延长,控制实时性下降 | 只传输必要变量,使用变化检测 |
| 梯形图实现复杂算法 | 开发效率低、难以调试 | 算法用ST,逻辑用LD |
| 未考虑通信中断场景 | AI失效时PLC无保护动作 | 设计看门狗超时逻辑,AI故障时切换安全模式 |