要自己创建fb块或fc块。
在fb的局部变量表中,建立块内使用的各种变量,input,output,temp,等。
还需要自建一些udt类型,变量引用。
自己做块程序,需要一些实际编程经验才行。
fb块程序调用,建立调用的背景数据块。
fc块的话,内部的局部变量只保持一个周期有效,fb块内部的变量不同,这是两者的区别。
step 7编程语言:lad 梯形图/fbd功能块图/stl语句表,更加丰富,更加灵活,但对初学者比较难以理解,当然某些语言不能用lad表达。
块编辑的启动:选择所需编程语言,双击打开需编辑的块,如ob1或fc1等。当采用lad或fbd编程语言时,可用工具条来插入简单的程序文件,当采用stl,则可用在线帮助得到有关语言的语法和功能——help-help on stl。
编程器组成:声明表:属于块,为块声明变量和参数;代码区:包含程序本身;编程元件:可选打开或关闭,内容依赖于所选择的编程语言,双击插入或拖拉插入。
view菜单:可切换到另一种语言,并可实现lad/fbd/stl之间的转换,要知道,lad/fbd转换成stl的,在语句表中可能不是有效程序。而stl转换成其他则不一定行,转换不了的仍用语句表示,转换过程绝不会丢失程序。
其他菜单由于篇幅较大,请好结合教材及软件自己熟悉。
在讨论调用块前先介绍一下ob1块——主循环块,绝对不能改名或删除,它是由操作系统循环调用,可以访问其他的s7程序块,它包括自身程序和其他块的调用。所以,当我们编辑好一个块以后,如fc1,为了让新块集成在cpu中的循环程序中,必须在ob1中调用。即在ob1中call f1。 子程序(新块fc 1)执行的条件有以下三个:已经下载到plc中,必须在ob1调用,plc处于运行状态。 下载到实际的plc时,我们可以选择所有块或其中的一个或几个,再download到plc中。
程序的执行过程:当plc得电或从stop切换到run模式,cpu会执行一次全启动(使用ob100)在全启动期间,操作系统清除非保持位存储器、定时器和计数器,删除中断堆笺和块堆笺,复位所有保存的硬件中断,并启动扫描循环监视时间。
cpu的循环操作包括三个主要部分:cpu检查输入信号的状态并刷新过程影象输入表(pii..);执行用户程序,也就是ob1中的程序及一些事件(中断等);把过程输出影象输出表(piq)写到输出模块。上面所提到的pii/piq是cpu中特定的存储器,用来保存输入模块/输出模块的信号,在用户程序中检查时,可以保证在一个扫描周期内为同样的信号状态。
程序结构:上面曾经提到过,一个比较简单的程序,我们可以不用各种子程序块(如fc.fb),而是直接把整个程序直接写在一个块上(通常是ob1主块上),cpu逐条的处理指令,我们称这种叫线形编程;而对稍微有点复杂的程序,我们可以把它分成几个块,每块包含处理一部分任务的程序,在每一个块中可以进一步分解、成几个段,可以为相同类型的段生成段模块,组织块ob1包含按顺序调用其他块的指令,我们把这种方法叫分块编程;另外,对可重复使用的功能装入单个块中,ob1(或其他块)调用这些块并传递相关参数,这种方法叫结构化编程。用户块(程序块)包括程序代码和用户数据,在结构化程序中,一些块循环调用处理,一些块需要时才调用。程序块共有组织块(ob)、功能块(fb)、功能(fc)、系统功能块(sfb)和系统功能(fc)5种,其中系统块是在cpu操作系统中预先定义好的功能和功能块,这些块不占用用户程序空间。
在下节讨论位指令前先讨论一下siemens的模块地址:在不带dp口的s7-300和不组态的s7-400采用固定槽位编址,使用带dp口的s7-300和s7-400,可以分配模块的起始地址。但要注意,由于cpu存储器复位后,参数和地址会丢失,这就意味着所有地址都回到和槽位有关的地址或是缺省地址。我们还是以s7-300为例,在s7-300中,机架上的插槽号简化了模块地址,模块的个地址由机架上的模块地址决定。一般槽1给电源,槽2是cpu,槽3为im(接口模板)所用,4~11为i/o卡、cp卡和fm卡。他们的固定地址就是为每个槽位保留4个字节——就是说,槽4(块i/o卡),地址为0.0~3.7(共32位),槽5(第二块i/o卡)地址为4.0~7.7,假设卡是di,那么他们的地址就是i0.0、i0.1、、、i3.7,若第二卡为do卡,地址为q4.0、q4.1、、、、q7.7,请注意,当使用16通道的di/do模块时,每个槽位就会失去两个字节(16位)。