西门子300 PLC 功能块及背景数据块的说明

 S i e me n s   S T E P ' / 语言是 S i e me n s   s 7—3 0 0 、 4 0 0系列 P L C程序设计语言。s 7系列 P L C 
是 S 5系列 P L C 的更 新换 代 产 品 , S T E P 7语言 是在 S T E P 5语言 基础 上扩 展而 形成 的, 指
令 、 语句格式基本 与 S T E P 5语言相 同。 

       对于熟悉掌握 s 5系列 P L C的人员来说, 若对不太复杂的控制系统 , 按惯用的 s 5语言 方式进行设计的程序, 可以直接移植到 s 7系列 P L C上使用 , 一般不会有太大的问题。对于 控制系统复杂且具有大量现场设施的对象, 用 S 5语言编制的程序 , 在程序的阅读、 调试 、 故 障分析等方面往往较为吃力 , 对此 S T E P 7语言可采用与实际含义一致的符号( 如对应的英 文或中文名字) 来表示应的参数, 因此无论是程序的设计者还是其他人员, 在程序的阅读、  分析、 调试等方面较为方便且不易出错。若1 %1 海水泵的启动按钮连接在 s 7系列 P L C的4  槽上模块的第 2个输入点 , 按绝对地址( s 5语言方式) 编程时 , 程序中该按钮的地址用 1   0 . 1 
来表示, 当有大量的输入点时, 1   0 . 1 表示的是什么意思不易令人明白; 按 S 7语言编程, 在符 号表中输入对应 于 1   0 . 1实际地址 的符号名字为 1 %1海水泵启 动按钮 ( 或1 %1 一 S . W. P u m p —  S t a r t _ S B) , 则在以后编制的程序中, 只要出现“ 1 %1海水泵启动按钮” ( 或“ 1 %1 一 S . W. P u m p —  S t a r t _ S B ” ) , 对任一个相关专业者阅读程序时都能明白无误地知道这是 1 号海水泵启动按 钮。此外 s 7语言还具有大量 s 5语言所没有的功能, 对初学者而言, 最易混淆及不易明白的 大致有符号表与变量声明表、 功能 F C与功能块 F B、 多个背景数据块与多重背景数据块等方 面 。 
1   符号表与变量 声明表
符号表是在编制各种程序块( OB、 F C、 F B) 的程序前先进行编辑, 可对所有 P L C的绝 对地址分配符号名和数据类型, 通常对系统的每一个输入 、 输 出点 , 程序中所用到的内部 存储器 ( 位 、 字节 、 字或双字 ) , 定时器 、 计 数器 , 甚 至组织 块 O B、 功能 F C、 功能块 F B、 数据 块 DB用与其含义相吻合的不超过 2 4个字符( 或 l 2个汉字) 的符号名字来表示 , 当然也 可以在以后的程序编制过程中对符号表随时添加新的符号名字。符号表中的数据类型,  一般不会填错 , 但作为程序块、 数据块之类 的符号名字 , 其数据类型应填上的是与该块相 关联 的块及块号。如 F B1 ( 符号名字 为: 电动机 Y一△起动功能程序) 的背景数据块有 D B 1 ( 符号名字为: 1号海水泵数据块) 、 D B 2( 符号名字为: 2号海水泵数据块) 等 , 则对应 符号名字为: “ 电动机 Y一△起动功能程序” 的数据类型应填 F B 1 , 符号名字为 : “ 1号海水 泵数据块” 的数据类型也应填 F B 1 , “ 2号海水泵数据块” 的数据类 型同样应填 F B 1 ; 若 D B I O( 符号名字为: 机舱监测报警系统共用数据) 是共享数据块, 则符号名字为: “ 机舱监 测报警系统共用数据” 的数据类型应填 D BI O 。  符号表中的符号名字适用于整个项 目中所有程序块, 是共享符号名字或称全局符号 名字即是共享数据 。 
变量声明表是在编制每个程序块前先进行编制的, 变量声明表声明的是形式参数 、 静 态变量 s t a t 与临时变量 t e mp 。

