技术论坛

多字节奇偶性判断方法(针对字节中1的个数)

作者 主题
版主

经验值: 25993
发帖数: 11808
精华帖: 43
主题:【探讨】多字节奇偶性判断方法(针对字节中1的个数)
精华帖精华帖星级5级 精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 2022-06-16 20:54:05

多字节的奇偶性,是指多个字节中,BIT位为1的个数的奇偶性。

字节的奇偶性,在Smart中没有直接可用的状态位,无法直接作出判断。

当然,最原始的方法,就是按位一个一个地数,这个效率显然不可接受。

先看XOR异域运算的一个特征,A、B、C均为位变量:

假如:C=A XOR B

那么,A、B两个位组合的奇偶性,与C的奇偶性相同。

因此,可以使用XOR运算,把N个字节的奇偶性,浓缩到 1个字节中。

再对1个字节的8个BIT,一个一个地数1的个数,相对来说,效率提高不少。


 
精华帖版主置评: 这才是论道
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1766326&b_id=64&s_id=0&num=17

至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 1楼 2022-06-16 23:17:00
呃…奇偶判断用异或来做算法?
我印象中字节、半字节查表是最安逸的了。
现在除了为了兼容古董通讯协议外,基本上都不用奇偶校验了。直接一帧数据检验更符合通讯事务。
 
以下网友喜欢您的帖子:

  
版主

经验值: 25993
发帖数: 11808
精华帖: 43
回复:多字节奇偶性判断方法(针对字节中1的个数)
精编帖 推荐帖


只看楼主 只看精华 只看精编 楼主 2楼 2022-06-16 23:54:30
以下是引用Zaxife在2022-06-16 23:17:00的发言 >1楼:呃…奇偶判断用异或来做算法? 我印象中字节、半字节查表是最安逸的了。 现在除了为了兼容古董通讯协议外,基本上都不用奇偶校验了。直接一帧数据检验更符合通讯事务。

异或运算,用来多字节的奇偶性浓缩到单字节中。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 3楼 2022-06-17 07:05:32

能用上的时候就会了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 12573
发帖数: 2503
精华帖: 31
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 4楼 2022-06-17 15:24:07
以下是引用yanxiao在2022-06-16 23:54:30的发言 >2楼

异或运算,用来多字节的奇偶性浓缩到单字节中。

以下是引用Zaxife在2022-06-16 23:17:00的发言 >1楼:呃…奇偶判断用异或...

引用1楼详细内容:

呃…奇偶判断用异或来做算法? 我印象中字节、半字节查表是最安逸的了。 现在除了为了兼容古董通讯协议外,基本上都不用奇偶校验了。直接一帧数据检验更符合通讯事务。

终于知道啥意思了,也就是想用更简单更快的校验码来替换Modbus的CRC计算?

这种奇偶校验容错太差了,估计都不敢用哦。

比如一个字节二进制位是 1000 0000 与 0100 0000 /  0010 0000 /  0001 0000 ......大概有2^7-1个数据都满足了奇偶校验正确,但是这个校验正确的数不是我们原来的数据啊,所以这种容错太低的校验码绝对不适合数据交换啊。

如果再把这个校验方式用到更多个数据帧上?这容错率得多烂?估计想死的心都有了啊。所以最早的时候这种校验只敢用在一个字节里面校验,现在嘛谁还敢用?



 
以下网友喜欢您的帖子:

  
至圣

经验值: 10684
发帖数: 1561
精华帖: 33
回复:多字节奇偶性判断方法(针对字节中1的个数)
精编帖 推荐帖


只看楼主 只看精华 只看精编 5楼 2022-06-17 22:09:19

若干个位的异或⊕运算结果在任意交换位的次序后运算结果仍然保持不变。

A⊕B=B⊕A=!A*B+!B*A

A⊕B⊕C=A⊕C⊕B=C⊕A⊕B=B⊕A⊕C=B⊕C⊕A=C⊕B⊕A

因此多字节的所有位奇偶性的判断可以逐个字节进行异或运算,然后对结果字节的8个位再进行异或运算,得到最终结果


工控爱好者
以下网友喜欢您的帖子:

  
至圣

经验值: 23740
发帖数: 3384
精华帖: 52
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 6楼 2022-06-18 08:18:01

厉害。 这才是论道。


不忘初心
以下网友喜欢您的帖子:

  
至圣

经验值: 10684
发帖数: 1561
精华帖: 33
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 7楼 2022-06-18 09:03:02

依稀记得有个日系的啥品牌PLC支持的一个通讯协议计算通讯帧的校验码就是对通讯数据帧逐字节进行异或运算到最后一个字节得到校验码。


工控爱好者
以下网友喜欢您的帖子:

  
版主

