【非标自动化】3、AutoShop快速理解(系统变量表)









这些“系统变量表”不只是给你看的,它们本质上是 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现在怎么样
通信状态类:
串口、网口、总线现在怎么样
系统参数类:
通信和系统被配置成什么样
模块映射类:
扩展模块的数据存放在哪里
特殊标志类:
首次扫描、周期时钟、运算结果等
它们既不是普通用户变量,也不只是静态说明文档。程序可以根据需要读取其中的状态;其中一部分配置变量也允许写入,但任何系统变量在修改前,都应先确认手册是否说明其为可写变量以及写入后会产生什么效果。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)