北京安方同吉专业授权代理西门子PLC,专注工控系统集成10年,拥有专业高效的团队,是西门子官方认可的资深合作伙伴,欢迎咨询合作!  客服热线:18211023581
S71200编程中80个字依次复制MB中有什么简单方法

S71200编程中80个字依次复制MB中有什么简单方法

分享嘉宾:施占明    内容来源:西门子PLC代理商    发布时间:2021-07-26 13:53    浏览量: 第26946篇深度好文:2495个字| 7分钟阅读
  S71200编程中80个字依次复制MB中有什么简单方法?如题,客户需要将80个字依次复制到MB200到MB280中,就是MB200=16#31,MB201=16#2D如此类推,询问哪种方法最简单,数量太多了?
 
  我们可以先了解一下西门子S71200PLC间接寻址编程的内容。
 
西门子S71200编程

  S7-1200使用AT覆盖变量

 
  S7-1200要访问声明变量内的数据区域,可以通过附加声明来覆盖所声明的变量。这样可以选择对不同数据类型的已声明变量进行寻址,例如,可以使用BOOL的ARRAY对WORD数据类型变量的各个位寻址。
 
  下面介绍详细的做法。
 

  1.如何创建AT覆盖变量

 
  创建一个S7-1200的项目,在程序块中新建一个FB块(或者FC块),右击FB块进入该块的属性中,将FB块属性中的“优化的块访问”给去掉

  双击进入FB块,展开FB块的“块接口”
 
  在“块接口”中,在Input添加一个变量,变量名为A,数据类型为int;接着在变量A下面一行,数据类型这一列,手动输入“AT”
 
  Input中会生成一个新变量“Input_1”,数据类型是int,将这个变量的数据类型修改成Array,并编译该FB块,可以看到变量A和变量Input_1的偏移量都是0.0,这表示变量A和变量Input_1是相同地址,只是以不同的数据类型显示
 
  以此方法新建Output的变量B和变量Output_1,这样就可以对变量A和变量B进行位操作
 
  OB1调用FB块时,FB块的管脚不会显示变量Input_1和Output_1
 
  如FB块选择的是优化的块访问,即:保留了FB块属性中的“优化的块访问”的勾选项,见图1;这时,需要在“保持性”一列中选择“在IDB中设置”,才能使用AT变量覆盖

  2.注意事项和规则

 
  注意事项
 
  S71200/1500:在FC中使用AT,对于S7-1200/1500中的FC,覆盖变量和被覆盖变量的数据长度必须相同。如果无法通过程序实现,请检查是否可以使用片段访问来代替AT结构。
 
  规则
 
  对于变量覆盖可适用于以下通用规则:
 
  1.在STL、LAD、FBD、GRAPH和SCL中,允许变量覆盖。
 
  2.可以在以下块中覆盖变量:
 
  —在标准访问的代码中
 
  —在可优化访问具有保留设置“在IDB中设置”的变量代码块中
 
  3.覆盖变量数据宽度必须小于等于被覆盖变量的数据宽度。
 
  4.不可以覆盖VARIANT和INSTANCE数据类型的变量。
 
  5.无法覆盖库中声明为接口中参数的块。
 
  6.无法覆盖接口中声明为参数的结构化PLC变量。

  S7-1200使用Slice方式对变量进行寻址

 
  可以选择包含所声明变量的特定地址区域,可以访问宽为1位、8位、16位或32位的区域,这种访问类型称之为“片段访问”(Sliceaccess)。
 
  通过slice(片段访问)方式,可以选择所声明变量中的特定寻址区域;可以实现从单个位到变量级别的符号访问;片段访问不能寻址常量。
 
  slice方式支持这2种方式的块:可标准访问的块、可优化访问的块。
 

  1.语法表达

 
  下列语法用于寻址:
 
  1.<Tag>.x<Bitnumber>
 
  2.<Tag>.b<BYTEnumber>
 
  3.<Tag>.w<WORDnumber>
 
  4.<Tag>.d<DWORDnumber>
 
  语法说明
