ApolloStudio高手之路(21):后备代码的妙用

2024-04-14 06:58

本文主要是介绍ApolloStudio高手之路(21):后备代码的妙用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        在诸多自动化工控项目,尤其是在涉及到设备控制的工位应用中,往往在软件关闭的时候需要对设备进行一个复位的操作,在以往的ApolloStudio版本中,在软件停止或者退出的时候只是会在系统中默认单方面关闭与设备之间的连接通道,并没有对设备执行末端操作的功能,从而会导致在软件停止或者退出的时候,设备依旧处在最后一次被操作的状态而无法恢复到初始状态,基于此需求,在新版本的ApolloStudio中,引入了后备代码的功能。

什么是后备代码

        后备代码可以理解为一个定时炸弹,而引爆的时间点就是在软件关闭或者停止的时候,为了便于开发者的操作,后备代码将作为一个函数的形式嵌入到主程序中,不过值得注意的是,这里仅仅是以“函数”的形式方便编写,而跟主流程程序没有任何关系,主流程程序可以按照正常的函数调用方法来调用后备代码段执行某些必要的操作,但是后备代码则是无法调用主流程程序的任何变量以及方法函数,可以理解为这是一个独立的小空间,与主流程程序毫不相干。

如何编写后备代码

        编写后备代码是具有固定的函数名开头的,可以理解为ApolloStudio编译执行器在执行该段函数时,会将该函数默认提取出来作为一段新的脚本独立运行,而开始运行的时间点就在软件由运行状态切换至停止状态,或者是当软件被关闭的时候,这里我们以一段DEMO程序进行说明:

#-*- coding: UTF-8 -*-
#加载内嵌模块
import clr,sys,time,datetime#后备代码段
def AS_SYS_OVERWORK():import clr,sys,time,datetime#这里务必重新导入库,因为独立运行时与主流程的库无关联if True:AS.Func_SysInfoAdd("Done")#主流程程序循环
while True:AS.Func_SysInfoAdd("Work")time.sleep(1)

        在上面的代码中,我们可以看到,AS_SYS_OVERWORK()作为后备代码的标识头,后面跟随的即是后备代码的全部内容,整个过程是以“函数”的形式之间嵌入到主程序流程中,不过值得注意的是,在后备代码中除了上述的不能共享主程序流程的变量和函数外,还有3个比较值得关注的点:

  1. 是在后备代码中不得再写任何函数体,这个是由于Python的语法决定的;
  2. 在后备代码中所需要使用到的库,都得重新使用import进行导入操作,后备代码部分是无法直接引用主程序流程中的库以及其他功能的;
  3. 后备代码中禁止写类似While True这类的死循环操作,否则将导致软件无法退出或者卡死。

后备代码的执行节点

        后备代码的执行节点在软件系统内部是这样的:

  1. 系统停止按钮触发/软件右上角X退出按钮触发
  2. 主线程被强制退出 
  3. 后备代码启动执行并至流程自动退出
  4. 软件系统销毁已添加的任务项的连接或者释放系统资源
  5. 软件复位或者完全退出

        我们可以结合上面的流程,观察下上面DEMO程序的执行效果:

       

在了解完后备代码的使用原理后,将会让开发者在使用的过程中更加游刃有余。

   ***********************************************************************************************************************************************

ApolloStudio最新版下载地址(网盘有交流群号):

(点击跳转至首页文章,见文章最底部下载链接)

这篇关于ApolloStudio高手之路(21):后备代码的妙用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/902374

相关文章

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st