0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

学会高效编程及定义程序结构

vveeverything 来源:跟我学PLC吧 2023-01-31 14:39 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

为了结构化程序设计,STEP 7将用户程序分类归并为不同的块,根据程序要求,可选用组织块(OB)、功能块(FB)、或功能(FC)三种类型的逻辑块,而数据块(DB)或(DI)则用来存储执行用户程序时所需的数据。

三种编程方法:

(1)线性编程:将整个用户程序写在一个指令连续的块中,处理器线性地或顺序地扫描程序的每条指令。

(2)分部编程:将用户程序分成相对独立的指令块、每个块包含给定的部件组或作业组的控制逻辑。

(3)结构化编程:要求用户程序提供一些通用的指令块,以便控制一类相似或相同的部件,给通用指令提供的参数进一步说明各部件的控制差异。

一、数据块及其数据结构

用户程序运行所需的大量数据或变量存储在数据块中,数据块也是实现各逻辑块之间交换、传递和共享数据的重要途径。对于CPU 314,用作数据块的存储器最多8KB,用户定义的数据总量不能超过这个限制。对于数据块必须遵循先定义后使用的原则。

1、定义数据块

定义内容包括数据块号及块中的变量(包括:变量符号名,数据类型以及初始值等)。数据块在使用前,必须作为用户程序的一部分下载到CPU 中。

2、访问数据块

访问时需要明确数据块号和数据块中的数据类型与位置。根据明确数据块号的不同方法,可以用以多种方法访问数据块中的数据。

3168c9c4-a115-11ed-bfe3-dac502259ad0.png

由于有两个数据块寄存器(DB和DI寄存器),所以,最多可以同时打开两个数据块。一个作为背景数据块,数据块的起始地址存储在DI寄存 器中;另一个作为共享数据块,数据块的起始地址存储在DB寄存器中。

打开背景数据块,在调用FB时可以自动实现,由于调用FB时使用DI 寄存器,所以,一般不在FB程序中用OPN DI n指令打开数据块。

3、背景数据块和共享数据块

任何FB、FC或OB均可读写存放在共享数据块中的数据。背景数据块是FB运行时的工作存储区,它存放FB的部分运行变量。调用FB时, 必须指定一个相关的背景数据块。

作为规则,只有FB块才能访问存放 在背景数据块中的数据。一般情况下,每个FB都有一个对应的背景数 据块,一个FB也可以使用不同的背景数据块。如果几个FB需要的背景数据完全相同,为节省存储器,则可以定义成一个背景数据块,供它们分别使用。

二、数据结构

3189289a-a115-11ed-bfe3-dac502259ad0.png

1、用户数据类型

STEP 7允许将基本或复式组合成“用户”自已定义的数据类型,这种类型称为用户数据类型(UDT)。用户数据类型必须首先单独建立,并存放 在称为UDT的特殊数据块中。

建立用户数据类型的目的,是为了将UDT作为一种数据类型使用,以方便定义多个结构相同的构造变量。

2、功能块编程及调用

一个程序由许多部分(子程序)组成,STEP 7将这些部分称为逻辑块,并允许块间相互调用。

319bfee8-a115-11ed-bfe3-dac502259ad0.png

功能块由两个主要部分组成:一部分是每个功能块的变量声明表,变量声表声明此块的局部数据;另一部分是逻辑指令组成的程序,程序要用到变量声明表中给出的局部数据。

当调用功能块时,需要提供块执行时要用到的数据或变量,也就是将外部数据传递给功能块,这称为参数传递。

3、变量声明表(局部数据)

局部数据分为参数和局部变量两大类,局部变量又包括静态变量和临时变量(暂态变量)两种。参数是在调用块和被调用块间传递的数据。静态变量和临时变量是仅供逻辑块本身使用的数据。

31b1cade-a115-11ed-bfe3-dac502259ad0.jpg

4、逻辑块局部数据的数据类型

在变量声明表中,要明确局部数据的数据类型,这样操作系统才能给变量分配确定的存储空间。局部数据可以是基本数据类型或是复式数据类型, 也可以是专门用于参数传递的所谓“参数类型”。

31cd65a0-a115-11ed-bfe3-dac502259ad0.jpg

STEP 7对分配给块局部数据(在变量声明表中)的数据类型(基本、复式、参数)是有一定限制的。

31ef3734-a115-11ed-bfe3-dac502259ad0.jpg

STEP 7允许用物理地址(绝对地址)或符号地址或常数等形式作为实参给形参赋值,但对于不同的形参类型,STEP 7限制了赋值形式。

32009ed4-a115-11ed-bfe3-dac502259ad0.png

5、功能块编程与调用举例

对功能块编程分两步进行:第一步工作是定义局部变量(填写局部变量表);第二步是编写要执行的程序。写功能块程序时,可以两种方式使用局部变量:

①使用变量名,此时变量名前缀“#”,以区别于在符号表中定义的符号地址,增量方式下,前缀 会自动产生;

②直接使用局部变量的地址,这种方式只对背景数据块和L堆栈有效。

例一:二分频器

二分频器是一种具有一个输入端和一个输出端的功能单元,输出频率为输入频率的一半。

(1)FC1的变量声明表

32144362-a115-11ed-bfe3-dac502259ad0.png

(2)FC1梯形图程序

32956172-a115-11ed-bfe3-dac502259ad0.png

(3)OB1调用梯形图程序

32a82e38-a115-11ed-bfe3-dac502259ad0.png

例二:时钟脉冲发生器

使用定时器实现自由设定时钟脉冲发生器功能脉冲占空系数1:1。

(1)FC1变量声明表

32c7470a-a115-11ed-bfe3-dac502259ad0.png

(2)FC1梯形图程序

32e35c2e-a115-11ed-bfe3-dac502259ad0.jpg

