“常开触点、常闭触点”严格来说不是软元件。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时导通 |
| 常闭触点 | --|/|-- | 位=0时导通 |
| 上升沿 | --|↑|-- | 0→1时导通一个扫描周期 |
| 下降沿 | --|↓|-- | 1→0时导通一个扫描周期 |
| 普通线圈 | --( )-- | 条件成立时置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 指令手册第一页开始把几百条指令全部学一遍效率高得多。