3. PLC控制基础与数据交互接口
在边缘推理与PLC控制联动的工程中,边缘设备(如工控机、边缘网关、AI推理盒子)并不直接驱动执行机构,而是通过PLC的通信接口读写数据。理解西门子、三菱、欧姆龙等主流PLC的协议体系,以及OPC UA、Modbus TCP、Profinet、EtherNet/IP这些工业通信标准如何与边缘设备对接,是搭建联动系统的第一步。本节从PLC的通信角色出发,梳理协议分层、对接方式和实际配置要点。
PLC在联动系统中的角色与数据接口分层
PLC在系统中承担两类角色:一是作为现场设备的控制核心,采集传感器信号、驱动执行器;二是作为边缘设备的数据源和数据宿。边缘设备需要从PLC读取状态量(如运行状态、报警字、计数器值),也需要向PLC写入控制量(如启动命令、目标速度、配方参数)。这种读写关系决定了PLC必须开放一个可被外部访问的数据接口。
从接口层次看,PLC的数据交互可分为三层:底层是现场总线层,如Profinet、EtherNet/IP、CC-Link IE,负责PLC与远程IO、变频器、伺服之间的实时循环数据交换;中间是PLC间或PLC与上位机的通信层,如西门子的S7通信、三菱的MC协议、欧姆龙的FINS协议;上层是标准化数据建模层,以OPC UA为代表,提供与厂商无关的语义化数据访问。边缘设备通常同时使用中间层和上层:用原生协议做高频读写,用OPC UA做统一建模和跨厂商集成。
主流PLC协议与边缘设备对接方式
西门子PLC:S7-1200/1500系列支持Profinet、S7通信和OPC UA。边缘设备对接时,若使用S7协议,需在TIA Portal中勾选“允许来自远程对象的PUT/GET通信访问”,并注意DB块必须取消“优化的块访问”,否则无法按绝对地址读写。典型地址如DB1.DBD0对应一个32位浮点数。若使用OPC UA,S7-1500需固件V2.0以上并购买OPC UA授权,边缘设备通过端点URL(如opc.tcp://192.168.0.1:4840)连接,读取节点如ns=3;s="DB1"."Temperature"。
三菱PLC:FX系列和Q/L系列主要通过MC协议(MELSEC Communication Protocol)对接。MC协议有二进制和ASCII两种帧格式,边缘设备常用二进制格式以提高效率。以Q系列为例,读取D100开始的10个字,指令帧包含副头部、网络号、PLC号、请求目标模块IO号、请求目标模块站号、请求数据长度、CPU监视定时器、指令代码(0401为批量读取)、子指令(0000为按字读取)、起始软元件号、软元件代码(D对应0xA8)和软元件点数。边缘设备可用Python的pymcprotocol库或C#的MC协议封装库实现。
欧姆龙PLC:NJ/NX系列支持EtherNet/IP和OPC UA,CP/CJ系列常用FINS协议。FINS over TCP的默认端口为9600,指令帧包含ICF、RSV、GCT、DNA、DA1、DA2、SNA、SA1、SA2、SID、命令码和参数。例如读取D100开始的5个字,命令码为0101,参数为起始地址和数量。边缘设备对接时需注意FINS的地址表示方式与三菱不同,D区地址直接以字为单位。
OPC UA、Modbus TCP、Profinet、EtherNet/IP的对接要点
OPC UA是跨厂商集成的首选。边缘设备作为OPC UA客户端,通过订阅(Subscription)机制获取PLC变量变化,采样间隔可设为100ms~1000ms。对接时需关注三点:一是安全策略,工程调试阶段可用None,生产环境应启用Basic256Sha256并配置证书;二是节点ID的命名空间索引,不同PLC的索引可能不同,需在客户端动态获取;三是数据类型的映射,PLC的BOOL、INT、REAL对应OPC UA的Boolean、Int16、Float。
Modbus TCP适用于简单设备、仪表和部分小型PLC。默认端口502,功能码03读保持寄存器、06写单个寄存器、16写多个寄存器。边缘设备对接时需注意寄存器地址的偏移:Modbus协议地址从0开始,而部分PLC文档从1开始,配置时需确认。例如读取地址40001,实际发送的起始地址为0。Modbus TCP没有数据类型定义,32位浮点数需按两个寄存器组合,并注意字节序(大端/小端)和字序(高低字交换)。
Profinet是西门子主推的实时工业以太网,边缘设备若作为Profinet控制器或设备,需使用支持Profinet协议栈的网卡或网关。实际工程中,边缘设备通常不直接参与Profinet循环通信,而是通过PLC的OPC UA或S7接口间接获取Profinet IO数据。若必须直接接入,可使用Hilscher或Anybus的Profinet嵌入式模块。
EtherNet/IP基于TCP/IP和CIP协议,罗克韦尔、欧姆龙等广泛使用。边缘设备对接时,可使用CIP的显式消息(Explicit Messaging)读写PLC标签,或使用隐式消息(Implicit Messaging)进行实时IO交换。显式消息通过TCP端口44818发送,标签名如“Program:MainProgram.Tag1”。欧姆龙NJ系列支持标签数据链接,边缘设备可通过EtherNet/IP的标签读写指令直接访问变量。
对接配置示例:边缘设备读取西门子S7-1500的DB块数据
以下以Python的snap7库为例,展示边缘设备通过S7协议读取S7-1500的DB1中偏移0处的REAL类型温度值,并写入DB1偏移4处的REAL类型设定值。假设PLC IP为192.168.0.10,机架0,槽1。
import snap7
from snap7.util import get_real, set_real
plc = snap7.client.Client()
plc.connect('192.168.0.10', 0, 1) # IP, rack, slot
# 读取DB1偏移0处的4字节REAL
data = plc.db_read(1, 0, 4)
temperature = get_real(data, 0)
print(f"当前温度: {temperature:.2f} °C")
# 写入设定值到DB1偏移4处
setpoint = 75.5
write_data = bytearray(4)
set_real(write_data, 0, setpoint)
plc.db_write(1, 4, write_data)
plc.disconnect()
运行前需确认:TIA Portal中DB1已取消“优化的块访问”,PLC属性中已勾选“允许来自远程对象的PUT/GET通信访问”,且边缘设备与PLC在同一网段或路由可达。若连接失败,先用ping确认网络,再用snap7的get_cpu_info()检查连接状态。读取到的温度值若为异常大数,通常是字节序或数据类型不匹配,需检查DB块中变量的实际偏移和类型。
掌握上述协议的分层关系和对接方式后,边缘设备就能稳定地从PLC获取推理所需的输入数据,并将推理结果写回PLC控制执行机构。实际工程中,协议选择往往不是单一的,而是组合使用:用OPC UA做数据建模和跨系统集成,用原生协议做高频控制,用Modbus TCP对接辅助仪表。理解每种协议的适用边界和配置细节,是联动系统可靠运行的基础。