[汇川] 编程概念-指针POINTER和ADR

[复制链接]
查看93 | 回复0 | 2025-3-29 08:03:14 | 显示全部楼层 |阅读模式
>

后一段解释了上一篇文章数据接收发送的存储原理,结合使用效果更佳;

指针概念

指针表示一个地址。如果在软件中定义了一个变量,对变量进行编译后,系统根据变量的类型分配相应的内存空间,如一个BYTE变量,系统会为其分配1个字节的存储空间,如果是一个REAL类型变量,系统则为其分配4个字节的存储空间。

一般而言,程序都是通过变量名来对内存单元进行存储操作的。这是因为程序经过编译后,已经将变量名转换为变量的内存地址,对变量的存储其实都是通过内存地址所进行的。

例如,在程序中定义var1,var2 和var3三个变量,在声明时将其都定义为WORD类型,经过系统编译后,系统分配给var1的内存空间为两个字节,地址分别为1000和1001,var2为1002和1003,var3为1004和1005。1000和1001内存中的具体数据则是var1内的具体数据,var2和var3也是相同的道理,示意图如下图所示。此种按变量地址存储数据的方式在高级语言中也称之为“直接访问”方式。

一个是由变量名访问,一个是由地址访问

指针变量概念

一个变量的地址称为该变量的“指针”。如地址为1000和1001的变量是var1的指针。如果有一个变量专门用来存放另一个变量的地址(指针),此时,我们则称它为“指针变量”。

即指针变量不存储值,存储的是另外一个变量的地址

在软件中使用关键字“POINTER TO+类型”对指针变量进行声明。类型可以是变量、程序、功能块、方法和函数的内存地址。它可以指向上述的任何一个对象以及任意数据类型,包括用户定义数据类型。

定义指针类型变量

声明指针的语法如下:

//(公众号:工控修炼之路)

<identifier>: POINTER TO <data type>;

identifier:指针标识符即指针名字。

data type:指针指向的数据类型,类型可以为22种基本数据类型 (不包括BIT)、功能块 、程序 、方法 、函数。

通过地址操作符对指针进行操作。地址操作符包括ADR(获取变量地址)和^(变量地址对应的值)。

指针类型变量的使用

取指针地址内容即意味着读取指针当前所指地址中存储的数据。通过在指针标识符后添加内容操作符“^”,可以取得指针所指地址的内容。通过下面的例子说明指针类型变量的使用。

例:

在声明中定义Point01变量为指针变量,该变量将来用于存储地址数据。

声明int变量

var1:=2

var2不赋值;

程序中使用ADR指令,该指令是用来获取变量内存地址的操作符,

执行

Point01:=ADR(var1)

Point01内就已经获取了var1的内存地址信息

Point01^指的是该内存地址中对应的具体数据、即var1中2。

var2:=Point01^;

指令执行后,就将PointVar^赋值给了var2,故var2=2。

所以在上一篇文章中,

//(公众号:工控修炼之路)

DataStr: STRING;

 Buffer: POINTER TO BYTE:=ADR(DataStr);

  1. ADR(DataStr) 的作用

    • ADR
       指令返回变量 DataStr 在内存中的起始地址Buffer 作为指向字节的指针,直接指向该地址 


    • 在PLC中,字符串(STRING 类型)在内存中以连续的字节序列存储,包含字符数据及可能的长度信息或终止符(如 \0)。
  2. 指针操作的本质

    • 通过 Buffer^ 修改字节值,相当于直接操作 DataStr 对应的内存区域。例如,若 DataStr 的初始值为 'ABC',其内存布局可能为 
      0x41 ('A')0x42 ('B')0x43 ('C')0x00 (终止符)
    • 若执行 Buffer^ := 0x44,则 DataStr 的第一个字符变为 'D',即字符串变为 'DBC' 

个人理解,如有错漏,欢迎留言讨论;




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则