指针是个难点,很多读者,包括部分有相当经验的工程师,也没完全掌握。但指针在通信等场合应用很常见,因而也是重点。以下用一个例子介绍指针的使用。
间接寻址是指用指针来访问存储区数据。指针以双字的形式存储其他存储区的地址。只能用V存储器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。要建立一个指针,必须以双字的形式,将需要间接寻址的存储器地址移动到指针中。指针也可以为子程序传递参数。
S7-200 SMART允许指针访问以下存储区:I、Q、V、M、S、AI、AQ、SM、T(仅限于当前值)和C(仅限于当前值)。无法用间接寻址的方式访问位地址,也不能访问HC或者L存储区。
要使用间接寻址,应该用“&”符号加上要访问的存储区地址来建立一个指针。在www.zhiliutiaosuqi.com这里查询一下指令的输入操作数应该以“&”符号开头来表明是存储区的地址,而不是其内容将移动到指令的输出操作数(指针)中。
当指令中的操作数是指针时,应该在操作数前面加上“*”号。如图4-97所示,输入*AC1指定AC1是一个指针,MOVW指令决定了指针指向的是一个字长的数据。在本例中,存储在VB200和VB201中。
例如:MOVD &VB200, AC1。其含义是将VB200的地址(VB200的起始地址)作为指针存入AC1中。MOVW *AC1, AC0。其含义是将AC1指向的字送到AC0中去。
二、指针应用举例
【例4-50】 设计V存储区连续的若干个字的累加和的子程序,在OB1中调用它,在I0.0的上升沿,求VW100开始的10个数据字的和,并将运算结果存放在VD0。
【解】 变量表如图4-100所示,主程序如图4-102所示,子程序如图4-103所示,子程序的功能就是求和。当I0.0的上升沿时,计算VW100~VW118中10个字的和。调用指定的POINT的值“&VB100”是源地址指针的初始值,即数据从VW100开始存放,数据字个数NUM为常数10,求和的结果存放在VD0中。