codesys之指针调用数组及结构体

codesys指针使用

我们先定义一个指向INT的指针P,然后定义一个数组将指针指向数组首元素,就是取了数组首元素的地址。然后我们把指针指向的地址的数据取出来,赋给其他变量使用。^是取指针内容的意思,也就是把指针指向的地址的数据取出来。

定义:
FUNCTION FUN_Git_CCU_VCU_Data : XK.CCU_VCU_INPUT
VAR_INPUT
END_VAR
VAR
	p:POINTER TO INT;
	arr:ARRAY[0..5] OF INT:=[1,2,3,2(4)];
	var1:INT;
	var2:INT;
	p1:POINTER TO UINT;
	p2:POINTER TO USINT;
	p3:POINTER TO BOOL;
END_VAR

实现及使用:
FUN_Git_CCU_VCU_Data := XK.CCU_VCU_I;
p:=ADR(arr[0]);
var1:=TO_INT(SIZEOF(arr));
var1:=TO_INT(SIZEOF(arr[1]));
var1:=TO_INT(SIZEOF(p));
var1:=TO_INT(SIZEOF(p1));
var1:=TO_INT(SIZEOF(p2));
var1:=TO_INT(SIZEOF(p3));
FOR var1:=0 TO TO_INT(SIZEOF(arr)/SIZEOF(arr[1])) BY 1 DO
	var2:=p^;
	p:=p+SIZEOF(arr[0]);
	
END_FOR

加断点调试如下:
数组大小为:sizeof(int)6 26=12
在这里插入图片描述
数组中每个元素的大小为:2
在这里插入图片描述
验证指针大小为8(不论指向什么数据类型)
在这里插入图片描述数组大小计算函数sizeof(A)/sizeof(A[0])
在这里插入图片描述
结构体指针使用

定义:
FUNCTION FUN_Git_CCU_VCU_Data : XK.CCU_VCU_INPUT
VAR_INPUT
END_VAR
VAR
	p5:POINTER TO CCU_VCU_INPUT;
	CCU_VCUI:CCU_VCU_INPUT;
END_VAR
实现与使用:
p5:=ADR(CCU_VCUInput);
CCU_VCUI:=p5^;
CCU_VCUI.A_VCU_CCU_0x862_DI.E31_CARDNO:=p5^.A_VCU_CCU_0x862_DI.E31_CARDNO;

验证:
先给结构体变量赋值:模块数量设为10
在这里插入图片描述再断点调试结果如下
在这里插入图片描述

二级指针使用
注意:指针大小均为8字节(64位系统测试)
在这里插入图片描述
在这里插入图片描述
二级指针定义及取值
在这里插入图片描述
在这里插入图片描述

CODESYS中,结构体是一种用户自定义的数据类型,可以将多个不同数据类型的变量组合成一个大的数据结构。以下是使用结构体的基本步骤: 1. 定义结构体类型:在程序中定义结构体类型,例如: ``` TYPE MyStruct : STRUCT a : INT; b : REAL; END_STRUCT END_TYPE ``` 这个结构体类型包含两个成员变量,一个整型变量`a`和一个实型变量`b`。 2. 声明结构体变量:在程序中声明结构体变量,例如: ``` VAR myVar : MyStruct; END_VAR ``` 这个声明将创建一个名为`myVar`的结构体变量,它包含两个成员变量,一个整型变量`a`和一个实型变量`b`。 3. 访问结构体成员:可以使用点运算符`.`访问结构体成员变量,例如: ``` myVar.a := 10; myVar.b := 3.14; ``` 这个代码将分别给结构体变量`myVar`的成员变量`a`和`b`赋值。 4. 传递结构体参数:可以将结构体作为参数传递给函数或函数块,例如: ``` FUNCTION MyFunction(input : MyStruct) : MyStruct VAR output : MyStruct; END_VAR ... END_FUNCTION ``` 这个代码定义了一个名为`MyFunction`的函数,它接受一个`MyStruct`类型的参数`input`,并返回一个`MyStruct`类型的值。可以在函数中访问`input`的成员变量,例如: ``` output.a := input.a + 1; output.b := input.b * 2; ``` 这个代码将给一个新的结构体变量`output`赋值,其中`a`成员变量的值是`input.a`加1,`b`成员变量的值是`input.b`乘以2。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值