这些“系统变量表”不只是给你看的,它们本质上是 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 FFPLC就按照这个格式收发。
这一组大部分变量主要用于:
查看串口运行状态;
判断通信是否完成;
获取通信错误码;
查看主从站状态;
调试通信问题。
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现在怎么样 通信状态类: 串口、网口、总线现在怎么样 系统参数类: 通信和系统被配置成什么样 模块映射类: 扩展模块的数据存放在哪里 特殊标志类: 首次扫描、周期时钟、运算结果等它们既不是普通用户变量,也不只是静态说明文档。程序可以根据需要读取其中的状态;其中一部分配置变量也允许写入,但任何系统变量在修改前,都应先确认手册是否说明其为可写变量以及写入后会产生什么效果。