1 / 48

结构化编程

FC. FB. OB1. FB. FC. SFC. 操作系统. SFB. 其它 OBs. 结构化编程. 第七章 结构化编程. 程序设计方法:线性化编程、模块化编程和结构化编程。. 线性化编程 是将整个用户程序放在组织块 OB1 中,在 CPU 循环扫描时执行 OB1 中的全部指令。其特点是结构简单、但效率低下。另一方面,某些相同或相近的操作需要多次执行,这样会造成不必要的编程工作。再者,由于程序结构不清晰,会造成管理和调试的不方便。所以在编写大型程序时,避免线性化编程。.

isha
Download Presentation

结构化编程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FC FB OB1 FB FC SFC 操作系统 SFB 其它 OBs 结构化编程

  2. 第七章 结构化编程 程序设计方法:线性化编程、模块化编程和结构化编程。 线性化编程是将整个用户程序放在组织块OB1中,在CPU循环扫描时执行OB1中的全部指令。其特点是结构简单、但效率低下。另一方面,某些相同或相近的操作需要多次执行,这样会造成不必要的编程工作。再者,由于程序结构不清晰,会造成管理和调试的不方便。所以在编写大型程序时,避免线性化编程。

  3. 模块化编程是将程序根据功能分为不同的逻辑块,且每一逻辑块完成的功能不同。在OB1中可以根据条件调用不同的功能或功能块。模块化编程是将程序根据功能分为不同的逻辑块,且每一逻辑块完成的功能不同。在OB1中可以根据条件调用不同的功能或功能块。 其特点是易于分工合作,调试方便。由于逻辑块是有条件的调用,所以可以提高CPU的利用率。

  4. 结构化编程是将过程要求类似或相关的任务归类,在功能或功能块中编程,形成通用解决方案。通过不同的参数调用相同的功能或通过不同的背景数据块调用相同的功能块。 其特点是结构化编程必须对系统功能进行合理分析、分解和综合,所以对设计人员的要求较高,另外,当使用结构化编程方法时,需要对数据进行管理。 • 传送带系统中所有交流电机的通用逻辑控制块; • 装配线机械中所有电磁线圈的通用逻辑控制块; • 造纸机器中所有驱动装置的通用逻辑控制块。

  5. FC 1 电机 1 FC 1 电机 2 FC 1 电机 3 结构化编程 OB 1

  6. 电动机启保停电路 按下按钮,一个数加1,当此数值超过20时,输出指示 练习

  7. Input1 Input2 Input3 Output_A TEMP1 M5.0 ADD_I SUB_I O #TEMP1 #INPUT1 #INPUT2 IN1 IN2 IN1 IN2 利用局部数据进行控制 OB1 FC1 (数学功能) int sample measure 1 I0.5 0.0 in FC1 2.0 in constant int 4.0 in offset int MW5 Input1 Output_A QW12 result 6.0 int out 3369 Input2 8.0 int intermediate temp Input3 MW10 M5.1 ( ) I0.5 O #Output_A #TEMP1 #INPUT3 FC1 MW2 Input1 Output_A QW20 6869 Input2 Input3 MW16

  8. 全局变量/数据 (在全部程序中有效) 局部变量 / 数据 (只在一个块中有效) 静态变量 •当相关块执行完毕后仍然 保留 •永久存储在DBs中 •只能在FBs中使用 临时变量 •当相关块执行完毕后被清除 •临时存储在L stack中 •可在下列块中使用OBs / FCs / FBs • PII / PIQ • I/ O • M / T / C • DB areas 绝对地址 符号地址 访问方式 局部变量

  9. 临时变量

  10. 执行的程序 日时钟中断 2 256 bytes 时间中断 延时处理中断 3 256 bytes 循环处理中断 12 256 bytes 硬件中断 16 256 bytes 事件驱动中断 启动过程中的错误处理中断 28 256 bytes 循环扫描中的错误处理中断 26 局部数据堆栈的大小 总容量:1.5 Kbyte(CPU 313..316) 对于S7-300: 优先级 局部堆栈大小 启动程序 (只执行一次) 27 256 bytes 循环扫描程序 1

  11. 块所需要的局部数据区的长度 rechts

  12. 操作系统 1 FC 2 有临时 变量 OB 1 FC 1 有临时 变量 3 2 4 FC 3 有临时 变量 5 7 6 事件 1 2 3 4 5 6 7 所占用的 L stack FC2 FC3 256 Bytes FC1 FC1 FC1 FC1 FC1 OB1 OB1 OB1 OB1 OB1 OB1 OB1 程序所占用的局部数据区的总长度

  13. 替换为临时变量 练习1: 使用临时变量 QW6

  14. 示例:计算公式

  15. A i 1.2 R m 40.0 A i 1.3 Fp m 40.1 S m 40.0 A m 40.0 A m 10.3 O Anm 40.0 A i 1.3 = Q 4.3 形式参数 可以分配参数的块 不可以分配参数的块 可以分配参数的块 程序 调用 FC 20 A #Acknowledge R #Report memory A #Disturb_input FP #Edge_mem_bit S #Report_memory A #Report_memory A #Flash_freq O AN #Report_memory A #Disturb_input = #Display I 1.3 Display Q 4.3 Disturb_ input I 1.2 Acknowledge M 10.3 Flash_freq M 40.0 Edge_ mem_bit Report_ memory M 40.1 实际参数

  16. 定义形式参数 形式参数 定义 参数类型 使用方法 图形显示 输入参数 in 只能读 在块的左侧 输出参数 out 只能写 在块的右侧 输入/输出参数 In_out 可读/可写 在块的左侧

  17. 编辑一个可分配参数的块 对于无参数分配的块,此处可能是: • 绝对地址: I1.3 • 符号地址: “End_left”

  18. EN FC20 Disturb_input Display Acknowledge Flash_freq Edge_mem_bit ENO Report_memory 绝对的 符号表 全局符号 调用一个分配了参数的块 Network 3: First Call .... “End left” “Position error” “Acknow.button” M10.3 M40.0 寻址方式 M40.1 Network 4: Second Call Q4.1 EN 符号的 FC20 “End right” Disturb_input Display Q5.4 “Acknow.button” Acknowledge M10.3 Flash_freq M40.2 Edge_mem_bit ENO M40.3 Report_memory 符号 局部符号 -->形式参数

  19. Q 5.0 FC 1 A I 0.1 JNB _001 CALL FC 1 _001: A BR = Q 5.0 EN ENO 条件调用 I 0.1 = 例子 FC 1 FC 2 FC 3 ?? . ? EN ENO EN ENO EN ENO = 在块调用时使用EN/ENO参数 LAD/FBD STL FC 1 无条件调用 ?? . ? EN ENO CALL FC 1 NOP 0

  20. 无参数的块 A I 1.2 R M 40.0 A I 1.3 FP M 40.1 S M 40.0 A M 40.0 A M 10.3 O AN M 40.0 A I 1.3 = Q 5.3 分配了参数的块FC 20 A #Acknowledge R #Report_memory A #Disturb... : : : : : : : : 2. 练习2: 生成一个分配了参数的FC块 1. FC 20 的变量声明表

  21. 练习3: 调用一个分配了参数的FC块 FC 20 I 1.3 Disturb_input Display I 1.2 Q 5.3 Acknowledge 第一次调用FC20时 的参数分配 M 10.3 Flash_freq M 40.0 Edge_mem_bit M 40.1 Report_memory FC 20 I 1.4 Disturb_input I 1.2 Display Q 5.4 Acknowledge 第二次调用FC20时 的参数分配 M 10.3 Flash_freq M 40.2 Edge_mem_bit M 40.3 Report_memory

  22. 练习 将最近采集的三个数求平均,进行滤波处理。 先采用模块化编程实现此功能,接着采用结构化编程实现,最后引出FB块。

  23. FB块的变量声明表 FB块 OB 1 DB 2 FB 2 EN Disturb. input Acknowledge Display Flash freq. ENO

  24. 背景数据块 用FB实现的故障信息显示 FB的声明表

  25. 2. 创建一个新的背景数据块 生成背景数据块 1. 在FB调用时生成背景数据块

  26. 多重背景模型 OB 1 Call FB100, DB100 FB 100 stat Dist_1 FB20 DB11 Call FB20, DB11 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= DB100 stat Dist_2 FB20 FB20 DB12 Call FB20, DB12 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= FB20 多重背景模型 普通背景模型 OB 1 DB10 Call FB20, DB10 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= FB20 Call Dist_1 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Parameters and static variables of the 1st. call of FB20 Call Dist_2 Disturb._Input:= Acknowledge:= Flash_Freq:= Display:= Parameters and static variables of the 2nd. call of FB20

  27. A #Acknowledge R #Report memory A #Disturb. ... : : 2. FB 20 中的部分程序 练习4: 编写一个FB块 1. FB 20的变量声明表

  28. 练习5: 调用FB并调试

  29. Save 插入/删除块的参数可能遇到的问题

  30. 单击鼠标右键 调用被修改过的块时应做的更正 当调用块被打开时:

  31. 练习6: 多台设备的风扇监控功能 功能 符号 SIG FC101 ACKN R REPORT A TIMER_NO B =1 A FLT S_ODT C B S Q >=1 C ACKN TIMER_NO A TV B & SIG C FLT

  32. 练习7: 风扇监控功能的扩展 功能 符号 SIG FC101 ACKN R REPORT A TIMER_NO B =1 A S_ ODT FLT C B >=1 S Q C & ENAB ENAB ACKN A TIMER_NO B & TV C FLT SIG ENAB

  33. Statement Local Global Absolute Symbolic Temporary Static Parameter L #Number_1 L #Number_2 T #Max_value L #Intermediate_result L “Number_1” T MW 40 T #Number_2 练习8: 识别变量的类型 TYPE OF VARIABLE

  34. 有参数 有参数,有背景数据块 • CALL FC2 Par1: ... Par2: ... Par3: ... • CALL FB2, DB3 Par1: ... Par2: ... Par3: ... (CALL) DB3 FC2 FB2 EN ENO EN ENO EN FC1 Par1 EN ENO Par1 Par1 Par2 Par3 Par2 Par3 Par2 DB3 FC1 FC2 FB2 Par3 EN EN Par3 Par1 ENO Par2 ENO ENO 总结: 块的调用 FC FB 语言 无参数 无参数,无背景数据块 • CALL FC1 • UC FC1 • CC FC1 • UC FB1 • CC FB1 STL FC1 LAD FC1 CALL FBD

  35. 发动机控制系统工程 控制任务描述: 在发动机控制系统工程实例中,被控对象是一个“汽油发动机”和一个对该汽油发动机进行散热的“风扇”,一个“柴油发动机”和一个对该柴油发动机进行散热的“风扇”。对这些被控对象,有相应的起动、停止按钮控制其状态的改变,并要求这两个发动机在起动的同时,对应的风扇要同时起动对其散热,当发动机停止运行时,风扇要延时4秒后再关闭,以保证发动机充分的散热。

  36. OB1 DB1 汽油机控制 FB1 汽油机数据 汽油机风扇控制 发动机控制 柴油机数据 柴油机控制 风扇控制 DB2 FC1 柴油机风扇控制 发动机控制系统结构化程序的结构示意图

  37. 1、 创建符号地址表

  38. 2、发动机控制功能块(FBl)的程序设计 • 定义FB1的输入、输出参数。这些定义包括变量名、数据类型和声明类型。 输入:

  39. 输出: 静态变量:

  40. FB1功能块的程序设计

  41. 汽油机数据块DB1的内容

  42. 3、风扇控制功能(FCl)的程序设计 • 定义FC1的输入、输出参数。这些定义包括变量名、数据类型和声明类型。 输入:

  43. 输出:

  44. FBl功能块的程序设计

  45. 4、组织块(OB1)的程序设计 发电机控制系统组织块OB1的指令程序

  46. 总结 功能和功能块的调用必须用实参代替形参,因为形参是在功能或功能块的变量声明表中定义的。为保证功能或功能块对同一类设备的通用性,在编程中不能使用实际对应的存储区地址参数,而是使用抽象参数,这就是形参。而块在调用时,必须将实际参数(实参)替代形参,从而可以通过功能或功能块实现对具体设备的控制。 这里必须注意:实参的数据类型必须与形参一致。

More Related