什么是变址寄存器
变址寄存器功能是作为指针用来指定PLC 存储器地址,这个地址是I/O 存储器中的juedui存储器地址。使用MOVR(560)或MOVRW (561)在变址寄存器中保存PLC 存储器地址后,在其它指令中输入这一变址寄存器作为一个操作数,使保存的PLC存储器地址成为间接地址。变址寄存器的优势在于它们能够指定在I/O存储器中的任何一个位或字,包括定时器和计数器PV。
间接寻址
当使用一个变址寄存器作为带“,”前缀的操作数时,将由变址寄存器内的PLC 存储器地址指示的字操作这条指令,而不是变址寄存器本身。原则上变址寄存器是I/O存储器的指针。
• 用PLC 存储器地址可以无间断地指定I/O 存储器里的所有地址(除变址寄存器、数据寄存器和条件标志外),而不需要指定数据区。
• 除基本间接寻址外,在一个变址寄存器里的PLC 存储器地址可用一个常数或者数据寄存器偏移,自动增加或者自动减少。在循环语句中可用这个功能读或写数据,当指令执行时使其地址每次自动增加或者减少。
用偏移和增加/ 减少变量,可用MOVR (560)或者 MOVRW (561)设置变址寄存器的基值,在每一个指令中作为指针修改。
对于指针操作,可使用直接指定变址寄存器(MOVR(560)、MOVRW(561)、递增指令、递减指令或算术指令)的特殊指令,或者也可使用间接偏移、自动递增或自动递减。
直接寻址
当将一个没有“,”前缀的变址寄存器用作操作数时,该指令将操作变址寄存器自身表示的内容(双字或者“双精度”值)。只有用下表所示的指令可直接寻址变址寄存器。用这些指令把变址寄存器作为指针。变址寄存器通常可用作间接寻址,但它们在其它指令中不能用于直接寻址。
注意:
• 在未将PLC 存储器地址设置寄存器以前,不要使用变址寄存器。如果使用没有设置值的寄存器,指针操作将会不可靠。
• 在启动一个中断任务时,在变址寄存器里的值是不确定的。当在一个中断任务中使用变址寄存器时,通常使用之前用MOVR(560)或MOVRW(561)指令在变址寄存器中设置PLC存储器地址。
• 每一个变址寄存器的任务是独立执行的,它们不会相互影响,例如在任务1 中使用的IR0 与在任务2中使用的IR0是不同的。每一个变址寄存器任务可用16个变址寄存器。
• 从CX-Programmer 可以读取执行循环的Zui后一个任务中的变址寄存器。如果使用相同编号的变址寄存器来执行多重任务,用CX-Programmer只能读出Zui后一个执行的任务的变址寄存器的值。用CXProgrammer不能写入变址寄存器的值。
在功能块内部使用变址寄存器 IR0 ~ IR15 时,在其他功能块或功能块外部的程序中使用同一变址寄存器将在两者之间产生竞争,并使程序不能正确执行。使用变址寄存器(IR0~IR15)时,当功能块启动时(或变址寄存器被使用前),以及功能块完成时(或变址寄存器已被使用后),必须在指针中保存变址寄存器的值,在程序中合并处理将变址寄存器的值恢复到已保存的值。
使用变址寄存器
当变址寄存器与循环(如FOR- NEXT 循环)指令共同使用时,是一种有用的工具。变址寄存器的内容可以非常容易地递增、递减和偏移,一个循环中少量的指令可以非常有效地处理连续数据的表格。
多工位产线,多台相同的设备,产品信息的储存,配方等等,都可以用变址寄存器来减少程序量实现我们需要的功能。
通常可以通过以下步骤使用变址寄存器:
1. 在一个变址寄存器中使用MOVR (560)保存所需位或字的PLC 存储器地址。
2. 在任何指令中把变址寄存器指定为一个操作数,作为所需的位或字的间接地址。
3. 偏移或递增原始PLC 存储器地址(见下)使指针指向另一个地址。
4. 继续步骤2 和3,执行地址的任一位数上的指令。
变址寄存器的应用示例1
将D0 ~ D99 的数据(被加数据)加上D100 ~ D199的数据(加数据),并且将相加结果输出到D200~D299 中。通过变址寄存器指定单加法指令的操作数,通过递增变址寄存器和重复地执行加法指令来进行加法操作。
变址寄存器的应用示例2(字操作)
将E3_0传给IR1,这时,IR1储存的寄存器地址时E3_0,(10,IR1)的地址就是E3_10,当我们MOV&10到(10,IR1)等价于MOV &10E3_10
(位操作)
将E3_0.00传给IR1,这时,IR1储存的寄存器地址时E3_0.00
4,IR1等价于E3_0.04 16,IR1等价于E3_1.00