回复:【SCL编程案例】SWAP指令优化版

Zane

版主 西门子1847工业学习平台

  • 帖子

    21062
  • 精华

    399
  • 被关注

    1487

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2025-06-08 13:51:59

3楼

DWord:

            //根据模式决定交换顺序:FALSE:1234→4321;TRUE:1234→3412

            //其他方式与上述一致

            IF NOT #Mode THEN

                VariantGet(SRC := #In,

                           DST => #tmpInDWord);

                 #tmpOutDWord.%B0 := #tmpInDWord.%B3;

                #tmpOutDWord.%B1 := #tmpInDWord.%B2;

                  #tmpOutDWord.%B2 := #tmpInDWord.%B1;

                #tmpOutDWord.%B3 := #tmpInDWord.%B0;

                VariantPut(SRC := #tmpOutDWord,

                           DST := #Out);

            ELSE

                VariantGet(SRC := #In,

                           DST => #tmpInDWord);

                #tmpOutDWord.%B0 := #tmpInDWord.%B2;

                #tmpOutDWord.%B1 := #tmpInDWord.%B3;

                #tmpOutDWord.%B2 := #tmpInDWord.%B0;

                #tmpOutDWord.%B3 := #tmpInDWord.%B1;

                VariantPut(SRC := #tmpOutDWord,

                           DST := #Out);

            END_IF;


上面这段程序,应该是先取数,然后分模式转序,同样输出也是,而不是同样的程序重复编写了两遍,虽然只是执行了一遍。


要有提取公因式的概念


 VariantGet(SRC := #In,

                           DST => #tmpInDWord);

            IF  #Mode THEN

                #tmpOutDWord.%W0  :=  SWAP(#tmpInDWord.%W0);

                #tmpOutDWord.%W1  :=  SWAP(#tmpInDWord.%W1);

             ELSE

               #tmpOutDWord  :=  #tmpInDWord;

             END_IF;

                #tmpOutDWord := SWAP ( #tmpOutDWord);

  VariantPut(SRC := #tmpOutDWord,

                           DST := #Out);


Zane 注册自动化系统工程师 Always save before download
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15118条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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