形式参数有三种类型 , i n : 输人参数 ( 只读), o u t : 输 出参数 ( 只写 ), i n _ o u t : 输入/ 输 出参数 ( 读/ 写 ) 。对 于组织 块 OB, 变量 声 明表 只能 声 明临 时变 量 ; 功 能 F C, 变量声 明表能声 明形式 参数 与临时 变量 ; 功能块 F B, 能声 明形 式参 数 、 静态 变量 与临时变 量 。  变量声明表中所声明的形式参数或变量的名字最好不要与符号表中的符号名字相 同, 不能用汉字 , 应以字母或一 开头的字母 、 数字与一 组合, 但不允许连续两个一 符号 , 也不允 许一 结尾 , 其长度同样为 2 4个字符。编程时程序中出现的符号名字用双引号 ( 需输入) ,  变量声明表中的形参或变量前用# 表示( 在增量编程方式下, 前缀# 自动生成) 。 
变量声明表中的形参和变量只适用于该程序块 , 是局部数据或称局部符号名字、 局部 变量 。 
i n参数: 通常程序块中编制的程序只需要用到该参数 的状态或数值而不改变其状态 或数值大小时的形参 , 如现场设备中的按钮、 压力继电器 、 热电偶、 程序 中用到的定时器、  计数器 等。 
o u t 参数: 通常程序块中编制的程序不需要该参数的状态或大小 , 但该程序块的程序
会改变其状态或大小 , 如现场设备中的指示灯、 电磁阀等。 
i n _o u t 参数 : 通常程序块中编制的程序既要用到该参数的状态或大小 , 又会在该程序 块中改变其状态或大小 , 如内部存储器( 位、 字节、 字或双字) 、 现场设备中的继电器等。 

t e mp临时变量 : 动态变量是块 内使用的局部变量, 由于临时变量的值存储在 L堆栈 中, 当该程序块执行完后 L堆栈接着为后面执行的程序块使用, 因此原程序块在 L堆栈 中的值全部丢失而后为下面的程序块继续使用。通常用作该程序块中使用的中间运算结
果, 如内部存储器( 位、 字节、 字或双字) 等。  形式参数是程序块间传递的数据 , 变量是程序块内使用的数据。  一张符号表最多可容纳 1 6 8 8 0个符号名字, 一个程序块的变量声明表共可声明形参与静 态、 临时变量的总数是 2 5 6个字节, 由于所有组织块 O B变量声明表的前2 o个字节是 S 7系列 P I E 保留用于系统处理用 , 因此 O B块的变量声明表用户声明的变量数应在 2 3 6个字节内。

  2 功能 F C与功 能块 F B 
功能 F C是一个用户 自己编制的不带数据块 的程序块 , 没有静态变量 。由于没有相关 联的背景数据块 , F C中的形式参数 i n 、 o u t 、 i n _ o u t 的值是被存储在指针指示地址内, 这一地 址就是该功能 F C被调用时由调用块所提供的实际参数地址; 临时变量 t e mp的值是存放在 L堆栈内, 当功能 F C执行结束后, 临时变量的数据也就丢失了, 若要保存 F C内相关数据作 永久储存, 可使用共享数据块。  功能块 F B是一个用户 自己编制 的带有 数据 块 的程序 块 , 具有 与之 相关 联 的背景数 据 块 D B。变量声 明表 中的形参 ( i n 、 o u t 、 i n _ o u t ) 和静态变量 s t a t 的值是被存储在背景数据 块 内 , 因此在该 块不被扫描执行 时 , 形参和静 态变量 的值 仍被保 留。无论是 功能 F C还是

