"常开触点、常闭触点"严格来说不是软元件。
X、Y、M、D、T、C 这些才是软元件/设备(Device);常开、常闭、上升沿、下降沿属于对位软元件进行逻辑判断的触点形式/梯形图元素。
比如:
X0
--| |-- X0常开触点
X0
--|/|-- X0常闭触点
X0
--|↑|-- X0上升沿触点
三个地方用的都是同一个软元件 X0,只是读取它的方式不同。
对现在学习 AutoShop 和以后看别人 PLC 项目,建议把常用东西整理成 "软元件 → 梯形图基本元素 → 常用指令 → 项目级功能" 四层。
一、PLC 最常见的软元件
| 类型 | 常见符号 | 可以先理解成 | 典型用途 |
|---|---|---|---|
| 输入 | X |
PLC从外面收到的布尔量 | 按钮、传感器、限位 |
| 输出 | Y |
PLC输出到外面的布尔量 | 电磁阀、继电器、灯 |
| 内部继电器 | M |
PLC内部的 bool | 状态、条件、流程标志 |
| 数据寄存器 | D |
PLC内部的数字变量 | 参数、计数、位置、结果 |
| 定时器 | T |
Timer | 延时、超时 |
| 计数器 | C |
Counter | 次数、产品数量 |
| 状态/步进 | S |
流程状态 | 自动流程步序 |
| 特殊继电器 | SM等 |
PLC系统提供的 bool | 首次扫描、运行状态等 |
| 特殊寄存器 | SD等 |
PLC系统数据 | 扫描周期、系统状态等 |
不同品牌叫法会有差异,比如汇川、三菱、西门子不完全一样,所以现在不要死记具体编号,先建立类型概念。
X:输入
例如:
X0 = 启动按钮
X1 = 急停
X2 = 工件到位
X3 = 气缸原位
X4 = 气缸伸出到位
可以把 X 理解成:
PLC看到的外部世界。
Y:输出
例如:
Y0 = 输送带
Y1 = 气缸电磁阀
Y2 = 三色灯绿灯
Y3 = 蜂鸣器
可以理解成:
PLC控制外部世界的手。
M:内部继电器
这个特别重要。
M0 = 复位中
M1 = 自动运行
M2 = 允许拍照
M3 = 视觉完成
M4 = 报警
它没有真实接线。
如果你有编程背景,可以粗略把:
M100
理解成一个:
bool M100;
真实项目里面会看到大量 M,因为程序需要保存各种内部状态。
D:数据寄存器
D 更像:
int / short / word
例如:
D100 = 当前流程步骤
D101 = 产品数量
D102 = 目标速度
D103 = 实际位置
D104 = 视觉检测结果
以后复杂项目里 M + D 会非常重要。
二、最常见的梯形图基本元素
这些属于你看别人程序时必须做到一眼识别的东西。
| 元素 | 示意 | 含义 |
|---|---|---|
| 常开触点 | `-- | |
| 常闭触点 | `-- | / |
| 上升沿 | `-- | ↑ |
| 下降沿 | `-- | ↓ |
| 普通线圈 | --( )-- |
条件成立时置1 |
| SET | --[SET]-- |
置1并保持 |
| RST | --[RST]-- |
清0 |
| 串联 | A AND B |
两个条件都满足 |
| 并联 | A OR B |
任一个满足 |
比如:
X0 X1
--| |-----| |----------( Y0 )
就是:
X0 AND X1 → Y0
而:
X0
--| |----+
+------------( Y0 )
X1 |
--| |----+
就是:
X0 OR X1 → Y0
这其实就是 PLC 最底层的布尔逻辑。
三、PLC 最常用的一批指令
这里不要一开始背几百条指令。
实际项目里真正高频使用的,首先就是下面这些类别。
| 类别 | 常见指令/概念 | 用途 |
|---|---|---|
| 置位复位 | SET、RST | 保存状态 |
| 定时 | TON/T、TOF等 | 延时、超时 |
| 计数 | CTU/C、CTD | 次数统计 |
| 比较 | =、<>、>、<、>=、<= | 数据条件判断 |
| 数据传送 | MOV | 数据赋值 |
| 算术 | ADD、SUB、MUL、DIV | 数据计算 |
| 自增自减 | INC、DEC | 数量变化 |
| 数据转换 | INT、REAL等 | 类型转换 |
| 位运算 | AND、OR、XOR、SHL/SHR | 位处理 |
| 跳转/调用 | JMP、CALL等 | 程序组织 |
| 通信 | Modbus/TCP/串口等 | 外部设备通信 |
| 运动控制 | MC_* 等 | 伺服、轴控制 |
其中前面几个尤其重要。
SET / RST
真实项目极其常见。
启动按钮
↓
SET M100
意味着:
M100 = 1
即使启动按钮松开:
M100仍然 = 1
直到:
停止按钮
↓
RST M100
才变成:
M100 = 0
所以它特别适合表达:
正在运行
正在复位
报警状态
请求拍照
流程启动
某动作已经完成
定时器 T
例如:
X0
--| |------------[ T0 K20 ]
意思大致是:
X0持续成立 → T0开始计时 → 到设定时间后 T0 到时。
于是可以:
T0
--| |----------------( Y0 )
真实项目最常见两个用途:
延时:
气缸到位
↓
等待500ms
↓
拍照
超时检测:
气缸伸出
↓
开始计时
↓
3秒还没收到伸出到位
↓
报警
后者在设备程序里特别多。
比较指令
例如:
D100 = 30
可能表示:
当前自动流程运行到 Step 30。
于是:
D100 == 30
AND
X10 == ON
↓
执行某动作
所以以后看到:
=
>
<
>=
<=
<>
基本就是:
根据数据值决定程序走哪条路。
MOV:数据搬运
非常高频。
MOV K100 D200
可以粗略理解成:
D200 = 100;
例如:
MOV K10 D100
如果 D100 是流程步骤,就是:
当前流程进入 Step 10。
所以以后读步序程序,会经常看到:
MOV K10 D100
MOV K20 D100
MOV K30 D100
本质就是状态机:
Step10 → Step20 → Step30
四、再往上一层,就是"项目级功能"
这部分不能再当普通指令理解了。
例如汇川 AutoShop 里面会看到大量:
MC_Power
MC_Home
MC_MoveAbsolute
MC_MoveRelative
MC_MoveVelocity
MC_Stop
这些属于运动控制功能块。
它们解决的是:
伺服使能
回零
绝对定位
相对定位
速度运行
停止
再比如通信:
Modbus RTU
Modbus TCP
TCP Socket
UDP
自由协议串口
EtherCAT
CANopen
这时候已经进入:
PLC如何控制和协调其他设备。
所以不用把所有东西混在一起背。
五、建议现在建立这张"PLC知识树"
PLC程序
│
├── ① 软元件
│ ├── X:输入
│ ├── Y:输出
│ ├── M:内部位
│ ├── D:数据
│ ├── T:定时器
│ ├── C:计数器
│ └── S:状态
│
├── ② 梯形图基本元素
│ ├── 常开
│ ├── 常闭
│ ├── 上升沿
│ ├── 下降沿
│ ├── 线圈
│ ├── SET
│ └── RST
│
├── ③ 数据处理指令
│ ├── MOV
│ ├── 比较
│ ├── ADD/SUB
│ ├── MUL/DIV
│ ├── INC/DEC
│ └── 类型转换
│
├── ④ 流程控制
│ ├── 状态机
│ ├── 步序
│ ├── CALL
│ └── JMP
│
├── ⑤ 设备控制
│ ├── 定时
│ ├── 计数
│ ├── 高速计数
│ ├── PWM/PTO
│ └── 运动控制 MC
│
└── ⑥ 通信
├── 串口
├── Modbus RTU
├── Modbus TCP
├── TCP/UDP
├── EtherCAT
└── CANopen
而现阶段不要平均用力。
优先把:
X/Y/M/D → 常开/常闭/上下升沿 → 普通线圈/SET/RST → T/C → MOV → 比较 → 四则运算
练到看到梯形图几乎不用思考就认识。
然后马上进入:
手自动 → 复位 → 自动步序 → 气缸 → 报警 → 异常恢复
等把普通设备控制程序看熟以后,再集中搞:
伺服轴控 + 通信 + 视觉 + 上位机。
这样比从 AutoShop 指令手册第一页开始把几百条指令全部学一遍效率高得多。