Если еще актуально, то я обычно использую методом расчета веса Хемминга. Давно где-то нашел алгоритм. За счет малого количества операций он значительно быстрей чем суммирование в цикле.
Код:
VAR
x: DWORD;
out: INT;
END_VAR
x:=%IB1.0+%IB1.1*256+%IB1.2*512+%IB1.3*1024;
x:=DINT_TO_DWORD(DWORD_TO_DINT(x AND 16#55555555) + DWORD_TO_DINT((SHR(x,1) AND 16#55555555)));
x:=DINT_TO_DWORD(DWORD_TO_DINT(x AND 16#33333333) + DWORD_TO_DINT((SHR(x,2) AND 16#33333333)));
x:=DINT_TO_DWORD(DWORD_TO_DINT(x AND 16#0F0F0F0F) + DWORD_TO_DINT((SHR(x,4) AND 16#0F0F0F0F)));
x:=DINT_TO_DWORD(DWORD_TO_DINT(x AND 16#00FF00FF) + DWORD_TO_DINT((SHR(x,8) AND 16#00FF00FF)));
x:=DINT_TO_DWORD(DWORD_TO_DINT(x AND 16#0000FFFF) + DWORD_TO_DINT((SHR(x,16) AND 16#0000FFFF)));
out:=DWORD_TO_INT(x);
Считает надежно.