搜索
bottom↓
回复: 32

Windows上位机与下位机通过串口,怎么提高通讯响应速度啊

[复制链接]

出0入0汤圆

发表于 2016-9-24 10:01:32 来自手机 | 显示全部楼层 |阅读模式
Wondows上位机与下位机需要通过通过串口进行文件传输。可是发现,在win7环境下 发送->等待应答->下一次发送,时间间隔总是稳定在20ms左右,而在win10的环境下,之间的时间间隔,只有2.5ms。
现在是同样的程序,分别在2台电脑,分别安装win7和win10的环境下测试完成。
不知道为什么会出现这种情况。后来在win10的系统中,安装win7的虚拟机,测试通讯速率,发现与物理机win7系统几乎无异。
可是这几乎10倍的差距,不知道什么原因造成的。大神们有遇到过吗?怎么编程提高win7环境下的串口响应速度?不能逼着客户换系统啊。提高电脑串口硬件中断的优先级?提高串口操作线程的优先级?还请大家,不吝赐教^_^

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2016-9-24 10:09:58 | 显示全部楼层
你可以开一个大的缓冲区存取文件,按115200波特算,每1ms大约8.6字节,每20ms会172字节,假设你设计定时发送100ms发5*172字节,那么你示波器会看到串口闲不下来。这时系统的响应对你串口影响可以忽略

出0入0汤圆

发表于 2016-9-24 10:10:56 | 显示全部楼层
没用就那样了

出0入0汤圆

发表于 2016-9-24 13:10:13 | 显示全部楼层
肯定是你哪地方没搞好,我用XP都不会这么慢,电脑上串口用的是什么

出0入0汤圆

发表于 2016-9-25 08:53:36 | 显示全部楼层
这是一个有趣的现象,有空研究一下。

出0入0汤圆

发表于 2016-9-25 09:04:42 | 显示全部楼层
楼主这个问题问的好,我昨天还为了这问题和项目经理撕逼了。由于实际项目通信20ms字符超时有时通,有时不通,导致我这么证明不是下位机导致的,他都不信,总觉得我测试的次数不够多。问题是用示波器捕获脉宽的方式,长时间一直捕获,探头稍微受到干扰得确就能抓到这样的超时信号,让我是无言以对啊。因此我也只能反向证明我的观点是对的,当然他还是不信,真想炒他鱿鱼

出0入4汤圆

发表于 2016-9-25 09:40:19 | 显示全部楼层
wins不是实时操作系统,他要求的是数据吞吐量,如果通讯响应速度要求这么高,能考虑别的方案吗?

出0入93汤圆

发表于 2016-9-25 09:47:43 | 显示全部楼层
HalenYU 发表于 2016-9-25 09:04
楼主这个问题问的好,我昨天还为了这问题和项目经理撕逼了。由于实际项目通信20ms字符超时有时通,有时不通 ...

20ms超时亏你们想的出来,跟交流电同步么。要么写驱动,要么一个劲的发送。不管什么高精度延时啥的一旦进程调度了都白搭。

出0入93汤圆

发表于 2016-9-25 09:49:57 | 显示全部楼层
怎么编程提高win7环境下的串口响应速度
最好的办法是更改通信协议,其次是写驱动,最后才是一个劲的狂发防止断流

出0入0汤圆

发表于 2016-9-25 11:14:47 | 显示全部楼层
takashiki 发表于 2016-9-25 09:47
20ms超时亏你们想的出来,跟交流电同步么。要么写驱动,要么一个劲的发送。不管什么高精度延时啥的一旦进 ...

要是你是领导就好了,领导不懂我tm就懵逼了

出0入0汤圆

发表于 2016-9-25 11:20:38 | 显示全部楼层
这十有八九是上位机软件编的不行,串口通讯我也做过很多,从WIN95、WIN98、WIN2000、XP、WIN7、WIN10一路走来,还没碰到响应这么慢的

出0入0汤圆

发表于 2016-9-25 11:23:17 | 显示全部楼层
做WINDOWS开发,程序编写质量对性能影响差距十分巨大

出0入0汤圆

发表于 2016-9-25 21:37:57 | 显示全部楼层
可能与串口的驱动芯片+驱动有关。
用过cp210x和ft232芯片,ft芯片速度要远远慢于cp210x。

出0入8汤圆

发表于 2016-9-26 00:07:49 来自手机 | 显示全部楼层
没有一个完美的。ft号称最稳定,因为他有缓冲区,还有内部控制的延迟,也就是因为这两项,他的速度比较慢。我的stm32用的ft下载,就很慢。后来调整了延迟,好多了,但是据说赶不上其他廉价的,甚至不如ch340G,这货最近又缺货。

