求总数,用的基本算法是累加。图6-40所示为在指定的数据区内,求总数梯形图程序。
图6-40 求总数程序
图6-40a为欧姆龙PLC程序。该图用的是符号地址。从图知,当“开始”ON时,执行指令MOV,使“总数低字”“总数高字”置0。再就是把“起始地址”赋值给“指针”,并计算“结束地址”。注意,以上指令都是微分执行的。再就是执行微分指令,使LR0.02ON一个扫描周期。
LR0.02ON,将使图中“求总数开始”ON,并自保持。在“求总数开始”ON期间,将调子程序1。每个扫描周期都将调1次。
图中从SBN指令开始到RET指令之间的程序,为子程序1。每调1次,总是先清进位位,再把“指针”指向的数与“总数低字”相加,如有进位,则“总数高字”加1。接着,修改指针,并判断是否“指针”已达到最后位置。
到了“指针”值等于“结束地址”,则“求总数完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求总数开始”OFF又使“求总数完成”复位,程序复原。
执行这个程序后,求和的值将存于“总数高字”及“总数低字”中。
图6-40b为西门子PLC程序。该图用的也是符号地址。从图知,当“开始”ON时,第1条执行的指令MOV_DW,把VB0的绝对地址赋值给“指针0”,然后再把“指针0”与“开始地址”相加并赋值给“指针0”。接着,计算“结束地址”。之后,还产生M5.2输出。注意,以上指令都是在“P”指令后执行的,所以只在“启动”从OFF到ON一个扫描周期中执行。M5.2也仅ON一个扫描周期。
M5.2ON,将使图中“求总数开始”ON,并自保持。在“求总数开始”ON期间,将调子程序0(SBR_0)。每个扫描周期都将调1次。
图中从SBR_0指令之后为子程序0。每调1次,总是先把“指针”指向的数转换为双字,然后与“总数”进行双字相加。接着,修改指针,并判断是否“指针”已达到最后位置。
到了“指针”值等于“结束地址”,则“求总数完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求总数开始”OFF又使“求总数完成”复位,程序复原。(www.xing528.com)
执行这个程序后,求和的值将存于“总数”这个双字中。
图6-40c为三菱PLC程序。该图用的也是符号地址。从图知,当“开始”ON时,把“开始地址”赋值给变址器V0。接着,执行指令MOV,使“总数低字”“总数高字”置0。再就是并计算“结束地址”。注意,以上指令都是微分执行的。再就是执行微分指令,使M0ON一个扫描周期。
M0ON,将使图中“求和开始”ON,并自保持。在“求和开始”ON期间,将调子程序P1。每个扫描周期都将调一次。
图中从P1标号开始到SRET指令之间的程序,为子程序P1。每调1次,总是先把D0V0地址的数与“总数低字”相加,如有进位(M8022ON),则“总数高字”加1。接着,修改V0值,并判断是否V0值已达到最后位置。
到了V0值等于“结束地址”时,则“求和完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求和开始”OFF又使“求和完成”复位,程序复原。
图6-40d为和利时LM机程序。其所用变量声明如下:
图6-40d中:节1、2为启动求总数计算;节3为修改与控制数组(所处理的对象)的下标;节4为加运算;节5,处理完成后,完成信号“jiSw”复位,并使下标变量“indx”回原始值。
可知,执行了上述程序,只要启动求总数计算,每隔1个扫描周期,将先修改数组下标值,再进行加运算。这个过程一直持续到数组下标达到数组下标的上限,即完成所有数的累加,“jiSw”ON。之后,停止计算,并在节7进行“jiSw”与数组下标回原值。
执行这个程序后,求和的值将存于“总数高字”及“总数低字”中。
提示:这里求总数也需多个扫描周期才能完成。程序中最好加入溢出控制。以确保数据计算安全。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。