• PC软件与PLC串口通信 奇偶检验问题


    PC软件与PLC进行串口通信
    波特率:19200
    校验位:偶检验
    数据位:8
    停止位:1
     

    现象

    一,PC软件向PLC可以发送1,2,4,5,7,8,但是3,6,9发送出去后,PLC无法收到
    二,使用虚拟串口,PC软件与串口调试助手可以正常通信
     

    原因

    PC软件中,校验位按照Mark(奇偶校验位始终1)位填充。
    即,在上述的环境中,PC软件用的是奇偶校验位1发送,PLC使用偶数检验接收,所以根据奇偶检验的原理,可以解释3,6,9无法接收的现象了。
     

    奇偶检验原理

     
    奇校验:就是让原有数据序列中(包括你要加上的一位)1的个数为奇数
    1000110(0)你必须添0这样原来有3个1已经是奇数了所以你添上0之后1的个数还是奇数个。
    偶校验:就是让原有数据序列中(包括你要加上的一位)1的个数为偶数
    1000110(1)你就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了
     
    后面其中有一句开始没看明白:奇数位误码能检出,偶数位误码不能检出
    其实是这样的,假设使用奇校验发送数据1,二进制表示0000 0001
     
    发送端,计算校验位为0(数据中1的个数为奇数),加上校验位后,发送的数据是:0000 0001 0
     
    ①奇数位误码的情况
    接收端接收到的数据为:0001 0001,接收端计算校验结果为1(数据中1的个数为偶数),
    接收端查看接收到数据中校验位为0,而自己计算的校验位为1,因此可以断定接收的数据是错误的。
     
    ②偶数位不能检出的情况
     
    接收端接收到的数据为:0001 1001,接收端计算校验结果为0(数据中1的个数为奇数),
    接收端一看接收到的检验位0与自己计算出的检验结果0一致,接收端认为这个接收到的数据是正确的。
    其实错误已经发生,要发送0000 0001,接收到的却是0001 1001
     
    这就是所谓的"奇数位误码能检出,偶数位误码不能检出"问题。
     

    解释现象

    一,PC软件向PLC可以发送1,2,4,5,7,8,但是3,6,9发送出去后,PLC无法收到
    ① PC软件向PLC可以发送1,2,4,5,7,8
    以1(0000 0001)为例,校验位按照Mark(奇偶校验位始终1)位填充,PLC偶校验结果1,PLC接收
     
    ②3,6,9发送出去后,PLC无法收到
    以3(0000 0011)为例,校验位按照Mark(奇偶校验位始终1)位填充,PLC偶校验结果0,PLC无法接收
     
    二,使用虚拟串口,PC软件与串口调试助手可以正常通信
    此结论为猜测无法看到虚拟串口结果。
    虚拟串口虚拟出的串口进行串口通信时,校验位不起作用。
     
     
  • 相关阅读:
    SilverLight商业应用程序开发学习笔记(6)从服务器中获取数据之二
    C#利用WCF改进文件流传输的三种方式 子曰
    Extjs的打印解决方案 子曰
    承接一个外包开发项目后,开发流程以及如何做好。 子曰
    查看数据库中的字段所在的表中或某值所在的表和字段 子曰
    Ruby在windows下配置所遇到的问题 子曰
    Extjs显示时间兼容性问题——firefox正常显示,IE不正常出现NaNNaNNaN的解决方式 子曰
    Data Guard 三种模式解释 子曰
    extjs计算两个DateField所间隔的月份(天数) 子曰
    SQL SERVER自带调试工具SQL Server Profiler简单用法 子曰
  • 原文地址:https://www.cnblogs.com/iluzhiyong/p/5132209.html
Copyright © 2020-2023  润新知