出0入0汤圆

 楼主| 发表于 2016-9-26 09:11:35 | 显示全部楼层
modbus 发表于 2016-9-25 11:23
做WINDOWS开发,程序编写质量对性能影响差距十分巨大

为了寻找可能的原因,现在的上位机软件,已经精简到,直接开个线程,代码已经啥事儿都不干,就是读串口,读完了就应答,简易代码如下,性能分析用的是VS自带的性能分析,因为不是这台电脑,我无法贴出来:
然后应答延时是用示波器抓的,我现在知道肯定是上位机相应没有那么快,但是不知道是系统的问题,还是.net的问题,还是SerialPort这个控件的问题,但肯定不是代码的问题~O(∩_∩)O哈哈~
(对了,你比方说,我测试的Win10和Win7延时根本就不是一个级别,这点按理说,该怎么解释呢~)

void main( string[] args ){
Task tsk = new Task.Factory.StartNew( funcReadAndAns );
}

void funcReadAndAns(){
while( true ){
        while( funcPacRxed ){
                        funcPacTx(...);
                }
        }
}

出0入0汤圆

 楼主| 发表于 2016-9-26 09:23:49 | 显示全部楼层
HalenYU 发表于 2016-9-25 09:04
楼主这个问题问的好,我昨天还为了这问题和项目经理撕逼了。由于实际项目通信20ms字符超时有时通,有时不通 ...

探头受到干扰导致数据帧出错,无法解析导致超时是正常的。
可是正常通信,上位机的应答有没有20ms的响应时间,这个你没有证明啊。
不过实际,我也没有有效证明,只是通过以下两种方式:
1.通过VS的性能分析工具,看看高负荷情况下,主要是耗时都是在哪里;
2.通过示波器,查看高负荷情况下的响应情况

出0入0汤圆

发表于 2016-9-26 09:34:38 | 显示全部楼层
chxaitz 发表于 2016-9-26 09:11
为了寻找可能的原因,现在的上位机软件,已经精简到,直接开个线程,代码已经啥事儿都不干,就是读串口, ...

你先说说你电脑上的串口是电脑自带的还是USB转的,如果是USB转的,是不是用的FT232

出0入0汤圆

 楼主| 发表于 2016-9-26 09:38:27 | 显示全部楼层
lzg 发表于 2016-9-26 00:07
没有一个完美的。ft号称最稳定,因为他有缓冲区,还有内部控制的延迟,也就是因为这两项,他的速度比较慢。 ...

受教了,之前没有考虑还有芯片的问题,因为之前看了几款芯片,但是主要看的参数是速率,所以现在选的是CP2102,记得手册上写的是支持1MHz的速率,现在用的就是他的最高速率;
现在方向已经改为使用 类Xmode+滑动窗口 方式进行传输了,参考Xmode,将数据流长度设置为1024,加入滑动窗口的设计方式,即在帧前加个自增的Id,每次最多可以发两帧,如果第二帧发完,还未接到第一帧的应答,则认为通信超时;如果接到了上一帧的应答,则又可以发下一帧,不知道这种方式,会不会能改善很多。O(∩_∩)O哈哈~

出0入0汤圆

 楼主| 发表于 2016-9-26 09:39:17 | 显示全部楼层
modbus 发表于 2016-9-26 09:34
你先说说你电脑上的串口是电脑自带的还是USB转的,如果是USB转的,是不是用的FT232 ...

我用的是CP2102。O(∩_∩)O哈哈~

出0入0汤圆

发表于 2016-9-26 09:43:14 | 显示全部楼层
不同系统延时不一样很正常,跟实现方法有一定关系,我做过一款软件,某个功能用编程软件自带的实现,在XP、WIN7下打开时间都在1秒以内,但在WIN10下都快10秒了,后来改调用API实现,在这几个系统中都能在1秒以内

出0入0汤圆

发表于 2016-9-26 09:45:21 | 显示全部楼层
难道你的数据串行化发送和接收不需要时间?

出0入0汤圆

 楼主| 发表于 2016-9-26 10:01:04 | 显示全部楼层
本帖最后由 chxaitz 于 2016-9-26 10:09 编辑
mangocity 发表于 2016-9-26 09:45
难道你的数据串行化发送和接收不需要时间?


