热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

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

SiemensSTEP/语言是Siemenss7—300、400系列PLC程序设计语言。s7系列PLC是S5系

 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 


推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 解决PR倒放后视频卡顿的方法及操作步骤
    本文介绍了解决PR倒放后视频卡顿问题的方法,通过标记入点和出点,并进行渲染,可以有效解决视频卡顿的情况。详细的操作步骤包括:继续播放视频,标记入点和出点,选择渲染效果,等待渲染完成,清除标记等。通过理论与实践的结合,可以更好地帮助大家解决PR倒放后视频卡顿的问题。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 测绘程序设计Excel度分秒转换模板附代码超实用版
    本文介绍了测绘程序设计Excel度分秒转换模板附代码超实用版的相关知识,包括准备工作、编写表达式和注意事项。在实际工作中,将GPS实测的经纬度度转换为度分秒是常见需求,本文提供了在Excel中快速进行转换的方法,以提高工作效率。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
author-avatar
梦幻小螳螂
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有