马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
<p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);">在实现函数或者功能块的时候如想要实现一个输入支持多种数据类型的输入,可以将输入(<code class="code docutils literal" style="box-sizing: border-box; font-size: 12.6px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border-radius: 4px;"><span class="pre" style="box-sizing: border-box;">VAR_INPUT</span></code>)声明为具有通用IEC数据类型(<code class="code docutils literal" style="box-sizing: border-box; font-size: 12.6px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border-radius: 4px;"><span class="pre" style="box-sizing: border-box;">ANY</span></code>或<code class="code docutils literal" style="box-sizing: border-box; font-size: 12.6px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); border-radius: 4px;"><span class="pre" style="box-sizing: border-box;">ANY_<type></span></code>)的变量。结果,你可以实现对数据类型具有不同调用参数的调用。在runtime中,你可以通过编程块中输入变量的预定义结构来检索传输的值及其类型。</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);">在<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);">编译代码时,</span><code class="code docutils literal" style="box-sizing: border-box; font-size: 12.6px; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; padding: 2px 4px; background-color: rgb(238, 238, 238); border-radius: 4px; white-space: normal;"><span class="pre" style="box-sizing: border-box;">ANY</span></code><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);">数据类型被内部替换为以下结构:</span></p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);"></span></p><pre style="box-sizing: border-box; font-size: 13px; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; overflow: auto; padding: 9.5px; margin-top: 0px; margin-bottom: 10px; line-height: 1.42857; color: rgb(51, 51, 51); word-break: break-all; overflow-wrap: break-word; background-color: rgb(245, 245, 245); border: 1px solid rgb(204, 204, 204); border-radius: 4px;">TYPE AnyType :
STRUCT
// 实际参数的类型
typeclass : __SYSTEM.TYPE_CLASS ;
// 指向实际参数的指针
pvalue : POINTER TO BYTE;
// 指针指向的数据大小
diSize : DINT;
END_STRUCT
END_TYPE</pre><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; white-space: normal; background-color: rgb(255, 255, 255);"><span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; background-color: rgb(255, 255, 255);"></span>以下代码实现了将任意byte类型的排列转换为字符串</p><p>FUNCTION AryToStringTest : String</p><p>VAR_INPUT</p><p><span style="white-space:pre"> </span>In:ANY;</p><p><span style="white-space:pre"> </span>Size:UINT;</p><p>END_VAR</p><p>VAR_OUTPUT</p><p><span style="white-space:pre"> </span>Out:STRING(255);</p><p>END_VAR</p><p>VAR</p><p><span style="white-space:pre"> </span>ByteAry:ARRAY[0..1984]OF BYTE;</p><p><span style="white-space:pre"> </span>StringAry:ARRAY[0..255]OF STRING;</p><p><span style="white-space:pre"> </span>index:DINT;</p><p><span style="white-space:pre"> </span>ByteLenght:DINT;</p><p>END_VAR</p><p>//获取数组数据</p><p>FOR index:=0 TO In.diSize-1 DO</p><p><span style="white-space:pre"> </span>ByteAry[index]:=In.pValue[index];</p><p>END_FOR</p><p>//转换成字符编码</p><p>FOR index:=0 TO Size -1 DO</p><p><span style="white-space:pre"> </span>StringAry[index]:=F_ByteToAsc(ByteAry[index]);</p><p>END_FOR</p><p>//合成字符串</p><p>FOR index:=0 TO Size -1 DO</p><p><span style="white-space:pre"> </span>Out:=CONCAT(STR1:=Out,StringAry[index]);</p><p>END_FOR</p><p><br/></p> |