接口超时后程序还会继续执行嘛_答网友问:分析一段STL程序,并就如何读懂一段程序谈几点感想...
在文章《S7-300/400进阶笔记5.1:300系列PLC的装载存储器的类别及方法》一文后,有小伙伴在评论区提了个问题,驼子决定有必要写一篇文章,和大家一起讨论一下。也希望小伙伴们能向"@maintenance乔"学习,有问题及时提出来,大家一起讨论、一起进步。
程序如下:
注意:原问题的红框部分是:置位指令"S #OUT7"。由于只给了我部分程序,没有复位"#OUT7"的指令,信号无法翻转,因此为了方便仿真测试和理解,这里将程序略作改动。
一、相关参数说明
程序编写在一个FC中,接口定义如下:
二、捋一捋主逻辑
其实,本程序的难点如图中的"红框"所示。如果将其"注释"掉(即在指令前面打"//",使该指令不执行),则程序就编程简单的逻辑控制指令了,如下图所示。
逻辑比较简单,不需要赘述了。重点分析一下注释掉的判断与跳转指令。
三、判断与跳转指令
在解读程序之前,先解释几个STL语句。
- 状态字寄存器
状态字寄存器是一个16位的寄存器,用于存储CPU执行指令时的状态。状态字的某些位用于决定某些指令是否执行和以什么方式执行,执行指令时可能改变状态字中的某些位,用位逻辑指令和字逻辑指令可以访问和检测它们。
本程序主要用到了其中的两位:溢出位OV和二进制结果位BR。
(1)二进制结果位BR
二进制结果位BR用来表示操作结果是否正确。用户编写的FB、FC程序,最好对BR位进行管理,功能块正确执行后,BR为1,否则为0。
(2)溢出位OV
如果算术运算、浮点数比较指令执行时出现错误(例如溢出、非法操作和不规范的格式),溢出位被置1。如果后面的同类指令执行结果正常,该为被清0。
本例程序中,用"OV"位来判断整数运算的运算结果是否溢出。结合"SAVE"指令,在BR中保存正确的逻辑。
2、SAVE指令
SAVE指令用于将RLO存入BR中。
3、JNB指令
当逻辑运算结果为0时,JNB就中断线性程序扫描,并跳转到指定的位置继续执行。同时将RLO位的内容复制到BR位中。
对于该跳转程序,当"#temp13"为0时,RLO=0,JNB指令生效,将程序跳转到"M002"的位置,继续执行。同时,将RLO的内容复制到BR位中。从"M002"开始的指令,将BR的值读出来,与后续逻辑进行"与"运算。
当"#temp13"为1时,JNB指令不满足跳转条件,程序从"L #IN3"处继续执行,执行整数的加法运算,即:
"#temp23"的值与"#IN2"做比较,也可作为"#OUT7"状态的逻辑依据。
由于"@maintenance乔"同学只给了一段程序,没有上下文做参考,因此,本段程序暂时不能完全解读。但大概的逻辑是:
"#IN3"是某工艺参数的实际值,"#IN2"端是给定了其上限值,"#OUT7"用于控制某设备的启停,当实际值小于上限值时,"#OUT7"才为1,相应的设备方能启动。
四、写在最后
由于程序不完整,最终也没解读出个所以然来。但驼子想通过本例表达的是:
遇到一段复杂的程序,要懂得合理的拆分它们,先从主体框架上弄懂程序想“干什么”,然后,再逐步分解每一个逻辑。精力允许的话,可以借助仿真手段,测试程序,验证自己的猜想。
接口超时后程序还会继续执行嘛_答网友问:分析一段STL程序,并就如何读懂一段程序谈几点感想...相关推荐
- 《北妹》:中国七零后作家的一次火山喷发(答记者问)
1,您是如何留意到盛可以及其创作的?是她在哪个方面的特质或者特点很突出呢? 答:我很早就知道盛可以,但是真正读她的作品是从<道德颂>开始的,当时我被她对人性尤其是男性的思考和揭示深深地震撼 ...
- php 一直运行页面,为什么浏览器关闭后PHP还会一直执行啊
怪我咯2017-04-10 17:13:321楼 PHP在发送信息给客户端时,才能检测连接是否已经中断. http://php.net/manual/zh/function.ignore... php ...
- 嵌入式linux程序没有任何提示退出,答网友问:嵌入式Linux执行程序提示Not found的解答...
class="markdown_views prism-atelier-sulphurpool-light"> 某日,网友不会飞的骆驼问了我一个问题.在嵌入式Linux系统中 ...
- 读懂 指令、程序、微命令、微操作、微指令、微程序、微地址
机器指令 机器指令就是要计算机执行某种操作的命令. 程序 程序是一系列机器指令的有序集合. 微命令 控制部件通过控制线向执行部件发出的控制命令称为微命令. 微操作 执行部件接受微命令后进行的操作称为微 ...
- 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部
很多朋友问我,新买的macbook有个广受赞誉的雷电接口,但根本看不懂网上的那些介绍,今天吐槽君就给朋友们讲讲这是干嘛用的,怎么用? 其实这种接口一般只是出现在高端的笔记本电脑中,相对低端的笔记本电脑 ...
- 一文读懂基于小程序的图像识别
基于微信小程序的图像识别 前言:闲来无事想用小程序做一些简单且容易上手的功能,顺便接触下自己从未涉及到的领域,本文功能采用微信小程序原生开发,纯前端调用开放平台接口,无后端封装,新手也能迅速上手. 目 ...
- 该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...
本章主要介绍tty字符设备文件对应的操作接口,从而说明tty设备的数据打开.关闭.读.写等接口的实现等内容. tyy file_operations定义 tty字符设备文件操作接口的定义如下,主要包括 ...
- Java学习笔记——Java程序运行超时后退出或进行其他操作的实现
当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了. 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出. 那么,我们可不可以通过程序设 ...
- oracle 跳出内层循环,内层程序中发生异常后,不会继续执行外层程序的语句
开发写了个存储过程需要我们审批,发现子程序中使用了异常处理语句, 通过以下实验说明这种写法的问题: SQL> create table test_number(test_id number); ...
最新文章
- 2022-2028年中国石油套管行业市场研究及前瞻分析报告
- java反射实例_关于java反射的一个案例
- 开发中的几种加密算法的使用场景
- Git 使用遇到的各种问题
- windows安装go环境变量
- 微软MVP张善友告诉你,微服务选型要注意这些地方
- scala方法中的变量_Scala中的变量
- php微信支付回调验证
- 20155202 《Java程序设计》实验二(面向对象程序设计)实验报告
- 等宽字体与非等宽字体_我最喜欢的等宽字体
- java编程练习(开源):十种经典游戏
- 淘宝带你走进——幽灵Crash迷踪案
- android谷歌地图删除marker,无法将marker从google地图上删除
- 慢就是快的人生哲理_感悟人生:慢是一种心态
- canal.admin、adapter和deployer的区别
- k8s安装nfs-subdir-external-provisioner插件
- 中国通信服务股份有限公司之广通服的划分!
- Ps抠图之魔棒简易使用
- 举个栗子!Tableau 技巧(95):如何插入漂亮的动图背景
- @Scheduled(cron = “* * * * * *“) cron表达式详解
热门文章
- 启动tomcat提示Could not create the Java virtual machine.
- Aizu 0525 Osenbei(状压+贪心)
- mysql myisam
- 如何理解IIS 7的两种应用程序池的管道模式(Managed Pipeline Mode)
- 使用TensorFlow的基本步骤
- VSLAM与SLAM联手应对数十万台巡检机器人商机
- VC6.0下MFC按钮点击函数手动添加
- linux umount swap,挂载、卸载、free查看内存情况、创建交换分区、回环设备、dd命令、自动挂载、fuser...
- phpnow升级mysql版本_PHPnow 升级后 PHP不支持GD、MySQL 枫
- Java---中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。