提高系统运行效率,缩短程序扫描周期是很有必要的,尤其在对响应速度有要求的,交换数据量大的系统中,更要注意减小程序扫描周期。通过数位经验丰富的工程师的集中讨论,总结出一下几种方法:
1、可以用字的时候尽量避免用双字,可以用整数时,尽量避免用实数。
2、在一些存储区没有输入(Ix.y)和输出(Qx.y)硬件与之对应时,可以优先使用富余的IB、IW、ID、QB、QW、QD进行数据处理(因为访问耗时与V、L区有区别),其次是M,S。此外,勿滥用M等中间量,节省内存的使用。
3、尽量避免数据类型转换,不得不用时,尽量用AC存放中间变量,减少转换次数。或者编程时先预留出存储空间,比如:用VW2存整数时,VW0空出不用,就可以直接以VD0的形式来进行访问VW2中的数据。
4、减少非必要网络扫描,把可以设条件执行的网络(特别是AIW、AQW),归类到子程序中作条件调用(例如定时中断)。
5、用XOR指令实现任意位取反(这指令略有难度,调试中更需要认真对位)。
6、在保证工艺要求前提下,适当减小发生中断的频率。
7、子程序应该尽量减少条件判断的次数,规格化子程序进出口参数(在调用子程序时,进出口参数应有明确的数据格式、取值范围,避免子程序调用后产生非预期的结果),从而减少代码冗余。例如,将子程序做成最常见的一种状态,而不要做成万能的,特殊情况下在调用时进行转换。
8、对于有重复性、耗时的任务,应采用分周期处理策略。
9、对于初始化任务比较重的系统,可以把初始化工作分摊到多个周期完成。
10、对于“无需每个周期都扫描的网络”,可以分时归纳成网络段(或子程序),然后用一个时钟类的分时调用(扫描)。
11、在程序中适当使用计数器、标志位,分别对不同任务实施不同周期的刷新扫描,让每次扫描需要执行哪些网络做到心中有数,站在一个能够纵观全局的高度安排自己的库、子程序、功能段。同时,还要注意不同周期间的协调,例如,AI刷新周期300ms,数据处理周期就没必要安排200ms,将数据流控制在及时、有效的程度。