西门子STL间接寻址常见问题解析

需积分: 19 8 下载量 163 浏览量 更新于2024-09-06 收藏 173KB DOC 举报
"西门子STL间接寻址常问问题集" 西门子STL间接寻址是程序设计中的一个重要概念,特别是在S7-300和S7-400系列PLC中,它允许程序员通过指针访问存储器的不同区域。以下是关于STL间接寻址的详细说明: 1.1 指针和间接寻址 指针是STL编程中用于间接访问内存位置的关键工具。16位指针适用于定时器、计数器和程序块的寻址,而32位指针则广泛用于I/O、M、L和数据块的寻址。32位指针的结构包含位地址和字节地址,而Pointer和Any则是处理复杂数据类型的指针类型。Any扩展了Pointer的功能,提供更大的地址空间。 了解指针的工作原理和格式至关重要,这需要参考官方文档,如"SIMATIC Programming with STEP7 V5.5"中的参数类型、1008文档中的S7-300和S7-400的STL编程以及F0215文档中关于寻址的详细信息。 1.2 FC与FB中的指针使用差异 在函数FC中,由于指针变量会被复制到调用者的临时变量区,直接使用LAR指令访问P#指针是不允许的,因为这违反了MC7寄存器长度的规定。相反,在功能块FB中,这种操作是可行的。为了解决这个问题,FC中应使用累加器作为中转,如LP##PointerInput LAR1。 1.3 寄存器内容的影响 在STEP7编程中,某些操作可能会改变DB/DI寄存器或地址寄存器AR1/AR2的内容。例如,当使用DB路径(如L DB20.Val)或在调用FC/FB时将DB块作为参数,DB寄存器的内容会被覆盖。在OB1中调用FC1并传入DB块地址后,DB寄存器的值就会改变。因此,编程时必须谨慎处理这些操作,避免意外覆盖重要数据。 在使用间接寻址时,要特别注意指针的类型和其在不同上下文中的使用限制。在处理复杂数据类型时,如Date_and_Time、Array或String,要理解Pointer和Any的区别,并遵循相应的编程规则。此外,为了保持程序的稳定性和避免数据丢失,应当遵循STEP7的编译器规则,尤其是在FC和FB之间传递指针时。 西门子STL间接寻址是一个强大但需要精确操作的工具。正确理解和运用这些概念,能够提升程序的灵活性和效率,同时避免潜在的问题。对于编程新手来说,深入学习相关文档和实践经验是必不可少的。