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

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

3天内不再提示

西门子S7-200SMART中局部变量的类型以及使用方法

1bGT_GKYXT1508 来源:lq 2018-12-14 16:56 次阅读

局部变量(Local variables)指在程序中只在特定过程或函数中可以访问的变量。局部变量是相对于全局变量而言的。在PLC中局部变量应用不是很多,西门子PLC则引入局部变量,成为PLC中独具特色的功能。

局部变量是分配给每个子程序的临时存贮区。当子程序被调用时,系统分配局部变量区给子程序;子程序执行完成后,该局部变量区被释放。释放时其中存贮的值也同时丢失,不能再下一扫描周期再被子程序使用。

局部变量区的大小为64个字节,其中最后4个字节被系统所占用,实际可供子程序使用的为60个字节。由于局部变量区的数据不能带到下一扫描周期,因此只能用于存储程序运算中的中间值,可以减少对全局变量区的占用。

由于局部变量区在子程序被调用时才被分配,且分配时并不对数据区进行初始化,所以其初始值是不确定的。因此在程序中用到这些存贮区的值的指令前,必须有对该存贮区地址的赋值操作,否则可能会出现错误的执行结果。尤其在子程序中存在大量的跳转指令时,很容易出现漏掉对局部变量赋值的情况,要格外注意。

每个子程序调用的输入/输出参数的最大限制是16,如果您尝试下载的程序超过此一限制,IN和out加起来共16个超过16个就会出错。使用过程中应注意以下几点:

1、子程序或者中断程序不能访问分配给主程序的局部存储器。子程序不能访问分配给主程序、中断程序或者其他子程序的局部存储器。同样的,中断程序也不能访问分配给主程序或子程序的局部存储器。

2、S7-200 SMART有64个字节的局部存储器,其中60个可以用作临时存储器或者给子程序传递参数。

3、IN、OUT、IN_OUT变量都会与外部进行数据交换,所以不需要数据交换时应使用TEMP变量。

下面讲述西门子S7-200SMART中局部变量的类型以及使用方法。

S7-200 SMART提供了四种类型的局部变量,用L表示。

IN:输入变量。将外部指定位置的参数传入子程序。

OUT:输出变量。将子程序的运算结果传出到外部指定参数位置。

IN_OUT:输入输出变量。将指定位置的外部参数传导子程序,再由子程序修改后再将结果返回到同样的地址。

TEMP:临时保存在局部数据堆栈中的临时变量。一旦POU完全执行,临时变量数值

则无法再用。在两次POU执行之间,临时变量不保持其数值。

创建方法为:打开每个子程序都会弹出对应的变量表,如下图:

在变量表中选择要创建的变量类型,输入符号(英文/中文都行),再选择正确的数据类型,系统将自动分配对应的变量,局部变量地址是系统根据前面的地址及数据类型自动分配,不可自行修改。尽量把所有变量创建好后再开始根据分配的变量地址进行编程。万一在编程过程中需要再添加变量,一定要把显示方式切换成:“仅符号”否则插入变量后地址全部变化,程序中原本使用的地址将报错。

编写好的子程序不仅可以被当前项目的调用,还可以建成库供其它项目调用。在以后的编程中经常会出现一些经典的应用,或者经常处理的类似程序,我们就可以建立成“库”,碰到类似的用法只需要直接调用库进行编程即可。

那么库应该怎么建立呢?

1)重命名:首先把编写好具有特殊功能(脉冲运算、模拟量换算等)的子程序进行重命名,避免与其它项目中子程序重名。我们把以上例中子程序为例,命名为“指示灯延时启动”。

2)创建库文件:在左侧指令树中找到“库”右击弹出对话框,选择“创建库”如左下图,弹出右下图对话框:选择需要建立库的子程序“指示灯延时启动”,点击“添加”;选择“属性”对库进行命名以及指定库文件存储位置;选择“保护”,可以对库文件设置一个密码保护,可以限制阅读和修改库程序。设置好后确定,将会在知道目录下生成一个库文件。

库的创建如下:点击创建库后弹出创建库对话框。

在V2.1之前版本中需要手动添加删除库,库文件可以存储在任何地方。从V2.2开始将库集中管理,必须存储在系统设定目录下,打开新项目刷新即可自动可以显示。重新安装软件或重装系统前请对库文件进行备份。

要消除库和项目之间出现存储器使用冲突的可能性,应避免在用户定义库中使用全局存储器。 可能无法完全消除库对全局资源的使用;但是,在可能的情况下最大程度地减少此类使用是有必要的。 这里列出了最小化全局存储器使用的一些方法:

1)尽量用局部存储器代替全局存储器。

通过使用局部存储器,尽量减少库对全局存储器的依赖性。您还可以直接将局部存储器指定为库指令使用的存储器。

例如:您可能有一个计算数值并将该输出存储在 V 存储单元的子例程的子例程。程序的其余部分则会读取该 V 存储器位置,以便确定计算的结果。 如果您希望将该子例程放入库,考虑在子例程中增加一个输出OUT参数,并将计算结果存储在该参数中。这样就无需使用 V 存储单元,并允许您决定结果的存储位置。

2)使用临时变量进行计算。

将临时变量用于计算和临时结果可尽量减少指令库对全局存储器的使用。 您在子例程变量表中定义的临时变量只对该子例程有效,不会与项目冲突。

3)需要V 存储器时,要定义符号。

