理论教育 使用累加算法求指定数据区内的总数

使用累加算法求指定数据区内的总数

时间:2023-07-01 理论教育 版权反馈
【摘要】:求总数,用的基本算法是累加。图5-63所示为在指定的数据区内,求总数梯形图程序。它将使“求总数开始”OFF,“求总数开始”OFF又使“求总数完成”复位,程序复原。M5.2 ON,将使图中“求总数开始”ON,并自保持。执行这个程序后,求和的值将存于“总数”这个双字中。其所用变量声明如下:图5-63d中节1、2为启动求总数计算。

使用累加算法求指定数据区内的总数

求总数,用的基本算法是累加。图5-63所示为在指定的数据区内,求总数梯形图程序。

图5-63a为欧姆龙PLC程序。该图用的是符号地址。从图知,当“开始”ON时,执行指令MOV,使“总数低字”、“总数高字”置0。再就是把“起始地址”赋值给“指针”,并计算“结束地址”。注意,以上指令都是微分执行的。再就是执行微分指令,使LR0.02 ON一个扫描周期。

978-7-111-39745-8-Chapter06-88.jpg

图5-63 求总数程序

LR0.02 ON,将使图中“求总数开始”ON,并自保持。在“求总数开始”ON期间,将调子程序1。每个扫描周期都将调一次。

图中从SBN指令开始到RET指令之间的程序,为子程序1。每调一次,总是先清进位位,再把“指针”指向的数与“总数低字”相加,如有进位,则“总数高字”加1。接着,修改指针,并判断是否“指针”已达到最后位置。

到了“指针”值等于“结束地址”,则“求总数完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求总数开始”OFF又使“求总数完成”复位,程序复原。

执行这个程序后,求和的值将存于“总数高字”及“总数低字”中。

图5-63b为西门子PLC程序。该图用的也是符号地址。从图知,当“开始”ON时,第1条执行的指令MOV_DW,把VB0的绝对地址赋值给“指针0”,然后再把“指针0”与“开始地址”相加并赋值给“指针0”。接着,计算“结束地址”。之后,还产生M5.2输出。注意,以上指令都是在“P”指令后执行的,所以只在“启动”从OFF到ON一个扫描周期中执行。M5.2也仅ON一个扫描周期。

M5.2 ON,将使图中“求总数开始”ON,并自保持。在“求总数开始”ON期间,将调子程序0(SBR_0)。每个扫描周期都将调一次。

图中从SBR_0指令之后为子程序0。每调一次,总是先把“指针”指向的数转换为双字,然后与“总数”进行双字相加。接着修改指针,并判断是否“指针”已达到最后位置。

到了“指针”值等于“结束地址”,则“求总数完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求总数开始”OFF又使“求总数完成”复位,程序复原。(www.daowen.com)

执行这个程序后,求和的值将存于“总数”这个双字中。

图5-63c为三菱PLC程序。该图用的也是符号地址。从图知,当“开始”ON时,把“开始地址”赋值给变址器V0。接着,执行指令MOV,使“总数低字”、“总数高字”置0。再就是并计算“结束地址”。注意,以上指令都是微分执行的。再就是执行微分指令,使M0 ON一个扫描周期。

M0 ON,将使图中“求和开始”ON,并自保持。在“求和开始”ON期间,将调子程序P1。每个扫描周期都将调一次。

图中从P1标号开始到SRET指令之间的程序,为子程序P1。每调一次,总是先把D0V0地址的数与“总数低字”相加,如有进位(M8022 ON),则“总数高字”加1。接着,修改V0值,并判断是否V0值已达到最后位置。

到了V0值等于“结束地址”,则“求和完成”ON,其常闭触点OFF。它将使“求总数开始”OFF,“求和开始”OFF又使“求和完成”复位,程序复原。

图5-63d为和利时LM机程序。其所用变量声明如下:

978-7-111-39745-8-Chapter06-89.jpg

图5-63d中节1、2为启动求总数计算。节3为修改与控制数组(所处理的对象)的下标。节4为加运算。节5,处理完成后,完成信号“jiSw”复位,并使下标变量“indx”回原始值。

可知,执行了上述程序,只要启动求总数计算,每隔一个扫描周期,将先修改数组下标值,再进行加运算。这个过程一直持续到数组下标达到数组下标的上限,即完成所有数的累加,“jiSw”ON。之后,停止计算,并在节7进行“jiSw”与数组下标回原值。

执行这个程序后,求和的值将存于“总数高字”及“总数低字”中。

提示:这里求总数也需多个扫描周期才能完成。程序中最好加入溢出控制。以确保数据计算安全。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