西门子S7-1200PLC模块新疆代理价格
STEP 7中访问数据块的两种方法
在访问数据块时,需要指明被访问的是哪一个数据块,以及访问该数据块中的哪一个数据。下面介绍访问数据块中的数据的两种方法。
(1)先打开后访问
访问数据块中的数据时,需要先打开它,由于只有两个数据块寄存器,即DB寄存器和DI寄存器,同时只能打开一个共享数据块和一个背景数据块。它们的块号分别存放在DB寄存器和DI寄存器中。打开新的数据块后,原来打开的数据块自动关闭。
调用一个功能块时,它的背景数据块被自动打开。如果该功能块调用了其他的块,调用结束后返回该功能块,原来打开的背景数据块不再有效,必须重新打开它。
(2)直接访问数据块中的数据
在指令中同时给出数据块的编号和数据块中的地址,可以直接访问数据块中的数据。访问时可以使用地址,也可以使用符号地址。数据块中的存储单元的地址由两部分组成,例如,DB2. DBX2.0。DB2是数据块的名称,DBX2.0是数据块内第2个字节的第0位。如果打开了数据块DB2,可以省略个小数点前面的数据块编号。这种访问方法不容易出错,建议尽量使用这种方法。
要生成背景数据块,首先应生成对应的功能块(FB),然后生成背景数据块。
在SIMATIC管理器中,用菜单命令Insert>S7 Block>Data Block生成数据块,在弹出的窗口中,选择数据块的类型为背景数据块(Instsance),并输入对应的功能块的名称。操作系统在编译功能块时将自动生成功能块对应的背景数据块中的数据,其变量与对应的功能块的变量声明表中的变量相同,不能在背景数据块中增减变量,只能在数据显示( DataView)方式修改其实际值。在数据块编辑器的View菜单中选择是声明表显示方式还是数据显示方式。
在SIMATIC管理器中用菜单命令Insert>S7 Block>Data Block生成数据块、在出现的对话框中选择是共享数据块还是背景数据块。也可以用鼠标右键点击SIMATIC管理器的块工作区,在弹出的菜单中选择InsertNexv Object> Data Block命令,生成新的数据块。
数据块有两种显示方式,即声明表显示方式和数据显示方式,菜单命令View>Declara-tion View和View> Data View分别用来指定两种显示方式。图6-14和图6-l5是发动机控制系统中的共享数据块DB1的两种不同的显示状态。
声明表显示状态用于定义和修改共享数据块中的变量,指定它们的名称、类型和初值,STEP 7根据数据类型给出默认的初值,用户可以修改初值。可以用中文给每个变量加上注释,声明表中的名称只能使用字母、数字、下划线,地址是CPU自动指定的。
在数据显示状态,显示声明表中的全部信息和变量的实际值,用户只能改变每个元素的实际值。复杂数据类型变量的元素(例如,数组中的各元素)用的全名列出。如果用户输入的实际值与变量的数据类型不符,将用红色显示错误的数据。在数据显示状态下,用菜单命令Edit >Inicialize Data Block可以恢复变量的初始值。
数据块( DB)用来分类存储设备或生产线中变量的值,数据块也是用来实现各逻辑块之间的数据交换、数据传递和共享数据的重要途径。数据块丰富的数据结构便于提高程序的执行效率和进行数据管理。与逻辑块不同,数据块只有声明部分,没有程序指令部分。
STEP 7按数据块的使用把数据块分为两种类型:
(1)共享数据块(Shared DB)
共享数据块不附属于任何逻辑块。在共享数据块中声明的变量,用户程序中所有的逻辑块(FB、FC、OB等)都可以使用。共享数据块又叫全局数据块(Global DB)。
(2)背景数据块(Instance DB)
背景数据块是专门指定给某个功能块( FB)使用的数据块,它是FB运行时的工作存储区。当用户将数据块与某一功能块相连时,该数据块即成为该功能块的背景数据块,功能块的变量声明表决定了它的背景数据块的结构和变量。不能直接修改背景数据块,只能通过对应的功能块的变量声明表来修改它。调用FB时,必须同时指定一个对应的背景数据块。只有FB才能访问存放在它的背景数据块中的数据。
要使用数据块,首先要知道数据块的结构、数据块里能存放的数据类型;然后,要知道怎样建立数据块、怎样访问数据块。
FB与FC一样也有变量声明表,参数化、结构化的方式也基本一样。但是,FB有更强的功能,可以做一些FC不能完成的事情。那么,FB与FC到底有什么区别呢?
首先,的区别在于,FB有一个伴随数据块(Instance Data Block),用于存储变量的数值。FB被调用的时候,它的伴随数据块也同时打开,记录该FB运行过程中各变量所取得的值。该FB结束,返回主调块时,它的伴随数据块能够把变量值保存下来,供下次调用的时候使用。为此,伴随数据块的结构必须与它伴随的FB的变量声明表相同。
另外,FB的变量声明表中,还有一种静态变量(Stat),这是FC没有的。静态变量值也会记录在伴随数据块中(临时变量TEMP不会出现在伴随数据块中),PLC掉电时Stat变量值不消失,所以Stat变量通常用来记录一些需要保存的重要结果。在上面故障信息显示例子中,两个声明为in_out的变量之所以不能放在临时变量中,就是因为临时变量没有记忆的功能。如果改用FB来实现故障显示,那两个变量就可以声明为静态变量。在调用这个FB时,因为静态变量不是形式参数,这两个变量不会作为形式参数出现,简化了块调用的画面。
调用FB时,需要指定该FB的伴随数据块。伴随数据块必须在它伴随的FB完成之后(至少是该FB的变量声明表完成之后)产生。建立伴随数据块,可以通过在数据块对话框中指定相伴随的FB的方式来实现,也可以通过在调用FB的同时指定伴随数据块号的方法来建立。
为每个通用程序结构建立好参数表后,还需要在主程序中对之进行调用。以电机单向启动/停止的程序为例,程序如图6-3所示,图中主要的程序是在OB1中编写的。其中,I0.0为启动按钮,I0.1为停止按钮,Q 4.0控制电机的接触器。该程序只能完成一个特定的控制。
OB1中的电机起停控制程序是线性化编程,下面讲解该例子的结构化编程方法。现在为FC1声明变量,FC1的变量声明表如表6-1所示。
表6-1 FC1的变量声明表
在FC1中编写程序见图6-4。
保存后,退出FC1梯形图编辑器界面,这样FC1就成了电机单向启动/停止的通用程序。这一结构在程序中可以被多次调用,在每次调用中再指定具体的控制目标。如图6-5所示,进入OB1梯形图编辑器界面。在OB1中调用FC1(在左边是指令列表FC blocks中选中FC1拖放到一个网络上),图中,FCt框中的变量称为形式参数,在框外填上的地址称为实际参数,PLC在运行中每次调用FC1时,把实际参数代到形式参数中进行运算,这称为参数设置。可以看见FC1的输入参数Start、Stop出现在FC1的左侧输入端列表上,FCl的输出参数Motor出现在FC1的右侧输出端列表上。对形参Start赋予地址I0.0,对形参Stop赋予地址I0.1,对形参Motor赋予地址Q 4.0。若FC1内的程序如图6-5所示,则实际上FC1完成I0.0、I0.1对电机接触器Q 4.0的启动停止控制。FC1调用多次可以完成多台电机的启动停止控制。
通过上面的例子可以看出,凡是通用的、典型的程序,都可以参数化、结构化。在STEP 7中结构化编程的工作顺序是:
1)在FC、FB的变量声明表中规范变量,也就是声明变量的名称。
2)变量的类型和变量的数据类型。
3)在编写程序的时候,不使用实际地址,而使用变量名称(形式参数),得到一个通用的程序。
4)在调用这些通用程序(结构)的时候,利用参数设置的方法指定实际的控制条件和控制目标。
[例6-1] 编写故障报警通用程序,完成故障信息显示的控制,故障信息显示的控制要求如下:设计故障信息显示电路,故障信号为1时,使报警指示灯以2Hz的频率闪烁,操作人员按复位按钮后,如果故障已经消失,指示灯熄灭。如果没有消失,指示灯转为常亮,直至故障消失。
分析题目:在第4章中做过一个故障信息显示控制程序,是在OB1中,按照故障信号和指示灯信号的实际地址来编程的,只能处理一个故障,现在采用结构化编程,把它参数化、结构化,这就是故障显示的通用程序。
按照控制要求,利用变量声明表中的参数,编写程序如下。
程序中,变量值符号前面有“#”的,就是局部变量(Local Variable)。全局变量(Global Variable,在符号表中定义)的变量名上会有双引号。如果全局变量和局部变量没有重名,系统会自动辨别;如果有重名,系统首先会认为是局部变量,如果不是则需要用户在输入的时候自己加上双引号。
现在,FC2就可以被多次调用了。在OB1中两次调用FC2的例子如下。
程序中的M100.3是一个闪烁的信号。可以自己编程实现,也可以利用系统的ClockMemory,参照硬件组态。
在变量声明表中把Memo和Edge两个变量放在in_out变量中,是因为这两个变量在程序中要读/写。在调用FC2时,这两个变量就作为形式参数出现。
临时变量TEMP用来存放中间结果,变量值不需要从外面送进来,也不需要送出去。但变量Memo和Edge不能定义为临时变量,因为临时变量存放在L堆栈(Local Stack)中。当FC2执行完毕,返回主调块时,在L堆栈中的FC2的临时变量就会被清除。也就是说,在FC中的临时变量不能记住上一次调用时的数值;而变量Memo和Edge在上一个扫描周期所取得的状态是必须记住的。在程序调用中,如果临时变量的数量超过了L堆栈的允许长度,CPU进入了STOP状态,并且,把停机原因“Stop caused by error when allocating lo-cal data”写入诊断缓冲区diagnostics buffer中。
西门子S7-1200PLC模块新疆代理价格