加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线18475208684

西门子工业自动化一级代理商/分销商/经销商华南

更新时间
2024-12-12 08:00:00
价格
请来电询价
PLC触摸屏代理商
西门子代理商
伺服电机驱动电缆
西门子一级代理商
变频器直流调速器
西门子一级总代理商
联系电话
13922889745
联系手机
18475208684
联系人
向小姐
立即询价

详细介绍

SCL编程实例100例-124-变量中位的正跳变计数

- 1 - 问题描述



输入一个双整型数据(32 位),记录数据中发生正跳变(上升沿)的位的个数。


图 1 正跳变计数


- 2 - 算法分析



定义一个和输入数据长度一样的掩码变量,通过 FOR 循环语句对掩码变量进行循环移位,用得到的移位结果和输入数据做与运算,比较两个相邻扫描周期的与运算结果,即可得到输入数据的位的正跳变(上升沿)个数。


- 3 - 实验环境



硬件:

CPU 1214C DC/DC/DC。


图 2 PLC 硬件

软件:

TIA Portal V16 Upd6。

S7-PLCSIM V16。


- 4 - 程序设计



添加功能块 FB。

命名为:BitRisEdgeCnt。

1. 定义接口变量。


图 3 定义接口变量

定义输入变量 status,数据类型为双整型,作为待记录的位的正跳变的输入数据;

定义输出变量 risEdgeCnt,数据类型为整型,作为位的正跳变计数的输出;

定义静态变量 statMask,数据类型为双整型,作为判断位的正跳变的掩码;

定义静态变量 statStatusLast,数据类型为双整型,作为输入变量 status 的上个扫描周期的中间变量;

定义静态变量 statRisEdgeCnt,数据类型为整型,作为记录位的正跳变计数的中间变量;

定义静态变量 statRisEdgeCntLast,数据类型为整型,作为记录位的正跳变计数的上个扫描周期的中间变量;

定义临时变量 tempI,数据类型为整型,作为循环语句的循环变量。

为掩码变量 statMask 设置了默认起始值 16#1。

2. 编写算法代码。


图 4 编写功能块

以上代码可以实现对双整型数的 32 个位的正跳变(上升沿)的计数,使用掩码移位和输入变量做与运算,然后比较相邻两个扫描周期的与运算结果。对以上代码稍做改动也可以得到位的负跳变(下降沿)的计数。

3. 创建一个全局数据块。命名为:GdbBitRisEdgeCnt,作为以上 FB BitRisEdgeCnt 的实参。


图 5 全局数据块

4. 在主程序 OB Main 中调用以上 FB BitRisEdgeCnt,其背景数据块命名为:InstBitRisEdgeCnt,配置实参。


图 6 功能块调用

- 5 - 功能测试



在 TIA Portal 中仿真启动 PLC。

修改变量 status 的值,从 16#0000 0000 修改为 16# 1010 1111,共有 6 个位正跳变,记录结果为 6。

图 7 测试案例 1

修改变量 status 的值,从 16#1010 1111 修改为 16# 1111 0000,共有 4 个位负跳变和 2 个位正跳变,记录结果为 2。


图 8 测试案例 2


相关产品

联系方式

  • 电  话:13922889745
  • 经理:向小姐
  • 手  机:18475208684
  • 微  信:18475208684