【非标自动化】3、AutoShop快速理解(系统变量表)
2026/8/25 16:34:26 网站建设 项目流程

这些“系统变量表”不只是给你看的,它们本质上是 AutoShop 已经预先定义好的一批特殊变量,用来让程序访问 PLC 自身的状态、通信状态、模块状态和系统参数。

可以先把变量分成两类:

普通变量:由用户自己定义 系统变量:由PLC系统提前定义

例如:

普通变量: StartButton CylinderExtend ProductCount 系统变量: PLC运行状态 当前错误列表 串口通信状态 EtherCAT主站状态 系统时钟

系统变量可以理解为:

PLC操作系统向用户程序开放的一组“系统接口”。

它很像手机或电脑系统提供的系统API,只不过在PLC里表现为变量、结构体和软元件。


一、这些变量到底是查看还是修改?

答案是:

有些主要用来读取,有些允许写入,有些虽然能写,但不应该随便修改。

不能看到变量表就认为所有内容都可以任意修改。

大致可以分成三类。

1. 只读状态变量

这类变量由PLC系统自动更新,程序主要读取。

例如:

  • PLC当前是否运行;

  • 当前错误列表;

  • EtherCAT主站状态;

  • EtherCAT从站状态;

  • 以太网诊断信息;

  • 扩展模块状态;

  • 当前扫描周期;

  • 通信连接状态。

例如截图中的:

_ECATMaster EtherCAT Master运行状态 _ECATSlave EtherCAT从站运行状态 _CurErrLst 当前错误列表 _DevInfo 设备信息 _EthernetDiag 以太网诊断信息

这些数据一般是:

PLC系统写入 用户程序读取

例如程序可以判断:

如果EtherCAT主站故障 设备停止运行 报警灯亮

但用户通常不应该直接把“主站正常状态”强行写成正常,因为真实硬件可能仍然处于故障状态。


2. 参数设置变量

这类变量用于配置某些系统功能,允许用户写入。

例如截图中的:

_COMSet _COMProtocolSet

注释分别是:

串口参数设置 串口不同协议的参数设置

里面可能包含:

  • 波特率;

  • 数据位;

  • 停止位;

  • 校验方式;

  • 协议类型;

  • Modbus站号;

  • 通信超时时间。

这种变量可以理解为:

用户写入配置 PLC系统按照配置工作

但是通常不建议直接在程序里随意修改,而是先通过AutoShop的通信配置页面进行配置。只有项目确实需要运行过程中动态改变通信参数时,才考虑用程序修改。


3. 系统控制或标志变量

有些系统变量既可以读取,也可能通过写入触发某个动作。

例如:

  • 清除错误;

  • 复位某项诊断;

  • 更新某个系统参数;

  • 启用或关闭某项功能。

这一类必须查具体变量说明,不能只看变量名猜。

因此使用系统变量前,最好确认:

它是只读还是可写? 写入后会发生什么? 什么数据类型? 什么时候生效? 是否需要重新上电?

二、“掉电保持”这一列是什么意思?

截图中有:

保持 不保持

这里不是表示能否修改,而是表示:

PLC断电以后,这个变量的内容是否保存。

例如:

不保持

PLC断电后,数据可能丢失或重新由系统生成。

例如:

  • 当前通信状态;

  • 当前错误状态;

  • 当前运行状态;

  • 当前扫描周期。

这些本来就是实时状态,重新上电后应该重新计算。

保持

PLC掉电后,设置值仍然保存。

例如截图中的串口配置:

_COMSet _COMProtocolSet

标记为“保持”,因为波特率、协议等设置不能每次断电后都恢复成空值。

所以:

保持 ≠ 可写 不保持 ≠ 只读

它只表示断电后的保存特性。


三、系统变量表中的“数据类型”为什么都很奇怪?

截图中有很多类似:

_sCAN _sCOM _sMB_MST _sETCMS... _sETHERNET

它们不是简单的BOOL或INT,而是系统预定义的结构体。

例如:

_COM

不是一个单独数字,而可能包含:

_COM ├── 通信是否正常 ├── 发送状态 ├── 接收状态 ├── 错误码 ├── 接收字节数 └── 当前协议状态

可以把它理解成一个“通信状态对象”。

类似C语言中的:

struct COMInfo { bool connected; int errorCode; int rxCount; int txCount; };

PLC程序中可能通过成员访问,例如概念上:

_COM.ErrorCode _COM.RxCount

具体成员名称要展开数据类型或查看帮助文档。

因此系统变量表里看到的很多变量,不是一个值,而是一整组相关数据。


四、各个系统变量分类大致表示什么?

你截图中主要有以下几组。


1._SYS_CAN

这一组表示CAN总线相关信息。

截图中有:

_CAN _CANLink _CANOpen

分别可以理解为:

_CAN

CAN接口的基础状态,例如:

  • CAN接口是否正常;

  • 是否发生总线错误;

  • 接收、发送状态;

  • 错误计数;

  • 总线是否关闭。

_CANLink

汇川CANlink协议的运行信息。

CANlink是汇川基于CAN总线的通信方式,可能用于汇川PLC、伺服或其他汇川设备之间的通信。

_CANOpen

CANopen协议的运行信息。

CANopen是一种标准工业通信协议,常用于:

  • 伺服;

  • 编码器;

  • I/O模块;

  • 驱动器。

简单理解:

_CAN:底层CAN接口 _CANLink:汇川自己的CAN通信 _CANOpen:标准CANopen通信

普通按钮点灯Demo暂时用不到。


2._SYS_COM

这一组表示串口及串口协议的实时信息。

截图中按串口编号列出了大量变量:

_COM _MbMst _MbSlv _SerialSR _MbMstEx

然后还有:

_COM1 _COM2 _COM3 ……

可以理解为每一个串口都配了一套状态变量。

例如串口0可能有:

_COM 串口0基础信息 _MbMst 串口0作为Modbus主站的信息 _MbSlv 串口0作为Modbus从站的信息 _SerialSR 串口0自由协议收发信息 _MbMstEx 串口0 Modbus主站扩展信息

Modbus主站

PLC主动向其他设备发出请求。

例如:

PLC → 读取变频器频率 PLC → 写入温控器目标温度

Modbus从站

PLC等待其他设备读取或写入。

例如:

HMI → 读取PLC数据 上位机 → 修改PLC参数

串口自由协议

不是使用标准Modbus,而是自己按照设备协议发送和接收字节。

例如某仪表协议规定:

AA 01 03 00 FF

PLC就按照这个格式收发。

这一组大部分变量主要用于:

  • 查看串口运行状态;

  • 判断通信是否完成;

  • 获取通信错误码;

  • 查看主从站状态;

  • 调试通信问题。


3._SYS_COM_SAVE

这一组表示串口配置参数,而且截图里“掉电保持”为保持。

例如:

_COMSet _COMProtocolSet _COM1Set _COM1ProtocolSet ……

可以理解为:

_COMSet:串口本身参数 _COMProtocolSet:串口所使用协议的参数

串口本身参数可能包括:

  • 波特率;

  • 数据位;

  • 停止位;

  • 校验方式。

协议参数可能包括:

  • 使用Modbus还是自由协议;

  • Modbus站号;

  • 主站或从站;

  • 超时时间。

这一组与_SYS_COM的区别是:

_SYS_COM: 现在运行得怎么样 _SYS_COM_SAVE: 串口配置成什么样

可以类比:

_COMSet ≈ 设置页面 _COM ≈ 实时状态页面

4._SYS_ECAT_MASTER

这一组表示EtherCAT主站状态。

截图中:

_ECATMaster

注释为:

EtherCAT Master运行状态

如果Easy PLC作为EtherCAT主站,它会管理:

  • 伺服驱动器;

  • 远程I/O;

  • EtherCAT从站模块。

这个结构体里可能包含:

  • 主站是否运行;

  • 网络是否正常;

  • 当前从站数量;

  • 是否有从站掉线;

  • EtherCAT状态机状态;

  • 错误码;

  • 总线周期状态。

程序可以利用它实现:

如果EtherCAT网络未进入正常运行状态 禁止伺服动作 触发总线报警

它主要是运行状态,通常以读取为主。


5._SYS_ECAT_SLAVE

