遥测 /SCADA系统设计和编程的最佳框架或系统架构

I askeda question about a good book for this topic.

I askeda question about a good book for this topic.

它没有得到很多回复,所以也许没有任何好书(尽管我觉得很奇怪;我必须自己去搜索亚马逊)。

在没有书的情况下,也许有一个好的框架,一些好的 URL,或者只是一般的建议。

正如我在另一个问题中问的那样:

我正在看几个项目,都具有大致相同的功能。

一些仪器收集一些数据 (或控制一些功能),它们通过因特网 (以太网 / wifi / GPRS / 卫星) 与数据库服务器通信,该数据库服务器存储测量结果并提供基于浏览器的查询数据、产生报告等的手段 (并且还可能允许控制远程设备)。

任何人都可以推荐一本好书,描述开发这种软件架构的方法,保持它的通用性,使用哪些工具,语言,测试方法等?

对于“书”,请替换为“框架,一些好的 URL,或者只是一般建议”。

这是一种很常见的制度模式,谁能指教一下?

2

我已经编写了一个完整的 SCADA 系统(不包括定制仪器硬件)。该系统被设计为通用的,以允许创建新的硬件模型,仪器和数据收集-它的编写不像单个公司 / 工厂的那么多 SCADA 系统,而是在国际上用于成千上万的公司 / 工厂

我是唯一的开发人员 / 设计师,其中一名管理人员负责监督和指导项目。这种方式花费了更长的时间,但这是可行的。我们查看了已经存在的其他 SCADA 特定系统 / 框架,并决定由于我们的单元是自定义的,因此利用现有的开发框架和第三方组件从头开始编写系统会更容易,更灵活。回顾过去,这对我们来说非常有效,因为我们有时间和技能,但这通常不是最佳的业务模型。

我已经不在那家公司了,但是,他们仍然只使用我的软件,我离开时条件很好。我很乐意回答您的任何一般问题,并帮助您指出正确的方向。

系统架构

以下是系统组成的高级概述:

具有通用输入以适应不同类型(模拟、数字、压力、安培数、浮点数等)的多种仪器的定制蜂窝设备

单元通过蜂窝网络 (GPRS) 将自定义格式的 UDP / TCP 数据包发送到我们的服务器 (Windows Server2003 R2)。定期发送信息用于报告,以及可在设备或在线(通过蜂窝网络发送的配置)上编程的可自定义状态更改。

使用 TCP / UDP 的自定义多线程.NET应用程序,该应用程序抓取传入的数据包(每天几十万个),解密自定义标头并将数据包路由到正确的数据库(某些客户端需要自己的系统)

一个Microsoft SQL 2005数据库,充当整个系统的大脑。使用CLR 函数解释数据包,并自动触发警报(根据配置),编译报告并保留完整的历史记录

自定义.NET应用程序,通过拨打电话、发送 SMS 消息和发送电子邮件来处理警报。电话逻辑由英特尔对话卡通过模拟线路使用录制的提示和文本到语音转换的组合来处理。

3ASP.NET站点:

面向客户的网站,允许他们管理他们的帐户 / 子用户,跟踪警报,配置单位和警报,图表数据,地图设备,导出报告等。

允许向销售人员分发材料、跟踪单个设备、设备运行状况报告等的销售站点。

允许根据需要创建客户帐户、配置 / 构建单元以及所有其他管理功能的内部管理站点。

还有一个定制的内部监控系统,以验证系统的健康状况,并在必要时提醒技术人员问题,因为系统需要 24 / 7 的正常运行时间。

此外,我们还创建了一个iOS 应用程序、一个移动站点和一个自定义 Web 服务 / 客户端(API),以允许客户直接检索客户数据,从而允许他们将我们的解决方案与现有的(通常是自定义的)SCADA 系统集成。

这些是我们使用的组件,他们工作。再我会改变一些事情。我会使用Windows Server 2008 R2,SQL 2008 R2,而不是 Dialogic 卡,我会使用 MicrosoftTellMe使用 VoIP。我也会使用Silverlight而不是 ASP.NET 之外的常见请求。

这些站点都使用第三方组件,因此不必从头开始编写图表和表格。那里有一些 SCADA 特定的组件(主要基于 Java)。但是,我们发现它们中的大多数都是粗糙,丑陋或过于具体,无法在我们的通用系统中使用(也很昂贵!自定义仪表 / 图表包更容易,更灵活,以“使”

如前所述,系统的大脑是数据库。之所以这样做,是因为 Microsoft SQL 是一款非常出色,受支持的产品,旨在提供出色的备份和性能选项,以满足极端的正常运行时间。.NET CLR 集成也给我们留下了深刻的印象,它可以使我们的自定义.NET 代码作为该过程的一部分运行。我们支持的许多单元采用各种关键模型>,因此

真正有帮助的一件事是使用递归 CTE在值仍然是默认值时伪造数据的存在。我们这样做是为了节省数据库中的空间,但这也使我们能够在数据库中引入一个抽象层,允许查询也是灵活的。

我们过去曾搞乱过 OPC,但发现它太不灵活,太困难,太了我们的需求。

我的主要建议是将所有内容分解为单独的组件,并在每个组件上使用黑盒模型,以便在必要时可以交换 / 改进单个组件,否则项目的范围将不堪重负。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(829)
让用户以编程方式加入 discord服务器
上一篇
如何在TypeScript中为函数包装器添加类型
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(26条)