首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计一个必须处理多个“产品”的程序,比如在生产线上

如何设计一个必须处理多个“产品”的程序,比如在生产线上
EN

Software Engineering用户
提问于 2017-09-05 09:21:48
回答 4查看 1.4K关注 0票数 -1

在如何设计应用程序时,我遇到了一些问题。

在一条生产线上有多个车站。产品将从一个车站转移到另一个车站。每个站将对产品执行一些任务。任务应该并行执行,所以所有有产品的站点都应该同时执行它的任务。

也就是说,Product1将进入Station1并执行Task1。然后生产线是前进一个站。产品2进入Station1,Product1进入station2并执行相应的任务。每个产品将从最后/出口站的生产线上移除。新产品将“永远”面世。

这感觉就像它已经解决了,也许有一些设计模式,可以帮助我实现这一点?

目前有5个车站,但可能会更晚。

(该程序将是使用WPF的桌面应用程序)

EN

回答 4

Software Engineering用户

发布于 2017-09-05 11:44:14

我想你要找的是第三方物流。在链接文档页面上,对于像您这样的情况,将解释许多有用的模式。特别是“数据流”应该是有趣的。如果我没有弄错的话,本演练描述了这种模式,以及如何使用适合您的问题的TPL来实现它。它甚至使用装配线的类比。

给出一个非常简洁的总结:TransformBlock对象是您的站点,您可以通过为它提供一个将输入对象转换为(多个)输出对象的函数来定义要执行的任务。通过将这些TransfomBlocks链接在一起,您将得到一个类似于产品创建过程的管道。

票数 0
EN

Software Engineering用户

发布于 2017-09-05 14:06:55

如果我的理解是正确的,您基本上需要实现这样的程序:

  • 在你的程序中实现所有可能的任务(你说你能做到);
  • 在你的程序中实现一个听PLC信号的线程;这个线程永远运行,对于每个信号,它读取(i)产品信息和(ii)站点信息;然后它重定向到程序中的特定任务;
  • 如有必要,为每个电台设置多个程序实例;
  • 建议:实现一个包含所有可能任务的.NET类库,另一个项目作为您的主程序(WPF),它将调用将重定向‘请求’的侦听器线程。
票数 0
EN

Software Engineering用户

发布于 2021-08-16 09:46:45

由于您正在描述物理生产线的控制/监视,所以可能不需要使用并发编程技术。计算机比任何物理机器都快得多,所以即使是一个线程也应该足够快地更新所有站点的状态。如果有任何计算繁重的工作要做,它可以被移动到一个工作线程。

我建议将生产线建模为一个系列状态机,可能会监视硬件传感器以触发状态变化,并向物理机器发送信号以执行某些操作。每个站都可以有一组标准化的状态,比如“准备接受下一项”或“失败”,这样就可以连接不同的站点。

如果这是由硬件传感器驱动的,那么您只需有一个事件的公共队列,并有一个循环来检查每个事件是否与状态变化相关联,如果是,则触发状态更改。有点类似于UI系统的消息泵。

可以使用c#异步/等待作为编写这样的状态机的帮助,但这是不必要的。您可能还需要一些逻辑来检查站的组合是否有意义,例如,产生方格的站不应该连接到期望圆圈的站。

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

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

复制
相关文章

相似问题

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