您现在的位置是:首页 > PLC技术 > PLC技术

S7-1500 PLC的间接寻址方式

来源:艾特贸易2017-10-11

简介采用间接寻址时,只有当程序执行时,用于读或写数值的地址才得以确定。使用间接寻址,可实现每次运行该程序语句时使用不同的操作数,从而减少程序语句并使得程序更灵活。 对于

    采用间接寻址时,只有当程序执行时,用于读或写数值的地址才得以确定。使用间接寻址,可实现每次运行该程序语句时使用不同的操作数,从而减少程序语句并使得程序更灵活。

    对于S7-1500 PLC,所有的编程语言都可以通过指针、数组元素的间接索引等方式进行间接寻址。当然,不同的语言也支持特定的间接寻址方式,如在STL编程语言中,可以直接通过地址寄存器寻址操作数。

    由于操作数只在运行期间通过间接寻址计算,因此可能会出现访问错误,而且程序可能会使用错误值来操作。此外,存储区可能会无意中被错误值覆盖,从而导致系统做出意外响应。因此,使用间接寻址时需格外小心。

    本文艾特贸易小编只对间接寻址作简单介绍,具体使用时需查询手册。

   (1)通过指针间接寻址

    对于间接寻址,可以使用以下类型的指针:PointerAnyS7-1500,仅适用于可标准访问的块)和Variant。表5-29所示为声明各种Pointer指针类型的格式,表5-30所示为声明各种Any指针类型的格式,表5-31所示为声明各种Variant指针类型的格式。

    5-29    声明各种Pointer指针类型的格式

声明各种Pointer指针类型的格式

    5-30    声明各种Any指针类型的格式

声明各种Any指针类型的格式

    5-31    声明各种Variant指针类型的格式

声明各种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的元素。

Array元素的间接索引示例

    5-8    Array元素的间接索引示例

   (3)间接寻址String的各字符

    要寻址StringWString的各字符.可以将常量和变量指定为下标。该变量必须为整型数据类型。使用变量时,则可在运行过程中对索引进行计算。例如,在程序循环中,每次循环都使用不同的下标。

    用于String的间接索引的格式为”<Datablock>”.<STRING>[i];用于WString的间接索引的格式为”< Data block>”.<WSTRING>[i]

   (4) STL编程语言中的间接寻址

    STL编程语言中,可以使用存储器间接寻址、寄存器间接内部区域寻址和寄存器间接跨区域寻址。

    对于存储器间接寻址,可以在变量中存储地址。变量可以是WordDWord数据类型。变量可以位于存储器区域“数据”(DBDI)、“位存储器”(M)或“临时本地数据”(L)中。

    地址寄存器有地址寄存器1(ARl)和地址寄存器2(AR2),长度相等,有32位,可以在地址寄存器中存储内部区域指针和跨区域指针,实现寄存器和其他可用存储区之间交换数据。