前几天看了几位的热烈讨论,提到一个场景 80个开关控制一盏灯,这让我有了一点想法。
归纳总结 为以下问题:
Q:如何求出一个8位Bool数组中True的个数?
一般的解法是:
FOR i:=0 TO 7:
IF XXXXX……
但这样,PLC处理这段代码时需要遍历整个数组,循环次数等于数组长度。
最近学习了一个新的算法,分享给大家,希望各位大佬提出宝贵意见。
准备好的 长度为8的BOOL数组 用于模拟开关的状态
算法块的接口
代码部分
运算的结果
运算的结果经过测试是完全正确的,这个算法的名字叫Hamming Weight
Gather指令最长可以处理64bit,所以 如果真的是80个开关的场景,需要将80 拆分为 64+16的组合
用这个算法的好处是 PLC不需要完全遍历整个数组就可以得出正确的结果,在某些条件下 可以节省部分循环时间。
整个项目压缩文件
ArithmeticGroup.zip