PLC编程再思考之三:面向过程

现在的高级语言基本上都是面向对象的,但是PLC编程象较早的BASIC/FORTRAN语言一样,是面向过程的。

PLC逻辑处理的基本过程为:

1) 将外部设备输入的数据写入输入映像区(I)。

2) 逻辑处理,包括读I区、写Q区。

3) 将输出映像区(Q)的数据输出到外部设备。

其中,1)和3)是PLC内部处理的,所有的PLC用户程序只处理第2)部分。

PLC的这种处理方式带来了下面2个特点。

特点1:OB1调用的程序不存在并发

我们知道,PLC用户程序主要运行在2个地方:中断和OB1。

一般而言,能够在一个扫描周期里完成的逻辑处理,通常我们会在OB1中进行调用,而OB1中的程序是按照严格的调用顺序进行处理的。

比如CPU扫描周期是20ms,那么在某个ns,CPU只会处理某个特定的FC/FB/NW。

举个例子,1工位的工人同时按个2个按钮,而在PLC层面,对这2个按钮的事件处理是有先后顺序的。

因此,严格地说起来,PLC不存在真正的并发。

有效利用这一特点,可以让编程变得更轻松。

比如1条线有30个工位要进行呼叫处理,而每个工位的呼叫处理逻辑是一样的,那么我们可以建立一个临时DB,存储任意一个工位的所有中间变量。

OB1按照工位的顺序进行处理,当执行到第N个工位时,临时DB的变量值就记录了第N个工位的中间变量值。当执行到下一工位时,临时DB被重写,以用于下一工位业务处理。

由于PLC在任意一个瞬间只处理一个特定的工位,因此临时DB的值和此工位有严格的对应关系,因此我们无需在FC里声明变量,因为所有的变量都已定义在临时DB中。

这样处理可以让程序更加简洁通用、变量少,可以用FC变相地实现FB的功能。

特点2:后面赋值覆盖前面赋值

高级语言在符合条件的时候就会输出,而PLC只会在所有逻辑处理完成以后才会输出,并且只输出最后写入的值。

比如在同一个扫描周期,先执行了Q0.0=0,后执行了Q0.0=1,由于在执行的过程中,数据仍然存储于输出映像区,这2步操作相当于在同一个扫描周期内对Q0.0的映像区进行了2个赋值操作,并用后一次赋值覆盖前一次赋值,因此OB1最终将Q0.0赋值为1,然后将此值输出到外部设备。

我们在编程的时候利用这一特点,可以减少一些比较的运算处理。

比如某工位按下按钮1则亮黄灯(红灯灭),按下按钮2则亮红灯(黄灯灭),同时按下则红灯亮(黄灯灭)。

也就是说从业务上来说,按钮2的级别较高。

相对的,我们可以先写按钮1的处理逻辑,再写按钮2的处理逻辑,当2个按钮都按下时,根据PLC的特点,CPU只输出按钮2的处理结果,因此我们无需写比较的程序。

时间: 2025-01-01 09:33:42

PLC编程再思考之三:面向过程的相关文章

PLC编程再思考之二:SOA

随着AMAZON云服务的成功,许多人知道了BEZOS在AMAZON内部推广WEB SERVICE的故事,从而佩服他的技术眼光和执行力. 如果说AMAZON.COM的成功是因为长尾理论,是对万货商店的技术实现,那么从某个层面来说,AWS(AMAZON WEB SERVICE)是另一种形式的长尾,只不过它销售的是IT服务而不是物理产品. BEZOS基于SOA的思想,通过网络接口和服务打通了AMAZON内部的各种子系统,他把基础设施的接口进一步对外开放,从而形成了AWS的基础功能. 那么,SOA的思想

PLC编程再思考之一:MapReduce

大家知道MapReduce是奠定GOOGLE成功基础的三大技术法宝之一(另外两个是PageRank和BigTable),现在MapReduce方法论已经在网络开发甚至在企业开发中得到广泛的应用,而本文则探讨MapReduce在MES PLC编程中的应用. 目前PLC和自动化技术在MES的应用中非常关键,通过对PLC的集成,MES得以打通执行层.控制层.设备层,在一些汽车制造公司,甚至专门搭建IT PLC或MASTER PLC,以实现PMC.ANDON.AVI.EPS等高度复杂的业务模块,以及数以

PLC编程再思考之4 - 面向对象

PLC编程有诸多限制,如: 传统的西门子PLC单个DB的存储容量为64KB. 每次DB结构变更时,都需要编译并重新下载覆盖原DB. 每次DB结构变更时,OPC变量需要重新映射地址. 但有时候我们希望把DB设计得灵活一些,当给PLC增加一些小的元素时,我们不希望覆盖大量的DB. 有时我们希望PLC程序设计得模块化.产品化.基于配置. 在这些应用场景中,我们可以参考面向对象的方法进行PLC编程. 本文以质量安灯实例说明了面向对象的PLC编程方法. 业务需求为: 每个工位配置1条拉绳. 当拉绳拉下时,

面向对象编程(一)——面向对象和面向过程

面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向对象:object oriented programming,OOP 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了. 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中

面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现) --转载

引言--面向接口所处的设计模式中的位置. 其实,我认为Java/C#比C++高级的其中一个原因是,它对面向接口编程的支持.不要误解,并不是说C++不支持面向接口编程,而是说C++的语法中没有这种天然的机制. 面向对象之于面向过程,面向接口之于面向实现.但基本上,面向接口和面向实现都基于面向对象的模式,也就是说面向接口并不能称为比面向对象的更高的一种编程模式.而是在面向对象中大的背景下的一种更加合理的软件设计模式,它增强了类与类之间,模块与模块的之间的低耦合性,是软件系统更容易维护.扩展. 不管是

day5-python之面向过程编程

一.面向过程编程 #1.首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路.思想,而编程思路是不依赖于具体的语言或语法的.言外之意是即使我们不依赖于函数,也可以基于面向过程的思想编写程序 #2.定义 面向过程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么 基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式 #3.优点:复杂的问题流程化,进而简单化 #4.缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身 #5.应用:扩展性要求不高

迭代器、生成器、面向过程编程

一 迭代器 1.迭代的概念 #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代 print('===>') l=[1,2,3] count=0 while count < len(l): #迭代 print(l[count]) count+=1 2.为何要有迭代器?什么是可迭代对象?什么是迭代器对象? #1.为何要有迭代器? 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但

python学习第四节 迭代器 生成器 面向过程编程

1:什么是迭代 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通过内置函数iter()来转变为Iterator. 对迭代器来讲,有一个__next()就够了.在你使用for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的next__()方法,直到监测到一个StopIteration异常. >>> L = [1,2,3]>

python/面向过程的编程思想及举例

python基础--面向过程的编程思想及举例 面向过程的编程思想 1.面向过程的编程思想及举例 写程序时: 要先想功能,分步实现 2. os模块中walk输出目录中文件路径 os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下. Send可以传多个值,但是必须是元组类型 面向过程的编程思想 像流水线,代码简洁,体系结构 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28