同步/ 异步指令之间的不同之处

描述

简介

在程序执行过程中,同步和异步指令有着显著不同。

“同步”和“异步”属性与指令调用与执行间的时间顺序相关。

以下情况适用于同步指令:同步指令调用完成时,指令执行也完成。

而异步指令,则情况有所不同:异步指令调用完成时,异步指令的执行不一定完成。这也就意味着,异步指令的执行可以跨多次调用。在 CPU 中,异步指令的执行与用户程序循环同时进行。异步指令在 CPU 中生成待处理的作业。

异步指令通常用于传输数据(例如,模块的数据记录、通信数据、诊断数据)。
 

同步/ 异步指令之间的不同之处

下图显示了异步指令和同步指令处理的不同之处。在该图中,CPU 在指令执行完成(如,完成传输数据记录)之前,调用该异步指令五次。

对于同步指令,每次调用时都会完全执行。 

cpu

①  第一次调用异步指令,开始执行

②  中间调用异步指令,继续执行

③  最后一次调用异步指令,执行完成

④  每次调用后,作业会完全通过同步指令进行处理。

完全处理的作业的持续时间

异步指令作业的并行处理

CPU 可同时执行多个异步指令作业。在以下情况下,CPU 将并行执行多个作业:

●   用于异步指令的作业会启动,而该指令的其它作业仍在运行中。

●   但不超出该指令可同时运行的作业最大数目。

下图显示了 WRREC 指令中两个作业的并行处理。在一段时间内,两个指令同时执行。

cpu

为作业分配指令调用

要跨多个调用执行一个指令,CPU 需向该指令正在运行的作业唯一指定一个后续调用。

CPU 可通过以下两种方式为作业分配一个调用,具体取决于指令的类型:

●   使用指令的背景数据块(“SFB” 类型)

●   使用指令的作业标识输入参数。在异步指令的执行过程中,这些输入参数必须与执行过程中的各调用相匹配。

示例:“Create_DB” 指令的作业由输入参数 LOW_LIMIT、UP_LIMIT、COUNT、ATTRIB  和 SRCBLK 标识

下表列出了标识指令的输入参数。

cpu

cpu

异步指令的状态

异步指令通过块参数 STATUS/RET_VAL  和 BUSY  显示指令的状态。有些异步指令也会使用块参数 DONE 和 ERROR  显示。

下图显示了两个异步指令 WRREC 和 CREATE_DB 的执行

cpu

①  输入参数 REQ 用于启动作业,执行异步指令。

②  输出参数 DONE 用于指示该作业已完成且无错误。

③  输出参数 BUSY  用于指示作业是否正在执行。BUSY =1 时,为该异步指令分配资

源。BUSY = 0 时,未分配资源。

④  输出参数 ERROR  用于指示发生了错误。

⑤  输出参数 STATUS/RET_VAL  用于提供有关作业执行的状态信息。发生错误后,输出参数 STATUS/RET_VAL 用于接收错误信息。

资源的使用

异步指令在执行过程中将占用 CPU 中的资源。根据 CPU 类型和指令的不同,资源的使用具有一定限制。CPU 可同时执行最大数目的异步指令作业。在作业成功完成后或在出错后,这些资源将再次可用。

示例:对于 RDREC  指令,S7-1500 CPU  可以并行处理最多 20 个作业。

如果超出指令的最大并行作业数量,则会出现以下情况: 

●   该指令将在块参数 STATUS 中返回错误代码 80C3(资源不足)。

●   CPU 将停止执行作业,直至资源再次可用。

说明

低层级的异步指令

某些异步指令可使用一个或多个低层级的异步指令进行处理。下表列出了这种相关性。

请注意,每条级别较低的指令通常占用指令资源池中的一个资源。

责任编辑:lq

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分