返回列表 发布新帖

AX控制编程如何实现支持多种数据类型的输入

301 0
发表于 2024-7-10 18:16:53 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
<p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: &quot;Helvetica Neue&quot;, 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, &quot;Courier New&quot;, 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, &quot;Courier New&quot;, 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, &quot;Courier New&quot;, 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_&lt;type&gt;</span></code>)的变量。结果,你可以实现对数据类型具有不同调用参数的调用。在runtime中,你可以通过编程块中输入变量的预定义结构来检索传输的值及其类型。</p><p style="box-sizing: border-box; margin-top: 0px; margin-bottom: 10px; color: rgb(51, 51, 51); font-family: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, 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, &quot;Courier New&quot;, 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: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, 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&nbsp;AnyType&nbsp;:
STRUCT
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;实际参数的类型
&nbsp;&nbsp;&nbsp;&nbsp;typeclass&nbsp;:&nbsp;__SYSTEM.TYPE_CLASS&nbsp;;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;指向实际参数的指针
&nbsp;&nbsp;&nbsp;&nbsp;pvalue&nbsp;:&nbsp;POINTER&nbsp;TO&nbsp;BYTE;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;指针指向的数据大小
&nbsp;&nbsp;&nbsp;&nbsp;diSize&nbsp;:&nbsp;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: &quot;Helvetica Neue&quot;, 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: &quot;Helvetica Neue&quot;, 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>

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2001-2025 英威腾技术论坛 版权所有 All Rights Reserved. 粤ICP备07504406号
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表