搜索
bottom↓
回复: 19

上位机定时(10ms)发送字节到下位机的问题

[复制链接]

出0入0汤圆

发表于 2016-7-17 15:20:50 | 显示全部楼层 |阅读模式
现在想用下位机 定时发命令控制下位机,发送间隔希望做到10ms。

现在用VC++做的上位机,发现VC的定时器精度只能做到50ms左右,就算把定时器的周期调到10ms,但是实测下来,周期还是50ms上下波动。

请问有经验的同学:

1. 用VC有没有办法准确做10ms的定时器吗?

2. 其他上位机软件,如c#也有这个问题吗?

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

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

出0入0汤圆

发表于 2016-7-17 15:37:11 | 显示全部楼层
应该不会这么low吧,是不是楼主程序哪里有阻塞的地方?

出10入61汤圆

发表于 2016-7-17 15:51:38 | 显示全部楼层
WINDOWS不是实时系统,定时器不保证准确的  有些定时器组件可能精度高点 有些是用线程封装过的精度当然更低一点  跟机器配置也有关(调度速度)

出0入0汤圆

发表于 2016-7-17 15:52:27 来自手机 | 显示全部楼层
win io 的速度就要16ms左右

出0入0汤圆

发表于 2016-7-17 16:16:37 来自手机 | 显示全部楼层
多媒体高精度定时器

出0入0汤圆

发表于 2016-7-17 16:31:01 | 显示全部楼层
媒体定时器,通用的SETTIMER大约18HZ,50MS左右,不过和系统有关

出0入8汤圆

发表于 2016-7-17 16:36:05 来自手机 | 显示全部楼层
应用程序估计做不到
驱动可以

出350入477汤圆

发表于 2016-7-17 16:59:38 来自手机 | 显示全部楼层
canspider 发表于 2016-7-17 16:36
应用程序估计做不到
驱动可以

如果这个时间要求是平均值,允许偶尔超过,那么轻轻松松都能做到。
如果要求是保证值,绝对不准超岀,那么赶紧换方案吧,windows做不到!

出0入0汤圆

发表于 2016-7-17 17:32:48 | 显示全部楼层
找找这个 timeSetEvent  可以定时1MS

出0入90汤圆

发表于 2016-7-17 18:58:47 | 显示全部楼层
开个线程,然后用延时10ms的方式做。定时器做不到的。现在CPU都是多核,完全占用一个CPU也不要紧

出0入76汤圆

发表于 2016-7-17 21:04:38 | 显示全部楼层
有个东西叫做多媒体定时器

出0入4汤圆

发表于 2016-7-17 21:16:04 | 显示全部楼层
好像win系统周期是50ms,所以应该软件定时小于50ms不能保证。
既然是上位机与下位机通信,为什么不能间隔长点呢?

出350入477汤圆

发表于 2016-7-17 21:26:01 来自手机 | 显示全部楼层
laujc 发表于 2016-7-17 21:16
好像win系统周期是50ms,所以应该软件定时小于50ms不能保证。
既然是上位机与下位机通信,为什么不能间隔长 ...

用线程自己等待或者用多媒体定时器(内部也是开了个线程)可以得到毫秒级别的精度,只是不保证100%及时而已。windows不是实时系统。

出0入0汤圆

发表于 2016-7-17 21:50:51 | 显示全部楼层
多媒体定时器没用过,但是可以下位机定时发数据,上位机线程接收就差不多了

出0入0汤圆

 楼主| 发表于 2016-7-17 22:09:52 | 显示全部楼层
graycker 发表于 2016-7-17 21:50
多媒体定时器没用过,但是可以下位机定时发数据,上位机线程接收就差不多了 ...

其实我现在是拿上位机做modbus,定时查询下位机状态!目前方案确实用下位机定时发数据!

但是下位机主动定时发数据,为了握手,我又要在上位机上做相应的应答,就破坏了上位机发,下位机答这个一致性!

所以才求教看是不是有更好的上位机定时办法!

出235入235汤圆

发表于 2016-7-17 22:20:34 | 显示全部楼层
用一个线程吧,然后Sleep(1)一次判断一下时间戳,还是比较准的。定时器要阻塞,是不太准的。

出0入0汤圆

发表于 2016-7-17 22:56:48 | 显示全部楼层
上位机有2种比较通用的精确定时方法
1) 多媒体定时器,用过VC6和Delphi7的,10ms定时没啥问题,但精确度确实不能像单片机那么准,大多数正负1ms还是没问题的。
2)用多线程的sleep进行延时,但和多媒体定时器一样,做不到单片机那么准

只要上位机程序任务不重,时间还是可以保证的,我用上位机接收300帧/秒的CAN数据,用多媒体定时器定时1s统计1秒内接收帧数,基本上就正负1帧的统计误差

出0入0汤圆

发表于 2016-7-18 09:45:19 | 显示全部楼层
楼上正解

出0入0汤圆

发表于 2016-7-18 09:48:19 | 显示全部楼层
win7下系统时钟大约为15ms,.net环境下timer分辨率均大于该分辨率。

出0入0汤圆

 楼主| 发表于 2016-7-18 14:54:43 | 显示全部楼层
tdh03z 发表于 2016-7-17 22:56
上位机有2种比较通用的精确定时方法
1) 多媒体定时器,用过VC6和Delphi7的,10ms定时没啥问题,但精确度确 ...

en,多谢解答,我倒不需要太精确,我只是希望在1s中内,尽量多的查询几帧数据, 常规定时器只能做到50ms,意味着我最多只能查询20帧左右,但是按照楼上的,多媒体计算器,应该能达到100帧左右,够我使用了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-8-25 19:23

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

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