西门子PLC控制输出开关量的方法

224 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路.

摘要:在PLC上让一个小灯闪烁可不像嵌入式编程一样简单,本文介绍一个西门子PLC定时器的使用方法,用一个定时输出开关量的程序来演示,相当于嵌入式系统中的小灯闪烁案例。

视频效果:西门子PLC定时器开关视频(定时控制开关量)_哔哩哔哩_bilibili

操作环境:博途系列PLC,以1500为例。

CPU模块6ES7 511-1AK02-0AB0

DQ模块6ES7 522-1BH10-0AB0

操作步骤:

打开博途软件,对设备组态。可以采用拖动的方式来将CPU和其他模块拖动到机架上。这种模式和嵌入式编程有很大区别,有点像是“所见即所得”,但是又不完全一样。如果软件中没有6ES7 522-1BH10-0AB0模块,可以使用6ES7 522-1BH10-0AA0(末尾的B变成A)来代替。

image.png

接下来编写源代码。代码很简单,只有两段。代码的核心工作是使用两个接通延时定时器,然后使用中间变量循环开关,来实现DQ模块指定引脚的开关。

image.png 我们知道,在PLC中,一个最简单的程序是使用一个开关(例如常开)控制一个线圈(相当于嵌入式中的一个LED灯),并不是一个真正的线圈的意思,只不过用这个括号形状的标志来代替,程序设计之初就是这样做的,沿用至今而已。我们理解它为一个输出就行了。下面这个简单的程序,下载到PLC之后,就会循环执行,相当于“轮询”,判断开关I0.0(其实就是引脚I0.0上连接的一个按钮开关,它平时是常开的,按下之后就导通)的状态,是高电平还是低电平。如果是高电平,那么线圈Q0.0就是高电平,如果输入是低电平,那么线圈也是低电平。

image.png 在PLC中,最直观的显示,就是面板上的指示灯LED。如果是高电平,那么LED点亮,如果 是低电平,那么LED熄灭。

image.png

现在我们要做的是用程序来代替人工按下开关。 这里用到一个概念就是“中间变量”,不真的接线,不占用开关量模块的接线柱。相当于嵌入式的变量。这个变量不对应LED状态指示灯,只是存放在CPU中的某些地址中。

再回到程序中,下面逐步讲解。 中间变量M0.0(拖动一个开关过来,直接输入M0.0,回车就行了),符号形状是“常闭”,也就是一直通着,程序运行起来后,后面的程序就会执行下去,如果是“常开”,那么就需要一个专门的程序让它“按下”才行。相当于告诉CPU ,上电就执行,不用其他条件了。M0.2行不行?可以,这些并不是对应的硬件,几乎是可以任意定义的,至于最大值可以定义为多少,请参考官方文档。

image.png 接下来是M1.0,它是定时器的输入,如果它输入高电平,那么输出也是高电平,如果输入是低电平,那么输出也是低电平。

image.png 接通延时定时器用来将输入的状态延时输出。

具体来说就是使用“接通延时”指令将 Q 输出的设置延时 PT 指定的一段时间。

image.png 当输入 IN 的逻辑运算结果 从“0”变为“1”(信号上升沿)时,启动该指令。 执行该指令需要一个前置逻辑运算。该运算可以放置在程序段的中间或者末尾。 指令启动时,预设的时间 PT 即开始计时。当持续时间 PT 计时结束后,输出 Q 的信号状态为“1”。只要启动输入仍为“1”,输出 Q 就保持置位。启动输入的信号状态从“1”变为“0”时,将复位输出 Q。在启动输入检测到新的信号上升沿时,该定时器功能将再次启动。

image.png 如下图所示,通过定时器,可以将M1.0的输出延时2秒钟(2000毫秒)给M1.1,然后M1.1成为下一个定时器的输入,再延时1秒钟,回过头输出给M1.0,相当于又回来了,但是这时状态反转。在第二个定时器输出时,同时也让正儿八经的输出点Q8.2给出指定的状态。由于程序段2中M1.1有了反转,所以最终呈现的状态就是Q8.2有了正反的输出。

image.png 为什么是Q8.2,不是Q0.2,也不是Q9.2。是因为PLC的模块都有固定的地址。可以通过博途查看其地址。如下图所示,地址是从8.0一直到9.7。

image.png