对于EasyBuilder Pro V6.08.01.214s版本
1.一旦使用了索引寄存器,不能传多个数值
比如
TYPE Pallet :
STRUCT
boxLong : REAL;
boxWidth : REAL;
boxHeight: REAL;
trayLong : REAL;
trayWidth : REAL;
layerId : ARRAY[0..19] OF USINT;
layerDef : ARRAY[0..9] OF PalletLayer;
END_STRUCT
END_TYPE
TYPE PalletLayer :
STRUCT
num : USINT;
x : ARRAY[0..49] OF INT; //fixpoint -32768~32767 -> 3276.8mm ~ 3276.8mm
y : ARRAY[0..49] OF INT;
a : ARRAY[0..49] OF INT;
END_STRUCT
END_TYPE
//PalletGVL
VAR_GLOBAL
boxLong : REAL;
boxWidth : REAL;
boxHeight: REAL;
trayLong : REAL;
trayWidth : REAL;
maxLayer : USINT;
layerId : ARRAY[0..19] OF USINT;
layerType : ARRAY[0..9] OF PalletLayer;
END_VAR
地址格式为 Application.PalletGVL.layerType[0+INDEX 32].x[0] 的地址不能传大于1的标签数量
无论是读写都一样
2.不能对REFERENCE TO的结构体内部的数组写入多个数值
在上一个的基础上
//PalletHmi
VAR_GLOBAL
currentLayerId : DINT;
currenyLayerRef : REFERENCE TO PalletLayer;
END_VAR
地址格式为 Application.PalletHmi.currentLayerRef.x[0] 的地址不能传大于1的标签数量
读取多个数值正常,但是写入多个数值只能对首地址生效
//-----------2024-08-03---------更新
对于EasyBuilder Pro V6.09.02.315s,CodeSYS 3.5.14
3.REFERENCE TO的结构体支持异常
TYPE PDPS_Position :
STRUCT
v : ARRAY [0..3] OF REAL; //x,y,z,a or a1,a2,a3,a4
END_STRUCT
END_TYPE
TYPE PickDyn_PlaceSta_RobotParam_1 :
STRUCT
robotOverride : REAL;
pickOrig : PDPS_Position;
pickArrayX : ARRAY[0..PickDyn_PlaceSta_Appl.cMaxPickArray-1] OF REAL;
END_STRUCT
END_TYPE
PDPS_GVL
VAR_GLOBAL
param1 : PickDyn_PlaceSta_RobotParam_1;
robotParam : REFERENCE TO PickDyn_PlaceSta_RobotParam_1 REF= param1;
END_VAR
HMI读取PDPS_GVL.param1.pickOrig.v[0]是正常的,
但是读取PDPS_GVL.robotParam.pickOrig.v[0]就会异常,只能用数组凑合一下了
哦,不,把PDPS_Position改成 x,y,z,a这样的形式,也能正常访问