串口通信丢包原因 | 网口丢包率标准
1. 串口丢包率正常范围
MTU,最大传输单元(Maximum Transmission Unit,MTU)是指一种通信协议的某一层上面所能通过的最大数据报大百小(以字节为单位)。
最大传输单元这个参数通常与通信接口有关(网络接度口卡、串口等)。大部分网络设备的MTU都是1500。如果本机的MTU比网关的MTU大,大的数知据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包道率,降低网络速度。
把本机的MTU设成比网关的MTU小或相同,就可以减少丢包。
2. 串口丢包率测试
hal库串口接收一次后不再接收。在正常情况下在没有写数据到Flash中去的时候所有串口数据都能正常接收,没有数据丢包现象,但是当执行一次写入操作就会导致串口数据丢失,导致接收ORE错误或帧错误等。
3. 串口通信丢包原因
485串行丢包有很多原因,主要得看你的光线线路环境,没有环境,怎么好分析你的丢包率原因,不过总的来说,丢包率造成的原因可以从以下问题下找原因:
1、交换机及端口更换否
2、机房环境温度如何
3、设备温度如何
4、是否有ups,市电电压稳定否
5、所有设备工作接地良好否(检查交流排插,更换正规电脑用排插或分开使用)
6、检查光端机尾纤,测试收光功率。(用光功率计即可)
7、检查协议转换器到路由器v.35线,如无问题,一端掉电拔插v.35线端口
8、检查2m信号线及头子
9、检查防火墙
10、检查局域网是否感染局域网病毒
至于测试设备和线路的话,你可以采用专用的光线线路测试仪,如ixia测试仪,smart bits,test center等(以上是测试线路是否丢包的),你可以采用一节一节的线路排除法进行测试。
4. 网口丢包率标准
解决方法:
1、使用两台PC连接路由器的两个网口,PC之间互ping 看是否通。(二层口)
2、打环测试
清空接口统计信息
<H3C>reset counters interface
将接口自环
[H3C-Ethernet0/7]loopback internal
过5分钟后,收集如下信息
[H3C]display interface Ethernet 0/7
3、ping测试
清空接口统计
<H3C>res co int
<H3C>res ip s
然后用PC建立DSIC卡接口,ping vlan虚接口地址,同时在设备上收集如下信息
debug phy all int e 0/7
debug ip icmp
debug ip pa acl 3000 (需要增加ACL规则)
acl nu 3000
ru pe ip so PC-IP X.X.X.X de VLAN-IP X.X.X.X
ru pe ip so VLAN-IP x.x.x.x de PC-IP X.X.X.X
ping100个包,完事以后,收集如下信息
dis ip int vlan 0/7
dis int e 0/7
dis diag
5. 串口丢包率正常范围是多少
您说的应该是Modbus RTU协议。
可以有下列方法: 提高串口的波特率。尽量减少数据包的个数。例如,一个设备尽量用一个数据包。减少请求命令的时间间隔。减少返回数据的等待时间(可能会导致数据丢包)。
6. 接口丢包率
1、物理线路故障
如果是物理线路故障所造成网络丢包现象,则说明故障是由线路供应商提供的线路引起的,需要与线路供应商联系尽快解决问题。联系你的服务商来解决网络丢包很严重的情况。
2、设备故障
设备方面主要包括软件设置不当、网络设备接口及光纤收发器故障造成的。这种情况会导致交换机端口处于死机状态。那么可以将你的.光纤模块更换掉,换一条新的模块替换掉。
3、路由错误
网络中的路由器的路径错误也是会导致数据包不能正常传输到主机数据库上这种情况属于正常状况,它所丢失的数据也是很小的。所以用户可以忽略这些数据丢包,而且这也是避免不了的。
4、网络被堵塞、拥堵
当网络不给力的时候,在通过网络传输数据,就会将网络丢包更多,一般是路由器被占用大量资源造成的
7. 串口占用问题
是串口写了程序吗?把PLC到 停止 模式,就行了
8. 串口丢包受什么影响
串口丢数据概率高。
串口接收端丢包严重时,如果不是因为明显错误导致,一般都是由于数据传输速度快,主控处理不过来造成的,因此想办法降低传输速度,就可以降低串口数据丢失,方法如下:
(1)波特率: 最直接的方法就是降低波特率,我做过一个小实验,用帧序号来判断丢包情况,当丢包时亮起一盏灯,波特率越大,灯闪得频率越高;
(2)发送间隔: 如果条件允许,可以将发送端的发送频率降低,采用定时发送的方式,每间隔一段时间发送;
(3)上拉电阻: 根据网上有些文章提到的方法,还可以在串口接收端增加上拉电阻,有时候即使发送端没有发出数据,接收端也会误接到一些数据,频繁进入中断也会降低单片机处理效率,在电路上增加上拉电阻的目的就在于降低误接的概率,提高单片机的处理效率,该方法我并没有亲自试过,但是加上上拉电阻效果肯定是好于不加的;
(4) 消息队列: 一般的串口中断接收,用一个全局变量数据来接收是完全没问题的,就像上文中的程序,用一个状态量来控制中断接收,当Usart1_State为8时,表示接收到了一个完整的数据包,主程序此时开始做出相应的处理,处理完之后把状态量Usart1_State 清零,中断可以继续接收。但是当接收数据量较大,较快时,会出现一个问题: 在主程序从全局变量数组里获取协议时,还没来得及处理完,发送端已经发来了数据,此时就有可能漏掉几个包,导致数据丢包。