在文章《S7-300/400进阶笔记5.1:300系列PLC的装载存储器的类别及方法》一文后,有小伙伴在评论区提了个问题,驼子决定有必要写一篇文章,和大家一起讨论一下。也希望小伙伴们能向"@maintenance乔"学习,有问题及时提出来,大家一起讨论、一起进步。

程序如下:

注意:原问题的红框部分是:置位指令"S #OUT7"。由于只给了我部分程序,没有复位"#OUT7"的指令,信号无法翻转,因此为了方便仿真测试和理解,这里将程序略作改动。


一、相关参数说明

程序编写在一个FC中,接口定义如下:


二、捋一捋主逻辑

其实,本程序的难点如图中的"红框"所示。如果将其"注释"掉(即在指令前面打"//",使该指令不执行),则程序就编程简单的逻辑控制指令了,如下图所示。

逻辑比较简单,不需要赘述了。重点分析一下注释掉的判断与跳转指令。


三、判断与跳转指令

在解读程序之前,先解释几个STL语句。

  1. 状态字寄存器

状态字寄存器是一个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. 《北妹》:中国七零后作家的一次火山喷发(答记者问)

    1,您是如何留意到盛可以及其创作的?是她在哪个方面的特质或者特点很突出呢? 答:我很早就知道盛可以,但是真正读她的作品是从<道德颂>开始的,当时我被她对人性尤其是男性的思考和揭示深深地震撼 ...

  2. php 一直运行页面,为什么浏览器关闭后PHP还会一直执行啊

    怪我咯2017-04-10 17:13:321楼 PHP在发送信息给客户端时,才能检测连接是否已经中断. http://php.net/manual/zh/function.ignore... php ...

  3. 嵌入式linux程序没有任何提示退出,答网友问:嵌入式Linux执行程序提示Not found的解答...

    class="markdown_views prism-atelier-sulphurpool-light"> 某日,网友不会飞的骆驼问了我一个问题.在嵌入式Linux系统中 ...

  4. 读懂 指令、程序、微命令、微操作、微指令、微程序、微地址

    机器指令 机器指令就是要计算机执行某种操作的命令. 程序 程序是一系列机器指令的有序集合. 微命令 控制部件通过控制线向执行部件发出的控制命令称为微命令. 微操作 执行部件接受微命令后进行的操作称为微 ...

  5. 雷电2接口_雷电3和TYPE-C都是干什么的?一文读懂全部

    很多朋友问我,新买的macbook有个广受赞誉的雷电接口,但根本看不懂网上的那些介绍,今天吐槽君就给朋友们讲讲这是干嘛用的,怎么用? 其实这种接口一般只是出现在高端的笔记本电脑中,相对低端的笔记本电脑 ...

  6. 一文读懂基于小程序的图像识别

    基于微信小程序的图像识别 前言:闲来无事想用小程序做一些简单且容易上手的功能,顺便接触下自己从未涉及到的领域,本文功能采用微信小程序原生开发,纯前端调用开放平台接口,无后端封装,新手也能迅速上手. 目 ...

  7. 该文件没有与之关联的程序来执行该操作_Liunx tty子系统分析之三 tty字符设备文件操作接口说明...

    本章主要介绍tty字符设备文件对应的操作接口,从而说明tty设备的数据打开.关闭.读.写等接口的实现等内容. tyy file_operations定义 tty字符设备文件操作接口的定义如下,主要包括 ...

  8. Java学习笔记——Java程序运行超时后退出或进行其他操作的实现

    当程序进入死循环或者由于其他原因无法自行终止的时候,就需要强制退出程序了. 对于开发软件 Eclipse ,在程序执行超时后,可以点击 Terminate 按钮强制退出. 那么,我们可不可以通过程序设 ...

  9. oracle 跳出内层循环,内层程序中发生异常后,不会继续执行外层程序的语句

    开发写了个存储过程需要我们审批,发现子程序中使用了异常处理语句, 通过以下实验说明这种写法的问题: SQL> create table test_number(test_id number); ...

最新文章

  1. 2022-2028年中国石油套管行业市场研究及前瞻分析报告
  2. java反射实例_关于java反射的一个案例
  3. 开发中的几种加密算法的使用场景
  4. Git 使用遇到的各种问题
  5. windows安装go环境变量
  6. 微软MVP张善友告诉你,微服务选型要注意这些地方
  7. scala方法中的变量_Scala中的变量
  8. php微信支付回调验证
  9. 20155202 《Java程序设计》实验二(面向对象程序设计)实验报告
  10. 等宽字体与非等宽字体_我最喜欢的等宽字体
  11. java编程练习(开源):十种经典游戏
  12. 淘宝带你走进——幽灵Crash迷踪案
  13. android谷歌地图删除marker,无法将marker从google地图上删除
  14. 慢就是快的人生哲理_感悟人生:慢是一种心态
  15. canal.admin、adapter和deployer的区别
  16. k8s安装nfs-subdir-external-provisioner插件
  17. 中国通信服务股份有限公司之广通服的划分!
  18. Ps抠图之魔棒简易使用
  19. 举个栗子!Tableau 技巧(95):如何插入漂亮的动图背景
  20. @Scheduled(cron = “* * * * * *“) cron表达式详解

热门文章

  1. 启动tomcat提示Could not create the Java virtual machine.
  2. Aizu 0525 Osenbei(状压+贪心)
  3. mysql myisam
  4. 如何理解IIS 7的两种应用程序池的管道模式(Managed Pipeline Mode)
  5. 使用TensorFlow的基本步骤
  6. VSLAM与SLAM联手应对数十万台巡检机器人商机
  7. VC6.0下MFC按钮点击函数手动添加
  8. linux umount swap,挂载、卸载、free查看内存情况、创建交换分区、回环设备、dd命令、自动挂载、fuser...
  9. phpnow升级mysql版本_PHPnow 升级后 PHP不支持GD、MySQL 枫
  10. Java---中国有句俗语叫“三天打鱼两天晒网”。某人从2010年1月1日起开始“三天打鱼两天晒网”,问这个人在以后的某一天中是“打鱼”还是“晒网”。