分析串行通信数据接收错误类型及发生原因
- 格式:docx
- 大小:13.47 KB
- 文档页数:1
串⼝通信(232、485、422)常见问题及解决对于串⼝,理想的情况下,⼀般只要⼀上电,不需要太多的操作和配置,就可以通信上。
但是现实不会那么美好,总会出现各种各样的问题,这⾥并不对串⼝的编程作讲解,主要是从应⽤的⾓度去讲⼀讲碰到的⼀些问题。
ARM嵌⼊式,提供开发板、主板、核⼼板等ARM硬件产品和解决⽅案。
1、电脑使⽤USB转串⼝可以和设备通信上,换成屏与设备就通信不上了:①有可能电脑USB转串⼝接到设备上,使⽤的是标准串⼝功能,也就是除了RX,TX,GDN外,还使⽤了其它引脚。
⽐如像欧姆龙PLC,三菱PLC,在实际与屏的通信中,就需要接某些引脚短接的情况。
②电脑与控制器或PLC通信时,是扫描波特率参数,⾃适应的,屏通信可能参数没有设备好。
在三菱,基恩⼠等PLC,就存在变化波特率进⾏通信交互的过程。
③也有可能是接线⽅式不对。
因为有些DB9,还需要公头,母头。
如果不注意的话,也会存在把TX接到TX上,把RX接到RX上,这样需要注意的地⽅。
④在这⾥补充⼀下,有时候可能会使⽤⼀些串⼝助⼿发送测试数据与控制器通信,有些串⼝助⼿的奇偶校验是不起作⽤,这个要提醒⼀下。
2、在A家的屏可以和设备通信,换成B家的屏就通信不上了:①⾸先确认⼀下接线是否正确了,RX和TX是否兼容。
②地线是否没有接。
③除了RX,TX,GND,是否还有其它引脚需要短接的。
④通信协议是否⼀致或不完善,波特率是否⼀样。
3、以前不接地线可以通信,换个设备为什么需要接地线了:这个问题和上⼀个有类似的。
因为有些设备使⽤了隔离电源。
以前不接地可以通信,有可能是地线已经在另外⼀个环路已经共地了,实际地线已经接了,所以才可以通信。
可能换了个带隔离电源的,两个设备的地是隔离的,就需要在串⼝上把地线接起来。
这个我是⾃⾝经历过的,有个客户⽼说他的设备通信不上,后来拍个照我给我,他地线没有接,他说以前不接地线可以通信的。
于是我就给他科普了⼀下。
4、⼀个设备是232,另⼀个设备是422,没有转换设备,怎么办(232与422互转的简单⽅法);这个情况我遇到过,客户的设备是422通信的,但是我⼿上并没有422设备,只有232通信可以测试。
串行通信实验报告串行通信实验报告引言:串行通信是一种数据传输方式,通过将数据一位一位地传输,相比并行通信具有更高的传输效率和更少的硬件成本。
本实验旨在通过搭建串行通信系统,了解串行通信的原理和应用,并探究不同参数对传输效果的影响。
一、实验目的本实验旨在:1. 了解串行通信的原理和基本概念;2. 掌握串行通信的实验搭建方法;3. 分析不同参数对串行通信传输效果的影响。
二、实验原理串行通信是一种将数据一位一位地传输的通信方式。
在串行通信中,数据以二进制形式传输,每一位的传输时间相等。
常见的串行通信方式有同步串行通信和异步串行通信。
同步串行通信中,发送端和接收端的时钟信号同步,以确保数据的准确传输。
发送端将数据按照一定的帧格式发送,接收端通过时钟信号进行同步,按照相同的帧格式接收数据。
异步串行通信中,发送端和接收端的时钟信号不同步,通过起始位和停止位来标识数据的开始和结束。
发送端在每个数据帧前加上一个起始位,接收端通过检测起始位来判断数据的开始。
三、实验步骤1. 搭建串行通信系统:将发送端和接收端连接,通过串口线进行数据传输。
2. 设置串行通信参数:根据实验要求,设置波特率、数据位、停止位等参数。
3. 编写发送端程序:通过编程语言编写发送端程序,实现数据的发送。
4. 编写接收端程序:通过编程语言编写接收端程序,实现数据的接收和显示。
5. 调试和测试:进行通信测试,观察数据的传输效果,记录实验结果。
四、实验结果与分析在实验中,我们通过设置不同的串行通信参数进行测试,观察数据的传输效果。
实验结果显示,在较低的波特率下,数据传输速度较慢,但传输稳定性较高;而在较高的波特率下,数据传输速度较快,但传输稳定性较差。
此外,我们还测试了不同数据位和停止位对传输效果的影响。
结果显示,增加数据位可以提高数据的传输精度,但也会增加传输的时间和成本。
增加停止位可以增加数据的传输稳定性,但也会降低传输速度。
五、实验总结通过本次实验,我们深入了解了串行通信的原理和应用,并通过实验搭建了串行通信系统。
分析串行通信数据接收错误类型及发生原因
1间隔中断:RxDn的输入被保持为0状态的时间超过了一个帧传输的时间
2.数据帧错误,:波特率不一致,导致接收到的数据没有有效的停止位
串口数据每一次传输一个字节。
每个字节有一个特定的格式比如起始位,数据位,校验位和停止位。
帧错误的情况是收到一帧数据,但是不是期望的帧。
最常见的原因是串口和设备配置使用了不同的设置。
波特率,数据位,校验位和停止位不一致。
3.奇偶校验错误:数据传输过程中信号收到干扰产生的错误
4.溢出错误:旧的数据没有及时被读入,新的数据覆盖了旧的数据。
一般溢出错误主要是由于MCU的速度较慢造成的。
数据通信中的错误检测与纠正方法标题:数据通信中的错误检测与纠正方法引言:随着信息技术的快速发展和普及,数据通信在我们的日常生活中扮演着越来越重要的角色。
然而,由于多种原因,数据在传输过程中可能会出现错误。
为了确保数据的准确和完整性,错误检测和纠正方法变得至关重要。
本文将介绍常见的数据通信中的错误检测与纠正方法,并分步骤详细说明每种方法的原理和应用。
一、奇偶校验(Parity Check)1. 原理:奇偶校验是一种简单的错误检测方法。
通过在传输的数据中添加一个奇偶位,使得传输的数据中“1”的个数为奇数或偶数。
接收方在接收到数据后进行奇偶校验,如果奇偶位与接收到的数据中“1”的个数不一致,则认为数据传输出现错误。
2. 应用:常用于低速数据传输和简单通信协议,如串口通信和电子邮件。
二、循环冗余检验(Cyclic Redundancy Check,CRC)1. 原理:CRC是一种基于多项式除法的错误检测方法。
发送方需要选择一个生成多项式,并使用该多项式对待发送数据进行除法运算,得到余数后附加在数据后一起发送。
接收方将接收到的数据再次进行除法运算,如果余数为0,则认为数据传输正确。
2. 应用:常用于高速数据传输和网络通信,如以太网和无线通信。
三、海明码(Hamming Code)1. 原理:海明码是一种具有纠错能力的编码方式。
将待发送的数据按照一定规则进行编码,使得接收方能够检测并纠正一定数量的错误位。
海明码通过在数据中添加冗余位实现纠错功能。
2. 应用:常用于存储介质(如硬盘)和数字通信系统,如磁盘驱动器和无线传感器网络。
四、重复发送与确认应答1. 原理:重复发送与确认应答是一种简单有效的纠错方法。
发送方将数据分成多个块,并连续发送给接收方,接收方在接收到每个数据块后进行确认应答。
如果发送方未收到确认应答或者接收到错误的确认应答,将重新发送相同的数据块。
2. 应用:常用于无线通信和流媒体传输,如实时视频和音频传输。
Linux下串口编程遇到的接收数据错误及原因近日在调试串口的时候发现,另一设备向我ARM板的串口发送0x0d,我接收之后变成了0x0a,这是问题一;另外当对方向我发送一串数据,如果其中有0x11,那么我总是漏收此数,这是问题二。
由于问题莫名其妙,以为是笔记本的USB转232线缆的问题,换,问题依旧。
以为是对方设备的问题,采用串口调试助手模拟通讯设备与ARM 板通讯,问题依旧。
无奈才去查看资料,最终得以解决,现总结如下:1.串口操作需要的头文件#include stdio.h //标准输入输出定义#include stdlib.h//标准函数库定义#include unistd.h//Unix标准函数定义#include sys/types.h //数据类型定义#include sys/stat.h //参数定义#include fcntl.h //文件控制定义#include termios.h //POSIX中断控制定义#include errno.h //错误号定义2.打开串口串口位于/dev中,可作为标准文件的形式打开,其中:串口1 /dev/ttyS0串口2 /dev/ttyS1代码如下:除了使用O_RDWR标志之外,通常还会使用O_NOCTTY和O_NDELAY这两个标志。
O_NOCTTY:告诉Unix这个程序不想成为“控制终端”控制的程序,不说明这个标志的话,任何输入都会影响你的程序。
O_NDELAY:告诉Unix这个程序不关心DCD信号线状态,即其他端口是否运行,不说明这个标志的话,该程序就会在DCD信号线为低电平时停止。
3.设置波特率最基本的串口设置包括波特率、校验位和停止位设置,且串口设置主要使用termios.h头文件中定义的termios结构,如下:struct termios{tcflag_t c_iflag; //输入模式标志tcflag_t c_oflag; //输出模式标志tcflag_t c_cflag; //控制模式标志tcflag_t c_lflag; //本地模式标志cc_t c_line; //line disciplinecc_t c_cc[NCC]; //control characters}代码如下:注意tcsetattr函数中使用的标志:TCSANOW:立即执行而不等待数据发送或者接受完成。
串口收发数据不稳定的原因
串口作为计算机与外部设备之间的数据传输接口,是非常常用的一种通信方式。
但是,在使用串口进行数据收发时,我们常常会遇到数据不稳定的情况,例如数据丢失、数据错位、数据乱码等现象。
那么,造成串口数据不稳定的主要原因有哪些呢?
1. 串口波特率设置不正确
串口通信的波特率设置是非常关键的一点,波特率设置不正确会导致数据传输速度过快或过慢,从而引起数据丢失、错位等问题。
因此,在使用串口进行数据收发之前,我们要确保波特率设置正确,并且与外部设备保持一致。
2. 串口缓冲区溢出
串口在进行数据传输时,会先将数据存放在缓冲区中,待缓冲区满时才会进行数据传输。
如果外部设备不能及时处理串口发来的数据,导致缓冲区溢出,就会出现数据丢失、错位等问题。
3. 线路干扰
串口通信需要使用一根信号线进行数据传输,而信号线很容易受到外界的电磁干扰,从而导致数据传输不稳定。
因此,在使用串口进行数据收发时,我们要尽可能避免线路干扰,并使用好的信号线进行传输。
4. 串口硬件故障
串口通信的硬件设备(如串口转USB转接器、串口线等)可能会出现故障,例如连接不良、电脑 USB 接口损坏等,这些故障也会导
致串口数据传输不稳定。
综上,造成串口数据不稳定的原因可能有很多,我们需要根据具体情况进行排查和解决。
同时,在使用串口进行数据收发时,我们要注意一些细节问题,例如使用好的串口线、及时清空缓冲区等,从而提高串口数据传输的稳定性。
浅谈串口通信(232,485,422)以及常见问题,心得体会等启程自动化务实+靠谱的自动化培训服务提供商•培训项目:PLC 系统集成+运动控制+机器人+机器视觉提供专业的自动化项目实施系统集成项目服务浅谈串口通信(232,485,422)以及常见问题,心得体会等【工控圈】下面先讲一讲串口通信的一些基本概念,术语。
如果对串口通信比较熟悉的,就当复习复习,如果哪里讲错或不到位,也可以及时指出,当作一块交流交流。
这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲。
因为更多的时候,都是产品做好了,比如触摸屏需要和控制器,PLC 通信。
理想的情况下,一般只要一上电,不需要太多的操作和配置,就可以通信上。
在这里罗列了一些问题,待会对这些问题讲一讲,看是否有类似的情况,也许可以一起交流分享。
1 电脑使用USB转串口可以和设备通信上,换成屏与设备就通信不上了。
2 这A家的屏可以和设备通信,换成B家的屏就通信不上了。
3 以前不接地线可以通信,换个设备为什么需要接地线了。
4 一个设备是232,另一个设备是422,没有转换设备,怎么办。
(232与422互转的简单方法)5 用232通信没问题,用485通信没问题,使用232转485之后就通信不稳定。
6 485单独接每个设备都通信正常,多个从站接一块通信就不稳定。
7 要想实现两个屏或两个主站通过485访问modbus设备,有什么好的办法。
8 针对串口通信的弱点,在使用上应该要注意哪些地方。
当然有可能实际遇到的还不只是这些问题,可能还有一些意想不到的问题,如果你还遇到过什么奇葩奇怪的问题,也可以留言,一块交流探讨,一定会知无不言,言而无尽。
要回答和解决以上这些问题,还需要先了解一下什么是串口通信,232,485,422等。
什么是串口通信常见的串口通信一般是指异步串行通信。
这里就要说一下同步和异步的区别了。
算了,还是先讲一下串行通信的概念。
那么,与串行通信相对的是什么呢。
51单片机串口通信错误的原因时间:2013-01-15 17:43:08 来源:21ic博客作者:之前发过一篇博文《MCU-51串口通信程序》,程序挺好用的,之后一直把串口当做测试用途,像正在调试USB,用的是CH372,PC通过CH372(USB)发一个字符到单片机,单片机再通过串口回传这个字符,从而验证 CH372是否收到字符,结果出现意想不到的错误,错误还挺有规律的。
就是发16位字符0A,接收到字符用16位显示是8A;发2A,显示AA;发2B,显示AB,就是最高位(第8位)0变为1了,试验了几个都是一样。
点击看原图之前老板也是同样的问题(可见这事是多么普遍),不过当时由于不是我的事,就没管。
问了一下老板,才知道是晶振的问题,之前板子是用 11.0952MHz晶振,现在的板子是12MHz,程序中串口通信也没改预置值,直接就下载了,结果是误差太多,前面的码没事,但误差积累,最后的码0 就变成1了。
敲响警钟!经验分享:学习单片机重要的是实践,所以开发板是很重要,给大家推荐些淘宝上信誉良好并且软硬件及小零件等、售前售后服务良好的皇冠级金钻店铺给大家,在硬件购买上少走弯路。
按住Ctrl键单击即可:慧净电子单片机(一皇冠)【天津商盟】天津锐志(电子)单片机经营部(两皇冠)金沙滩工作室(5钻)深圳育松电子元件,模块,传感器,批发部:淘宝最全最平价(5皇冠)志宏电子(4钻)程序中串口初始化可是板子用的是12MHz晶振。
通过这个小程序,可以看到误差为8.5%,通常要求不出现误码的话,误差要求在4.5%以下,而对于传统的51单片机来说,最好是选择11.0592的晶振,因为这个频率,不会有误差,也就不可能误码。
做单片机的串口通信,要注意单片机所用的晶振。
检查各个轴的编码器的连接情况,检查编码器连接是否正确,检查编码器的屏蔽线是否受损。
再检查编码器和放大器上的接口是否接紧。
如果是出现串行数据错误(内装),则是模块这边没有接收到电机那边编码器的5V电压。
1.则此时可以检查一下电机的编码器是否损坏,做法是把此编码器线,接到没有报警的电机和其对应的接口上面,如果没有报警,则说明是好的。
2.编码器是好的,则怀疑是电机问题,把此编码器,接到好的电机上面,检测有无报警,如果是好的,说明是电机问题,如果没有好,则是模块上的电路问题。
串口收发数据不稳定的原因串口收发数据不稳定的原因经常会遇到,特别是在电脑与外部设备之间进行数据通信时,例如连接打印机、传感器、控制器等等。
这种情况下,由于数据通信的不稳定性,可能导致程序错误、数据丢失甚至意外的设备故障。
本文将解释串口数据通信不稳定的原因,给出一些常见的解决方案。
1. 硬件问题:串口通信依赖于电脑和外部设备的硬件连通。
许多时候,不正确的硬件接线或松动的连接器可能导致数据通信的失败。
对于串口数据通信的稳定性影响最大的就是外部设备的串口转换器质量。
CISCO路由器的串口转换器就经常出现问题,而Arduino这样的开源硬件则配有较高质量的串口转换器。
2. 配置问题:在进行数据通信时,不正确的串口配置也可能导致数据通信不稳定。
例如,串口通信的波特率与数据位数必须与外部设备匹配,否则可能出现乱码、缓慢的数据传输或数据丢失等问题。
3. 时序问题:另一个常见的问题是时序的正确性。
串口通信需要设备之间的时序协调,以便于正确的数据传输。
如果时序不正确,可能导致数据的采样时机不正确或者失去同步,从而导致数据传输失败。
这种情况下,调整外部设备或者编程端的时序是必要的。
4. 噪声问题:电磁干扰(EMI)或者串扰(crosstalk)是另一个问题。
特别是在一些复杂的嵌入式系统中,不恰当的电源设计或布线可能会导致噪声问题。
这种情况下,合理的布线和充足的电源稳压可以解决这个问题。
总之,在处理串口通信问题时,必须考虑到所有可能的机器硬件问题和设备配置问题。
正确地配置串口参数和时序,合理地规划物理布线和电源配置,可以将串口通信问题减少至最低程度。
如果出现了通信故障,数据通信调试工具可以帮助分析错误的源头,如CuteCom、Putty、RealTerm等。
当然,最好的解决方案是使用高质量的硬件和适当的配置,避免串口问题的出现。
1间隔中断:RxDn的输入被保持为0状态的时间超过了一个帧传输的时间
2.数据帧错误,:波特率不一致,导致接收到的数据没有有效的停止位
串口数据每一次传输一个字节。
每个字节有一个特定的格式比如起始位,数据位,校验位和停止位。
帧错误的情况是收到一帧数据,但是不是期望的帧。
最常见的原因是串口和设备配置使用了不同的设置。
波特率,数据位,校验位和停止位不一致。
3.奇偶校验错误:数据传输过程中信号收到干扰产生的错误
4.溢出错误:旧的数据没有及时被读入,新的数据覆盖了旧的数据。
一般溢出错误主要是由于MCU的速度较慢造成的。