添加功能块 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 功能块调用