(3)OB1调用梯形图程序

32f0b676-a115-11ed-bfe3-dac502259ad0.png


三、可编程序控制器应用设计

PLC系统设计步骤:

3301349c-a115-11ed-bfe3-dac502259ad0.jpg

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    39

    文章

    7715

    浏览量

    170863
  • 数据
    +关注

    关注

    8

    文章

    7315

    浏览量

    93988
  • 编程
    +关注

    关注

    90

    文章

    3708

    浏览量

    96767

原文标题:西门子PLC|学会高效编程及定义程序结构

文章出处:【微信号:跟我学PLC,微信公众号:跟我学PLC吧】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    单片机C语言编程的心得

    规范程序结构化设计的需要,既可以实现大型程序的模块化,又可以实现根各模块的连接调试。 1、.H文件介绍: 在单片机C程序设计中,项目一般按功能模块化进行结构化设计。将一个项目划分为多
    发表于 12-08 07:44

    C语言的编程技巧

    和效率‌:通过位段、内联汇编和尾递归优化等技巧,可以有效提高代码的执行效率。 ‌10、内存管理和系统级编程‌:通过内存池技术、复合字面量初始化结构体以及信号处理等功能,实现高效的内存管理和系统级
    发表于 11-27 06:46

    C语言程序结构

    )(void); //处理程序   uInt8 ms_count; //时间片大小   } _op_;   数据结构定义好之后,接着就是实现代码,包括三部分,即初始化数据、时间片的刷新与时间到执行
    发表于 11-26 08:12

    编写简单高效单片机汇编程序

    1、使用模块化结构:分解功能块 模块化编程让代码更清晰,并能提高代码的复用性。 例如,对于电子时钟程序,可以将代码分为显示模块、按键处理模块、计时模块、定时器中断服务程序等。 每
    发表于 11-24 07:00

    控制结构介绍

    1. 顺序结构:按照代码的书写顺序,逐行执行程序。这是最基本的程序结构。 2. 选择结构:根据条件判断的结果,选择执行不同的代码块。常见的选择结构
    发表于 11-24 06:43

    编程序段的定义介绍

    1 程序段的定义 程序段的一般格式如下: CODE SEGMENT ASSUMECS:CODE, DS:DATA START: MOVAX, DATA MOVDS, AX ...(其他
    发表于 11-21 08:19

    教程来啦!LuatOS中的消息通信机制详解及其应用场景

    在资源受限的嵌入式环境中,LuatOS采用消息机制实现模块间解耦与高效通信。通过预定义消息名称(如“new_msg”),开发者可轻松构建响应式程序结构。接下来我们将深入剖析其实现原理与典型使用方法
    的头像 发表于 09-26 18:59 231次阅读
    教程来啦!LuatOS中的消息通信机制详解及其应用场景

    定义IO初始化结构

    由上述IOPORT相关功能的枚举类型我们可以知道,在对IOPORT模块进行初始化时需要根据情况配置它们。因此我们定义一个IOPORT初始化的结构体类型IOPORT_Init_t,它的成员包括了由上述所有枚举类型所声明的变量,因此该结构
    的头像 发表于 07-16 16:26 1110次阅读

    详解TIA Portal SCL编程语言中的IF语句

    IF 语句是编程中最基本和最重要的控制结构之一,它的主要作用是根据条件决定程序的执行路径,IF 语句是编程中实现逻辑判断和决策的基础。
    的头像 发表于 05-24 15:01 1447次阅读
    详解TIA Portal SCL<b class='flag-5'>编程</b>语言中的IF语句

    FPGA的定义和基本结构

    专用集成电路( ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 简而言之, FPGA 就是一个可以通过编程来改变内部结构的芯片。
    的头像 发表于 05-15 16:39 2283次阅读
    FPGA的<b class='flag-5'>定义</b>和基本<b class='flag-5'>结构</b>

    如何基于Kahn处理网络定义AI引擎图形编程模型

    本白皮书探讨了如何基于 Kahn 处理网络( KPN )定义 AI 引擎图形编程模型。KPN 模型有助于实现数据流并行化,进而提高系统的整体性能。
    的头像 发表于 04-17 11:31 682次阅读
    如何基于Kahn处理网络<b class='flag-5'>定义</b>AI引擎图形<b class='flag-5'>编程</b>模型

    LabVIEW运动控制(三):EtherCAT运动控制器的高效加工指令自定义封装

    LabVIEW高效加工指令自定义封装
    的头像 发表于 04-08 13:49 3270次阅读
    LabVIEW运动控制(三):EtherCAT运动控制器的<b class='flag-5'>高效</b>加工指令自<b class='flag-5'>定义</b>封装

    连接器元件的定义结构特点

    在现代电子设备中,连接器元件作为实现电路连接或断开的重要组件,扮演着不可或缺的角色。它们通过插头和插座的配合,完成了电信号或电源的传输,而无需进行永久性连接。本文将深入探讨连接器元件的定义结构特点以及其在电子设备中的应用,以期为相关领域的研究者和工程师提供全面的技术参考
    的头像 发表于 02-05 16:51 1041次阅读

    ARM嵌入式编程高效技巧

    随着物联网和智能设备的快速发展,ARM嵌入式系统的应用越来越广泛。从智能手机到智能家居,再到工业自动化,ARM处理器几乎无处不在。因此,掌握ARM嵌入式编程高效技巧对于开发者来说至关重要。 1.
    的头像 发表于 12-28 09:17 1052次阅读

    BQ78412应用程序编程接口

    电子发烧友网站提供《BQ78412应用程序编程接口.pdf》资料免费下载
    发表于 12-18 14:46 0次下载
    BQ78412应用<b class='flag-5'>程序</b><b class='flag-5'>编程</b>接口