


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西门子STL间接寻址常问问题集文献涉及产品1.1如何获得指针或者间接寻址有关的信息?指针的类型包括16位指针、32位指针、Pointer (6Byte)和Any( lOByte)。16 位指针用于定时器、计数器、程序块的寻址;32位指针用于I/Q/M/L/数据块等存储器中位、字节、字以及双字的寻址,其中第02位表示位地址(07)、第318位为字节地址,其余位未定义;Pointer和Any 般应用在复杂数据类型(比 如Date_and_Time /Array/String等)在FB、FC之间的传递。而 Any可以看做是 对Pointer的延伸,因为由10Byte组成的Any中Byte4Byte9
2、就是一个Pointer。 了解指针的格式十分重要,为正确使用指针,应阅读如下内容:1、"SIMATIC Programming with STEP 7 V5.5" 05/2010 第 27.3.4 章 参数类型2、文档:1008用于S7-300和S7-400的语句表(STL)编程3、文档:F0215,S7-300 和 S7-400 寻址1.2为什么语句LAR1 P#Pointerlnput在一个函数(FC)中是无效的撚而,同样的 语句在一个功能块(FB)中是有效的?在FC被调用时,复杂数据类型例如指针是被复制到调用者的临时变量区中,在 FC内部对此V区地址直接取址放入到地址
3、寄存器 AR1或AR2是不被编译器规 则接受的(导致MC7寄存器信息过长),也就是说在 FC内部通过P#进行地址 寄存器取址仅能支持Temp临时变量。因此如果需要在FC中操作指针等复杂输 入输出变量地址需要使用累加器进行中转。考虑到程序的一致性、遵守编译器规则和STL手册中LAR1指令说明,建议用户使用如下指令操作:L P#Poi nterln putLAR11.3 STEP 7中哪些操作会覆盖DB/DI寄存器或者地址寄存器 AR1/AR2的内容? 下面说明了可能引起DB/DI寄存器或者地址寄存器 AR1/AR2内容改变的一些操 作:DB寄存器和AR1受到影响的操作1. 使用完整的DB路径(如
4、L DB20.Val)或者调用FC/FB时使用DB块完整地 址作为其参数,则DB寄存器内容被覆盖。例如在OB1中调用FC1后,DB寄存器变成20。OPN DB1Call FC1Input(bit): 因此在编程的时候,OPN指令打开数据块,通过DBX x.y的方式访问其中内容, 但是如果在打开数据块后 DB寄存器的内容被修改了,则DBX x.y的方式访问变 量则会访问到错误的地址。可以通过使用符号寻址的方式或者使用完整路径编 程避免,当 然重新使用OPN指令也是可以的。2. 调用FC时使用string, array, structure, UDT作为其形参或者调用FB时使用 string, a
5、rray, structure或者UDT作为其in out形参,在FC/FB程序中访问这些地 址则AR1寄存器内容被覆盖,因此当使用 AR1进行间接寻址时需要注意 AR1 内容的正确性。AR2地址寄存器和DI寄存器在FB中作为参数和静态变量的基址寻址使 用。AR2和DI如果被修改,会影响FB的参数访问,如果希望在 FB中使用DI 寄存器或者地址寄存器AR2,必须预先保存它们中的内容,并在使用后恢复它 们例如:TAR2 #AR2_SAVE; /AR2 寄存器状态保存到 #AR2_SAVELDINO;T#DB2_SAVE; /DI 寄存器状态保存至U #DB2_SAVEUser ProgramLA
6、R2#AR2_SAVE; /AR2寄存器恢复到使用前状态OPNDI #DB2_SAVE; /DI寄存器恢复到使用前状态1.4如何得到多重背景FB中的变量在背景DB里的绝对偏移量呢? 可以用下面的方法处理:TAR2 (得到多重背景FB在背景DB里的偏移地址) AD DW#16#00FFFFFF (屏蔽掉存储区ID,可参考32位指针格式)L P#Variable (得到变量在多重背景FB里的地址)+D (多重背景FB的偏移地址与变量在多重背景 FB里地址相加,即得到实际绝 对偏移量)LAR1上述语句就是就得到了变量在背景 DB中的绝对偏移量,从而供后续程序处理。1.5如何在程序中使用ANY型指针?
7、简要说明如下:LP#I nput指向存储地址指针In put首地址这个参数是一个Any类型,P#In put指向参数In put的值所在地址,这就是指 针的指针LAR1/装载到地址寄存器AR1中。LW AR1,P#4.0打开 DB 块/由Any类型结构知道Any类型的Byte4、Byte5存放的数据块号 T#BLOCK_NOOPNDB #BLOCK_NO如果是DB块,打开指定的 DB块。LW AR1,P#2.0 /判断ANY指针中数据长度/ Any 类型的 Byte2、Byte3 是重复系数,如 P#DB1.DBX0.0 Byte 8 后面的 Byte 8 _001:T#DATA_LEN/通常
8、此处做 loop 循环!LD AR1,P#6.0/找出需要计算数据区的开始地址/ Any类型Byte6Byte9是32位区域地址理解Pointer、Any的类型的数据结构,对于正确使用指针有很大帮助。 为正确使用指针,应仔细阅读如下内容:"SIMATIC Programming with STEP 7 V5.5" 05/2010 第 27.3.4 章 参数类型 如下的程序实现了 SFC20的部分功能,可以作为Any使用的参考。FUNCTION FC 1 : VOIDTITLE =VERSION : 0.1VAR_INPUTSRCBLK:ANY;END_VARVAR_OUTP
9、UTRETVAL : INT ;DSTBLK : ANY ;END_VARVAR_TEMPLOOP : INT ;BLOCK_NO_DB : WORD ;BLOCK_NO_DI : WORD ;SRC_ADD : DWORD ;DST_ADD : DWORD ;END_VARBEGINNETWORKTITLE =L P#SRCBLK; /读取输入any的首地址 LAR1 ; / 装载到 ar1L P#DSTBLK; /读取输出any的首地址 LAR2 ; / 装载到 ar2L W AR1,P#4.0; / 打开 DB 块T #BLOCK_NO_DB;L W AR2,P#4.0; / 打开 DI
10、 块T #BLOCK_NO_DI;OPN DB #BLOCK_NO_DB; / 打开 DB 块OPN DI #BLOCK_NO_DI; / 打开 DI 块L D AR1,P#6.0;T #SRC_ADD; /读取地址L D AR2,P#6.0;T #DST_ADD; /读取地址L W AR1,P#2.0; 读取循环次数_001: T #LOOP;L DBB #SRC_ADD;T DIB #DST_ADD; / 赋值/地址偏移1个字节L P#1.0;L #SRC_ADD;+D ;T #SRC_ADD;L P#1.0;L #DST_ADD;+D ;T #DST_ADD;L #LOOP; / 循环L
11、OOP _001;END FUNCTION 1.6当FC或FB的输入参数类型为:BLOCK_DB, TIMER 或者 COUNTER,如 何确定其编号?例1 : FB块FB1变量声明中定义了 “Timer类型的变量“ Time_1 :在FB2中调用FB1, 将定时器“T5”递给变量Time_1:。如图01所示程序代码中数值5表示“ T5'图01 FB中确定定时器编号在使用多重实例时,需要在图01所示程序中增加以下代码:TAR2 /多重实例偏移地址LAR1 P#Time_1+AR1 /多重实例偏移地址与当前地址相加L WAR1,P#0.0T MW0例2 FCFC1变量声明中定义了 “Ti
12、mer类型的变量“ Time_1 :在FC2中调用FC1,将定时器“T8传递给变量“ Time_1。”如图02所示程序代码中数值8表示“ T8。图02 FC中确定定时器编号“ BLOCK_D”类型参数在调用 FC时不可以直接传送给 FC。如果在调用功能 时试图使用此参数类型,将产生如下的错误消息:非法的参数传输 参数名”“ BLOCK_D”类型参数仅在FB被调用(从一个 FB或FC中)时可被传送。“ BLOCK_D”类型参数不可以在 FC被调用(从一个FB或FC中)时可被传 送。相关详细信息可参考STEP7在线帮助中合法的传输参数类型”然而,如果希望将 BLOCK_DB参数类型传送给 FC,
13、DB块的编号可以通过 基本数据类型(例如 WORD)传送。 在下面的例子中,FB100拥有一个“ BLOCK_D”的输入参数类型。为了在调用 FC101时将参数传送给它,“ BLOCK_D”中的DB块编号被传送给 WORD临时变量(DB_No)。当FC被调用,数据块序号以一个 WORD参数类型替代 BLOCK_DB 参数类型LAD/STL/FBD - FBI00 - S7_zebra5IMATI匚 40DCPU 417-4_! x|口 File Edit Insert PLC Debug View Options Window Help fl1 丨 x9 offlinePres5 Fl to
14、get Help.AMD|Q|訥口 I Sj Jl|輛陲| 小|例|曲|冋 I 刎!小!| 口国 £| !卜皿|钊厨|剧图03 FB中确定Block DB编号当FC如果FB的接口参数能被定义成 WORD参数类型来传送 DB块编号, 被调用时,此参数可以被直接传送给 FC。臘 LAD/STL/FBD - FB1QO - monitor_32_t>it_field5口 File Edit Insert PLC Debug View Options Window HelpNameType| AddressDB NrWord0.0Contents Of: 'Environmen
15、tIntetfaceIN'F Interface0 & IN D|o»|4|fcal sj jt|輛倉 小|斛|创|冋 刎!卜盲圍 民I世1址0回血归I團/ pas3 on DB numberCALL FC101DB_Mr:=#DE_Nrj1 1±rSaves the current block/source.9 offline同 ISSO 口 OUTQ- IN_OUT STAT皤 TEMP图04 FC中确定DB编号 1.7参数传递有何限制?当分配实际参数给形式参数时,可以指定绝对地址、符号名称或常数。STEP 7限 制不同参数的分配。例如,输出和输入/输出
16、参数不能被分配常数值(因为输出或 输入/输出参数的目的是改变其值)。这些限定尤其适用于具有复杂数据类型的参 数,这些参数既不能分配绝对地址也不能分配常数。下表关明涉及分配给形式参 数的实际参数数据类型的限制(-)和允许的分配(由符号显示)。星本散牖炎型声明炎型篷时地址特号名称 (在符号務中)住时本地符号常独愉入输!H*总杂敎据类瘟绝对DB元素的辯号名称 fft将号衰中临时木地符号输入输出»图05允许的参数传递详细信息请参考手册中附录27.348节内容:455311071.8如何传递any参数到其他程序块的参数中?下面的例子将说明如何为系统功能SFC50 “RD_LGADR (读取模块
17、逻辑地址)参数化ANY指针。例如对于功能块 FB1,按下述步骤编程:1. 声明一个输入变量“tes和一个临时变量“test2为” ANY类型(图05)。2. 例如,把 SFC50的参数“PEADDR传递给变量“test2图06)。3. 通过判断ANY指针“test能够传递临时变量“test2的数据。 FBI SFr50 TestSIMATlC 400(1 CPU 414 2 DPAdjdressDeclarationNameTypeInitial valiintestA/TYoutin out10.03 tatLADDRJiECKMORI)U#16#012,03 tatRET VAL DECK
18、INT014.0statPEiLDDR DECKARRAYO,.4*2.astat¥ORD24.0statPECOUMTDECKIWT026.0statPAADDRARRAY® 4*2*03 tatWORDi36.0statPACOmiTDECKI:JT00.0temptest2ATTY襦IIi图06 any的临时变量传递语句L P#test先把地址加载到 Accu1,然后通过语句 LAR1把地址加载到地 址寄存器AR1 (可简写为:LAR1 P#test)。每次读取地址寄存器 AR1并存储数据(例如 T LWO)到临时变量“test2(”NY指针)中。Network 1中的语 句复制数据传送到功能块 FB1的ANY数据到临时变量“test2 ”FBI : Title;ifetwork 1: Title iLAP.丄#testL¥ ARifP#0.aTLU 0LV AR1,P#2.OJTLW 2LV ARI川4.0TLW 4LD ARifP#6.0TLD 6#test2network 2 : TitleiCALL &q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城管执法专业试题及答案
- 河南省濮阳市华龙区濮阳第一高级中学2025-2026学年高二上学期开学摸底检测英语试卷(含答案)
- 河北省衡水市桃城区2025-2026学年高二上学期暑假开学考试化学试题(含答案)
- 安徽省九师联盟2026届高三9月开学联考英语(含答案)
- 河北省邯郸市第十中学2024-2025学年七年级上学期期末考试数学试卷(含答案)
- 广西钦州市第四中学2025-2026学年高三上学期开学考试数学试卷(含答案)
- 广东省深圳实验学校高中园2025-2026学年高三上学期9月统测(开学)物理试卷(含答案)
- 宁夏建筑消防方案设计资质
- 安徽省江淮名校2024-2025学年高二上学期期中考试化学试卷(含答案)
- 保险业数字化风险管理解决方案与应用技术案例研究
- 2025工勤考试收银审核员(高级技师)考试题(含答案)
- GB/T 27043-2025合格评定能力验证提供者能力的通用要求
- 加工公司实验室设备管理办法
- (2025秋新版)北师大版二年级上册数学全册教案
- 2025年“学宪法讲宪法”知识竞赛题库含答案
- 教室布置方案(模板)
- 2025年上海入团考试试题及答案
- 2025年《土地管理法》考试试题及答案解析
- 2025至2030年中国机织服装市场现状分析及前景预测报告
- 妇幼信息安全课件
- 《测绘基础》课件(共八个任务)
评论
0/150
提交评论