4. PLC硬件组态与变量定义

硬件组态是PLC项目从“纸面设计”走向“可下载运行”的第一道工程关口。在施耐德EcoStruxure Control Expert(原Unity Pro)中,这一步的核心任务可以概括为三件事:把真实的CPU和I/O模块“告诉”软件、为每个物理通道分配确定的地址、再给这些地址起一个工程师能读懂的名字。三者缺一不可——组态错了,程序下载后模块会报错;地址错了,输入输出会“张冠李戴”;符号没定义好,程序可读性会迅速崩塌。

一、先选CPU,再挂模块:硬件目录与机架结构

新建项目后,Control Expert会要求先选择PLC型号。以Modicon M340为例,常见CPU有BMXP342020、BMXP342030等,它们决定了可用内存大小、内置通信口数量以及支持的本地机架数量。选择CPU后,软件会自动生成一个本地机架(Local Rack),通常为4槽、8槽或12槽。机架上的槽位编号从0开始,0号槽固定给CPU(或CPU所在的电源/机架组合),1号槽起用于安装I/O模块或通信模块。

在硬件目录(Hardware Catalog)中,模块按类别组织:离散量输入(DI)、离散量输出(DO)、模拟量输入(AI)、模拟量输出(AO)、计数模块、通信模块等。以BMXDDI1602为例,它是一块16点24V直流输入模块;BMXDAO1605是16点继电器输出模块。把模块从目录拖到机架槽位时,软件会检查模块类型与槽位是否兼容,不兼容会直接拒绝放置。这一步看似简单,却是后续地址分配的基础——模块型号和槽位一旦确定,物理地址就基本确定了。

二、地址是怎么“长”出来的:%I、%Q、%M与几何寻址

Control Expert采用IEC 61131-3风格的地址表示法,常见前缀有:

  • %I:输入离散量(Input),如%I0.0、%I0.1;
  • %Q:输出离散量(Output),如%Q0.0;
  • %M:内部存储器位(Memory bit),如%M0、%M1;
  • %IW / %QW:模拟量输入/输出字,如%IW0.0、%QW0.0;
  • %MW:内部存储器字,如%MW0、%MW10。

对于本地机架上的离散量模块,地址通常按“机架.槽位.通道”的几何方式展开。例如CPU在0号槽,1号槽放BMXDDI1602,那么它的16个输入点一般映射为%I0.0~%I0.15(具体取决于模块在机架中的位置和软件版本,实际以Control Expert自动生成的地址为准)。模拟量模块则按字寻址,如%IW0.0、%IW0.1分别对应第1、第2个模拟通道。

这里有一个容易踩坑的地方:地址不是“想写多少就写多少”。%I和%Q的地址范围由实际安装的模块决定,软件在组态完成后会自动生成一张地址映射表。如果程序中写了%I0.20,但机架上根本没有第21个输入点,编译时可能不报错,但运行时该地址永远为0或不确定,导致逻辑失效。因此,组态完成后第一件事就是打开“地址映射”视图,核对每个模块占用的地址区间。

三、符号变量:让%I0.0变成“启动按钮”

地址是给PLC看的,符号是给人看的。在Control Expert中,符号变量通过“变量编辑器”(Data Editor)定义。每个变量至少包含:名称(Name)、类型(Type)、地址(Address)、注释(Comment)。例如:

名称        类型      地址      注释
StartBtn    BOOL      %I0.0     启动按钮(常开)
StopBtn     BOOL      %I0.1     停止按钮(常闭)
MotorRun    BOOL      %Q0.0     电机运行输出
TempValue   INT       %IW0.0    温度模拟量输入
SetPoint    INT       %MW10     温度设定值

定义符号变量时,类型必须与地址匹配:BOOL对应位地址(%I0.0、%Q0.0、%M0),INT/REAL对应字地址(%IW、%QW、%MW)。如果给%I0.0定义成INT,软件会报类型冲突。另一个实用技巧是使用“派生变量”(Derived Variable)或“DDT”来批量定义结构,例如把一台电机的启动、停止、运行、故障四个位打包成一个自定义类型,既减少重复输入,也便于程序复用。

符号名建议遵循“设备_功能_状态”的命名习惯,如Pump1_Run、Valve2_OpenCmd。避免使用中文、空格和特殊字符,虽然Control Expert支持部分中文注释,但变量名用英文或拼音更利于跨版本、跨平台维护。

四、组态与变量定义的联动关系

硬件组态、地址分配和符号变量定义不是三个独立步骤,而是一条链:模块型号决定地址范围,地址范围决定符号变量能绑定的物理点,符号变量又反过来影响程序的可读性和可维护性。如果中途更换了模块(例如把16点DI换成32点DI),地址区间会变化,原有符号变量可能失效或错位,必须重新核对。因此,工程上通常建议:先确定硬件清单,再组态,再定义符号,最后写程序;若硬件变更,按“组态→地址→符号→程序”的顺序回查。

Control Expert 硬件组态 → 地址映射 → 符号变量 联动关系 本地机架 (Local Rack) — 槽位从0开始编号 槽0: CPU BMXP342020 槽1: DI 16点 BMXDDI1602 槽2: DO 16点 BMXDAO1605 槽3: AI 4通道 BMXAMI0410 自动生成的地址映射(几何寻址) %I0.0 ~ %I0.15 槽1 DI 16点 %Q0.0 ~ %Q0.15 槽2 DO 16点 %IW0.0 ~ %IW0.3 槽3 AI 4通道 %M0 ~ %M99 内部存储器位 符号变量定义(变量编辑器) StartBtn : BOOL %I0.0 启动按钮 MotorRun : BOOL %Q0.0 电机运行 TempValue : INT %IW0.0 温度输入 SetPoint : INT %MW10 温度设定

五、实操检查清单与常见错误

组态和变量定义完成后,建议按以下顺序做一次自检:

  1. 机架槽位核对:每个模块的型号、槽位是否与硬件清单一致;
  2. 地址区间核对:打开地址映射表,确认%I、%Q、%IW、%QW的起止地址没有重叠或越界;
  3. 符号变量类型核对:BOOL变量是否绑定位地址,INT/REAL是否绑定字地址;
  4. 重复地址检查:同一个%I0.0是否被两个符号变量同时占用(Control Expert通常会提示,但跨段定义时容易忽略);
  5. 编译验证:执行“生成→重新生成项目”,观察是否有地址冲突、类型不匹配或未定义变量的报错。
常见错误:把%I0.0和%Q0.0当成同一个物理点。输入和输出是两套独立的地址空间,%I0.0是输入模块的第1点,%Q0.0是输出模块的第1点,二者互不干扰。另一个高频错误是模拟量通道按位寻址,例如把%IW0.0写成%I0.0,编译能过但读到的永远是0或1,而不是0~27648的模拟量值。

最后强调一点:硬件组态和变量定义不是“一次性工作”。当项目从样机阶段进入现场调试阶段,模块型号、槽位甚至CPU都可能调整。每次变更后,务必重新生成地址映射并回查符号变量绑定关系。把这一步做扎实,后续写程序、做HMI变量连接、排查故障时,都会省下大量“猜地址”的时间。