PLC编程之SFC
1. 基本概念
a. 扫描周期
PLC程序是按顺序执行的。顺序执行完整个程序的时间为一个扫描周期。
b. 块
如图所示例子:
块可以理解为程序段,模块化让程序显得更清晰。块的执行顺序按前面的序号顺序来。也就是在一个扫描周期里,写在前面的先执行,写在后面的后执行。
块类型有梯形图块和SFC块两种。
c. 步
SFC程序使用S来表示状态激活与否。这个状态可以理解为状态机中的状态。这每个状态就是一步。
S0~S9用来初始状态用。S10之后,一般用。
在一步里,只需要写上当前步在指定条件下的输出就可以了。在输出用的是OUT而不是SET,在这步在激活态转移到非激活态时,输出会关闭。但是只执行这一次,即是脉冲型的。之后扫描执行时非激活状态是跳过执行的。直到变成激活态时,才被扫描执行。也就是说在不同状态[不可能同时处在激活态]里用OUT同一个线圈,是不违反双线圈规则的。
d. 转移
和状态机的转移是类似的。只是只需要写上转移条件。即满足什么条件,当前步转为非激活态,下一步变为激活态,不需要在梯形图里写SET S?或RST S?之类的指令。这个是隐性的,在SFC图里指定的。
e. 选择分支和并行分支
选择分支在每个分支开头都有转移条件,并行分支只有一个转移条件。
选择分支的每个转移条件通常是不同的,也就是说,每次经过这个“分叉口”时,只选择“一条路走”。
也可以有两个或多个转移条件相同,同时“走多条路”,但这样会使程序变得繁杂难懂,容易出错。
并行分支只有一个转移条件,当满足时会“同时进行”。称之并行就是这个意思。
选择分支和并行分支的会合和分叉处类似,如下图:
需要注意的是,并行分支会合点只有一个转移条件,是所有分支都进行到最后状态时,条件满足才转移。先到的,即使条件满足也不会转移。比如在装配过程中,几个零件在不同支路同时加工,最后在一起组装,当然需要所有零件都加工完成才能组装。
f. 定时器
定时器的用法和梯形图里是基本一样的。一个定时器在同一时刻只能有一个状态在使用。即在相邻步和可能同时处在激活态的步[比如并行分支里不同分支里的步]是不能使用一个定时器的。这也是说,相邻步会在一个扫描周期里同时处于激活态。有些线圈输出绝对不能同时为输出状态时,需要另加条件限制。
g. 计数器
计数器是脉冲型的。是在条件从不成立到成立转变时才计数。从成立到不成立时计数值不变。需要清零请使用指令RST Cn
2. 进阶篇
a. IST方便指令
LD M8000
IST M0 S20 S40
M0是IST指令的输入,可以是Mx,Xx,Sx
一但指定,比如M0,那么M0,M1――M7这八个就不能作其它用途。它们的意义已经指定:
M0 --- M4 每次只能接通一个,且必须接通一个。M5为回原点启动,M6为自动程序启动,M7为停止。
接通M0,代表手动程序,这是程序会跳到S0去,你在S0下面做手动的顺控程序即可;
接通M1,代表回原点程序,这时程序会跳到S1去,你在S1下面做回原点程序即可;
接通M2M3 M4时,程序会跳到S2去,在S2下面你要做自动程序。
M2接通时,程序跳到S2中,代表单步,即当顺控转移条件达到时,并不转移,必须在顺控程序到后后,再按下M6,才跳到下一步顺控程序。因每一步都需要按一下,所以称为单步。
M3接通时,程序跳到S2去,按下M6后,运行一个单周,再按下M6后,再运行一个单周。
M4接通时,程序跳到S2去,按下M6后,程序一直循环的运行下去。
M7接通时,程序停止。
IST指令不仅指定了输入的含义,也定义了部分S的意义。S0是手动,S1是复位[原点回归],S2是自动。
S10~S19只能是复位用。S20开始才是自动用的。
仅靠前面所说的,还不能让程序正确运行。还需要在程序中使用几个特殊辅助继电器。
M8041 转移开始
M8042 启动脉冲
M8043 原点回归结束
M8044 原点条件
在S1原点回归程序里若没有让M8043置1,那么跳转到S2自动态,状态是不转移的。但如果是先跳到S1手动,再跳到S1自动,则又以了。这是一个问题在使用中需要注意。
在自动态S2转移条件里,需要加一个M8041进去,否则单循环是停不下来的,就和无限循环一样了。
实际在单循环中完成一个循环会把M8041清零。按下M6会使M8041置1。
b。位置控制指令
1、FNC156(ZRN)原点回归
在执行FNC158(DRVI)的相对位置控制和FNC159(DRVA)的绝对位置控制时,PLC利用自身产生的正反转脉冲进行当前值的增减,并将其保存至当前值寄存器(Y000:[D8141,D8140],Y001:[D8143,D8142])。
由此,机械的位置始终保持着,因此上电时和初始运行时,必须执行原点回归,将机械动作的原点位置数据事先写入。
[D]ZRN S1 S2 S3 D
S1.: 原点回归速度:指定原点回归开始时的速度。对于16位指令范围为10~32767(Hz);对于32位指令范围为10~100000(Hz)。
S2.: 爬行速度:指定近点信号变为ON后的低速部分的速度。范围为10~32767(Hz)。
S3.: 近点信号:指定近点信号输入。(接点输入),注意,当指定输入继电器(X)以外的元件时,由于会受到PLC扫描周期的,会引起原点位置的偏移增大。
D. : 脉冲输出起始地址,只能指定Y000或Y001。
原点回归动作顺序如下:
⑴ 驱动指令后,以原点回归速度S1. 开始移动。当在原点回归过程中,指令驱动接点变为OFF状态时,将不减速而停止,且在脉冲输出中监控(Y000:M8147,Y001:M8148)处于ON时,将不接受指令的再次驱动。
⑵当近点信号(DOG)由OFF变为ON时,减速至爬行速度S2.。
⑶当近点信号(DOG)由ON变为OFF时,在停止脉冲输出的同时,向当前值寄存器(Y000:[D8141,D8140],Y001:[D8143,D8142])中写入0。
另外,M8140ON 时,同时输出清零信号。
随后,当执行完成标志(M8029)动作的同时,脉冲输出监控(Y000:M8147,Y001:M8148)变为OFF。
在使用原点回归指令时尚须注意:
·原点回归动作应从近点信号的前端开始进行。
·原点回归过程中,当前值寄存器(Y000:[D8141,D8140],Y001:[D8143,D8142])的数值将向减少方向动作。
·编程时注意指令的驱动时间。
2. FNC158(DRVI)相对位置控制
这一指令是以相对驱动方式执行单速位置控制的指令。[D]DRVI S1 S2 D1 D2
S1. : 输出脉冲数(相对指定)
对于16位指令范围为-32767~32767;
对于32位指令范围为-999999~999999。
S2. : 输出脉冲频率
对于16位指令范围为1~32767(Hz),-1~32768(Hz);
对于32位指令范围为1~1000000(Hz),-1~-1000000(Hz)。
D1.: 脉冲输出起始地址,只能指定Y000或Y001。
D2.: 旋转方向信号输出起始地址,指令在执行过程中,即使改变操作数内容,也无法在当前运行中表现出来。只在下一次指令执行时才有效。
若在指令执行过程中,指令驱动的结点变为OFF时,将减速停止。此时执行完成标志M8029不动作。
指令驱动的结点变为OFF后,在脉冲输出中标志(Y000[M8147]Y001[M8148])处于ON时,将不接受指令的再次驱动。
实际能够输出的输出脉冲频率的最低频率数,根据下式决定:
输出脉冲最低频率 = SQRT(最高速度[D8147,D8146]Hz / (2 * (加减速时间[D8148]ms / 1000) ) )
脉冲输出规格
使用定位控制指令的PLC必须是晶体管输出型,用Y000,Y001作为高速响应输出,并满足下面要求:
使用电压范围:DC 5~24V;使用电流范围:10~100 mA
输出频率:100kHz 以下。
与定位控制指令有关的元件地址
元件地址 | 数据长度 | 初始值 | 内容 | |
D8140
| 低位 | 32位 | 0 | Y000输出的当前值数据寄存器。用PLSV、DRVI、DRVA指令时,对应旋转方向增减当前值。 注意,若同时使用PLSY,PLSR指令,当前值的数值为脉冲输出数的累加值。 |
D8141 | 高位 | |||
D8142
| 低位 | 32位 | 0 | Y000输出的当前值数据寄存器。用PLSV、DRVI、DRVA指令时,对应旋转方向增减当前值。 注意,若同时使用PLSY,PLSR指令,当前值的数值为脉冲输出数的累加值。 |
D8143 | 高位 | |||
D8145 |
| 16位 | 0 | 执行ZRN、DRVI、DRVA指令时的基底速度。设定范围为:最高速度(D8147,D8146)的1/10以下,若选用超出时,自动取最高速的1/10运行。 |
D8146 | 低位 | 32位 | 10000 | 执行ZRN、DRVI、DRVA指令时的最高速度。 设定范围:10~10000Hz |
D8147 | 高位 | |||
D8148 |
| 16位 | 100 | 执行ZRN、DRVI、DRVA指令时,从基底速度到最高速度的加减速时间。 |
元件地址 | 属性 | 内容 |
M8145 | 可驱动 | Y000 脉冲输出停止指令(立即停止) |
M8146 | 可驱动 | Y001 脉冲输出停止指令(立即停止) |
M8147 | 读取专用标志 | Y000 脉冲输出中监控(BUSY/READY) |
M8148 | 读取专用标志 | Y001 脉冲输出中监控(BUSY/READY) |