回复:如何统计寄存器中位值位1的数量

KITT

西门子1847工业学习平台

  • 帖子

    1223
  • 精华

    13
  • 被关注

    157

论坛等级:奇侠

注册时间:2013-06-15

黄金 黄金 如何晋级?

发布于 2016-05-13 20:12:06

5楼

以下生成的S7源程序我是通过STEP7做了一个FC来实现一个双字记录位的个数,你可以依照这个思路在200中也可以实现这种简单的方式取位个数。


FUNCTION "Count_Bit" : VOID
TITLE =
VERSION : 0.1


VAR_INPUT
  In_Dword : DWORD ; 
END_VAR
VAR_OUTPUT
  Out_Count : INT ; 
END_VAR
VAR_TEMP
  DWord_Bit : ARRAY  [0 .. 31 ] OF BOOL ; 
  TMP_Count : INT ; 
END_VAR
BEGIN
NETWORK
TITLE =

      L     0;
      T     #Out_Count;
      T     #TMP_Count;
      L     #In_Dword;
      T     LD     0;

      A     #DWord_Bit[0];
      JNB   W000;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W000: NOP   0;
      A     #DWord_Bit[1];
      JNB   W001;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W001: NOP   0;
      A     #DWord_Bit[2];
      JNB   W002;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W002: NOP   0;
      A     #DWord_Bit[3];
      JNB   W003;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W003: NOP   0;
      A     #DWord_Bit[4];
      JNB   W004;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W004: NOP   0;
      A     #DWord_Bit[5];
      JNB   W005;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W005: NOP   0;
      A     #DWord_Bit[6];
      JNB   W006;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W006: NOP   0;
      A     #DWord_Bit[7];
      JNB   W007;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W007: NOP   0;
      A     #DWord_Bit[8];
      JNB   W008;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W008: NOP   0;
      A     #DWord_Bit[9];
      JNB   W009;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W009: NOP   0;
      A     #DWord_Bit[10];
      JNB   W010;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W010: NOP   0;
      A     #DWord_Bit[11];
      JNB   W011;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W011: NOP   0;
      A     #DWord_Bit[12];
      JNB   W012;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W012: NOP   0;
      A     #DWord_Bit[13];
      JNB   W013;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W013: NOP   0;
      A     #DWord_Bit[14];
      JNB   W014;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W014: NOP   0;
      A     #DWord_Bit[15];
      JNB   W015;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W015: NOP   0;
      A     #DWord_Bit[16];
      JNB   W016;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W016: NOP   0;
      A     #DWord_Bit[17];
      JNB   W017;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W017: NOP   0;
      A     #DWord_Bit[18];
      JNB   W018;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W018: NOP   0;
      A     #DWord_Bit[19];
      JNB   W019;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W019: NOP   0;
      A     #DWord_Bit[20];
      JNB   W020;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W020: NOP   0;
      A     #DWord_Bit[21];
      JNB   W021;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W021: NOP   0;
      A     #DWord_Bit[22];
      JNB   W022;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W022: NOP   0;
      A     #DWord_Bit[23];
      JNB   W023;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W023: NOP   0;
      A     #DWord_Bit[24];
      JNB   W024;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W024: NOP   0;
      A     #DWord_Bit[25];
      JNB   W025;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W025: NOP   0;
      A     #DWord_Bit[26];
      JNB   W026;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W026: NOP   0;
      A     #DWord_Bit[27];
      JNB   W027;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W027: NOP   0;
      A     #DWord_Bit[28];
      JNB   W028;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W028: NOP   0;
      A     #DWord_Bit[29];
      JNB   W029;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W029: NOP   0;
      A     #DWord_Bit[30];
      JNB   W030;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W030: NOP   0;
      A     #DWord_Bit[31];
      JNB   W031;
      L     #TMP_Count;
      L     1;
      +I    ;
      T     #TMP_Count;
W031: NOP   0;

      L     #TMP_Count;
      T     #Out_Count;

      SET   ;
      SAVE  ;


END_FUNCTION


 

SIMATIC!
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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