版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章S7系列程序结构5.1S7-300的程序结构5.2程序块类型5.3用户定义的块5.1S7-300的程序结构STEP7为设计程序提供三种方法,即线性化编程、模块化编程和结构化编程,如图5.1。基于这些方法,可以选者最合适与你的应用程序设计方法。图5.1STEP73种设计程序的方法5.1S7-300的程序结构1、线性化编程线性化编程类似于硬件继电器控制电路,整个用户程序放在循环控制组织块OB1(主程序)中,循环扫描时不断地依次执行OB1中的全部指令,如图5.2。这种方式的程序结构简单,不涉及功能块、功能、数据块、局域变量和中断等比较复杂的概念,分析起来一目了然。这种结构是用于编写一些规模较小,运行过程比较简单的控制程序。由于所有的指令都在一个块中,即使程序中的某些部分在大多数时候并不需要执行,每个扫描周期都要执行所有的指令,因此没有有效地利用CPU。此外如果要求多次执行相同或类似的操作,需要重复编写程序。图5.2线性编程5.1S7-300的程序结构2、模块化编程程序被分为不同的逻辑块,每个块包含完成某些任务的逻辑指令,如图5.3。分块程序有更大的灵活性,适用于比较复杂、规模较大的控制工程的程序设计。组织块OB1(即主程序)中的指令决定在什么情况下调用哪一个块,功能和功能块(即子程序)用来完成不同的过程任务。被调用的块执行完后,返回到OB1中程序块的调用点,继续执行OB1。图5.3模块化编程模块化编程的程序被划分为若干个块,易于几个人同时对一个项目编程。由于只是在需要时才调用有关的程序块,提高了CPU的利用率。5.1S7-300的程序结构3、结构化编程结构化编程将复杂的自动化任务分解为能够反映过程的工艺、功能或可以反复使用的小任务,这些任务由相应的程序快(或称逻辑块)来表示,程序运行时所需的大量数据和变量存储在数据块中。结构化程序比分块程序有更大的灵活性、继承性。适用于比较复杂、规模较大的控制工程的程序设计。某些程序块可以用来实现相同或相似的功能。这些程序块是相对独立的,它们被OB1或别的程序块调用,如图5.4。图5.4结构化编程5.2程序块类型
S7-300/400PLC的程序分系统程序和用户程序。系统程序是协调PLC内部事务的程序,与控制对象特定的任务无关,在从经销商购买CPU硬件的时候,CPU里面本身就包含了系统程序。系统程序完成PLC的启动/停止、I/O映像区的更新、用户程序的调用、中断的响应、错误及通信处理等任务。用户程序需要用户使用STEP7编程软件编写程序,然后下载到CPU中,可以完成需要的特定控制任务。用户程序包含用户编写的组织块(OB)、FB、FC和系统提供的SFB(系统功能块)与系统功能(SFC),被调用的块是OB之外的逻辑块。调用功能块时需要为它指定一个背景块,后者随功能块的调用而打开,在调用结束时自动关闭。图5.5STEP7调用块的过程示意图,OB1调用FB1,FB1调用FC1,应按下面的顺序创建块:FC1、FB1及背景数据块OB1,即编程时被调用的块应该是已经存在的。5.2程序块类型图5.5块调用的分层结构5.3用户定义的块STEP7将用户编写的程序和程序中所需要的数据放置在块中,使单个的程序部件标准化。通过在块内或块之间类似子程序的调用,使用户程序结构化,可以简化程序组织,使程序易于修改、查错和调试。块结构显著增加了PLC程序的组织透明性、可理解性和易维护性。STEP7软件中主要的各种块的简要说明见表5.1所示。表5.1逻辑块和数据块5.3.1组织块(OB)
组织块是CPU的操作系统与用户程序的接口,由操作系统调用,用于控制扫描循环和中断程序的执行、PLC的启动和错误处理等。OB与不同的CPU类型是相关的,某一型号的CPU支持哪些OB是确定的。例如,OB35和OB40可以在CPU315-2DP中使用,而OB36和OB41则不行。因此用户只能编写目标CPU支持的OB。OB1是对应于循环执行的主程序的程序块,它是STEP7程序的主干。其他大多数OB则对应于不同的中断处理程序(另外还有启动程序和背景程序等非中断类的OB)。与每一个OB紧密相连的是它对应的类型和优先级。OB的类型指出了它的功能,例如延时中断、硬件中断等;OB的优先级则用于表明一个OB是否可以被另外一个OB中断,优先级较低的OB总是可以被优先级较高的OB中断。在S7系列CPU中,背景循环OB90的优先级最低,其次就是OB1,它的优先级是1,因此OB1通常总是可以被其他的OB中断。对于S7-300的CPU各个OB的优先级都是固定的,用户无法更改。5.3.1组织块(OB)
SIMATICS7系列CPU的全部组织块的资源及优先权等级见表5.2。不同的CPU模板具有不同的功能,因此并不是任何CPU模板都具有表5.1所示的全部组织块资源,如CPU312IFM只有OB1,OB40和OB100。表5.2组织块5.3.1组织块(OB)表5.2组织块1、OB1(循环组织块,又称主程序)S7CPU的操作系统定期执行OB1。当操作系统完成启动后,将启动循环执行OB1。在OB1中可以调用其他功能(FC、SFC)和功能块(FB、SFB)。执行OB1后,操作系统发送全局数据。重新启动OB1之前,操作系统会将过程映像输出表写入输出模块中、更新过程映像输入表以及接收CPU的任何全局数据。操作系统在运行期受监视的所有OB模块中,OB1的优先级最低,也就是除OB90之外的所有OB块均可中断OB1的执行。S7专门有监视运行OB1的扫描时间的时间监视器,最大扫描时间的默认为150ms。用户编程时可以使用SFC43“RE_TRIGR”来重新启动时间监视。如果用户程序超出了OB1的最大扫描时间,则操作系统将调用OB80(时间错误OB块),如果没有发现OB80,则CPU将转为STOP模式。除了监视最大扫描时间外,还可以保证最小扫描时间。操作系统将延迟启动新循环(将过程映像输出表写入输出模块中),直至达到最小扫描时间为止。在OB1中系统定义了如表5.3所示的本地数据,其地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。5.3.1组织块(OB)表5.3OB1中系统定义的本地数据符号名称数据类型地址说明OB1_EV_CLASSBYTE0.00~3位=1事件等级;4~7位是标识,=1表示OB1被激活OB1_SCAN_1BYTE1.0B#16#01:完成暖启动B#16#02:完成热启动B#16#03:完成主循环B#16#04:完成冷启动B#16#05:主站-保留站切换和停止上一主站之后新主站CPU的首个OB1循环OB1_PRIORITYBYTE2.0优先级1OB1_OB_NUMBERBYTE3.0OB编号(01)OB1_RESERVERD_1BYTE4.0保留OB1_RESERVERD_2BYTE5.0保留OB1_PREV_CYCLEINT6.0上一次扫描的运行时间(ms)OB1_MIN_CYCLEINT8.0自上次启动后的最小周期(ms)OB1_MAX_CYCLEINT10.0从上次启动后的最大周期(ms)OB1_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME2、时间中断组织块(OB10~OB17)时间中断组织块可以单次运行,也可以定期运行:每分钟、每小时、每天、每月、每个月末。对于每月执行的时间中断OB,只可将1、2、…、28日作为起始日期。要启动时间中断,必须先设置中断,然后再将其激活。有以下4种可能的启动方式:1)自动启动时间中断。一旦使用STEP7设置并激活了时间中断,即自动启动时间中断;2)使用STEP7设置时间中断,然后通过调用程序中的SFC30“ACT_TINT”来激活它;3)通过调用SFC28“SET_TINT”来设置时间中断,然后通过调用SFC30“ACT_TINT”来激活它;4)使用SFC39~SFC42禁用或延迟和重新启用时间中断。由于时间中断仅以指定的时间间隔发生,因此在执行用户程序期间,某些条件可能会影响OB的操作。表5.4列出了其中的一些条件,并说明了该条件对执行时间中断OB的影响。在OB10~OB17中系统定义了如表5.5(表中的符号以OB10为例)所示的本地数据,其中地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。表5.4影响时间中断OB的条件条件结果用户程序调用SFC29(CAN_TINT)并取消时间中断操作系统清除了时间中断的启动事件。如果需要执行OB,必须再次设置启动事件并再次调用OB之前激活它用户程序试图激活时间中断OB,但未将OB加载到CPU中操作系统调用OB85.如果OB85尚未编程(装载到CPU中),则CPU将转为STOP模式当同步或更正CPU的系统时钟时,用户提前设置了时间并跳过时间OB的启动事件日期或时间操作系统调用OB80并对时间OB的编号和OB80中的启动事件信息进行编码。随后操作系统将运行一次时间OB,而不管本应执行此OB的次数。OB80的启动事件信息给出了第一次跳过时间OB的DATE_AND_TIME当同步或更正CPU的系统时钟时,推后设置了时间以使OB的启动事件日期或时间得以修复S7-400CPU和CPU318:如果在推后设置时钟之前已激活了时间OB,则不会再次调用它。S7-300CPU:执行时间OBCPU通过暖启动或冷启动运行有SFC组态的所有时间OB会被改回在STEP7中指定的组态。如果已为相应的OB的单次启动组态了时间中断,使用STEP7对其进行了设置,并将其激活,则当所有组态的启动时间为已过去的时间(相对于CPU的实时时钟)时,会在暖启动或冷重启操作系统后调用一次OB当发生下一时间间隔的启动事件时,仍执行时间OB操作系统调用OB80.如果OB80没有编程,则CPU转为STOP模式。如果装载了OB80,则会首先执行OB80和时间中断OB,然后再执行请求中断表5.5OB10中系统定义的本地数据符号名称数据类型地址说明OB10_EV_CLASSBYTE0.00~3位=1事件等级;4~7位是标识,=1表示OB激活OB10_STRT_INFOBYTE1.0B#16#11:OB10的启动请求(B#16#12:OB11的启动请求)(B#16#18:OB17的启动请求)OB10_PRIORITYBYTE2.0分配的优先级,缺省值为2OB10_OB_NUMBERBYTE3.0OB编号(10~17)OB10_RESERVERD_1BYTE4.0保留OB10_RESERVERD_2BYTE5.0保留OB10_PREIOD_EXEWORD6.0OB以指定的时间间隔执行
W#16#0000:单次W#16#0201:每分钟一次W#16#0401:每小时一次W#16#1001:每天一次W#16#1201:每周一次W#16#1401:每月一次W#16#1801:每年一次W#16#2001:月末OB10_RESERVERD_3INT8.0保留OB10_RESERVERD_4INT10.0保留OB10_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME5.3.1组织块(OB)【例5-1】使用STEP7设置并激活时间中断。首先建立一个完整项目,如图5.6所示,然后单击项目中的“SIMATIC300(1)”,打开右边的硬件图表,如图5.7所示,将自动弹出硬件组态画面,如图5.8所示,把电源和CPU等放到机架相应的位置上。图5.6建立一个项目并完成项目中的目录5.3.1组织块(OB)图5.7打开硬件组态画面
在硬件组态画面,双击机架上的CPU,如图5.8所示,将弹出CPU属性画面。在CPU属性画面点击“时刻中断”,打开时间中断设置画面,如图5.9所示选择“激活”,要求每分钟执行并写上执行OB10的日期和时间,图中的开始日期时间是2008年10月2日10时00分,然后点击“确定”。最后在硬件组态画面点击保存和编译快捷图标,如图5.10所示完成保存和编译。图5.8硬件组态画面图5.9在CPU属性栏设置OB10时间中断5.3.1组织块(OB)图5.10把硬件组态信息编译并保存
在管理画面点击“块”,然后在右边的目录下点击鼠标右键,在弹出的画面中点击“插入新对象”,选择添加“组织块”,如图5.11所示。在生成组织块的过程中,选择组织块OB10及写上附加信息,如图5.12所示,然后点击“确定”。5.3.1组织块(OB)图5.11在管理画面插入OB105.3.1组织块(OB)图5.12在生成OB10过程中写上附加信息
在管理画面块的目录中双击OB10的图标,打开OB10编程界面,如图5.13所示。在OB10里编程如图5.14所示的程序,然后保存。图5.13在管理画面打开OB10图5.14在OB10里编写的程序5.3.1组织块(OB)在管理画面的目录块中点击“SIMATIC300(1)”,然后点击下载快捷图标,如图5.15所示,把整个项目的信息下载到CPU中。图5.15把整个项目(站)的信息下载到CPU中5.3.1组织块(OB)最后把CPU工作方式选择到运行模式,监控OB10的程序状态,可以看到每分钟MW10的数值会加1,如图5.16所示。图5.16在CPU运行状态下监控OB10的程序状态5.3.1组织块(OB)【例5-2】通过调用SFC28“SET_TINT”来设置时间中断,然后通过调用SFC30“ACT_TINT”来激活它。这个例子没看懂首先建立一个项目并完成项目中的目录,然后进行硬件配置并把硬件配置的信息保存并编译。在管理画面块目录中插入OB10,如图5.17所示。在OB10的生成过程中,写上附加信息,如图5.18所示。图5.17在管理画面里插入OB105.3.1组织块(OB)图5.18在生成OB10的过程中写上附加信息在管理画面的块目录里打开OB10,如图5.19所示。在OB10里编写程序,如图5.20所示,然后保存。图5.19在管理画面打开OB10图5.20在OB10里编写的程序5.3.1组织块(OB)在管理画面的块目录里打开OB1,如图5.21所示。在OB1里编写程序,如图5.22所示,然后保存。图5.21在管理画面打开OB15.3.1组织块(OB)5.3.1组织块(OB)5.3.1组织块(OB)5.3.1组织块(OB)5.3.1组织块(OB)在管理画面的块目录中插入OB80并打开OB80。在OB80里编写如图5.23所示程序并保存。图5.23在OB80里编写的程序5.3.1组织块(OB)图5.24是完成OB1和OB80的程序后在管理画面的块目录中的内容。然后在管理画面把整个目录信息下载到CPU中。图5.24管理画面中块的信息5.3.1组织块(OB)
在调试时候重点监控M103.2和M103.4的状态。运行CPU,可以看到M103.4=1,表示OB10已经下载到CPU,如图5.25(a);当接通M0.0时,可以看到M103.2=1,表示激活了OB10,并看到MW10每分钟加3;当接通M0.4时,看到M103.2=0,表示OB10已经被取消激活,MW10停止加3,如图5.25(b)。(a)5.3.1组织块(OB)(b)图5.25PLCSIM仿真画面5.3.1组织块(OB)3、延时中断组织块(OB20~OB23)S7提供多达4个在指定延迟后执行的OB(OB20~OB23)。每个延时OB均可通过调用SFC32(SRT_DINT)来启动。延迟时间是SFC32的一个输入参数。当用户程序调用SFC32(SRT_DINT)时,需要提供OB编号、延迟时间和用户专用的标识符。经过指定的延迟后,相应的OB将会启动。可以使用SFC33取消尚未启动的延时中断,可以使用SFC34访问延时中断组织块的状态,可以使用SFC39~SFC42来禁用或延迟并重新使能延迟中断。只有当CPU处于RUN模式时才会执行延时OB。暖启动或冷启动将清除延时OB的所有启动事件。5.3.1组织块(OB)延迟时间(单位为ms)和OB编号一起传送给SFC32,时间到期后,操作系统将启动相应的OB。设置延时中断,最基本的步骤是:调用SFC32(SRT_DINT),并将延时中断OB作为用户程序的一部分下载到CPU。如果发生了操作系统试图启动一个尚未装载的OB,并且用户在调用SFC32(SRT_DINT)时指定了其编号,或在完全执行延时OB之前发生延时中断的下一个启动事件时,操作系统将调用异步错误OB。在OB20~OB23中定义了如表5.6(表中的符号以OB20为例)所示的本地数据,其地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。表5.6OB20中系统定义的本地数据符号名称数据类型地址说明OB20_EV_CLASSBYTE0.00~3位=1事件等级;4~7位是标识,=1表示OB激活OB20_STRT_INFOBYTE1.0B#16#21:OB20的启动请求(B#16#22:OB21的启动请求)(B#16#23:OB22的启动请求)(B#16#24:OB23的启动请求)OB20_PRIORITYBYTE2.0分配的优先级,缺省值OB20~OB23分别是3~6OB20_OB_NUMBERBYTE3.0OB编号(20~23)OB20_RESERVERD_1BYTE4.0保留OB20_RESERVERD_2BYTE5.0保留OB20_SIGNWORD6.0用户ID:来自调用SFC32(SRT_DINT)的输入参数SIGNOB20_DTIMETIME8.0已组态的延迟时间(单位为ms)OB20_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME5.3.1组织块(OB)【例5-3】延时中断组织块例子:通过调用SFC32来设置延时中断,通过调用SFC33来取消延时中断。这个例子没看懂首先建立完整的项目目录,再完成硬件组态并编译保存,如图5.26所示。图5.26完整硬件组态5.3.1组织块(OB)在管理画面的块目录中打开OB1,在OB1里编写如图5.27所示的程序并保存。5.3.1组织块(OB)5.3.1组织块(OB)图5.27在OB1里编写的程序在管理画面的目录中插入OB20,在OB20里编写如图5.28所示程序并保存;在管理画面的块目录中插入OB85,在OB85里编写如图5.29所示程序并保存。完成OB1、OB20和OB85后管理画面的块目录如图5.30所示。图5.28在OB20里编写程序图5.29在OB85里编写的程序图5.30完成OB1、OB20和OB85后管理画面的块目录最后在管理画面里把延时中断的整个项目下载到CPU,调试时注意监控M17.2和M17.4的状态。当把CPU扳动到运行模式时,可以看到M17.4=1,说明OB20已经下载到CPU中。当接通M0.1启动延时中断时,M17.2=1;当延时时间到,Q0.0=1。当接通M0.3取消延时中断或延时时间到后,M17.2=0。5.3.1组织块(OB)4、循环中断组织块(OB30~OB38)S7提供了9个循环中断OB(OB30~OB38),可以指定固定时间间隔来中断用户程序。循环中断OB的等距启动时间是由时间间隔和相位偏移量决定的。用户编写程序时,必须确保每个循环中断OB的运行时间远远小于其时间间隔。如果因时间间隔已到期,在预期的再次执行前未完全执行循环中断OB,则启动时间错误OB80,稍后将执行导致错误的循环中断。在编写程序时如果有多个循环中断OB,设置要求循环中断的时间间隔又成整数倍,那么有可能会出现处理循环中断的时间过长而引起超出扫描周期时间错误。为了避免这种情况,最好定义一个偏移量时间,偏移量时间务必要小于间隔时间。偏移量时间使循环间隔时间已到,延时偏移量的时间再循环中断,偏移量时间不会影响循环中断的周期。用户编写程序时可使用SFC39~SFC42来禁用或延迟,并重新启动循环中断。使用SFC39来取消激活循环中断,使用SFC40用来激活循环中断。在OB30~OB38中系统定义了如表5.7(表中的符号以OB35为例)所示的本地数据,其地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。表5.7OB35中系统定义的本地数据符号名称数据类型地址说明OB35_EV_CLASSBYTE0.0事件等级和标识符B#16#11:中断处于激活状态OB35_STRT_INFOBYTE1.0B#16#30:具有特殊标准的循环中断OB的请求(仅适用于H-CPU,且仅当对其进行了明确组态后)B#16#31:OB30的启动请求B#16#39:OB38的启动请求
OB35_PRIORITYBYTE2.0分配的优先级,缺省值OB30~OB38分别是7~15OB35_OB_NUMBERBYTE3.0OB编号(30~38)OB35_RESERVERD_1BYTE4.0保留OB35_RESERVERD_2BYTE5.0保留OB35_PHASE_OFFSETWORD6.0相位偏移量(单位:ms)OB35_RESERVERD_3INT8.0保留OB35_EXC_FREQINT10.0时间间隔(单位为ms)OB35_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME5.3.1组织块(OB)【例5-4】循环中断组织块例子:通过STEP7设置循环中断。首先完成项目的所有目录。接着在管理画面打开硬件组态画面。在硬件组态画面,双击机架上的CPU,自动弹出CPU属性设置画面。在CPU属性设置画面打开周期性设置画面,设置OB35循环中断执行时间为1000ms,如图5.31所示,然后点击确定。图5.31完成CPU属性中周期性中断设置5.3.1组织块(OB)在管理画面的块目录里插入OB35,打开OB35编写如图5.32所示的程序并保存。图5.32在OB35里编写的程序最后在管理画面把整个项目的信息下载到CPU中,运行PLC,监控OB35程序状态,可以看到MW10的数字每一秒中加2,如图5.33所示,表示OB35被激活了。5.3.1组织块(OB)图5.33运行CPU监控OB35程序状态5.3.1组织块(OB)【例5-5】循环中断组织块例子:通过调用SFC40来设置循环中断,通过调用SFC39来取消循环中断。在循环中断组织块例【5-4】的基础上,在管理画面的块目录里打开OB1,并在OB1编写如图5.34所示程序,然后保存。图5.34在OB1里编写的程序最后在管理画面把整个项目的信息下载到CPU中,运行PLC,监控OB35程序状态,可以看到MW10的数值每秒钟加2;当接通M0.0时,监控MW10的数值不再增加了,说明OB35循环中断被取消激活了;当接通M0.2时,可以看到MW10的数值又恢复了每秒钟加2,说明OB35循环中断被重新激活了。5.3.1组织块(OB)5、硬件中断组织块(OB40~OB47)S7提供了8个独立的硬件中断,每一中断都具有自己的OB。硬件中断组织块是对具有中断能力的数字量信号模块(SM)、通信处理(CP)和功能模块(FM)信号变化进行中断响应。对于具有中断能力的数字信号模块(SM),可以使用STEP7软件在硬件组态设置硬件中断,也可以使用SFC55~SFC57为模块的硬件中断分配参数来实现设置硬件中断。对具有中断能力的通信处理器(CP)和功能模块(FM),可以使用STEP7软件在硬件组态时按照向导对话框设置相应的参数来实现设置中断。在OB40~OB47中系统定义了如表5.8(表中的符号以OB40为例。)所示的本地数据,其地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。表5.8OB40中系统定义的本地数据符号名称数据类型地址说明OB40_EV_CLASSBYTE0.0事件等级和标识符B#16#11:中断处于激活状态OB40_STRT_INFOBYTE1.0B#16#41:通过中断线1中断B#16#42:通过中断线2中断(仅限S7-400)B#16#43:通过中断线3中断(仅限S7-400)B#16#44:通过中断线4中断(仅限S7-400)B#16#45:通过PC触发中断OB40_PRIORITYBYTE2.0分配的优先级,缺省值OB40~OB47分别是16~23OB40_OB_NUMBERBYTE3.0OB编号(40~47)OB40_RESERVERD_1BYTE4.0保留OB40_IO_FLAGBYTE5.0输入模块:B#16#54输出模块:B#16#55OB40_MDL_ADDRWORD6.0触发中断的模块的逻辑地址(字节为单位)OB40_POINT_ADDRINT8.0对于数字模块:模块上具有输入状态的位域(位0对应于第一个输入)可在给定模块的说明中找到为模块中的通道分配从OB40_POINT_ADDR起始的位。对于模拟模块:位域,指出哪个通道已超出哪条限制对于CP或IM:模块中断状态(与用户程序无关)OB35_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME5.3.1组织块(OB)6、同步循环组织块(OB61~OB65)同步循环中断OB是通过循环中断选择在具有DP循环的同步循环中启动的程序。OB61充当同步循环中断TSAL1的接口OB。可以将OB61的优先级设置为0(取消选定OB)和2~26之间的数。在使用L或T命令直接访问以及使用SFC14“DPRD_DAT”和SFC15“DPWR_DAT”时,请避免访问已为其过程映像区分配到OB61~OB65的连接的I/O区域。在OB61~OB65中系统定义了如表5.9(表中的符号以OB61为例)所示的本地数据,其地址从L0.0~L19.7,地址L20.0以上的本地数据允许用户定义。5.3.1组织块(OB)表5.9OB61中系统定义的本地数据符号名称数据类型地址说明OB61_EV_CLASSBYTE0.0事件等级和标识符B#16#11:中断处于激活状态OB61_STRT_INFBYTE1.0B#16#64:OB61的启动请求B#16#65:OB62的启动请求B#16#66:OB63的启动请求B#16#67:OB64的启动请求OB61_PRIORITYBYTE2.0分配的优先级:缺省值为25OB61_OB_NUMBERBYTE3.0OB编号(61~64)OB61_RESERVERD_1BYTE4.0保留OB61_RESERVERD_2BYTE5.0保留OB61_GC_VIOLBOOL6.0GC错误OB61_FIRSTBOOL6.1启动或停止状态后的首次使用5.3.1组织块(OB)续表5.9OB61中系统定义的本地数据OB61_MISSED_EXECBYTE7.0自上次执行OB61以来启动OB61失败的次数OB61_DP_IDBYTE8.0同步DP主站系统的DP主站系统IDOB61_RESERVERD_3BYTE9.0保留OB61_RESERVERD_4WORD10.0保留OB61_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME技术同步中断OB(OB65)。技术同步中断OB65仅适用于TechnologyCPU。通过技术同步中断可选择在更新技术块的同时启动程序。技术同步中断OB在更新技术块后启动。技术同步中断OB的优先级固定设置为25,不能对其进行更改。在OB65中系统定义了如表5.10所示的本地数据,其地址从L0.0~L19.7,地址从L20.0以上的本地数据允许用户定义。5.3.1组织块(OB)表5.10OB65中系统定义的本地数据符号名称数据类型地址说明OB65_EV_CLASSBYTE0.0事件等级和标识符:B#16#11:进入事件,事件等级1OB65_STRT_INFBYTE1.0B#16#6A:OB65的启动请求OB65_PRIORITYBYTE2.0分配的优先级:25(固定设置)OB65_OB_NUMBERBYTE3.0OB编号(65)OB65_RESERVERD_1BYTE4.0保留OB65_RESERVERD_2BYTE5.0保留OB65_RESERVERD_3BOOL6.0保留OB65_FIRSTBOOL6.1启动后的首次使用OB65OB65_MISSED_EXECBYTE7.0自上次执行OB65以来启动OB65失败的次数OB65_RESERVERD_4BYTE8.0保留OB65_RESERVERD_5BYTE9.0保留OB65_RESERVERD_6WORD10.0保留OB65_DATE_TIMEDATE_AND_TIME12.0调用OB时的DATE_AND_TIME5.3.1组织块(OB)7、错误处理组织块当系统程序可以检测下列错误:不正确的CPU功能、系统程序执行中的错误、用户程序中的错误和I/O中的错误。根据错误类型的不同,CPU设置为进入STOP模式或调用一个错误处理OB。当CPU检测到错误时,会调用适当的组织块,见表5.11。如果没有相应的错误处理OB,CPU将进入STOP模式。用户可以在错误处理OB中编写如何处理这种错误的程序,以减小或消除错误的影响。为避免发生某种错误时CPU进入停机,可以在CPU中建立一个对应的空的组织块。用户可以利用OB中的变量声明表提供的信息来判别错误的类型。根据S7CPU检测到并且用户可以通过组织块对其进行处理的错误分为异步错误和同步错误。异步错误是与PLC的硬件或操作系统密切相关的错误,与程序执行无关。异步错误的后果一般都比较严重。异步错误对应的组织块为OB70~OB73和OB80~OB87,有最高的优先级。操作系统检测到一个异步错误时,将启动相应的OB。5.3.1组织块(OB)
同步错误是与执行用户程序有关的错误,程序中如果有不正确的地址区、错误的编号和错误的地址,都会出现同步错误,操作系统将调用同步错误OB。同步错误组织块包括OB121用于对程序错误的处理和OB122用于处理模块访问错误。同步错误OB的优先级与检测到出错的块的优先级一致。因此OB121和OB122可以访问中断发生时累加器和其他寄存器中的内容,用户程序可以用它们来处理错误。其中各错误处理组织块的具体参数和功能介绍详见第6章PLC故障诊断。OB号
错误类型
OB70
I/O冗余错误(仅H系列CPU)
25OB72
CPU冗余错误(仅H系列CPU)
28OB73
通信冗余错误(仅H系列CPU)
35OB80
时间错误
26OB81
电源错误
26/28
OB82
诊断中断
OB83
插入/取出模块中断
OB84
CPU硬件故障
OB85
优先级错误
OB86
机架故障或分布式I/O的站故障
OB87
通信错误
OB121
编程错误
引起错误的OB的优先级
OB122
I/O访问错误
表5.11错误处理组织块5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
1、功能功能分用户编写的功能(FC)和系统预先定义的功能(SFC)两种,功能都没有存储区。功能在程序分级结构中位于组织块的下面。为使一个功能被CPU处理,必须在程序分级结构中的上一级调用它。FC和SFC里都有一个局域变量表和块参数。局域变量表里面有:IN(输入参数)、OUT(输出参数)、IN_OUT(输入/输出参数)、TEMP(临时数据)、RETURN(返回值RET_VEL)。IN(输入参数)只在功能和功能模块中使用,是将数据传递到被调用的块中进行处理。OUT(输出参数)是将结果传递到调用块中。IN_OUT(输入/输出参数)是在功能和功能块中使用,将数据传递到被调用块中,在被调用块中处理数据后,再将重被调用块中发送的结果存储在相同的变量中。TEMP(临时数据)是块的本地数据,并且在处理块时将其存储在本地数据堆栈(L堆栈)。关闭块并完成处理后,临时数据就变得不可再访问。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
1)FC功能如果由用户编写,完成用户期待的功能,这个功能为用户功能。由于编程时需要很多标准的特定功能,西门子公司把一些标准的特定功能附加在STEP7的库指令里面,供编程人员随意调用,这些功能称为库指令功能或简称库功能。因此FC功能分为用户功能和库功能下面举例说明用户功能FC的编程。【例5-6】编程一个启动/停止功能(没有使用参数传递)首先完善项目中的目录,然后在管理画面中点击块目录,接着点击菜单栏的“插入”→“S7块”→“功能”,在块目录中插入一个功能(本例中插入FC10),如图5.35所示。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.35在块目录中插入一个功能在生成功能过程中,向导自动弹出功能的属性画面,在功能属性画面里选择功能的编号及其他附属信息,如图5.36所示,然后点击“确定”,自动生成一个空白的功能在块目录里。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.36选择块的编号及附属信息双击目录块里的FC10图标,打开FC10的编程界面,然后在FC10里编写完成启动/停止功能的控制程序,如图5.37所示。图5.37在FC10里编写完成启动/停止功能的程序为使一个功能能够被CPU处理,必须得在程序上分级结构中的上一级调用它,本例在OB1里调用FC10,如图5.38所示。根据控制功能的需要,可以有条件或无条件调用。最后把项目中的所有信息下载到CPU中即可。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.38在OB1里调用FC10在控制系统中有多个同样的启动/停止控制单元,那么需要调用多个功能来实现或在相同的功能编写其他控制单元,这样虽然比较啰嗦,但是还是可以实现。如果需要简单的方法,使用例5-7的方法。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
【例5-7】编程一个启动/停止功能(使用参数传递)首先完善项目中的目录,并在块目录中插入一个功能(本例插入的是FC20),双击块目录里的FC20图标,打开FC20的编程界面,然后在FC20里的局域变量表里定义输入、输出等符号参数,如图5.39所示,最后完成启动/停止功能的逻辑程序,如图5.40所示。图5.39定义输入、输出等参数5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.40控制逻辑程序为了使一个功能能够被CPU处理,必须在程序分级结构中的上一级调用它,本例在OB1中调用FC20,如图5.41所示。根据控制功能的需要,可以有条件或无条件调用。最后把项目中的所有信息下载到CPU中即可实现需要的控制。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.41在OB1里调用FC205.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
在控制系统中有多个同样的启动/停止控制单元,可以调用相同的一个功能(使用参数传递),在每个调用中写上相应的输入/输出就可以完成控制。【例5-8】使用库功能。实现任务是:比较两个DATE_AND_TIME类型的变量,如果相等,则输出一个高电平控制信号,否则输出一个低电平控制信号。首先完善项目中的目录,然后在管理画面中双击块目录的OB1,打开OB1的编程界面,打开指令树里的库指令,双击“库”→“stdlibs”→“iec”,然后把FC9EQ_DT拖拽到OB1指定的地方(本例是M0.0的右边)。然后在FC9的输入参数DT1和DT2里输入DATE_AND_TIME类型的变量,在返回值里写上M0.1,如图5.42所示。最后保存到OB1。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.42在OB1里编写的程序当程序里调用了库功能后,库功能的代码自动出现管理画面的块目录里,如图5.43所示的FC9,库功能是不能编辑内部程序的,都有保护所以看到块目录里的库功能都带上一把锁的符号。同时库功能的符号也会出现在S7程序的符号表里面。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.43调用库功能后的块目录
把项目中所有的信息下载到CPU中,然后运行CPU,接通M0.0,在本例中可以看到M0.1=1。2)SFC系统功能是集成在STEP7中,完成特定功能。下面举例说明用户调用系统功能SFC的编程:使用SFC0“SET_CLK”(设定系统时钟),可以设定CPU时钟的时间和日期。调用SFC0会启动时钟,时钟将从设定时间和设定日期开始运行。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
首先完善项目中的目录,然后在管理画面中双击块目录的OB1,打开OB1的编程界面。打开指令树里面的库指令,双击“库”→“stdlibs”→“iec”,然后把FC3“DATEandTODtoDT”拖拽到OB1指定的地方;双击“库”→“StandardLibrary”→“SystemFunctionBlocks”,然后把SFC0“SET_CLK”拖拽到OB1指定的地方,如图5.44所示。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.44在OB1里编写的程序然后在FC3“DATEandTODtoDT”、SFC0“SET_CLK”中写上输入和输出参数并保存OB1。最后把整个项目信息下载到CPU中并运行,接通M0.0,可以监控系统时间已经更改为“2008年10月4日12:29”了。监控系统时间的方法首先把STEP7的编程工具与CPU连接好,在OB1等的程序界面点击菜单栏的“PLC”→“组件状态”→“系统时间”,可以看到当前CPU的大概时间。如果需要看到准确的当前系统时间,可以在系统时间画面点击“更新”,当前系统时间即显示出来。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
2、功能块功能块分用户编写的功能块FB和系统预先定义的功能块SFB两种,功能块都有存储区。功能块在程序分级结构中位于组织块下面。为使一个功能块被CPU处理,必须在程序分级结构中的上一级调用它。FB和SFB里都有一个局域变量表和块参数。局域变量表里有:IN(输入参数)、OUT(输出参数)、IN_OUT(输入/输出参数)、STAT(静态参数)、TMEP(临时数据)。IN(输入参数)只在功能和功能块中使用,是将数据传递到被调用的块中进行处理。OUT(输出参数)是将结果传递到调用块中。IN_OUT(输入/输出参数)是在功能和功能块中使用,是将数据传递到被调用块中,在被调用块中处理数据后,再将从被调用块中发送的结果存储在相同的变量中。STAT(静态参数)是存储在该功能块的背景数据块中的本地数据。在下次处理功能块之前,会一直保留存储的数据。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
TEMP(临时数据)是块的本地数据,并且在处理块时将其存储在本地数据堆栈(L堆栈)。关闭块并完成处理后,临时数据就变得不可再访问。下面举例说明功能块的编程。【例5-9】完成一个星/三角启动/停止功能(没有使用参数传递)。在块目录中插入功能块,在生成的功能块的过程中需要选择块的编号及附加信息,如图5.45所示。图5.45选择块的编号及写上附加信息5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
在块目录中可以查到当前块的详细记录,双击块目录中的FB10,在FB10里定义接口参数,如图5.46所示,然后编写FB10的程序,如图5.47所示。图5.46在FB10中定义接口参数(定义背景数据块的符号)5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.47在FB10中编写的程序5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
在OB1编程界面里打开指令树中功能块的指令(注意,该功能块的程序必须在这之前编写完毕,否则会出现时间不一致的错误)并拖拽到程序期待的地方,如图5.48所示,然后点击FB10顶上的“???”位置,写上背景数据块。在生成背景数据块的过程中会出现如图5.49所示的对话框,点击“是”确认,这样FB10的背景数据块就会出现在当前的FB10顶上、管理界面的块目录中和符号表里。图5.48写上FB10的背景数据块5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.49生成实例数据块DB10可以打开管理界面的块目录查看到详细的目录,并双击DB10图标,打开DB10查看详细信息,如图5.50所示。DB10的详细信息是FB10接口参数中除临时参数不会出现外,其他已经在FB10接口参数区定义了的参数将出现在DB10背景数据块里。5.3.2功能、功能块和数据块(FC、SFC、FB、SFB和DB、DI)
图5.50背景数据块里的信息然后把项目中所有信息下载到CPU中并运行,当接通M0.0时可以启动水泵的星/三角单元,当接通M0.1时,可以停止水泵的星/三角单元。当接通M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年企业法人变更登记及合同修订专项服务协议3篇
- 2025年农村土地互换与农村废弃物资源化利用合同
- 二零二五年度农村土地置换及农业绿色发展合同
- 二零二五年度养猪场智能化管理系统升级合同3篇
- 2025年男方婚内忠诚承诺及违约赔偿合同3篇
- 2025年度虚拟现实产业股东股份转让及内容合作合同3篇
- 二零二五年度废品处理与环保产业合作合同3篇
- 2025年度城市更新项目土地使用权无偿转让合同3篇
- 2025年度办公室租赁合同模板:含健身及休闲配套2篇
- 2025年度房屋租赁转让协议包含物业管理条款
- 《上帝掷骰子吗:量子物理史话》导读学习通超星期末考试答案章节答案2024年
- 病例报告表(CRF)模板
- PCS-PC简单使用方法
- 关于更换公务用车的请示
- 室分工程施工组织设计
- 薄膜衰减片的仿真设计
- 塔塔里尼调压器FLBM5介绍.ppt
- 国家开放大学毕业生登记表
- CCC例行检验和确认检验程序
- 初中物理竞赛教程(基础篇)第16讲比热容
- 亲子鉴定书(共3页)
评论
0/150
提交评论