【非标自动化】3、AutoShop快速理解(全局变量)

发布时间:2026/8/25 11:47:54
【非标自动化】3、AutoShop快速理解(全局变量) 先抓住一个总原则全局变量区域就是集中管理“整个项目都能使用的数据、地址和对象”。里面的软元件表变量表功能块实例结构体其实分别解决四个不同问题。一、先理解什么叫“全局变量”假设 PLC 项目里有MAIN主程序 气缸控制子程序 报警子程序 通信子程序某个变量如果只在一个程序内部使用可以是局部变量。但如果多个程序都要使用例如设备运行状态 急停状态 产品数量 启动按钮 气缸伸出命令就应该放在全局变量里。例如MAIN需要读取设备运行状态 报警程序也需要读取设备运行状态 HMI通信程序也需要读取设备运行状态那么这个变量必须让整个项目都能访问这就是“全局”。二、软元件表到底是什么你打开截图中的“软元件表”看到上面有X Y M S B D R W下面有X0 X1 X2 X3 X4这里的“软元件”可以理解为PLC内部已经按照固定规则划分好的一批地址。例如软元件常见作用X外部数字量输入Y外部数字量输出M内部辅助位D数据寄存器T定时器C计数器你截图中的X0 X1 X2一般代表PLC的输入地址。例如现场接线启动按钮 → PLC输入端子X0 停止按钮 → PLC输入端子X1 光电传感器 → PLC输入端子X2于是程序里直接使用X0 X1 X2就能读取这些输入状态。软元件为什么叫“软”元件因为它们不是每一个都对应一个真实物理元器件。例如X0可能对应真实PLC输入端子。但M0通常只是PLC内部的一位存储空间不对应任何真实接线端子。再比如D100只是PLC内部一个数据寄存器可以保存整数、计数、参数等。所以它们统称“软元件”。软元件表的主要用途软元件表主要是用来查看和管理哪些地址存在 地址当前是什么类型 是否掉电保持 当前值是多少 有没有注释例如可以在X0后面写注释X0 启动按钮 X1 停止按钮 X2 急停反馈这样以后看程序时不至于只看到一堆X0、X1、X2。不过软元件表本质上还是“地址表”。三、变量表到底是什么变量表解决的是另一个问题给PLC地址起一个容易理解的名字。比如直接写X0 Y0 M10 D100时间久了很难记住。于是可以在变量表里定义StartButton 对应 X0 RunLamp 对应 Y0 MachineRunning 对应 M10 ProductCount 对应 D100以后在程序里可以直接写StartButton RunLamp MachineRunning ProductCount而不是只写X0 Y0 M10 D100这就是“变量表”的核心意义。变量表与软元件表的区别这是最需要搞清楚的地方。软元件表关注的是PLC地址本身X0 Y0 M0 D0变量表关注的是给这些地址起什么名字X0 → StartButton Y0 → RunLamp M0 → AutoMode D0 → ProductCount可以类比为软元件地址 门牌号 变量名称 住户姓名例如X0 101号房 StartButton 住在101号房的人程序既可以直接使用X0也可以使用StartButton。在实际项目中更推荐使用有意义的变量名。四、结构体是什么结构体是把一组相关变量打包在一起。例如一根气缸通常不只有一个变量而是有伸出命令 缩回命令 伸出到位 缩回到位 报警 超时时间 当前状态如果每个气缸都单独定义可能变成Cylinder1ExtendCmd Cylinder1RetractCmd Cylinder1ExtendSensor Cylinder1RetractSensor Cylinder1Alarm Cylinder2ExtendCmd Cylinder2RetractCmd Cylinder2ExtendSensor Cylinder2RetractSensor Cylinder2Alarm很快就会乱。于是可以定义一个结构体CylinderType ├── ExtendCmd ├── RetractCmd ├── ExtendSensor ├── RetractSensor ├── Alarm └── Timeout然后定义Cylinder1 : CylinderType Cylinder2 : CylinderType使用时类似Cylinder1.ExtendCmd Cylinder1.Alarm Cylinder2.ExtendCmd Cylinder2.Alarm所以结构体解决的是把属于同一个设备或同一个对象的一组变量组织起来。可以类比C语言里的struct或者面向对象里的数据模型。初学简单Demo时不需要马上使用结构体。五、功能块实例是什么这个名称最容易吓到人。先理解“功能块FB”。假设写了一个“气缸控制功能块”里面已经封装好了接收伸出命令 控制电磁阀 等待伸出到位 超时报警 输出完成状态这个功能块只是一个模板。类似气缸控制类但是项目里可能有3根气缸送料气缸 夹紧气缸 顶升气缸那么就要创建3个功能块实例FeedCylinder ClampCylinder LiftCylinder这三个实例使用同一套控制逻辑但各自保存自己的状态。所以功能块FB 类或模板 功能块实例 根据模板创建出来的具体对象类比软件开发class CylinderControl然后CylinderControl cylinder1; CylinderControl cylinder2; CylinderControl cylinder3;这里的cylinder1、cylinder2、cylinder3就是功能块实例。六、为什么功能块实例要单独放一栏因为FB通常有内部状态。例如气缸1和气缸2虽然都调用相同的控制逻辑但它们的当前步骤 定时器状态 报警状态 完成状态必须分别保存。所以每一个FB实例都需要自己独立的一块内存。AutoShop把这些实例集中放到“功能块实例”下面管理。七、这四类东西可以怎样放在一起理解可以这样理解软元件表 管理PLC原始地址 例如 X0、Y0、M0、D0 变量表 给地址或数据起名字 例如 StartButton、RunLamp 结构体 把一组相关变量组合起来 例如 Cylinder1.ExtendCmd 功能块实例 把一套控制逻辑真正创建成可运行对象 例如 CylinderControl实例八、用一个气缸控制项目举例假设做一个气缸伸出Demo。第一步软元件地址现场接线X0启动按钮 X1气缸伸出到位传感器 Y0电磁阀这些地址会在软元件表里存在。第二步变量表给它们起名字StartButton X0 CylinderExtendDone X1 CylinderValve Y0程序里就可以使用变量名。第三步结构体如果只有一个简单气缸可以不用结构体。如果有很多气缸可以定义CylinderData ├── ExtendCmd ├── ExtendDone ├── ValveOutput └── Alarm第四步功能块实例如果把气缸控制逻辑封装成FBCylinderControlFB那么具体创建一个实例ClampCylinderFB然后把StartButton CylinderExtendDone CylinderValve传给这个实例。九、初学阶段到底应该先学哪个现在先只学两个就够了1. 软元件表先认识X输入 Y输出 M内部辅助位 D数据寄存器 T定时器 C计数器2. 变量表学习给地址取名字和写注释。例如X0 → StartButton X1 → StopButton Y0 → RunLamp M0 → MachineRunning暂时可以不管结构体 功能块实例等后面程序变复杂、出现多个气缸和多个电机再学习它们会自然很多。十、最容易记住的一种说法软元件表PLC有哪些“地址” 变量表这些地址分别“叫什么” 结构体把多个相关变量“装成一组” 功能块实例把一套控制逻辑“创建成具体对象”对于当前Easy523入门Demo真正要用到的主要就是X、Y、M、D 变量表 MAIN程序这三个掌握后就可以开始做按钮控制灯、启停自锁、定时器和气缸控制等基础Demo。