SIEMENS浔之漫智控技术有限公司阳泉西门子专业授权代理商
逻辑程序较好让OB1每个周期都扫描到”不太明白.不是提倡结构化编程吗?对于不符合当前使用的功能或功能块里面的逻辑程序一定要让OB1扫描到吗?那不是浪费OB1的扫描时间吗?那跟线性化编程又有什么区别呢?那条件调用的功能或功能块岂不是不能在OB1中使用?请各位高手再指教?
会写几个FC/FB就叫结构化编程啦?
结构化编程也不应该影响OB对逻辑程序的扫描,这是完全的不同的概念.
PLC的逻辑控制语言起源于继电器控制逻辑,硬件的逻辑电路在软件上我们可以等效认为是全扫描的,从系统的稳定性考虑,逻辑程序虽然可能分布在不同的子程序中,但其执行应该和线性化程序被全扫描的效果是一致的,其时序也应该是固定的,而条件调用的逻辑程序是无法保证逻辑时序的一致性的,从而容易导致控制性能的不稳定.
批评不错,本人得益非浅.其实条件调用功能或功能块时,当条件不满足时,这个功能或功能块,在CPU扫描到这个位置时,是不会进去扫描这个功能或功能里面的程序的,而是跳过直接扫描下一个语句.那你这个功能或功能块里的所有的变量会保持刚调用之前的状态.除非里面的变量给其他的功能或功能块调用并刷新.所以你的定时器及其它变量是保持在刚调用前的状态的.
我以前曾做过一个试验,就是在S7-300CPU的OB100中编了个语句:
AN Q0.7
=Q0.7
只要是这个Q0.7仅在这使用,Q0.7是保持常亮的.
这说明了在S7-300程序中,一个程序块不被扫描时,其中的变量是保持原态的.
班主意思说得很明白了,尽量少用条件调用功量或功量块.调用条件要做在功能或功量块里面.
说白了就是,让系统扫描到你的每个逻辑条件并及时刷新,不要留下死角让系统扫描不到.
楼主的工艺要求每个时期只有一个步骤在进行,这与CPU的扫描是没有冲突的.因为只要逻辑条件满足的才被执行,不满足的就不被执行.扫描时只不过是每个周期不断地刷新你的逻辑结果而已.并不是说扫描到你的程序就一定执行,是不是?
我说的是逻辑程序尽量作到OB1全扫描,但有些算术运算或数据处理的程序完全可以根据需要来决定是条件调用还是无条件调用,事实上有些程序是必须条件调用的,比如一些数据的移位处理,PID等.
另外,逻辑程序被周期扫描,并不一定要输出执行,而是根据条件是否满足才输出执行的,即使是所谓的顺序控制(或称步进控制),其逻辑也应该是被全扫描较好一些,因为一些安全自锁信号(如某个电机的紧急停车)需要被尽快及时地处理,而不是等到下一个条件满足周期才响应.
当然,事物不是**的,对于初学者来说,遵循这条原则是比较有帮助的,而且这也适用与普遍的逻辑控制,当你们不断的进步,对于PLC的逻辑控制有着较深一层的了解和理解后,你们也可以在一些特定的场合尝试编写一些条件调用的逻辑程序,比如大量的逻辑是在中断中处理的,有点类似于计算机语言中所谓基于事件的编程,这样的编程就是看你考虑得是否周全,即使在这时候,OB1周期全扫描的概念对于一些基础的逻辑的处理还是很重要的.
一、 CPU软元件:
1、 位软元件:处理开关信息的软元件
例:输入(X):诸如按钮、选择开关、限位开关和数字开关等外部设备给PLC发命令和数据的信号。可以分为“刷新输入”和“直接访问输入”。
输出(Y):输出是给外部电磁阀线圈、信号灯和数字显示等输出程序的控制程序结果的信号。可以分为“刷新输出”和“直接访问输出”。
还有如:中间继电器(M)、链接继电器(B)、步进继电器(S)和锁存继电器(L)
2、 字软元件:处理数值数据的软元件
例:数据寄存器(D):设计用于处理CPU模块中数字数据的软元件。链接寄存器(W),定时器(T),计数器(C)
二、 地址分配:
原则:1、三位16进制数表示;
2、连续分配;
3、空槽默认16位(具体每个模块占用点数见样本)
在SIEMENS S7-300/400系列PLC中有多种程序块,如下图(在管理器右边的空白区域点击右键),主要有:组织块(OB),功能块(FB),功能(FC),数据块(DB)及系统功能(SFC)和系统功能块(SFB)等。
注:快捷菜单中的其它两项:数据类型和变量表。数据类型(UDT)用于*程序中数据元素的大小与格式;变量表(VAT)用来在程序调试和运行时修改和监视变量的内容(在地址栏中输入地址后,符号栏中会自动显示在符号表中定义的符号)。
这几种程序块的功能简要说明如下:
说明:
调用程序块:OB,FB,FC(可以调用除OB块外的其它程序块);
被调用程序块:FB,FC,SFB,SFC。
1、组织块OB
OB由系统自动调用,并执行用户在OB块中编写的程序,所以OB的基本作用是调用用户程序。
在OB块中编写程序的较大容量,S7-300是16KB,S7-400是64KB。
除主程序循环OB1外,其它OB均是由事件触发的中断。
2、函数FC
函数FC有两个作用:(1)作为子程序用;(2)作为函数用,函数中通常带形参。
函数中程序的较大容量,S7-300是16KB,S7-400是64KB。
FC的形参通常也称为接口区,参数类型分为输入参数,输出参数,输入/输出参数和临时数据区。
在编写函数FC的输出参数时,应避免没有直接输出(否则,可能输出一个随机值,影响程序的判断)。可以在函数的开始,将字输出参数清0,位输出参数复位。
3、函数块FB
FB与FC相比,FB每次调用都必须分配一个背景数据块,用来存储接口数据区(TEMP类型除外)和运算的中间数据。其它程序可以直接使用背景数据区中的数据。
FB中程序的较大容量,S7-300是16KB,S7-400是64KB。
FB的接口区比FC多了一个静态数据区(STAT),用来存储中间变量。
程序调用FB时,形参不像FC那样必须赋值,可以通过背景数据块直接赋值。
由于FB带有背景数据块,输出参数不会输出随机值,可以不在FB中编写初始化程序。
4、数据块DB
DB用来存储用户数据及程序的中间变量,为全局变量。DB的较大容量,S7-300为32KB,S7-400为64KB。
DB可分为共享数据块(Share DB)、背景数据块(Instance DB)和用户自定义数据(UDT)类型的数据块。
★ 共享数据块可作为所有程序使用的全局变量,在CPU允许的条件下,一个程序可创建任意多个DB,每个DB的较大容量为64KB。默认条件下,共享数据块为掉电保持,在其属性菜单中选中“Non Retain”可以更改为掉电数据丢失。如CPU中无足够的内部存储空间保存数据,可将*的数据保存到共享数据块。存储在共享数据块中的数据可被其它任意一个块调用(全局变量)。这一点和背景数据块不同,背景数据块只能被*的功能块(FB)使用,保存在背景数据块中的数据只能在这个功能块中有效。
★ 背景数据块与FB和SFB关联,也是全局变量。背景数据块和共享数据块相比,只保存与FB或SFB接口数据区(Temp)相关的数据。背景数据块中有一种比较特殊的数据块,称为多重背景数据块。有关多重背景数据块的用法和使用注意事项请参看《怎样使用多重背景数据块》。
★ 基于UDT的数据块为全局变量,提供一个固定格式的数据结构,便于用户使用。
5、系统函数(SFC)和系统函数块(SFB)
SFC和SFB集成在CPU中,相当于系统提供的可供用户程序调用的FC或FB,实现与CPU系统相关的一些功能,如读写CPU时钟等功能。调用SFB需要背景数据块。







