收藏 分享(赏)

在S7-200中如何建立一个功能块.doc

上传人:精品资料 文档编号:9592769 上传时间:2019-08-17 格式:DOC 页数:17 大小:698.50KB
下载 相关 举报
在S7-200中如何建立一个功能块.doc_第1页
第1页 / 共17页
在S7-200中如何建立一个功能块.doc_第2页
第2页 / 共17页
在S7-200中如何建立一个功能块.doc_第3页
第3页 / 共17页
在S7-200中如何建立一个功能块.doc_第4页
第4页 / 共17页
在S7-200中如何建立一个功能块.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、在 S7-200中如何建立一个功能块一、基本数据类型Bool 位 1/0BYTE 字节 8WORD 字 16DWORD 双字 32INT 整数 16DINT 双整数 32 最高位为符号位 0-整数;1-小数,后面 15个位表示数据大小Real 实数 32 单精度浮点64 双精度浮点Char 字符 8 如:单个字母String 字符串 如:单词字符:8 位,等于一个字节字符串:存储=字符个数+1 字节 如 smart :5个字符+1 个字节=6 个字节,这 1个字节表示第一个地址,是存储个数。比如把 smart存储到 VB100中第一个地址:是存储个数 VB100=5,因为有 5个字符第二个地址

2、:VB101 存储 s第三个地址:VB102 存储 m第四个地址:VB103 存储 a第五个地址:VB104 存储 r第六个地址:VB105 存储 t二、功能块指令的作用在编写程序过程中有写控制要求或是一些运算会重复执行的,对于这些会重复执行的程序,为了提高编程的效率,往往会把一些会重复执行的功能编写成一个功能块。或者把一些应用到比较典型的做成一个指令。二、功能块指令建立方法在 S7-200系列 PL的程序结构中,分为主程序、子程序、中断程序。子程序分为带参数的子程序和不带参数的子程序,功能即为一个带参数的子程序。三、功能块指令的建立需要建立一个带参数的子程序,那么需要在子程序的变量表中(或接

3、口区)中定义好相应的变量,然后在子程序的编程中,使用在变量表中定义的变量去编写程序,子程序上面就有相应的接口区。数据类型:对应地址,选好数据类型系统自动分配地址:如果选 BYTE系统自动寻址LBX;如果选 WORD系统自动寻址LWX。所以地址的分配不用管系统自动分配,是由数据类型决定的。四、变量类型说明变量的类型在使用过程中是不一样的,比如说子程序做好了以后有的位于子程序左侧,有的位于子程序右侧,有的在上面没有管脚。这跟习惯有关,左进右出。 变量类型(IN):输入参数为可读 变量,将调用它的 POU提供的数据值传入子程序 ,可以使用常数,直接寻址 间接寻址 的方传入到子程序。在生成子程序块是位

4、于左侧。这跟习惯有关,左进右出可读:以 PLC为例,可读的点是输入点,因为是从外边获取的信息、数据过来的,输入点大部分是常开常闭。将调用它的 POU提供的数据值传入子程序:它指子程序;POU指主程序。也就是说主程序通过输入的方式传递给子程序直接寻址:比如 VW100间接寻址:&VB100 变量类型(IN_OUT):可读可写的变量 ,其初始值由调用它的 POU传送给子程序,并用同一参数将子程序的执行结果返回给调用它的 POU,因此常数和指针不能用于输入。是以 IN为主,所以位于程序块左边。以程序为例:A):上图中,启动 I0.0、停止 I0.1是可读IN 的变量输出 Q0.0是可读(自锁)可写(

5、线圈)IN _ OUT 变量输出 1Q0.1在整个程序中只用了写的功能OUT 变量B):这是自加一指令,将 VB0读出再写入 VB0也是 IN_ OUT变量C):A值、B 值是输入,所以是 IN;IN_OUT与 TEMP区别:IN_OUT可读可写在外围会有一个管脚,从外围先把初始值写进运算;TEMP是内部运算以后存储数据的结果的暂存,不会有输出,调用完子程序数据就放弃了。所以 C值是 TEMP,是暂存一次 A+B的一个中间结果而已,没有任何需要从外围给数据进去,或者说运算完结果给出去。D):如果把 IN_OUT变量建成 OUT变量会出现什么结果?会执行程序出错。举例说明:a、 子程序:将输出建