这一组表示PLC作为EtherCAT从站时的状态。

截图中有:

_RTU_ECT_INFO _ECATSlave

其中:

_ECATSlave

表示EtherCAT从站运行状态。

也就是说,PLC不一定总是当主站,它也可能被更上层控制器当作从站。

例如:

上位运动控制器:EtherCAT主站 ↓ Easy PLC:EtherCAT从站

_RTU_ECT_INFO从注释看与GI20 EtherCAT耦合器参数信息有关,属于具体硬件配套信息。

普通Easy523基础学习暂时可以忽略这一组。


6._SYS_ETHERNET

这一组表示网口和以太网协议的信息。

截图中包括:

_Ethernet _MbTcpMst _MbTcpSlv _EthIPScanner _MbTcpMstEx _EthIPTask _FinsSlv _OpcUAServer _McSlv _EthernetDiag _EthIPSysDiag _EthIPConnDiag

可以按层次理解。

_Ethernet

网口基础信息,例如:

  • IP状态;

  • 链路是否连接;

  • 网线是否插入;

  • 收发状态;

  • 网络错误。

_MbTcpMst

Modbus TCP主站信息。

PLC主动通过以太网访问其他设备。

_MbTcpSlv

Modbus TCP从站信息。

其他设备通过网络读取PLC。

_EthIPScanner

EtherNet/IP扫描器信息。

这里的Scanner相当于EtherNet/IP中的主动控制方,类似主站角色。

_EthIPTask

EtherNet/IP任务统计信息。

用于查看EtherNet/IP任务是否正常、执行次数、错误等。

_FinsSlv

FINS TCP/UDP从站信息。

FINS是欧姆龙常见的通信协议,汇川PLC可能提供兼容通信接口。

_OpcUAServer

OPC UA服务器信息。

PLC作为OPC UA服务器,对上位机、SCADA或MES提供数据。

_McSlv

MC TCP/UDP从站信息。

MC协议常见于三菱PLC通信生态,用于兼容相关上位机或设备。

_EthernetDiag

以太网诊断信息。

_EthIPSysDiag

EtherNet/IP扫描器系统诊断信息。

_EthIPConnDiag

EtherNet/IP连接诊断信息。

这一组可以概括为:

网口有没有正常工作 各种网络协议有没有正常工作 具体连接有没有报错

7._SYS_INFO

这一组是最基础、最值得初学阶段关注的系统信息。

截图中包括:

_DevInfo _OSM _Program _CurErrLst _DateTime _M8000D8000 _LemStation _FPGA _PanelTest _CmpLst _GI20_ExtSlt _ExtCardInfo _ExtCard _LemStationLFR _OfflineTrace

还有一些经典软元件:

M8000 M8001 M8002 M8003 M8011 M8012 M8013 M8014 ……

_DevInfo

设备信息,例如:

  • PLC型号;

  • 硬件版本;

  • 固件版本;

  • 序列号。

_OSM

系统监视器信息,可能包括:

  • 扫描周期;

  • CPU负载;

  • 系统运行状态;

  • 内存使用情况。

_Program

用户程序信息,例如:

  • 程序状态;

  • 程序容量;

  • 工程标识;

  • 运行情况。

_CurErrLst

当前错误列表。

这是调试时很实用的变量,可以查看当前系统存在什么错误。

_DateTime

PLC当前日期和时间。

可以用于:

  • 生产记录;

  • 时间段控制;

  • 报警时间戳;

  • 定时任务。


五、M8000、M8001这些是什么?

这些属于PLC预定义的特殊辅助继电器,也属于系统变量。

它们虽然叫“M”,但不是普通用户随便使用的M地址。

截图中的注释已经给出了用途。

M8000:程序运行标志

截图注释:

程序运行标志,运行:ON,停止:OFF

也就是说:

PLC处于RUN状态 → M8000 = ON PLC处于STOP状态 → M8000 = OFF

可以用它作为程序运行条件,但通常程序在STOP状态本来就不执行。


M8001:程序停止标志

截图注释:

程序停止标志,停止:ON,运行:OFF

它与M8000相反。


M8002:运行第一个扫描周期标志

截图注释:

