计数器,定时器设定值设置方法有三种:1常数直接设置2寄存器间接设定3用指针(*VD,*LD,*AC)间接设定。我想请教指针间接设定的用法,哪些地方要用到这个?请举例
最佳答案
用指针对S7--200存储区间接寻址:
间接寻址是指用指针来访问存储区数据。指针以双字的形式存储其它存储区的地址。只能用V存储
器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。要建立一个指针,必须以双字的形
式,将需要间接寻址的存储器地址移动到指针中。指针也可以作为参数传递到子程序中。
S7--200允许指针访问以下存储区: I、Q、V、M、S、AI、AQ、SMT(仅限于当前值)和C(仅限
于当前值)。您无法用间接寻址的方式访问单独的位,也不能访问HC或者L存储区。
要使用间接寻址,您应该用“&”符号加上要访问的存储区地址来建立一个指针。指令的输入操作数
应该以“&”符号开头来表明是存储区的地址,而不是其内容将移动到指令的输出操作数(指针)
中。
当指令中的操作数是指针时,应该在操作数前面加上“*”号。如图4--11所示,输入*AC1指定AC1
是一个指针,MOVW指令决定了指针指向的是一个字长的数据。在本例中,存储在VB200和VB201
中的数值被移动到累加器AC0中。
按照所访问的数据长度使用不同的指令:当访问字节时,使用增加指令使指针值加1;当访问字或
者计数器、定时器的当前值时,用加法或者增加指令使指针值加2;当访问双字时,使用加法或者
增加指令使指针值加4。
本例中用LD10作为VB0的地址指针。然后可以利用VD1004中存储的地址偏移量来改变指针值。经过改变后,LD10指向
V区中的另外一个地址(VB0+偏移量)。然后将LD10指向的V区地址中存储的数值复制到VB1900中。通过改变
VD1004中的数值,您可以访问V存储器中的任意单元
Network1 /如何利用偏移量访问
//V存储器中的任意单元:
//
//1. 将V区的起始地址装载到指针中。
//2. 将偏移量加到指针上。
//3. 将V存储器中的数值复制到
//VB1900中。
//
LD SM0.0
MOVD &VB0, LD10
+D VD1004, LD10
MOVB *LD10, VB1900
用指针访问数据表的例子程序
本例中用LD14作为指向一个配方表的指针,配方表的起始地址为VB100。在本例中VW1008用来存储一个指定的配方在
表中的索引号。如果每条配方的长度为50个字节,则用这个索引号乘以50就可以得到这条配方起始地址的偏移量。用指
针加上偏移量,您就可以访问表中的每一条配方。在本例中,配方被复制到从VB1500开始的50个字节中。
Network1 //如何从配方表中传递一条配方:
// -- 每条配方的长度为50个字节。
// -- 索引值(VW1008)指定装载哪一条配方。
//
//1. 建立一个指针指向配方表的起始地址。
//2. 将配方的索引值转换为双字。
//3. 乘以每条配方的长度算出偏移量。
//4. 将偏移量加到指针上。
//5. 将配方传递至VB1500到VB1549中。
LD SM0.0
MOVD &VB100, LD14
ITD VW1008, LD18
*D +50, LD18
+D LD18, LD14
BMB *LD14, VB1500, 50
提问者对于答案的评价:
OK
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc356796.html