应该如何使用西门子S71200的OB组织块详细教程说明

很多从日系plc或者200plc过来的人,很不习惯于s7 1200 或者tia portal 里面的一些专业术语,比如ob,db,fc,fb等等,其实这些术语也包含于s7 300,400 ,1500等,所以今天讲解的内容,理论上也适应于这些plc。虽然我没有玩过这些东西,但是tia portal适合于西门子全系列plc,很多概念性的东西都是一致的。s7 1200的功能强大正式基于拥有各种类型的block和多种变量类型。
s7 1200 由以下几类基本元素组成:
ob:组织块,英文名organization block。组织块是cpu系统和用户程序之间的接口,可以在cpu上电启动时调用,也可以循环调用,也可以在plc发生错误时候调用。
db:数据块,英文名data block。从字面含义便知主要用于储存用户数据,比如模拟量转换数据,相当于200里面的v区,欧姆龙plc的w区。
fc:函数,英文名function。我们常常在fc函数中写一些需要重复执行的代码,可以在程序不同地方调用,可以被ob调用,也可以被fc调用。使用fc可以简化我们需要重复执行的任务,提高代码的运行效率。fc类似于200的子程序。
fb:fc+db组合,意思是含有db块的fc函数,与fc的区别是当函数调用结束后,通过static变量仍然可以保留数值,经常用于调用间的数据共享。
ob组织块
当我们新建一个程序时,系统会自动建立一个main[ob1]程序,该程序会在plc的每个扫描周期被调用。main程序和200里面的主程序,是一个同样的概念。也类似于c里面的main ,即为函数入口点,我们可以在main程序里面调用各种函数和块。下面的图是在程序中调用一个fc和fb,然后在fc中调用另外一个fc,形成嵌套调用。
注:、、、是别名,方便我们记忆和理解,真正的地址在[.....]中,如ob1,fc2,fc1,fb1等等。
图1 main程序
图2 main调用结构
图1显示了main程序具体内容,图2显示了main程序的调用结构。图中很多元素的概念,我们暂时不需要了解,但是可以看到一些整体概念,mian程序包含程序段1(nw1)和程序段2(nw2),在main的调用结构中包含了3个元素test、调用fb和调用fc。其实应该是4个,还有一个嵌套在中,点击左侧箭头,出现如下图所示
图3 fc嵌套调用
图4 ob分类
我们来分析上图中的ob类型。ob块主要用于程序循环、启动、延时中断、循环中断、硬件中断、hsc中断、诊断错误和时间错误八大事件。ob块还有两个属性是编号和优先级,优先级越高,中断级别越高。在同样的优先级别,ob编号越小,越优先执行。从图1中,我们看到main程序的地址在ob1,是一个循环运行程序,优先级为1较低。时间错误事件的优先级最高,当发生该事件时,会暂停执行main程序,优先执行时间错误事件ob块。程序循环ob类块的编号属性为1;>=123,意为我们可以创建多个类似ob块。因为新建程序默认ob编号为1,假设我们要创立该事件类型ob块,那么默认编号为123起,同时ob1的执行要优先于ob123。诊断错误事件ob块和时间错误ob块只有一个。
图5 添加ob新块
图6 手动选择创建编号
图5 添加ob新块界面,我们可以看到,在红色矩形框处,ob编号数值为123,我们选择的创建方式为自动。如果你想起用别的编号,可以选择手动方式,同时可以选择创建ob块采用的语言。大家不妨自己试一试哦。
这里讲解几个常用的ob类型块使用,其他类型ob块使用,大家可以翻阅系统编程手册。
程序循环事件ob块(program cycle):该块主要用于执行循环运行的程序,一般一个程序中创建一个便可以,就是默认的main程序(ob1),我们可以通过调用fc和fb来实现其他功能。系统cpu每个扫描周期都会执行该类型ob块。
启动事件ob块(startup):该块主要用于初始化变量,当plc断电重启或者cpu从stop切换为run时候执行,往后不再运行,也就是只运行一次。我们新建一个db1块,添加两个,设置初始值,如下图所示:
图7 添加db块变量
然后新建一个startup事件ob块,写如下程序(scl语言):
图8 startup事件ob块程序
我们可以看到该类型ob块编号为100,如果再建一个该类型ob块,编号必须>=123。然后我们下载程序,这里顺便提一下下载选项,如下图所示:
图9 下载选项
如果是初次下载,选择硬件和软件(仅更改)。如果不是初次,可以选择你修改的部分,这样会提高下载速度。
图10 程序运行结果
循环中断事件ob块(cyclic interrupt):常常用于需要定时执行的任务,比如我们需要1秒钟采样50个模拟值,我们可以把循环时间设置为20毫秒。可能会有人问,为什么不采用普通定时器每隔20毫秒采样一次呢?因为普通定时器会受到cpu扫描周期的影响。在pid程序中,我们需要采用循环中断事件来调整计算pid输出。
图11 添加循环中断事件ob块
在实验程序里,通过inc指令把db1块里面的变量,每隔1秒加1,运行效果如下:
图12 循环中断事件ob
我们会看到在ob30这个程序块里面,data.var2的值会每隔1秒变化,如果把inc指令放在main[ob1]里面会是什么情况呢?
诊断错误事件ob块(diagnostic error interrupt):当plc发生故障时,会触发该事件;解除故障时,也会触发该事件,在该模块里面,我们可以读到故障信息。
图13 添加诊断错误事件ob块
在实验程序里,我们需要捕捉模拟量输入的溢出错误,所以需要对模拟量输入进行如下配置:
图14 添加溢出诊断功能
图15 ai通道硬件标识符
在配置硬件组态时,tia portal 将为每个硬件对象(如模块、接口或模块端口,甚至是智能设备的传输区)自动分配硬件标识符,相当于我们的身份证号码,独一无二。
图16 诊断程序
在诊断程序中,我们可以获取错误io状态,硬件标识符和通道,并添加了stp指令。当错误发生时候,使plc处于stop状态,若不添加stp指令,plc仍以run状态运行。
图17 诊断运行结果
通过读取io_state,laddr和channel三个变量,io状态以二进制格式显示,第4位为1,所以会出现错误。具体每个变量含义请看下图:
图18 诊断错误中断 ob 的启动信息
结束语
这期我们主要讲解tia portal 编程中一个非常重要的元素ob块,该内容不仅适合于1200,同样也适用于1500,300,400。由于1200本身的功能限制,1200的知识点还是与其他型号有所区别。与200相比,则是程序结构分类更为精细。希望我通俗易懂的讲解,能让大家快速领悟到ob块的强大之处并且能快速上手。在本期的讲解中,若有不明之处,欢迎留言哦,同时欢迎指出错误。留言问题,我会定期做统一解答。

中国首款增程式SUV成了 12月销量暴涨超500%!
支付市场上,银联、支付宝、微信支付“三国杀”的局面或将成为历史
Landau-Siegel零点猜想是什么?
linux内核空间到用户空间数据传输-Relay
联通的新4G网络能力明显增强 强在哪?
应该如何使用西门子S71200的OB组织块详细教程说明
如何通过指针式万用表来判断电容器的好坏
粒子如何在保持一种称为“量子纠缠”的神秘状态下完成远距离通信
三星s8,一加手机2017年外国人期待四部手机你造吗?
苹果2020年下半年推出的iPhone将采用超广角镜头设计
光伏企业晶科能源荣获财富、福布斯双料奖
好视角锁控管理系统
弱电电缆的种类有哪些
爆料称索尼正在为PS5开发下一代VR耳机
印度电信宣布5G试验不再与华为中兴进行合作
我的第一课 ------- 电子学基础
目前市面上较好的服务机器人都能做什么事
LDO简介和基本选型要素 LDO热耗定义相关说明
真正冬夏通用,打破传统束缚!——米家直流变频两季扇众筹开启!
详细解读诺基亚收购阿尔卡特:巨人再起?