经验值: 25993
发帖数: 11808
精华帖: 43
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 楼主 8楼 2022-06-18 09:41:41
以下是引用winter938在2022-06-18 09:03:02的发言 >7楼

依稀记得有个日系的啥品牌PLC支持的一个通讯协议计算通讯帧的校验码就是对通讯数据帧逐字节进行异或运算到最后一个字节得到校验码。

异域运算的校验强度,与“累加和”的校验强度差不多。
在Modbus通讯中,Modbus-ASCII检验方式LRC类似这种校验。


 
以下网友喜欢您的帖子:

  
游民

经验值: 121
发帖数: 4
精华帖: 0
回复:多字节奇偶性判断方法(针对字节中1的个数)
推荐帖


只看楼主 只看精华 只看精编 9楼 2022-06-18 14:00:45

浮云游子不流连


卢君鸿志酬天阙,笔墨豪情旺子心。
以下网友喜欢您的帖子:

  
至圣

经验值: 15532
发帖数: 1735
精华帖: 0
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 10楼 2022-06-25 09:00:06

所说的高手在民间的到印证!


海纳百川,厚德务实!
以下网友喜欢您的帖子:

  
至圣

经验值: 13075
发帖数: 1081
精华帖: 8
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 11楼 2022-07-05 12:43:52

请问楼主,不知道这样的奇偶性判断在实际中有应用吗?具体是干什么的


做最好的自己!活出自我!
以下网友喜欢您的帖子:

  
版主

经验值: 25993
发帖数: 11808
精华帖: 43
回复:多字节奇偶性判断方法(针对字节中1的个数)
精华帖精华帖星级5级 推荐帖


只看楼主 只看精华 只看精编 楼主 12楼 2022-07-05 23:20:00
以下是引用ZD_JY在2022-07-05 12:43:52的发言 >11楼

请问楼主,不知道这样的奇偶性判断在实际中有应用吗?具体是干什么的

最初想法来自另一热贴:80工位开关控制同一个灯。

不讲那个贴子的真正用途。

重新假设一个控制要求:有80个工位,每个工位上有一个双位开关,扳动此开关,可以控制共同的一个灯的亮灭,任一开关变位(扳动变换状态),导致灯的状态翻转。

一个一个开关进行判断,当然是可以的,但效率显然是最低的。

把80个开关状态整理进10个字节中,每一位代表一个开关状态。

不难发现,变化其中一位,实际上会导致10个字节的奇偶性发生变化。

所以,只要检测10个字节的奇偶性,就可以控制灯的状态是否翻转。


 
以下网友喜欢您的帖子:

  
游士

经验值: 227
发帖数: 4
精华帖: 0
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 14楼 2022-09-26 10:12:13

这个整的好麻烦,如果只是为了管灯的状态,10个字节做个缓存,分别和前一周期对比,对比完MOV到缓存位置,不相等就执行一次改变灯状态的命令就完事了


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4871
发帖数: 741
精华帖: 10
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 15楼 2022-09-26 12:52:04

这个其实有现成的算法,参考 算法心得-高效算法的奥秘 一书。

-------------------------------------------------------

做个测试,没有在PLC中做,计算位串中1的个数。

如果是判断1个数的奇偶性就/2判断。




 
以下网友喜欢您的帖子:

  
奇侠

经验值: 7985
发帖数: 346
精华帖: 1
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 16楼 2022-11-29 15:43:37
以下是引用yanxiao在2022-06-16 23:54:30的发言 >2楼

异或运算,用来多字节的奇偶性浓缩到单字节中。

以下是引用Zaxife在2022-06-16 23:17:00的发言 >1楼:呃…奇偶判断用异或...

引用1楼详细内容:

呃…奇偶判断用异或来做算法? 我印象中字节、半字节查表是最安逸的了。 现在除了为了兼容古董通讯协议外,基本上都不用奇偶校验了。直接一帧数据检验更符合通讯事务。

请问这个用来求多字节1的个数对吗,如果若A=11111111,B=11111111 都为8个1,A XOR B以后=00000000,1的个数为0?不是很理解


^_^o~ 努力!
以下网友喜欢您的帖子:

  
至圣

经验值: 67543
发帖数: 14782
精华帖: 100
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 18楼 2022-11-29 16:37:32

0是不是就是说偶数个1了?这不就对了吗。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19282
发帖数: 3866
精华帖: 1
回复:多字节奇偶性判断方法(针对字节中1的个数)


只看楼主 只看精华 只看精编 19楼 2022-11-30 09:00:09

日系PLC直接一条指令搞定(1的个数),西门子还要写一大堆的程序,日系PLC表示很无奈。


弘扬中华传统美德,无私奉献为根本,助人为乐为根源。
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
多字节奇偶性判断方法(针对字节中1的个数)
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。