幸运的是,有一些方法可以放大速度并从控制器中找到增量性能跳跃。在每个单元的决策或工具更换上减少100毫秒(ms)可能会导致每年额外增加1,000个单元或部件,因此这些系统速度的微小增加直接影响到底线。
控制工程师可以遵循以下三个步骤来提高吞吐量和生产率:
1.优化子例程
2.利用中断编程
3.利用点对点I/O
整理你的点点滴滴
位和级的数据组织对系统性能有很大影响,因此优化子例程编程可以显著提高速度。
使用应用程序控制器的本机数据类型可以提高性能和内存使用。如果您的控制器使用32位处理器,则编程数据类型也应该是32位。如果在32位CPU上使用非32位数据类型,则每条指令都可能占用不必要的内存空间,并且运行所有这些数据类型转换会很快消耗CPU周期。
例如,使用双整数(DINT)数据类型而不是整数(INT)数据类型有助于减少执行时间和内存使用。
使用INT数据类型执行简单的ADD指令,例如
INT + INT = INT,需要260字节的内存和3.49微秒(μsec)来执行。
如果使用DINT数据类型执行相同的ADD指令:
执行DINT + DINT = DINT需要28字节的内存和0.26 μsec。
在内存使用和执行时间上存在这种显著差异的原因是,控制器在将每个INT值相加之前将它们转换为INT值,然后必须将总和转换回INT值。存储这些额外转换过程中创建的中间值需要额外的执行时间和内存。
另一个看起来很明显的组织技巧是子例程应该只在必要时执行。否则,它们将浪费CPU时间和处理能力。然而,子例程的编写方式往往要求控制器扫描几行代码,其中每行都是假的,只是到了关键的激活级,发现指定的操作是不必要的。
在速度方面要求最高的生产例子之一——一次性尿布生产线——就是一个很好的例子。今天,每分钟生产200个尿布的应用程序被认为是一台较慢的机器。在这样的生产条件下,每一微秒都很重要。
如果在纸尿裤生产线上运行机器的控制器被编程为在下午3点的班次结束时编译和发送班次报告数据,那么控制器应该在代码的第一级或甚至在跳转到子例程被调用之前评估它是否实际上是班次的结束。如果审查执行的第一个先决条件-是下午三点吗?-为假,则控制器可以跳过大部分或全部子例程并关注其他地方。
我们中断了你的常规节目…
为了进一步提高速度,像中断编程这样的编程策略可以将应用程序的速度从几十毫秒提高到低个位数。用于任务执行的中断编程可以是基于时间的,也可以是基于事件的。
基于时间的任务
基于时间的任务在预定的时间表上中断常规的系统例程。这些周期性任务通常用于需要比控制器扫描时间允许更频繁地进行验证的分析,以及如果延迟,可能会迅速占用生产线其余部分并导致生产延迟或停机的任务。因此,如果控制器以50毫秒的间隔进行扫描,并且有4到5个输出需要以更快的速度进行评估,那么这些输出将被写入基于时间的任务,并根据速度和任务对理想系统操作的重要性来确定优先级。
在尿布生产线中,高优先级的任务可能是验证在单个部件上执行的动作的速度和位置计算,例如折叠尿布的机制。因为每块纸尿裤的折叠速度非常快,所以每隔几毫秒就需要验证这些指标。如果位置和速度超出预定的限制,机器可能会发生故障并导致备份。对于每分钟生产200多块纸尿裤的纸尿裤生产线来说,即使是几分钟的折叠延迟或停机,也会造成数百甚至数千块纸尿裤的损失。
需要注意的是:基于时间的任务可以允许高速应用程序在标准控制器上高效运行,但是如果有太多定期运行的任务,或者它们没有正确地优先级,CPU可能会在任务之间跳转浪费资源。根据控制器的不同,跳过中断任务并返回到常规程序可能需要75到300 μsec。需要对中断进行适当的分段和优先级排序,以可靠地提高系统性能。
一般来说,建议不要超过5个中断任务。当程序开始包含十个以上的中断任务时,就会出现问题,因为从一个任务跳到下一个任务花费了太多的时间。这可以通过对带有中断的程序的完整运行时进行一些预先分析来防止。
您的控制器供应商可能提供帮助进行此分析的工具,这些工具将使您能够将CPU用于不同任务的时间分解为易于阅读的图表。这允许用户对系统运行情况进行基准测试,并根据分析修改或更改中断优先级。
基于事件的任务
当检测到预定的事件输入(特定的位或位的组合)时,触发基于事件的任务。这些位或位可以在需要时以高速中断控制器扫描,而在不需要时基本上对扫描没有影响。
在纸尿裤生产线的末端,纸尿裤的材料将流经一台机器,在那里添加了用于闭合纸尿裤的标签。在机器周期的某一点上,粘合剂滴可能会被应用到织物上,在织物上放置标签。
如果物料已停止流入机器,则必须停止上胶过程;否则,胶水会溅满整个机器,造成生产延误或停机。为了纠正这种情况,连接到I/O模块的传感器可以触发控制器中基于事件的任务。然后控制器会提醒粘合剂输出机构停止涂胶。如果没有中断编程,这个动作将需要控制器连续扫描并确保尿布材料存在。因为,在一个正常运作的系统中,尿布材料应该几乎连续存在,运行扫描来确认材料确实存在会浪费时间和资源。相反,该系统可以设置为中断粘合过程,如果触发的材料缺乏。
通过基于预先确定的输入或位模式而不是仅仅基于一个输入或位触发事件,事件任务可以变得更加高效。例如,在将标签粘到尿布上之前,机器会验证几个要求,以确保产品没有缺陷,产品已就位,标签可用,胶水喷嘴未堵塞。传统上,只有这些需求中的一个可能会中断控制程序,而其他输入将在中断中进行验证。这可能会浪费时间,因为系统最终可能会确定不满足某个必要的先决条件。现在,一些I/O模块能够根据输入模式识别和触发基于事件的任务,确保除非一切都处于适当状态,否则不会发生中断。
跳出控制器思考
为了进一步提高速度,从低个位数ms到μsec,您可以在I/O模块中使用新的对等功能完全绕过控制器进行高速决策。
具有本地点对点功能的I/O模块只需要建立机箱内连接即可直接相互通信。然后根据从输入端接收到的数据为输出供电,独立于控制器。这种控制方法可以显著提高总系统响应时间(SRT)。SRT是输入模块响应、PAC处理和输出模块响应所需时间的函数。因此,消除或减少I/O和控制器之间的通信可以提高机器速度和零件生产。
将决策或原始评估转移到I/O模块,减轻了控制器处理和指导I/O模块所需的开销,有助于提高程序执行和吞吐量的可重复性,从而提高每班的零件产量。在点对点模式下,输入到输出响应时间可小于100 μsec。点对点功能非常适合具有快速检测激活序列的应用,例如高速零件剔除。
当完成的纸尿裤从生产机器运送到包装机器时,连接在传感器上的点对点输入模块可能会检测到纸尿裤的标签使用不当。传统上,I/O被编程为向控制器发送警报,控制器处理该数据以确定向输出模块发送什么消息以激活在线响应。相反,输入模块可以直接通知附近的输出模块,以触发从生产线上移除拒绝尿布的机制。
更快的质量检查意味着整条生产线可以以更高的速度运行。这意味着每分钟更多的尿布,每小时更多的包裹准备好运送,每班结束时更多的美元流入底线。
对于大多数应用程序,您可以通过编程更改或点对点I/O等技术,从控制系统中发现速度的增量改进。如果您的应用程序在几十毫秒内运行,请考虑这里讨论的一些步骤,将您的控制系统调到高速,并进入微秒范围。
来源:罗克韦尔自动化