我有一个测试夹具,上面有许多通信/数据采集设备,作为产品线路测试的终点。
由于在工作台上使用了各种各样的传感器,并且需要在接近实时的情况下运行测试过程,所以我很难对程序进行结构化,以便以后进行更友好的修改。例如,国家仪器USB数据采集器用于控制模拟输出(load)和监视模拟输入(电流)、具有串行数据接口测量位置的数字天平、具有不同串行数据接口的空气压力表,以及通过处理自己的串行通信的专用DLL进行接口的产品。
“实时”方面的节目是我最大的绊脚点。例如,我需要时间,产品需要多长时间从0位到10,000位到十分之一秒。当它在旅行的时候,我需要增加NI DAQ的输出,当它达到6,000位时,当它到达8,000位置时,我需要把它拉低。这种控件在浏览NI的LabVIEW文档时看起来很容易,但我现在只能使用C#。所有的外部通信都是通过轮询来完成的,这就造成了很多烦人的循环。
我已经建立了一个松散的生产者消费者模型,在这个模型中,生产者线程循环读取传感器并设置输出。使用者线程执行包含定时循环的函数,这些循环轮询生产者获取当前数据,并根据需要执行移动命令。UI线程轮询两个线程,以更新指示当前测试进度的一些量规。
对于这种类型的应用程序是否有更合适的模式?
在软件(非LabVIEW)中编写与外部传感器等接口的控制回路,有什么好的资源吗?
发布于 2012-06-13 15:52:19
这是一个很好的问题,在很大程度上依赖于上下文。我的方法是描述可供您审阅的模式。以下是一个高级别的概述。
我在看“设计模式-可重用的面向对象软件的元素”一书,作者是Gamma,Helm,Johnson和Vlisside。它是为C++编写的,但在很大程度上适用于C#。
同样,这是一个高层次的概述。我确信其中一些并不适合您的实现,但是回顾它们可以让您很好地了解哪些优化是可用的。
最后,请记住,这些模式最好在设计时应用。如果您有一个相当健壮的遗留实现,那么高级别的复杂重构将是一个合理的期望。
还可以查看一下C#特定的模式。通常情况下,当原始模式超越语言的时候,它们就会出现在变形之上。它们可能本质上是相同的模式,但是有了不同的实现特定需求,它们可以更改名称。比如PubSub/观察者。
希望这能帮上忙。万事如意!纳什
发布于 2014-08-02 05:39:59
你有你所拥有的硬件。然而..。正如您可能知道的那样,Windows OS并不是为精确计时而设计的。外围控制器(在数据采集设备中)通常可以比Windows做得更好。
理想情况下,外围控制器将具有一个功能,它可以接收命令列表,并对其进行计时和执行。本质上,您将在专用控制器上运行实时线程.
分布式控制
https://softwareengineering.stackexchange.com/questions/152596
复制相似问题