利用队列控制多设备的控制结构

2019-07-17 14:21发布

手上一直在开发一个包含多像硬件设备之间配合操控和设备返回数据联合处理的程序,之前所有设备操作都是基于事件触发操作,每个设备操作都是在事件结构里面完成,以至于前面板在等待数据返回值时间总是卡死,所以最后打算改变主循环结构,采用基于队列的任务触发+任务分配+设备执行结构,可是一直遇到一个奇怪的执行问题。我为此制作了一个简化版的程序结构,求问论坛里的高手怎么解决。
实在不好意思,囊中羞涩,再下只有新手的积分,能帮忙解决的,全部奉上了...

程序介绍:
程序想实现功能:
对一个系统中的各个慢速响应设备进行控制,并且保证每个设备操作的顺序和各个设备之间的响应按照主程序分发任务的时间顺序进行
由于设备的执行响应时间不一致,并且对于每一个操作需要秒级别的操作时间,为了保证前面板程序不至于卡死,故选用队列结构进行控制信息存储

1)主程序通过事件触发向控制队列压入设备名和操作代码
2)事件分发循环将主控制消息队列中的信息按照设备名进行队列分整
3)每个设备各自读取相应设备控制队列中的操作码进行操作

程序问题:
1)每次程序执行以后,即使不出发设备1或者2的操作,STOP按钮停止主程序时候,会出发设备1的控制循环和相应的错误信息(错误代码1),代码并不是队列销毁而带来的错误(错误代码1122)
2)每次正常执行设备控制以后,STOP按钮停止,总会有额外的设备1循环出发,并且错误代码也不是队列销毁的错误码1122,而是错误代码1





补充内容 (2016-6-9 00:43):
哪位高手可以指导一下我怎么更换附件...
QueueTst.png
00Tst.zip 下载积分: 积分 -1 分
37.22 KB, 下载次数: 34, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
boddmg
2019-07-17 19:57
光从这里的来看,可以把出队列的改成非阻塞的,就是把超时的处理机制加上,那么每个循环都能响应不同的东西,而不只是卡死在出队列上。

一周热门 更多>