您现在的位置是:首页 > PLC技术 > PLC技术
S7-1500 PLC的间接寻址方式
来源:艾特贸易2017-10-11
简介采用间接寻址时,只有当程序执行时,用于读或写数值的地址才得以确定。使用间接寻址,可实现每次运行该程序语句时使用不同的操作数,从而减少程序语句并使得程序更灵活。 对于
采用间接寻址时,只有当程序执行时,用于读或写数值的地址才得以确定。使用间接寻址,可实现每次运行该程序语句时使用不同的操作数,从而减少程序语句并使得程序更灵活。
对于S7-1500 PLC,所有的编程语言都可以通过指针、数组元素的间接索引等方式进行间接寻址。当然,不同的语言也支持特定的间接寻址方式,如在STL编程语言中,可以直接通过地址寄存器寻址操作数。
由于操作数只在运行期间通过间接寻址计算,因此可能会出现访问错误,而且程序可能会使用错误值来操作。此外,存储区可能会无意中被错误值覆盖,从而导致系统做出意外响应。因此,使用间接寻址时需格外小心。
本文艾特贸易小编只对间接寻址作简单介绍,具体使用时需查询手册。
(1)通过指针间接寻址
对于间接寻址,可以使用以下类型的指针:Pointer、Any(S7-1500,仅适用于可标准访问的块)和Variant。表5-29所示为声明各种Pointer指针类型的格式,表5-30所示为声明各种Any指针类型的格式,表5-31所示为声明各种Variant指针类型的格式。
表5-29 声明各种Pointer指针类型的格式
表5-30 声明各种Any指针类型的格式
表5-31 声明各种Variant指针类型的格式
(2) Array元素的间接索引
要寻址Array元素,可以指定整型数据类型的变量并指定常量作为下标。在此,只能使用长度最长为32位的整数。使用变量时,则可在运行过程对索引进行计算。例如,在程序循环中,每次循环都使用不同的下标。
用于一维数组Array的间接索引格式为”<Datablock>”.<ARRAY>[”i”];用于二维数组Array的间接索引格式为”<Data block>”.<ARR_AY>[”i”,”j”]。其中<Data block>为数据块名称,< ARRAY>为数组变量名称,”i”和”j”为用作指针的整型变量。
例如,图5-8所示为使用梯形图(LAD)编程语言对Array中的元素进行寻址,并将值传送到另一个变量中。在被传送的操作数中,“MyDB”为一数据块名称,ARRAY为数据块“MyDB”中的某三维数组名称,“Tag_1”“Tag_2”“Tag_3”为指示该三维数组的下标指针,故操作数“MyDB”.ARRAY[“Tag_1”,“Tag_2”,“Tag_3”]表示数据块“MyDB”中下标依次为“Tag_1”“Tag_2”“Tag_3”三个变量所指定的三维数组ARRAY的元素。
图5-8 Array元素的间接索引示例
(3)间接寻址String的各字符
要寻址String或WString的各字符.可以将常量和变量指定为下标。该变量必须为整型数据类型。使用变量时,则可在运行过程中对索引进行计算。例如,在程序循环中,每次循环都使用不同的下标。
用于String的间接索引的格式为”<Datablock>”.<STRING>[”i”];用于WString的间接索引的格式为”< Data block>”.<WSTRING>[”i”]。
(4) STL编程语言中的间接寻址
在STL编程语言中,可以使用存储器间接寻址、寄存器间接内部区域寻址和寄存器间接跨区域寻址。
对于存储器间接寻址,可以在变量中存储地址。变量可以是Word或DWord数据类型。变量可以位于存储器区域“数据”(DB或DI)、“位存储器”(M)或“临时本地数据”(L)中。
地址寄存器有地址寄存器1(ARl)和地址寄存器2(AR2),长度相等,有32位,可以在地址寄存器中存储内部区域指针和跨区域指针,实现寄存器和其他可用存储区之间交换数据。
点击排行