6、成 OUT变量b、主程序再调用一次主程序,因为带参数的子程序就是可以重复调用。只是说外围给不同的实参。b、说明:在主程序中,I0.0 I0.1 I0.2 I0.3 就叫做实参。按下启动 I0.0,则 Q0.0=1,这时 Q0.1也会=1,因为从 PLC执行的角度看,执行第一个主程序调用子程序输出=1,执行第二个主程序调用子程序时(在第一个执行主程序调用主程序时输出变量=1),没有更改输出结果-在子程序中 LD0.0 LD0.2构成逻辑或运算,LD0.0 与 LD0.2或运算结果=1,再与停止LD0.1做与运算从而输出结果=1。所以输出结果Q0.1也等于 1。因此,输出变量应为 IN_OUT变量

7、正确程序子程序主程序输出在左边。IN_OUT 是先读取再输出,输出 Q0.0读的是 Q0.0的值,输出 Q0.1读的是 Q0.1的值。 输出参数变类型(OUT):输出参数为可写的变量,用于将子程序的执行结果返回给调用它的 POU,输出参数,必须在每次调用结束前给其一个确定的值。在生成子程序块是位于右侧。变量类型(TEMP):临时变量时暂时保持在局部数据区的变量,只有在执行某个 POU时,它的临时变量才被使用。临时变量使用公共的存储区。因此在每次调用时,首先应初始化临时变量,然后再使用临时变量 TEMP没有管脚。五、建立一个功能块编写一个功能块程序,用于计算一个存储器中为 1的个数有多少个?(相

8、当于三菱里 SUM指令)分析:如何计算一个存储器中为 1的个数有多少个如果 VB0=10101100如何计算,用移位指令,移一次位就会有一个数据移出来,判断移出来这个位等于 0还是等于1,“1”满足一次加一次,VB0 移完以后会加 4次。在西门子 PLC中不仅有字节的表示还有字、双字表示。字移 16次,双字-移 32次,所以说要建立一个功能块要满足字节、字、双字三种存储器的用法。字节、字、双字要移位的数据应该建一个 IN变量,因为要把数据传送过去就是 IN变量,IN 变量可以是常数、可以是直接寻址也可以说是间接寻址,不同的地址字节、字、双字用间接寻址要好一点。 建立一个功能块 开始计算的条件,

9、满足一次执行一次是 BOOL变量 参与计算的数,建了一个指针,指针的存储空间是 32位所以是 DWORD,换句话说外部输入用&VB0 或 VBx 建一个数据的类型,要确定一下数据类型 会有一个管脚来确认上面指针的类型 BYTE=1表示字节 WORD=2表示字 DWORD=3 表示双字。 结果,建了一个 IN_OUT变量,由于后面要做一个运算INC累加为 1的次数 临时变量,先不建用的时候再建。子程序跳转-等于 1时跳到标签1执行跳转-等于 2时跳到标签2执行跳转-等于 3时跳到标签3执行都不等于时返回(跳转到)标签 1启动条件 把指针数据前面加一个*表示:如果把数据&VB0 给入到LD1里去,

10、在 LD1前加一个*表示地址就是 VB0.把 VB0数据转存到临时变量LB10 里去 对结果进行清零:下次给数再重新运算FOR循环:循环的目的是移位,因为一个字节是 8位,所以移位次数=8临时变量#temp1:LW8 暂存当前执行的次数,从 1开始到8,移 8位。SHL _B移位指令左移,用右移也可以。对临时变量#temp2:LB10移位,每次移 1位。移出的位有一个移出标志SM1.1进行判断,SM1.1 是可读的。也就是说当移出的位是1的情况下 SM1.1=1;如果移出的位等于 0 SM1.1=0INC_W;当 SM1.1=1是记录一次,结果放入 LW6。所以 LW6建的时候就是 IN_OU

11、T变量移完以后后面的程序不会执行,因为后面的程序不是字节。-返回等于 2时跳到标签 2执行把*LD1 挪出来,因为是字(16 位)所以指令都是 16位的指令把数据&VB0 给入到 LD1里去,在 LD1前加一个*表示起始地址就是 VB0,因为是 16位指令,也就是 VW0了临时变量#tempLW11 是一个字的存储空间了,循环 16次了把*LD1 挪出来,因为是字(32 位)所以指令都是 32位的指令把数据&VB0 给入到 LD1里去,在 LD1前加一个*表示起始地址就是 VB0,因为是 32位指令,也就是 VD0了临时变量#tempLW13 是一个字的存储空间了,循环 32次了主程序将这个子程序命名 SUMData_t字节就选 1 字就选 2 双字就选 3可以把这个子程序做好后添加库里面去,方法很简单右键点击创建添加库。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报