程序运行第1个扫描周期标志 运行第1个扫描周期为ON,否则为OFF

这是非常实用的系统位。

PLC刚从STOP切换到RUN时:

第一次扫描:M8002 = ON 之后扫描:M8002 = OFF

可以用于初始化:

M8002 ↓ 初始化参数 清空临时状态 设置默认模式

它类似普通软件中的:

初始化函数

M8003:非首个扫描周期标志

截图注释表示:

第一个扫描周期为OFF 后续扫描周期为ON

它与M8002基本相反。


M8011、M8012、M8013、M8014:周期时钟

截图中分别表示:

M8011:10ms周期时钟 M8012:100ms周期时钟 M8013:1s周期时钟 M8014:1分钟周期时钟

这里不是说每10ms一直保持ON,而是系统按照一定周期切换ON/OFF,形成周期脉冲或方波。

例如M8013可以用于:

每隔一定时间闪烁一次指示灯 产生简单周期动作 进行低频状态更新

不过需要注意它具体是每周期翻转还是只产生一个扫描脉冲,要以手册对对应PLC的详细说明为准。


M8020、M8021、M8022:计算结果标志

截图中有:

M8020:计算零位标志 M8021:计算借位标志 M8022:计算进位标志

这与算术运算有关。

例如:

  • 计算结果是否为0;

  • 减法是否发生借位;

  • 加法是否发生进位。

现代PLC程序里很多时候可以直接比较结果,不一定经常直接使用这些系统位。


M8029:多周期指令执行完成标志

某些指令不是一个扫描周期内完成的。

例如:

复杂通信 数据处理 某些运动或文件操作

执行完成后,系统可能通过这个标志通知程序。


六、_SYS_PN是什么?

从截图里的内容看,它主要包含两部分:

PN Stack运行参数 远程模块、扩展模块的数据区

PN通常指PROFINET。

PROFINET是工业以太网协议,常用于:

  • PLC;

  • 远程I/O;

  • 伺服;

  • 工业设备组网。

截图中大量类似:

_MOD1600END _MOD3200END _MOD4AD _MOD4DA _share_in32_real _share_out64_int

这些变量多半是为特定远程I/O模块或扩展模块准备的数据映射区。

例如:

16通道数字量输入模块DI 16通道数字量输出模块DO 4通道模拟量输入模块AI 4通道模拟量输出模块AO 温度模块

可以理解为:

现场远程I/O模块 ↓ 网络 PLC中的系统变量数据区 ↓ 用户程序读取或写入

例如:

远程DI模块采集的16个输入 ↓ 映射到某个系统数组 ↓ PLC程序读取这些BOOL值

这一组通常只有使用对应的PROFINET、远程I/O或特定扩展模块时才会接触。

基础Easy523 Demo暂时不用研究。


七、系统变量应当怎样使用?

可以遵循一个原则:

不清楚用途的系统变量,不要直接修改;需要系统状态时读取,需要系统配置时通过配置页面设置。

初学阶段重点掌握以下几个即可:

M8002:首次扫描 M8011/M8012/M8013:周期时钟 _DateTime:PLC日期时间 _CurErrLst:当前错误列表 _DevInfo:PLC设备信息

以后学习通信时,再认识:

_COM:串口状态 _MbMst:Modbus RTU主站状态 _MbSlv:Modbus RTU从站状态 _Ethernet:网口状态 _MbTcpMst:Modbus TCP主站状态 _MbTcpSlv:Modbus TCP从站状态

学习EtherCAT时,再认识:

_ECATMaster _ECATSlave

没有必要现在逐项学习整张系统变量表。


八、最后用一句话概括

系统变量表相当于PLC内部的一套“系统状态和系统接口目录”:

系统状态类: PLC现在怎么样 通信状态类: 串口、网口、总线现在怎么样 系统参数类: 通信和系统被配置成什么样 模块映射类: 扩展模块的数据存放在哪里 特殊标志类: 首次扫描、周期时钟、运算结果等

它们既不是普通用户变量,也不只是静态说明文档。程序可以根据需要读取其中的状态;其中一部分配置变量也允许写入,但任何系统变量在修改前,都应先确认手册是否说明其为可写变量以及写入后会产生什么效果。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询