有时您必须在计划包括在指令库中的子例程中使用全局 V 存储器。 必要时,应为所有 V 存储器声明符号,并在程序中使用这些符号。 编译该库时,编译器将使用这些符号来决定您的库所需的存储器大小。通用规则是,将包括在库中的子例程所占用的 V 存储器分组到连续位置中。

以常用的步进脉冲数运算为例,因为使用比较频繁,可以建立成库方便以后编程过程中调用。使用全局变量运算,程序如下:

如果要将该子程序建成库,必须给所有全局变量都定义符号,否则无法建立库。建成库以后编程调用库时,必须要进行库存储器分配,右击左侧项目树中“程序块”选择“库存储器分配”,点击建议地址系统自动分配未使用的存储器供给库使用。如下图:

注意:在编写库程序时,所用到的V存储区地址必须全部定义符号,否则无法创建库。创建成库后再次调用该库进行编程,所用到的V存储器不再是之前编写库程序的地址,需要重新分配V存储器地址。但是会按照之前的地址进行分配,如存储器大小,数据类型及编号之间的规律,所以尽量采用连续的地址进行编程。

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

    关注

    38

    文章

    7158

    浏览量

    162122
  • 西门子
    +关注

    关注

    92

    文章

    2854

    浏览量

    113848
  • 局部变量
    +关注

    关注

    0

    文章

    14

    浏览量

    9001

原文标题:S7-200SMART局部变量的应用

文章出处:【微信号:GKYXT1508,微信公众号:工控云学堂】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LABVIEW能通过以太网和西门子S7-200smart通讯吗?

    LABVIEW能通过以太网和西门子S7-200smart通讯吗?如果能,应该怎么做?
    发表于 09-19 16:44

    回收西门子s7-200SMART系列

    15580500760王姗姗收购西门子CPU模块DP丛站模块 回收西门子工控自动化产品,主要回收西门子模块,触摸屏,回收s7-200SMART系列CPU标准型模块,经济型模块,扩展模块
    发表于 06-29 11:57

    佛山回收西门子PLC模块 S7-200SMART模块SR60

    欢迎咨询***同步微信,,大量回收西门子S7-200SMART可编程控制器CPU模块、西门子6ES7288-1SR60-0AA0 6ES7288-1SR40-0AA0可编程控制器plc模块
    发表于 08-09 12:51

    佛山西门子PLC模块S7-200SMART,cpu模块大量回收

    回收咨询***-同步微信,佛山西门子PLC模块S7-200SMART,cpu模块大量回收,,回收西门子工控自动化产品,主要回收西门子模块,触摸屏,回收
    发表于 11-05 11:47

    西门子plc S7-200smart数字量模块回收 专业回收

    西门子plc S7-200smart数字量模块回收 专业回收,回收热线***同步微信。回收西门子工控自动化产品,主要回收西门子模块,触摸屏,回收s7
    发表于 11-16 14:56

    MCU中局部变量的作用域是什么?

    MCU中局部变量的作用域是什么
    发表于 10-09 08:51

    西门子PLC S7-200smart程序下载错误分析

    的CPU类型是否与实际CPU类型相符合,若不符合将会报错。  西门子PLC S7-200 smart系列为用户提供了良好的编程环境,用户可以
    发表于 07-23 15:27 3407次阅读

    西门子S7-200SMART接入BL102 PLC网关

    BL102 PLC网关设备连接设备接线示意图如下: BL102 PLC网关的LAN口连接到西门子S7-200SMART的网口,COM口通过RS232转RS422线连接西门子S7-200SMAR
    发表于 10-28 17:08 1671次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>S7-200SMART</b>接入BL102 PLC网关

    PLC网关采集西门子S7-200SMART数据配置流程

    PLC网关采集西门子S7-200SMART数据配置流程
    发表于 11-04 11:37 3631次阅读
    PLC网关采集<b class='flag-5'>西门子</b><b class='flag-5'>S7-200SMART</b>数据配置流程

    西门子S7-200SMART如何接入MQTT云平台

    西门子S7-200SMART如何接入MQTT云平台
    发表于 11-10 16:49 2666次阅读

    西门子PLC的局部变量使用技巧

    三个变量:输入变量、输出变量和输入输出变量。 在局部变量表中赋值时,只需要指定声明的局部变量
    发表于 12-13 18:07 4057次阅读

    S7-200Smart子程序局部变量

    西门子在这方面有一个很好的解决方案。那就是通过局部变量,设计出程序框架,做成库。后面就可以反复调用。一个电机调用一次,只需要填写按钮的输入点,接触器的输出点就可以,这样编程效率大大提高;
    的头像 发表于 03-12 08:47 1392次阅读

    西门子S7-200Smart如何转换Modbus

    西门子S7-200Smart Modbus网关
    的头像 发表于 11-03 18:41 2732次阅读
    <b class='flag-5'>西门子</b><b class='flag-5'>S7-200Smart</b>如何转换Modbus

    在MCU编程中局部变量赋初始值的重要性

    在MCU编程中局部变量赋初始值的重要性
    的头像 发表于 10-16 18:29 411次阅读
    在MCU编程<b class='flag-5'>中局部变量</b>赋初始值的重要性

    PLC西门子S7-200smart和S7-1200的区别?

    PLC西门子S7-200smart和S7-1200的区别? 西门子S7-200 smart和S7-1200是
    的头像 发表于 11-17 11:41 5061次阅读