回复:【实用FC系列】之一,数字转换为字符串

莎利文

西门子1847工业学习平台

  • 帖子

    142
  • 精华

    7
  • 被关注

    34

论坛等级:侠圣

注册时间:2005-10-24

白金 白金 如何晋级?

发布于 2025-09-29 14:30:04

5楼

展开查看
以下是引用'Razor在2025-09-28 23:00:29的发言 >4楼

坦率地讲,楼主的这个FC写得还有改善空间。

首先可以自行了解一下什么是子程序/函数的“逻辑内聚性”,官方的VAL_STRG指令就挺好用的。

其次,保留原代码风格的话,也是可以改进一下以下代码切片:

//下方指令的IN完全可以使用公共tempIN代替,包括此整条指令都可以公用化

VAL_STRG(IN := #Value_UInt,

                     SIZE := #Size,

                     PREC := 0,

                     FORMAT := W#16#0000,

                     P := 1,

                     OUT => #tempStr);

再次,使用CASE,难免会有部分代码是不会执行的“死代码”,在效率上有影响,另外variant的使用有副作用的。

胡言乱语,仅供参考。


程序没有问题。功能主要是将接口区取到的 variant类型的数据,

      S 1.判断一下当前实际类型(INT/WORD/REAL/DINT/LREAL...等等)中的一个,

      S 2.分别进行下一步转化处理(使用case语句)。

用variant是为了外部接口数据的多种类的覆盖,随便一个类型的数字(程序中好像11种)都可以被处理。

建议:case的最后最好有默认项,即不是这11中数据,就按出错处理。(将

  IF ENO = FALSE THEN

        #FaultCode := 02; //str too short OR Size too small

        这段改成默认项,不要使用ENO判断)

楼上说的问题不存在,VAL_STRG(IN := #Value_UInt,。。。 中的IN,在程序接口调用中,估计就是使用的TEMP区。虽然无法看到源程序,但是这么做是常规行为。


人情到时文章老,书读深处意气平。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

谈天说地

共有13245条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。