部分 说明
<Tag> 访问的变量标识。
x
b
w
d
访问宽度为“位(1 位)”的标识
访问宽度为“字节(8 位)”的标识
访问宽度为“字(16 位)”的标识
访问宽度为“双字(32 位)”的标识
<BIT number> 待访问 <tag> 内的位号。 编号 0 表示访问最低有效位。
<BYTE number> 待访问 <tag> 内的字节号。编号 0 表示访问最低有效字节。
<WORD number> 访问的 <tag> 内的字号。编号 0 表示访问最低有效字。
<DWORD number> 访问的 <tag> 内的双字号。编号 0 表示访问最低有效双字。

  通常针对Byte、Word等数据类型的变量进行片段访问,如图1所示,此外也可以对INT、DINT等整数数据类型的变量进行片段访问。
 

  2.使用说明

 
  1.使用DB块变量进行Slice访问
 
  创建一个S7-1200的项目,在程序块中新建一个DB块(优化的块访问),创建一个变量,数据类型为DWord,可以看到该变量没有绝对地址
 
  在程序段1中插入常开和赋值指令,常开指令填写地址“DB1.Static_1.X0”,赋值指令填写地址“DB1.Static_1.X1”,其中X0和X1分别表示变量Static_1的第0位和第1位
 
  在程序段2中插入MOVE指令,IN管脚填写地址“DB1.Static_1.B0”,OUT管脚填写地址“DB1.Static_1.B1”,其中X0和X1分别表示变量Static_1的第0字节和第1字节
 
  依次类推,对字访问,就是填写地址“DB1.Static_1.W0”和“DB1.Static_1.W1”。
 
  2.FB、FC块接口变量的Slice访问
 
  创建程序块(本例创建FC块,优化的块访问),在Input和Output分别创建变量“Input_1”和“Output_1”,数据类型分别是DInt和Dword,可以看到这两个变量没有绝对地址
 
  程序段1,常开指令填写地址“Input_1.X0”,赋值指令填写地址“Output_1.X0”;程序段2,MOVE指令的IN管脚填写地址“Input_1.W0”,OUT管脚填写地址“Output_1.W0”。

  S7-1200SCLPEEK和POKE指令使用

 
  使用S7-1200SCL编程语言的PEEK和POKE指令,可以实现对I/O、M存储器和数据块的读取或写入。而通过POKE_BLK指令,还可以实现数据区域的复制或移动。
 
  指令适用条件:
 
  只用于SCL编程语言;
 
  软件从TIAPORTALV11SP2起;
 
  S7-1200CPU固件从V2.2起;
 
  适用操作数,I、Q、M、DB;
 
  DB必须是非优化访问的块。
 
  本文生成环境:
 
  硬件:CPU1214CV4.4
 
  软件:Windows10Pro1903和TIAPORTAL专业版V16
 
  一、项目生成与指令位置:
 
  (1)创建S7-1200项目文件
 
  在TIAPORTAL创建新项目,双击“添加新设备”在项目中添加S7-1200PLC_1,CPU1214CDC/DC/DC。
  (2)添加SCL逻辑块
 
  展开PLC_1,双击“程序块”中的“添加新块”,选择语言“SCL”,添加FC块,名称为FC1。
 
  (3)添加PEEK、POKE指令
 
  双击FC1打开SCL逻辑块,将指令的“基本指令>移动操作>读写存储器”中PEEK、POKE指令拖入程序编辑区。
 
  二、PEEK指令
 
  1、指令格式
 
  PEEK指令用来读取输入(I)、输出(Q)、存储器(M)或数据块(DB)变量,支持位、字节、字、双字操作。PEEK指令将获取的数据值以返回值的方式赋值给对应的变量。
 
  需要注意的是,在指令列表中只有PEEK和PEEK_BOOL两个指令,而PEEK相当于PEEK_BYTE,当需要使用PEEK_WORD或者PEEK_DWORD,可以在将指令拖拽到程序编辑区后手动添加后缀,或者在程序中直接输入指令然后通过选择的方式选定
 
  参数area,根据数据所在区域的不同有四种取值。

area值 类型 说明
16#81 I 输入区变量
16#82 Q 输出区变量
16#83 M M区变量
16#84 DB 数据块变量
  综上,回到文章开始的问题:
 
  下面的指令,将DB2.DBB0-DB2.DBB9共10个字节的数据复制到MB100-MB109这10个字节中。
 
  其中数据块必须是非优化的。

POKE_BLK(area_src:=16#84,        //原数据区为数据块标识
         dbNumber_src:=2,        //数据块编号,DB2
         byteOffset_src:=0,      //数据块内偏移字节
         area_dest:=16#83,       //M存储区标识
         dbNumber_dest:=0,       //当为非数据块的存储区时,为0
         byteOffset_dest:=100,   //从MB100 开始
         count:=10);             //总工移动10个字节

  至于原数据是在数据块中用初始值给,还是后面用程序再给,那就看需要了。
 
  更多技术咨询,请联系我们
 
  版权声明:文章来自北京安方同吉原创,如果喜欢这篇文章《S71200编程中80个字依次复制MB中有什么简单方法》:http://www.xmzplc.com.cn/news-industry/524.html请保留本文链接。
 
  北京安方同吉科技有限公司官网:http://www.xmzplc.com.cn/

相关新闻推荐

在线客服 :

服务热线:18211023581(微信同号)

电子邮箱: 2837522029@qq.com

公司地址:北京市西城区教场口街1号

北京安方同吉科技有限公司 是专注西门子PLC代理、西门子变频器等西门子产品代理销售和系统集成的正规西门子一级代理商,是 西门子(中国)有限公司...

Copyright © 2010-2020 北京安方同吉科技有限公司 版权所有