在实现函数或者功能块的时候如想要实现一个输入支持多种数据类型的输入,可以将输入(VAR_INPUT
)声明为具有通用IEC数据类型(ANY
或ANY_<type>
)的变量。结果,你可以实现对数据类型具有不同调用参数的调用。在runtime中,你可以通过编程块中输入变量的预定义结构来检索传输的值及其类型。
在编译代码时,ANY
数据类型被内部替换为以下结构:
TYPE AnyType : STRUCT // 实际参数的类型 typeclass : __SYSTEM.TYPE_CLASS ; // 指向实际参数的指针 pvalue : POINTER TO BYTE; // 指针指向的数据大小 diSize : DINT; END_STRUCT END_TYPE
以下代码实现了将任意byte类型的排列转换为字符串
FUNCTION AryToStringTest : String
VAR_INPUT
In:ANY;
Size:UINT;
END_VAR
VAR_OUTPUT
Out:STRING(255);
END_VAR
VAR
ByteAry:ARRAY[0..1984]OF BYTE;
StringAry:ARRAY[0..255]OF STRING;
index:DINT;
ByteLenght:DINT;
END_VAR
//获取数组数据
FOR index:=0 TO In.diSize-1 DO
ByteAry[index]:=In.pValue[index];
END_FOR
//转换成字符编码
FOR index:=0 TO Size -1 DO
StringAry[index]:=F_ByteToAsc(ByteAry[index]);
END_FOR
//合成字符串
FOR index:=0 TO Size -1 DO
Out:=CONCAT(STR1:=Out,StringAry[index]);
END_FOR
{{item.nickname}}
{{key+1}}楼{{item.content}}
{{item2.nickname}}
{{item2.content}}