waferhit 发表于 2016-7-17 15:20:50

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

现在想用下位机 定时发命令控制下位机,发送间隔希望做到10ms。

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

请问有经验的同学:

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

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

meirenai 发表于 2016-7-17 15:37:11

应该不会这么low吧,是不是楼主程序哪里有阻塞的地方?

tcm123 发表于 2016-7-17 15:51:38

WINDOWS不是实时系统,定时器不保证准确的有些定时器组件可能精度高点 有些是用线程封装过的精度当然更低一点跟机器配置也有关(调度速度)

zhoujustin108 发表于 2016-7-17 15:52:27

win io 的速度就要16ms左右

liangerfan 发表于 2016-7-17 16:16:37

多媒体高精度定时器

mcu5i51 发表于 2016-7-17 16:31:01

媒体定时器,通用的SETTIMER大约18HZ,50MS左右,不过和系统有关

canspider 发表于 2016-7-17 16:36:05

应用程序估计做不到
驱动可以

redroof 发表于 2016-7-17 16:59:38

canspider 发表于 2016-7-17 16:36
应用程序估计做不到
驱动可以

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

czg1411 发表于 2016-7-17 17:32:48

找找这个 timeSetEvent可以定时1MS

honami520 发表于 2016-7-17 18:58:47

开个线程,然后用延时10ms的方式做。定时器做不到的。现在CPU都是多核,完全占用一个CPU也不要紧

foxpro2005 发表于 2016-7-17 21:04:38

有个东西叫做多媒体定时器{:lol:}

laujc 发表于 2016-7-17 21:16:04

好像win系统周期是50ms,所以应该软件定时小于50ms不能保证。
既然是上位机与下位机通信,为什么不能间隔长点呢?

redroof 发表于 2016-7-17 21:26:01

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

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

graycker 发表于 2016-7-17 21:50:51

多媒体定时器没用过,但是可以下位机定时发数据,上位机线程接收就差不多了

waferhit 发表于 2016-7-17 22:09:52

graycker 发表于 2016-7-17 21:50
多媒体定时器没用过,但是可以下位机定时发数据,上位机线程接收就差不多了 ...

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

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

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

lyping1987 发表于 2016-7-17 22:20:34

用一个线程吧,然后Sleep(1)一次判断一下时间戳,还是比较准的。定时器要阻塞,是不太准的。

tdh03z 发表于 2016-7-17 22:56:48

上位机有2种比较通用的精确定时方法
1) 多媒体定时器,用过VC6和Delphi7的,10ms定时没啥问题,但精确度确实不能像单片机那么准,大多数正负1ms还是没问题的。
2)用多线程的sleep进行延时,但和多媒体定时器一样,做不到单片机那么准

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

xjtyOnly51 发表于 2016-7-18 09:45:19

楼上正解{:smile:}

jacky_yhy 发表于 2016-7-18 09:48:19

win7下系统时钟大约为15ms,.net环境下timer分辨率均大于该分辨率。

waferhit 发表于 2016-7-18 14:54:43

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

en,多谢解答,我倒不需要太精确,我只是希望在1s中内,尽量多的查询几帧数据, 常规定时器只能做到50ms,意味着我最多只能查询20帧左右,但是按照楼上的,多媒体计算器,应该能达到100帧左右,够我使用了!
页: [1]
查看完整版本: 上位机定时(10ms)发送字节到下位机的问题