指针

指针可用于 IEC 61131-3标准扩展

在一个应用程序运行时指标保存变量的地址,程序,功能模块,方法和功能。一个指标能指向任何目标并且任何 数据类型, 甚至是 用户自定义数据类型。注意使用隐式的可能性检查函数的指标,见下方”检查指标功能”!

指标声明语法:

<identifier>: POINTER TO <data type | function block | program | method | function>;

联化的一个指标意味着获得当前地址存储的值,其指向一个指标能够通过添加 内容运算符 "^"在指标标识符后被间接引用,见以下事例中的”pt^”例子:

地址运算符 ADR可以用来分配变量地址指针。

例子:

VAR

  pt:POINTER TO INT;  (* of pointer pt *)

  var_int1:INT := 5;  (* declaration of variables var_int1 and var_int2 *)

  var_int2:INT;

END_VAR

pt := ADR(var_int1); (* address of varint1 is assigned to pointer pt *)

var_int2:= pt^;      (* value 5 of var_int1 gets assigned to var_int2 via dereferencing of pointer pt; *)

 

函数指针

与CoDeSys V2.3 支持的 函数指针相比,更换了 INDEXOF 操作符。这个指针可以被传递到外部库,但是 不能在应用和系统中调用函数指针 ! 回调函数(函数库系统功能)功能中注册的运行环境功能需要功能指标,并且,回调取决于哪种注册被需求,然后各自的功能将通过运行系统被隐藏访问(例如在STOP)。为了开启这样一个系统调用 (运行系统)各自的 性能 (类别 "编译") 必须被为功能目标设置。

ADR 运算符可被用在功能名称,程序名称,功能模块名称和方法名称上。由于功能在联机改变后移动,功能的地址不是结果,而是功能的指标地址。只要功能在目标中存在这个地址均有效。

指标的索引访问

标准的扩展IEC61131-3 中,索引访问”[]”变量的POINTER类型, STRING WSTRING 被允许。

  • pint[i] 返回基本数据类型
  • 指标的索引访问是算数:如果索引防伪备用在一个指标类型的变量上,偏移量将通过pint[i] = (pint + i * SIZEOF(base type))^.被计算。索引访问同样在一个指标上执行一个非关联化隐藏。结果类型是指标的基本类型。注意pint[7] != (pint + 7)^!
  • 如果索引访问被用在变量类型STRING上,其结果是指标表达式的偏移字符。结果是TYPE类型。str[i]将返回i-th字符串中字符为SINT(ASCII)。
  • 如果索引访问被用在一个WSTRING类型的变量上,其结果是指标表达式的偏移字符。结果是WORD类型。wstr[i]将返回i-th字符串中的字符为INT(Unicode)。

也可以使用 “引用”,这与指标对照直接影响一个值。

指标检查函数

在运行过程中你可能在每个指标地址的访问来使用隐藏可用的检查函数 CheckPointer来进行指标访问的检查。 所以添加对象 用来隐性检查的POU到应用中,通过使用相关于CheckPointer的 Mark复选框类型, 选择一种执行语言,然后使用 “打开”确认设置, 编辑器中的与选择的语言一致的检查功能将被开启。选择部分的独立是预设的并且不得修改除了添加更多的局部变量!但是,相比其他检查功能,没有默认执行的CheckPointer 可用,留给用户来进行执行!

函数CheckPointer 应该检查是否地址指标引用均在有效的内存范围。此外,它应该被注意,对齐的内存区与引用的变量的数据类型的指标指向。如果两个条件都满足,CheckPointer 应该返回不变输入指标。适当的处理检测到错误情况留给用户。

提示!

这个指标中的检查功能无隐藏的访问。

模块 :

声明部分:

// Implicitly generated code : DO NOT EDIT

FUNCTION CheckPointer : POINTER TO BYTE  

VAR_INPUT

ptToTest : POINTER TO BYTE;

iSize : DINT;

iGran : DINT;

bWrite: BOOL;

END_VAR

执行部分: (未完成!):

// No standard way of implementation. Fill your own code here

CheckPointer := ptToTest;

 

当调用函数获得以下输入参数时:

  • ptToTest: 指标的目标地址
  • iSize:  引用变量的型号;型号的数据类型必须是整数兼容的并且必须涵盖最大潜在储存在指标地址中的数据型号;
  •  iGran: 访问的间隔,这是最大的无结构数据类型,用在引用变量中;iGran的数据类型必须是整数兼容的;
  • bWrite: 访问的类型(TRUE=写入访问,FALSE=读入访问);bWrite的数据类型必须是BOOL。

如果检查结果比较积极,未调整的数据将被返回(ptToTest)。