功 能块 F B、 组织块 O B, 临时变量 t e mp都是存 放在 L堆 栈中。功能块 F B一般至少具有一 个 背景数据块 D B( 在多重背景数据块 情况下除外 ) 。  调用功能块 F B时 , 与此相关 联 的背景数 据块 必须 同时调 用 。如 F B 2的背 景数 据块
是 DB 8 , 当某 一个程序块调用 F B 2时的指令 语句为 : 
CALL  F B2, DB8 
调 用 F C、 F B时 , 形参必须用实参来替代 , 实参可 以是绝对地址 、 可 以是符号表 中 的符 号名字 , 也 可以是 调用块 变量声 明表中的局部符号名 。  F C、 F B内编制的功能程序是控制系统的子程序 , 当该功能程序在整个扫描周期 内仅 需执行一次而不是反复调用的子程序时, 变量声明表中可以不设置形式参数 , 若是一个反 复执行的公共功能子程序时必需设置形式参数。  在不涉及常数( 给定值) 、 定时器或计数器当前值的功能子程序时, 一般可在功能 F C  内编程 , 反之则可在功能块 F B内编程。如机舱泵浦或通风机的电动机起动控制程序 、 监 测报警系统 中开关量输入信号点的处理程序等可在功能 F C内编程, 报警系统中模拟量 输入信号的处理程序可用功能块 F B编制。当然在 F C内编制的程序 , 都可用功能块 F B  编制 , 但此时需增加数据块的数量, 导致用户程序长度的增加 、 P L C扫描周期的增加 , 因此 可用 F C编程 的最好 不要用 F B来 编程。 

3 多个背 景数据块与多重背景数据块 D B 
编制好 功能块 F B的变量声 明表 后 , 建立 一个 与之 相关 联 的新 的背景数 据 块 D B, 该
D B的数据在建立与 F B相关联时即 自动生成。 
多个 背景数据块 : 
一个功能块 F B可以有多个背景数据块 , 适合在同一功能、 一个扫描周期 内的多次调 用, 每次调用均需各自的背景数据。如在一个扫描周期 内该功能块 F B被调用 5次, 则该 功能块 F B应具备与之相关联的背景数据块 D B数应也是 5个。  多重背 景数据块 :  多重背景数据块有两种类型。一种是在某个功能块内多次调用同一个功能块 F B, 将 多次调用的背景数据共同存放在同一个背景数据块内; 第二种是多个功能块 F B共用一 个背景数据块, 这两种共用的背景数据块称为多重背景数据块。为了将这些多重背景在 一个背景数据块中实现, 必须在调用功能块 ( 其他程序块不允许 ) 的变量声 明表内为每个 独立背景定义一个静态变量 , 该静态变量的数据类型为被调用功能块。第二种背景数据块应用实例如 下 : 
例 : 功能块 F B 6调 用 不 同功 能块 F B 2 0、 F B 2 1 、 F B 2 2程序结构如右图所示。  如 F B 2 0的变量声明表形参有 3个 、 2个 i n参数 , 1个i n   o u t 参数; F B 2 1的变量声明表形参有 4个 , 2个 i n参数, 2个 i n _ o u t 参数 ; F B 2 2的变量声明表形参有 6个, 5个i n参数 , 1 个 i n _ o u t 参数。  分别先编 制好 功能块 F B 2 0 、 F B 2 1 、 F B 2 2, 然后 编 制功能块 F B 6, 在F B 6的变量 声明表 的静态 变量部 分 , 分别 为3个功能块设 置 3个静态变量  F B 6变量声 明表编制完成后 , 接 着 可编制 F B 6的应 用程 序 , 也 可先建 立 F B 6的背 景 数据块如 DB 6 , 这个背景数据块 D B 6就是第二种多重背景数据块。对应于功能块 F B 2 0 、  F B 2 1 、 F B 2 2的 3个 不同背 景 , 则不需要再建立相应背景数据块 , 此 时 F B 2 0 、 F B 2 1 、 F B 2 2相 对于 F B 6言, 是作为静态变量来处理 , 而不看作功能块。  F B 6之背景数据块 D B 6 

你可能感兴趣的:(转发)