串口1MHz的速率,用示波器看的,可能我没表达清楚,现在讨论的就是从 下位机发送 应答帧,到上位机发送 下一帧,这之间的延时。
哦,可能我也理解错了你的意思,你说的串行化是不是指Json,Probuf之类的串行化操作?我之前测试过Json串行化的速率,上位机串行化其实不占啥时间的,下位机都是简单的应答帧。
而且这个的文件数据流,就是二进制码流,不需要上面那些串行化。O(∩_∩)O哈哈~

出0入0汤圆

发表于 2016-9-26 10:10:42 | 显示全部楼层
我之前做过一个测试,在 win7 64bit 平台下用 modbus 03 去读设备上的一个双字节数据,波特率9600,8N2。
计时方式是:发送开始前计时,到数据包收取完成停止计时。
系统轻载,测试时长 12H。
结果:最短的时间20毫秒出头。因为系统调度延迟造成的最长时间大概60多ms。
用最短时间来计算的话,扣除数据传输时间后几乎是没什么延时的。
1Mbps 波特率还那么慢感觉不应该。

出0入0汤圆

发表于 2016-9-26 10:11:46 | 显示全部楼层
chxaitz 发表于 2016-9-26 10:01
串口1MHz的速率,用示波器看的,可能我没表达清楚,现在讨论的就是从 下位机发送 应答帧,到上位机发送  ...

串行化指的是你的数据通过串口输出的延时。
通常9600波特率一个字节串行化到串口需要1ms的时间。

出0入0汤圆

 楼主| 发表于 2016-9-26 10:56:54 | 显示全部楼层
mangocity 发表于 2016-9-26 10:11
串行化指的是你的数据通过串口输出的延时。
通常9600波特率一个字节串行化到串口需要1ms的时间。 ...

明白了,那现在讨论的就是从下位机发送 应答帧 ,到上位机发送 数据帧,这期间 没有数据的空档时间~O(∩_∩)O哈哈~

出0入0汤圆

发表于 2016-9-26 11:37:12 | 显示全部楼层
本帖最后由 BAOJIWWWJJJWWW 于 2016-9-26 11:40 编辑

系统调度时间的问题,一版是16ms,做串口就这问题,我也碰到了。之前自己写modbus-rtu,就发现这个问题。也与你使用的串口转换器有关系,FT232的BDM时间可以调整,可以做的很快。另外系统定时器不能使用win里面的,要用多媒体定时器,最小定时是1ms,我试过,可以快的。不过win系统不实时,所以快了容易出错。USB转的串口就更不好了,可以用那种cpi扩展的串口或者计算机原生串口就没这问题。

出10入46汤圆

发表于 2016-9-26 12:07:55 | 显示全部楼层
1. 定义20ms串口超时的人, 可以拉出去斩了。  
   拍脑袋想事情的。 一般是不会定义超时这么短的,本质脱离了超时的含义。

2. 增加单包的长度,如16K,128K.....1M...........

3. 提高波特率

4. 速度要求更高,请更换物理接口

出0入0汤圆

发表于 2016-9-26 15:31:39 | 显示全部楼层
怎么提高,串口就那速度19200波特率

出0入0汤圆

发表于 2016-9-26 20:15:13 | 显示全部楼层
chxaitz 发表于 2016-9-26 09:23
探头受到干扰导致数据帧出错,无法解析导致超时是正常的。
可是正常通信,上位机的应答有没有20ms的响应 ...

今天用逻辑分析仪又搞了,通过串口监控电脑端与逻辑分析仪监控下位机,得到的数据对比,终于把问题说清楚了。很明显下位机数据很正常,上位机监控确经常报超时

出0入0汤圆

发表于 2016-9-26 20:50:43 | 显示全部楼层
不要用USB转串口,用PCI或PCIE串口卡

出0入0汤圆

 楼主| 发表于 2016-10-25 17:29:38 | 显示全部楼层
yerrmin 发表于 2016-9-26 20:50
不要用USB转串口,用PCI或PCIE串口卡

嗯,我也同意,那样,响应速度才能更高,不然只能通过大单次,大吞吐量来解决速度问题~

出0入0汤圆

发表于 2016-10-25 21:33:40 | 显示全部楼层
HalenYU 发表于 2016-9-25 09:04
楼主这个问题问的好,我昨天还为了这问题和项目经理撕逼了。由于实际项目通信20ms字符超时有时通,有时不通 ...


windows 串口事件20ms会响应,如果是文件方式打开串口这么短的时间不会响应。

出0入0汤圆

发表于 2016-10-26 10:51:39 | 显示全部楼层
我记得windows的最小定时时间是50ms,你搞20ms超时不是自己找麻烦么
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-7 15:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表