指针可用于 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 被允许。
也可以使用 ⇘ “引用”,这与指标对照直接影响一个值。 |
指标检查函数
在运行过程中你可能在每个指标地址的访问来使用隐藏可用的检查函数 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)。