子程序例程

统计一个字节、字或双字当中1的个数

创建多次调用的子程序,实现统计一个字节、字或者双字当中1的个数,应用场景:8台设备的运行状态反馈I0.0~I0.7,通过该例程,可以统计目前正在运行的设备个数。

CPU 主程序见图1.所示:

图1.CPU 主程序
1.Count_Byte 用于统计字节当中状态位为1的数量;
2.Count_Word 用于统计字当中状态位为1的数量 ;
3.Count_DWord 用于统计双字当中状态位为1的数量;

子程序Count_Byte变量表见图2.所示:

图2.子程序Count_Byte变量表
1.IN_TEMP0为布尔量,用于判断输入变量是否变化的中间变量;
2.IN_TEMP1为字节,用于存储输入IN上一扫描周期的中间变量;
3.TEMP2用于FOR_NEXT循环指令的循环计数。

子程序Count_Byte见图3.所示:

图3.子程序Count_Byte
1.程序段1,比较输入的当前值和上一扫描周期的值,若不相等则触发中间变量IN_TEMP0;
2.程序段2,将输入的当前值存储在中间变量;
3.这两段程序的目的,是判断输入的当前值是否发生变化,若发生变化,则统计当前输入状态位为1的数量,若未发生变,则不统计;

子程序Count_Byte见图4.所示:

图4.子程序Count_Byte
1.程序段3与程序段7,调用循环指令,由于一个字节为8位,所以循环次数为8;
2.程序段4,第一次循环时,清零输出计数;
3.程序段5调用字节左移指令,也可以调用字节右移指令;
4.程序段6利用特殊寄存器SM1.1检测移位指令移出位是否为1,若为1则执行自累加指令;

以上描述步骤参考下面的通信例程,例程中的 CPU 类型可能与用户实际使用的类型不同,用户可能需要先对例子程序做修改和调整,才能将其用于测试。

Number_of_1例程

注意:此指令库/程序的作者和拥有者对于该软件的功能性和兼容性不负任何责任。使用该软件的风险完全由用户自行承担。由于它是免费的,所以不提供任何担保,错误纠正和热线支持,用户不必为此联系西门子技术支持与服务部门。