西门子SCL编程实例——霓虹灯顺序控制(DECO指令)

有如下控制任务:
舞台上有8根霓虹灯灯管 , 要求顺序点亮灯管 。 灯管编号1到8 , 从1号开始 , 每次只有一根灯管点亮 , 持续的时间为2秒钟 。 当8号灯管点亮结束后 , 再次从1号开始 , 如此循环 。
今天这篇文章 , 我们使用西门子SCL编程语言来完成这个控制任务 。
西门子SCL编程实例——霓虹灯顺序控制(DECO指令)文章插图
8根灯管分别连接到数字量输出的8个通道上 , 假设使用ET200MP的DQ 8x24VDC/2A HF , 通道地址为QB0 。
要完成该控制任务 , 可以顺序控制的方式一步一步来写代码 。 但是 , 这样写起来会比较繁琐 。 本文给大家介绍一个简单的方法 , 使用DECO指令 。
DECO指令称为"解码"指令 , 它可以把双字/字/字节的指定位置1(set) , 并且将其它位置0(reset) , 它的基本语法为:
resultDoubleWord := DECO_DWORD(IN:=tmpBitNumber) ;//双字
或者:
resultWord := DECO_WORD(IN:=tmpBitNumber) ;//字
或者:
resultByte:= DECO_BYTE(IN:=tmpBitNumber) ;//字节
其中:

  • tmpBitNumber是要置1的位编号 。 编号从右往左开始 , 最右边的位编号为0;
  • Result是DECO指令的输出值;
例如 , 要将某字节的第0位置1 , 可以使用下面的代码:
resultByte:= DECO_BYTE(IN:=0) ;//字节的第0位置1
这样 , resultByte的值=2#00000001;
回到本文的控制任务 , 我们编写功能块FB52_NenoLights , 它有一个输入信号start和输出值Q , 其中:
  • start:布尔型变量 , 启动信号 , 上升沿有效;
  • Q:字节型变量 , 为输出的字节;
  • 还有一些用于上升沿检测的静态变量 , 模块变量的声明如下图所示:

西门子SCL编程实例——霓虹灯顺序控制(DECO指令)文章插图
【西门子SCL编程实例——霓虹灯顺序控制(DECO指令)】代码如下图所示:
西门子SCL编程实例——霓虹灯顺序控制(DECO指令)文章插图
在主程序中 , 我们通过CPU的2s时钟脉冲来触发启动信号 , 输出地址为QB0 , 代码如下图所示:
西门子SCL编程实例——霓虹灯顺序控制(DECO指令)文章插图
其实 , DECO指令还可以实现用一个按钮控制多个电机的启停 。 比如 , 第1次按下按钮 , 电机1运行;第2次按下按钮 , 电机1停止 , 电机2运行 。。。 ;它可以用简单的代码 , 实现复杂的功能 。 后续我会录个视频演示下这个代码;
好了 , 关于DECO指令就先介绍到这里 。
我的新书《西门子S7-200 SMART PLC应用技术——编程、通信、装调、案例》已经出版 , 欢迎点击下面的链接查看: