一、引言
相信大家在使用SIEMENS S7-300 CPU和其它站点进行通信时www.cechina.cn,可能会遇到把一定的PI区数据依次读入其它存储区域的问题,在通信数据量较少时,可以使用L/T指令,但如果数据量很大时,我们则可以使用指针来完成。
二、工程实例
在某个项目中要用S7-300读一个PROFIBUS总线上的一个从站(DP/DP Coupler)中的200多个字节的数据,由于数据量较大,本来准备用SFC20(BLKMOV)来读取,可是SFC20不支持PI区。于是准备用指针来读取控制工程网版权所有,请看下面的一段有错误的程序。
接口和程序如下(本例中用M区来代替PI区):
接口简介:number:要传递的数据个数;
start_addr1:源存储区域的起始地址;
start_addr1:目的存储区域(DB)的起始地址;
db_mumber:目的数据块编号;
len_in:以什么单位读取(本例中用WORD为单位读取)
FC100:L #start_addr1 &n
T #pointer1
L #start_addr1
T #pointer2
L #db_number
T #db_pointer
L #len_in
T #len
OPN DB [#db_pointer]
L #number
next: T #buffer
L MW [#pointer1]
T DBW [#pointer2]
L #pointer1
L #len
+I
T #pointer1
L #pointer2
L #len
+I
T #pointer2
L #buffer
LOOP next
BE
OB1: CALL "loop" //从MW0-MW222依次传5到DB2.DBW0-DB2.DBW222中。(MW500=112)
number :=MW500
start_addr1:=DW#16#0
start_addr2:=DW#16#0
db_number :=W#16#2
len_in : =2
程序编好后,用WINLC进行模拟,程序下进去后根本不能运行,于是试着将OB121下载到CPU,哎,CPU总算可以运行了控制工程网版权所有,于是在变量表里进行监控,开始几个字节数据都能正常读入,后面数据就读取错误www.cechina.cn,一气之下把MW500值变为10000控制工程网版权所有,奇怪,数据全部读入正确,难道是LOOP指令用错了,这时去查看CPU诊断信息,这才恍然大悟于是嘴里又说出自己的口头禅(MAKE A BIG MIST