想法:
1.想用自带的OnTimer定时器,感觉这个会比较慢,读取数据是要延迟。
2.目前想采用多媒体定时器,精度1ms,应该就不会出现跳帧现象。
这种项目可以不用多线程来完成吗?没有做过多线程的程序。一个线程去读取传感器数据,一个线程来根据数据来开关电磁阀。
高精度多媒体定时器不知道能不能实现这样的功能呢?
14 个解决方案
#1
顶上去看看
#2
开个线程不停的读就行了,发现状态改变就开关阀门
#3
哦,遇到这种问题,必须还得采用多线程才行吧。一个线程不停的读取,另外一个线程开关阀门。
#4
实时性要求高的场合 建议使用硬件来做,
进程 线程都有会被阻塞的危险
进程 线程都有会被阻塞的危险
#5
哦,好的,不过目前硬件只能达到这种程度,看样子只有用多线程来做了,应该2个线程就足够了吧
#6
开线程是比较理想的办法!
#7
如果处理数据的过程耗时,再高精度的定时器也没用,多线程也解决不了问题
#8
行,我打算用多线程来做~我就是一个线程普通的读取,不改变数据。另外一个线程做开关阀门。
#9
我数据不用处理,一个线程只不停的读取数据。另外一个线程根据读到数据来开关阀门。
#10
你开关阀门的操作耗时长么?
如果时间时间很短可以忽略不计的话感觉就开一个线程就够了。
线程里不断读取数据,读到后马上就去操作,然后返回继续读。
不然2个线程交互可能有点麻烦吧
如果时间时间很短可以忽略不计的话感觉就开一个线程就够了。
线程里不断读取数据,读到后马上就去操作,然后返回继续读。
不然2个线程交互可能有点麻烦吧
#11
谢谢你的建议,我是这样做的,你看看
1.先点按钮,按钮里先发命令(3条命令),很快的,这样就开了3个阀门。
2.在OnTimer里实读取数据
if(a>2)
{关掉一个或2个阀门}
3.到达一定的数值后,关闭剩下的阀门
最后这个按钮工作完成。
#12
工控软件一般都用多线程来弄的
我一般专门用一个线程来监测传感器(数字输入)的变化,监测到跳变后,立即触发另外一个阀门开关执行的线程(该线程启动后一直处于等待状态,WaitforSignal(eventExecute,INFINIT))
我一般专门用一个线程来监测传感器(数字输入)的变化,监测到跳变后,立即触发另外一个阀门开关执行的线程(该线程启动后一直处于等待状态,WaitforSignal(eventExecute,INFINIT))
#13
谢谢你的好建议,这种方案我也想想看。
目前用onTimer到时可以完成,精度不高,得换多媒体定时器
#14
用OnTimer是肯定不行的,因为WM_TIMER的优先级很低,肯定会出现阻塞,可以采用多媒体时钟定时器循环检测,不会发生阻塞,可以用在工业生产场合,精度为1ms。
#1
顶上去看看
#2
开个线程不停的读就行了,发现状态改变就开关阀门
#3
哦,遇到这种问题,必须还得采用多线程才行吧。一个线程不停的读取,另外一个线程开关阀门。
#4
实时性要求高的场合 建议使用硬件来做,
进程 线程都有会被阻塞的危险
进程 线程都有会被阻塞的危险
#5
哦,好的,不过目前硬件只能达到这种程度,看样子只有用多线程来做了,应该2个线程就足够了吧
#6
开线程是比较理想的办法!
#7
如果处理数据的过程耗时,再高精度的定时器也没用,多线程也解决不了问题
#8
行,我打算用多线程来做~我就是一个线程普通的读取,不改变数据。另外一个线程做开关阀门。
#9
我数据不用处理,一个线程只不停的读取数据。另外一个线程根据读到数据来开关阀门。
#10
你开关阀门的操作耗时长么?
如果时间时间很短可以忽略不计的话感觉就开一个线程就够了。
线程里不断读取数据,读到后马上就去操作,然后返回继续读。
不然2个线程交互可能有点麻烦吧
如果时间时间很短可以忽略不计的话感觉就开一个线程就够了。
线程里不断读取数据,读到后马上就去操作,然后返回继续读。
不然2个线程交互可能有点麻烦吧
#11
谢谢你的建议,我是这样做的,你看看
1.先点按钮,按钮里先发命令(3条命令),很快的,这样就开了3个阀门。
2.在OnTimer里实读取数据
if(a>2)
{关掉一个或2个阀门}
3.到达一定的数值后,关闭剩下的阀门
最后这个按钮工作完成。
#12
工控软件一般都用多线程来弄的
我一般专门用一个线程来监测传感器(数字输入)的变化,监测到跳变后,立即触发另外一个阀门开关执行的线程(该线程启动后一直处于等待状态,WaitforSignal(eventExecute,INFINIT))
我一般专门用一个线程来监测传感器(数字输入)的变化,监测到跳变后,立即触发另外一个阀门开关执行的线程(该线程启动后一直处于等待状态,WaitforSignal(eventExecute,INFINIT))
#13
谢谢你的好建议,这种方案我也想想看。
目前用onTimer到时可以完成,精度不高,得换多媒体定时器
#14
用OnTimer是肯定不行的,因为WM_TIMER的优先级很低,肯定会出现阻塞,可以采用多媒体时钟定时器循环检测,不会发生阻塞,可以用在工业生产场合,精度为1ms。