首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动机械试验台的设计模式

自动机械试验台的设计模式
EN

Software Engineering用户
提问于 2012-06-12 18:28:39
回答 2查看 1.1K关注 0票数 5

背景

我有一个测试夹具,上面有许多通信/数据采集设备,作为产品线路测试的终点。

由于在工作台上使用了各种各样的传感器,并且需要在接近实时的情况下运行测试过程,所以我很难对程序进行结构化,以便以后进行更友好的修改。例如,国家仪器USB数据采集器用于控制模拟输出(load)和监视模拟输入(电流)、具有串行数据接口测量位置的数字天平、具有不同串行数据接口的空气压力表,以及通过处理自己的串行通信的专用DLL进行接口的产品。

硬部分

“实时”方面的节目是我最大的绊脚点。例如,我需要时间,产品需要多长时间从0位到10,000位到十分之一秒。当它在旅行的时候,我需要增加NI DAQ的输出,当它达到6,000位时,当它到达8,000位置时,我需要把它拉低。这种控件在浏览NI的LabVIEW文档时看起来很容易,但我现在只能使用C#。所有的外部通信都是通过轮询来完成的,这就造成了很多烦人的循环。

我已经建立了一个松散的生产者消费者模型,在这个模型中,生产者线程循环读取传感器并设置输出。使用者线程执行包含定时循环的函数,这些循环轮询生产者获取当前数据,并根据需要执行移动命令。UI线程轮询两个线程,以更新指示当前测试进度的一些量规。

不确定从何处启动

对于这种类型的应用程序是否有更合适的模式?

在软件(非LabVIEW)中编写与外部传感器等接口的控制回路,有什么好的资源吗?

EN

回答 2

Software Engineering用户

发布于 2012-06-13 15:52:19

这是一个很好的问题,在很大程度上依赖于上下文。我的方法是描述可供您审阅的模式。以下是一个高级别的概述。

我在看“设计模式-可重用的面向对象软件的元素”一书,作者是Gamma,Helm,Johnson和Vlisside。它是为C++编写的,但在很大程度上适用于C#。

  1. 反模式。设计模式的一个缺点是,仅仅为了这样做,就有可能应用它们。重要的是要认识到,这些模式解决了具体问题,除非存在这一问题,否则不应加以实施。这样做将是一种反模式。
  2. 正面。“为子系统中的一组接口提供统一的接口。”这对于您将所有完全不同的对象分组到一个接口中可能是有用的。这将简化您访问它们的能力,如果它们都被分组到一个名为“Singleton”的“Singleton”中,比如传感器或消费者。
  3. 辛格尔顿。保证一个对象的单个实例。这可能有助于与其他模式协作。例如,这可以作为Manager对象或代理使用。
  4. 代理。“提供代理项占位符以控制访问。”这可能有助于回顾以抽象您的连接点。
  5. 责任链,观察者,发行者订阅者。这就是解耦接口依赖关系的概念。其中之一可能有助于您之间的生产者消费者,以使您的生产者不会挂起等待消费者运行,或响应。相反,所能发生的是事件允许将两者分开。
  6. 战略。‘算法系列,封装每一个算法,并使它们可互换。’如果您有不同的行为需要动态地更改不同的状态,这可能会对您有所帮助。
  7. 爱尔兰人。这可能为您的循环积累提供一些优化。

同样,这是一个高层次的概述。我确信其中一些并不适合您的实现,但是回顾它们可以让您很好地了解哪些优化是可用的。

最后,请记住,这些模式最好在设计时应用。如果您有一个相当健壮的遗留实现,那么高级别的复杂重构将是一个合理的期望。

还可以查看一下C#特定的模式。通常情况下,当原始模式超越语言的时候,它们就会出现在变形之上。它们可能本质上是相同的模式,但是有了不同的实现特定需求,它们可以更改名称。比如PubSub/观察者。

希望这能帮上忙。万事如意!纳什

票数 1
EN

Software Engineering用户

发布于 2014-08-02 05:39:59

你有你所拥有的硬件。然而..。正如您可能知道的那样,Windows OS并不是为精确计时而设计的。外围控制器(在数据采集设备中)通常可以比Windows做得更好。

理想情况下,外围控制器将具有一个功能,它可以接收命令列表,并对其进行计时和执行。本质上,您将在专用控制器上运行实时线程.

分布式控制

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/152596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档