根据字中位位1的情况,分区域

已锁定

6wenhua6

  • 帖子

    195
  • 精华

    0
  • 被关注

    9

论坛等级:侠士

注册时间:2016-06-23

黄金 黄金 如何晋级?

根据字中位位1的情况,分区域

365

5

2020-12-25 16:40:32

在LGF的基础上改的,把字中位1的在哪几个位置读取出来

REGION Logic

  // init counter tags

  #tempCountBitsFalse := #ZERO;

  #tempCountBitsTrue := #ZERO;

  #tempBinaryValues := #value;

  #tempBitNumber := #EmptyNumber;

  

  // iterate over input tag

  FOR #tempLoopIndex := #START_INDEX TO USINT_TO_UINT(#numberOfBits) DO

    // check if bit is true or false

    IF #tempBinaryValues.%X0 THEN

        #tempCountBitsTrue += #INCREMENT;

        #tempBitNumber[#tempCountBitsTrue] := #tempLoopIndex - 1;

    ELSE

      #tempCountBitsFalse += #INCREMENT;

    END_IF;

    

    // shift input tag one to the right

    #tempBinaryValues := SHR(IN := #tempBinaryValues, N := #SHIFT_ON_BIT_RIGHT);

  END_FOR;

  

  // set output values

  #countBitsFalse := #tempCountBitsFalse;

  #countBitsTrue := #tempCountBitsTrue;

  #TureBitNumber := #tempBitNumber;

  

  // no error handling needed

  ENO := TRUE;

END_REGION


根据上端读取位1在字的位置上作比较,把1和1之间有2个0位分界线

REGION Logic

    //初始化

    "GDB9_ALL".CountData.Area := "GDB9_ALL".CountData.EmptyArea;//注意数组要比正常多1组

    #CountMIN := 0;

    #CountMAX := 0;

    

    

    //循环范围保护

    IF "GDB9_ALL".CountData.TureCountNumber > 0 THEN

        #ReadSenCY_MAX := "GDB9_ALL".CountData.TureCountNumber;

    ELSE

        #ReadSenCY_MAX := 1;

    END_IF;

    

    //相连2个1位置差2以上,认为这是分界线

    FOR #ReadSenCY := 1 TO #ReadSenCY_MAX BY 1 DO

        //第一个为1的位数肯定是第一个区域的下限

        IF #ReadSenCY = 1 THEN

            #CountMIN += 1;

            "GDB9_ALL".CountData.Area[#CountMIN].MIN := "GDB9_ALL".CountData.TureNumber[1];

        END_IF;

        //相连2个1位置差2以上;下标小的是最大值;下标大的是最小值

        IF "GDB9_ALL".CountData.TureNumber[#ReadSenCY + 1] - "GDB9_ALL".CountData.TureNumber[#ReadSenCY] > 2 THEN

            IF #ReadSenCY < #ReadSenCY_MAX THEN

                #CountMIN += 1;

                "GDB9_ALL".CountData.Area[#CountMIN].MIN := "GDB9_ALL".CountData.TureNumber[#ReadSenCY + 1];

            END_IF;

            #CountMAX += 1;

            "GDB9_ALL".CountData.Area[#CountMAX].MAX := "GDB9_ALL".CountData.TureNumber[#ReadSenCY];

        END_IF;

    END_FOR;

    

    "GDB9_ALL".CountData.AreaNumber.MIN := #CountMIN;

    "GDB9_ALL".CountData.AreaNumber.MAX := #CountMAX;

  

END_REGION


根据字中位位1的情况,分区域 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10698条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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