和通常的算术运算完全一样的运算过程,并遵循所有的算术运算规则,控制器系统完成一般算术运算的指令如下所列:
●ADD加法指令
●SUB减法指令
●MUL乘法指令
●DIV除法指令
●CPT表达式运算指令
●MOD求模运算指令
●SQR求平方根指令
●NEG求反指令
●ABS求绝对值指令
为了了解算术指令以及配合相应的操作,下面我们编写一段梯级逻辑来计算例程运行的平均时间,尽管我们可以在任务的监视页面看到任务扫描所有例程的当前瞬间时间和历史最大时间,如果我们想综合地评价控制系统程序响应的性能,对例程扫描的平均耗用时间,不妨精确地计算一下,编写梯形逻辑如图6-1所示。
启动按钮开始整个累加过程,按钮操作令位标签Start_Cyc置位,锁定运行位Run_Cyc,累加扫描次数工作开始。运行位Run_Cyc作为计时器的梯级条件,计时器Timer_Cyc开始启动,计时器设定的预置值就是累加运算的时间段,此处设置的时间是1min。
但凡用到加法指令ADD作为累加器,即加1送回原数据标签,一定要留意它的梯级条件,每当扫描时梯级条件成立,指令将完成相加的运算,即累加操作。本例中是计算当前例程扫描次数,梯级条件是计时器的计时位TT,在计时器正在计时的时间段,每次例程扫描都会加1,直到计时器完成位置位。
图6-1 编写梯形逻辑
计时器的完成位DN置位时计时位TT复位,ADD指令不再累加扫描次数,用计时器的完成位DN来作为计算例程扫描的平均时间的梯级条件,除法指令DIV计算出平均扫描时间,注意这个时间单位应该是毫秒。显然,决定累加时间段的计时器预置值影响了计算平均值的精度,这个时间段越大,就越接近准确的平均值,这里选择的1min就足够了。完成后计算出结果,紧接着除法指令之后,用MOV指令将计算结果送到用于显示的通信结构数据标签中,这几乎是一种习惯,一般不会直接将计算结果用来显示,而是转至缓冲区,这样可保持数据的完整和稳定。
最后,关闭动作实施善后工作,清除累加器Count-Scan,复位运行位Run_Cyc,以准备下一次的累加计算工作。(www.xing528.com)
这里我们用到两条算术运算指令,这样的计算基本上是能读懂的,用的都是指令的基本功能,我们只要留意它们给予的梯级条件就可以了。
除了加、减、乘、除等完成单一运算的指令,还有一条综合运算指令CPT,可以通过运算表达式完成复杂的运算,是应用最为灵活的运算指令。此处的运算表达式以及控制器在任何地方的运算表达式的书写,都遵循加减乘除的运算规则。如图6-2所示的梯级逻辑,CPT指令的表达式用来计算比例系数,如果用单一的运算指令,则需要多个分散的梯级来完成,CPT指令可以集中地体现某种运算关系,令人一目了然。
图6-2 综合运算的梯级逻辑
下面我们运用CPT指令来换算模拟量输入通道的定标值。我们知道,1769-IF4XOF2模块自身是能不定标的,需要编程来定标处理,假定我们要将模块的0~31140的数据范围。换算为我们后面多次要运用的定标范围0~10000。我们先创建一个用户自定义结构数据,以便编写的梯级逻辑数据标签更为紧凑和集中,并能直接看出几个梯级运算之间的关系,如图6-3所示。
图6-3 创建一个用户自定义结构数据
再在数据库中建立相应的标签,如图6-4所示。
图6-4 在数据库中建立相应的标签
最后,编写梯级逻辑如图6-5所示。用传送立即数来设定未定标范围和定标范围,然后用CPT指令计算换算的比例系数,最后通过乘法指令得到定标后的模拟量输入。用户自定义结构数据让人看到几个梯级逻辑中相关的运算关系,未定标范围和定标范围的数据可以在数据表中直接设置,但是如果用程序设置,就非常可靠了。基于系统优化的考虑,减少梯级逻辑扫描,只作初始化设置也是常见的,即使数据意外被改动,只要重新运行程序,正确的数据就会被设置。
图6-5 定标运算的梯级逻辑
CPT指令运行较耗费时间,同样完成一个单一的运算,CPT指令的执行要消耗更多的时间,所以完成单一运算,建议用单一运算指令,比如单一相加的操作就直接用ADD指令而不要用CPT指令的表达式来做,如图6-6所示的梯级逻辑就不建议采用。
图6-6 不建议采用的梯级逻辑
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。