Codesys 数据结构: 扩展数据类型之bit类型详解

1、定义

REFERENCE(引用)是对指针的应用,内部也是指针;指针可以指向各种数据类型(bit除外),结构体,功能块,函数及程序,引用也同样可以。

如果对codesys指针不太了解,可以参考上一篇博客

2、声明

Reference to 关键字进行声明;

riTest : Reference to INT;

等价于

riTest : pointer to INT;
3、赋值

ref 进行地址赋值,访问引用对象的值,不必显式引用(对比使用^)

VAR
riTest : Reference to INT;(*引用类型*)
iTest  : INT := 0;
END_VAR

riTest ref= iTest;
riTest := riTest + 1 ;

等价于 指针类型的写法

VAR
riTest : pointer to INT;(*指针类型*)
iTest  : INT := 0;
END_VAR

riTest := ADR(iTest);
riTest^ := riTest^ + 1;   
4、引用举例之函数使用:做一个不断加1的函数

(1)常规写法实现:

(*返回计算结果INT*)
FUNCTION Common_ADD : INT
VAR_INPUT
	ivar : INT ;
END_VAR

Common_ADD := ivar + 1;

(2)引用写法实现

(*无返回结果*)
FUNCTION Reference_ADD 
VAR_INPUT
	ivar : REFERENCE TO  INT ;  
END_VAR

ivar := ivar + 1;

(3)指针写法实现

(*无返回结果*)
FUNCTION Pointer_ADD 
VAR_INPUT
	ivar : POINTER TO  INT ;
END_VAR

ivar^ := ivar^ + 1;

(4)进行测试,可以看到运行结果一样,都实现不断加1的功能;

PROGRAM PGR2
VAR
  iTest1 : INT:= 0; 
  iTest2 : INT:= 0; ;
  iTest3 : INT:= 0; ;
END_VAR

iTest1 := Common_ADD(iTest1);
Reference_ADD(iTest2);
Pointer_ADD(ADR(iTest3));

请添加图片描述

5 、优点总结
优点1: 类型安全
对于引用,编译器在分配引用时会检查两个类型是否一致,例如
PROGRAM PGR3
VAR_INPUT
 riTest: REFERENCE TO INT;*指针*)
 piTest: POINTER TO INT;*引用*)
 bTest : BOOL:= FALSE;
END_VAR

piTest := ADR(bTest);(*正常:将BOOL类型地址给INT类型指针*)
riTest REF= bTest;(*报警:将BOOL类型赋值给INT类型引用*)

在这里插入图片描述

优点2: 传参写法简介
如果输入是一个Reference to的参数,则不必显式编写ADR(value),例如
ROGRAM PGR2
VAR
  iTest2 : INT:= 0; ;
  iTest3 : INT:= 0; ;
END_VAR

Reference_ADD(iTest2);(*引用传参*)
Pointer_ADD(ADR(iTest3));(*传递指针参数*)

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值