- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
西门子STL间接寻址常问问题集
西门子STL间接寻址常问问题集
文献
?
涉及产品
1.1如何获得指针或者间接寻址有关的信息?指针的类型包括16位指针、32位指针、Pointer(6Byte)和Any(10Byte)。16位指针用于定时器、计数器、程序块的寻址;32位指针用于I/Q/M/L/数据块等存储器中位、字节、字以及双字的寻址,其中第0~2位表示位地址(0~7)、第3~18位为字节地址,其余位未定义;Pointer和Any一般应用在复杂数据类型(比如Date_and_Time /Array/String等)在FB、FC之间的传递。而Any可以看做是对Pointer的延伸,因为由10Byte组成的Any中Byte4~Byte9就是一个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##PointerInput 在一个函数(FC)中是无效的,然而,同样的语句在一个功能块(FB)中是有效的?在FC被调用时,复杂数据类型例如指针是被复制到调用者的临时变量区中,在FC内部对此V区地址直接取址放入到地址寄存器AR1或AR2是不被编译器规则接受的(导致MC7寄存器信息过长),也就是说在FC内部通过P#进行地址寄存器取址仅能支持Temp临时变量。因此如果需要在FC中操作指针等复杂输入输出变量地址需要使用累加器进行中转。考虑到程序的一致性、遵守编译器规则和STL手册中LAR1指令说明,建议用户使用如下指令操作:L P##PointerInputLAR1
1.3 STEP 7 中哪些操作会覆盖DB/DI寄存器或者地址寄存器AR1/AR2的内容?下面说明了可能引起DB/DI寄存器或者地址寄存器AR1/AR2内容改变的一些操作:
DB寄存器和AR1受到影响的操作1. 使用完整的DB路径(如L DB20.Val)或者调用FC/FB时使用DB块完整地址作为其参数,则DB寄存器内容被覆盖。例如在OB1中调用FC1后,DB寄存器变成20。OPN DB1Call FC1Input(bit):DB20.DBX0.2因此在编程的时候,OPN 指令打开数据块,通过DBX x.y的方式访问其中内容, 但是如果在打开数据块后DB寄存器的内容被修改了,则DBX x.y的方式访问变量则 会访问到错误的地址。可以通过使用符号寻址的方式或者使用完整路径编程避免,当 然重新使用 OPN指令也是可以的。2. 调用FC时使用string, array, structure ,UDT作为其形参或者调用
+D ;T #DST_ADD;L #LOOP; //循环LOOP _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 W[AR1,P#0.0]T MW0例 2 FCFC1 变量声明中定义了“ Timer” 类型的变量“ Time_1” ,在 FC2 中调用 FC1,将定时器“T8”传递给变量“ Time_1”。如图 02 所示程序代码中数值 8 表示“T8”。
图 02 FC中确定定时器编号
“BLOCK_DB”类型参数在调用 FC 时不可以直接传送给 FC 。如果在调用功能时试图使用此参数类型,将产生如下的错误消息: “非法的参数传输参数名” 。“BLOCK_DB”类型参数仅在 FB 被调用(从一个 FB 或 FC 中)时可被传送。 “BLOCK_DB”类型参数不可以在 FC 被调用(从一个 FB 或 FC 中)时可被传送。相关详细信息可参考 STEP7 在线帮助中“合法的传输参数类型”。然而,如果希望将 BLOCK_DB 参数类型传送给 FC, DB 块的编号可以通过基本数据类型(例如 WORD)传送。 在下面的例子中,FB100 拥有一个“BLOCK_DB” 的输入参数类型。为了在调用 FC101 时将参数传送给
文档评论(0)