4、PLC编程基础:梯形图与结构化文本(ST)的基本概念、脉冲输出指令介绍
各位好,我是老张。在自动化这行摸爬滚打了十几年,今天咱们来聊聊PLC编程里最基础、也最绕不开的两个东西——梯形图和结构化文本。说白了,这就是你跟PLC对话的两种语言。你选哪种,得看你要干什么活。
4.1 梯形图(Ladder Diagram, LD)—— 电工师傅的“电路图”
梯形图,我习惯叫它“LD”。它长得最像我们传统的继电器电路。你想想看,一个线圈,几个触点,串一串、并一并,逻辑就出来了。对于搞过电气维修的师傅来说,这东西一看就懂。
它的核心逻辑是“能流”。从左母线出发,经过各种常开、常闭触点,最后到达线圈。如果路径通了,线圈就得电。就这么简单。
梯形图的特点:
- 直观: 图形化,逻辑关系一目了然。
- 适合开关量: 处理按钮、传感器、继电器这些通断信号,效率极高。
- 调试方便: 在线监控时,哪一路通了,哪一路断了,看得清清楚楚。
但我得说句实话。梯形图处理复杂数学运算、字符串处理或者循环逻辑时,就有点力不从心了。我曾经在一个项目里,要用梯形图写一个PID参数自整定的算法,那代码画得跟蜘蛛网似的,自己看了都头疼。
4.2 结构化文本(Structured Text, ST)—— 程序员的“C语言”
ST语言,就是另一种玩法了。它更像我们熟悉的C语言或者Pascal。用IF...THEN...ELSE、CASE、FOR...DO这些语句来描述逻辑。
什么时候用ST?
- 做复杂的数学计算,比如算个抛物线轨迹。
- 处理大量的数据,比如数组、结构体。
- 写算法,比如模糊控制、运动控制的前馈补偿。
我个人习惯,凡是涉及到复杂运算的,一律用ST。它写起来快,改起来也快。你想想看,一个FOR循环能搞定的事,用梯形图你得画多少个比较器?
我的建议:
别纠结哪个更好。成熟的工程师,都是混着用的。主逻辑用梯形图,方便维护;算法和数据处理用ST,简洁高效。这叫“取长补短”。
4.3 脉冲输出指令详解
好了,前面是热身。咱们今天的重头戏,是脉冲输出指令。做运动控制,你绕不开这三个家伙:PLS、PWM、PTO。
我先把它们仨的区别给你列个表,这样你心里有个谱。
| 指令 | 全称 | 核心功能 | 典型应用 |
|---|---|---|---|
| PLS | Pulse | 输出一个固定宽度、固定数量的脉冲串 | 驱动步进电机走一段固定的距离 |
| PWM | Pulse Width Modulation | 输出占空比可调的连续方波 | 控制伺服电机的扭矩、加热器的功率、灯的亮度 |
| PTO | Pulse Train Output | 输出频率和数量可精确控制的脉冲串,支持加减速 | 精确的位置控制、速度控制,比如数控机床的轴 |
你看,虽然都是脉冲,但脾气秉性完全不同。
4.3.1 PLS指令—— 简单粗暴的“点动”
PLS指令,最古老,也最简单。你给它一个触发信号,它就输出一个固定宽度的脉冲。这个脉冲的宽度,通常是在特殊寄存器里预设好的。
我在一个老式的贴标机上用过它。每次传感器检测到产品,就触发一次PLS,给步进驱动器一个脉冲,标签就走一格。简单,稳定,但不够灵活。
// 梯形图示例:触发PLS指令
// 当 I0.0 由OFF变为ON时,Q0.0输出一个脉冲
// 脉冲宽度由特殊寄存器SM0.2决定(假设为100ms)
Network 1:
I0.0 PLS
|---| |---------------( Q0.0 )---|
注意:
PLS指令输出的脉冲宽度是固定的。你不能在程序运行中随意改变它。如果需要动态调整,就得用PWM或者PTO了。
4.3.2 PWM指令—— 模拟量的“数字替身”
PWM,脉宽调制。它的精髓在于“占空比”。说白了,就是一个周期里,高电平的时间占多少。
比如,一个1kHz的PWM信号,周期是1ms。如果占空比是50%,那就是高电平0.5ms,低电平0.5ms。如果占空比是100%,那就是一直高电平。
PWM的典型用法:
- 控制速度/位置: 通过改变占空比,可以控制直流电机的转速。但注意,PWM通常不用于精确的位置控制,因为它的频率和占空比是连续变化的,没有固定的“脉冲当量”。
- 控制功率: 加热器、灯光调光,都是这个原理。占空比越大,平均功率越高。
我曾经用PWM控制一个比例阀的开度。通过模拟量输出模块当然也行,但用PWM加一个简单的RC滤波电路,成本低得多,效果也还不错。
// ST语言示例:配置PWM输出
// 假设使用功能块 PWM_CTRL
PWM_CTRL(
Enable := TRUE, // 使能PWM输出
Frequency := 1000, // 设置频率为1kHz
DutyCycle := 50.0, // 设置占空比为50%
Output => Q0.0 // 输出点
);
4.3.3 PTO指令—— 运动控制的“灵魂”
PTO,脉冲串输出。这是运动控制里最核心的东西。它和PWM最大的区别在于:PTO输出的脉冲数量是精确可控的,而且频率可以变化。
你想想看,一个步进电机,你给它一个脉冲,它就转一个固定的角度(比如1.8°)。如果你要让它转10圈,就需要给2000个脉冲(假设细分是1)。PTO就能精确地发出这2000个脉冲。
更厉害的是,PTO支持“包络线”功能。也就是加减速。电机启动时,频率从0慢慢升到目标值;停止时,频率从目标值慢慢降到0。这样电机运行起来才平稳,不会丢步,也不会过冲。
PTO的核心参数:
- 目标频率(速度): 电机运行的最高速度。
- 启动/停止频率: 电机开始运动和停止运动时的最低频率。
- 加减速时间: 从启动频率加速到目标频率,或者从目标频率减速到停止频率所需的时间。
- 脉冲总数: 这次运动需要发出的总脉冲数。
// ST语言示例:配置PTO运动(以西门子S7-1200为例)
// 使用 Motion Control 指令
"MC_Power".Axis := 1; // 选择轴1
"MC_Power".Enable := TRUE; // 使能轴
"MC_Power"(); // 调用功能块
"MC_MoveRelative".Axis := 1;
"MC_MoveRelative".Execute := TRUE; // 触发相对运动
"MC_MoveRelative".Distance := 1000.0; // 移动距离,单位是脉冲数
"MC_MoveRelative".Velocity := 50000.0; // 目标速度,单位是脉冲/秒
"MC_MoveRelative".Acceleration := 100000.0; // 加速度
"MC_MoveRelative".Deceleration := 100000.0; // 减速度
"MC_MoveRelative"();
嗯,这里要注意。PTO的配置,不同品牌的PLC差别很大。有的用特殊寄存器,有的用功能块。但核心思想是一样的:频率、数量、加减速。 你只要抓住了这三点,换什么PLC都能很快上手。
4.4 知识体系总览
说了这么多,我画了张图,帮你把今天的内容串起来。你看看,是不是清晰多了?
这张图把咱们今天讲的核心逻辑都串起来了。从编程语言的选择,到脉冲指令的应用,一目了然。你以后做项目,可以先看看这张图,理清思路再动手。