我问 关于该主题的一本好书的问题.

没有得到太多回复,所以也许没有什么好书(虽然我觉得这很奇怪;我必须自己去亚马逊搜索)。

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

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

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

一些仪器会收集一些数据(或 控制某些功能)。他们 通过互联网进行通信 (以太网/wifi/GPRS/卫星) 一个数据库服务器,用于存储 测量并提供浏览器 基于数据查询手段, 制作报告等(以及可能 还允许控制遥控器 设备)。

谁能推荐一本好书 描述一种开发方法 这样的软件架构,保持 它是通用的,哪些工具,语言。使用的测试方法等?

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

这是一种非常常见的系统模式。谁可以提供建议?

有帮助吗?

解决方案

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

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

我不再在那家公司工作,但是,他们仍然专门使用我的软件,并且我以良好的条件离开了。我很乐意回答您的任何一般性问题,并帮助您指明正确的方向。

系统架构

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

  • 具有通用输入以适应不同类型的多种仪器的定制蜂窝设备 (模拟、数字、压力、电流强度、浮子等)
  • 自定义格式的 UDP/TCP 数据包由单元通过蜂窝网络 (GPRS) 发送到我们的服务器 (Windows服务器 2003 R2)。定期发送信息以进行报告,以及可在设备上或在线编程的可定制状态更改 (通过蜂窝网络发送的配置).
  • 自定义多线程 。网 使用 TCP/UDP 监听器抓取传入数据包的应用程序 (一天几十万), ,破译自定义标头,并将数据包路由到正确的数据库,而无需进一步解释 (部分客户需要自己的独立系统)
  • A 微软SQL 2005 数据库作为整个系统的大脑。数据包被解释为使用 公共运行库函数 并自动触发警报 (根据配置), 、编制报告并保存完整的历史记录
  • 一个习俗 。网 应用程序通过拨打电话、发送短信和发送电子邮件来处理警报。电话逻辑由一个处理 英特尔对话卡 使用录制的提示和文本转语音的组合通过模拟线路进行传输。
  • 3 网络平台 站点:
    • 面向客户的网站,允许他们管理其帐户/子用户、跟踪警报、配置单位和警报、图表数据、地图设备、导出报告等。
    • 允许向销售人员分发材料、跟踪单个设备、设备运行状况报告等的销售网站。
    • 内部管理站点允许创建客户帐户、配置/构建设备以及所有其他所需的管理功能。
  • 还有一个定制的内部监控系统,用于验证系统的运行状况,并在必要时向技术人员发出问题警报,因为系统需要 24/7 的正常运行时间。
  • 此外我们还创建了一个 iOS应用程序, , A 移动网站, ,以及自定义 Web 服务/客户端(应用程序编程接口)允许客户直接检索客户数据,以便他们将我们的解决方案与其现有的集成 (通常是定制的) SCADA系统。

这些是我们使用的组件并且它们有效。如果再做一次,我会改变一些事情。我会用 Windows Server 2008 R2, SQL 2008 R2, ,我会使用 Microsoft,而不是 Dialogic 卡 告诉我 使用网络电话。我也会用 银光 而不是 ASP.NET。我真的很喜欢 ASP.NET,但 Silverlight 可以提供更好的演示,并且可以根据需要在浏览器外部使用 - 这是 SCADA 操作员的常见请求。

网站都用过 第 3 方组件 这样图表和表格就不必从头开始编写。有一些 SCADA 特定组件 (主要基于Java) 在那里。然而,我们发现它们中的大多数都很粗糙、丑陋,或者过于具体,无法在我们的通用系统中使用 (还贵!定制仪表/图表包来“制作”我们自己的包更容易、更灵活).

如上所述, 系统的大脑是数据库. 。这样做是因为 Microsoft SQL 是一款非常出色、支持良好的产品,专为极端正常运行时间而设计,具有出色的备份和性能选项。我们也对 .NET CLR 集成 这使得我们的自定义 .NET 代码可以作为该流程的一部分运行。我们支持的设备有多种型号,可以配置为使用任何仪器组合,因此保持数据库的灵活性是关键。 我们使用了很多标准化!

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

我们过去曾尝试过 OPC,但发现它对于我们的需求而言太不灵活、困难且令人恼火。不过那是几年前的事了,从那以后我就没有再看过它了。

这是对你的问题的一个很长且非常笼统的回答。我无法为您提供具体的代码或详细介绍,因为该信息是该公司的财产,但我可以回答一些设计问题并向您指出我们认为有用的框架/工具。我的主要建议是 将所有内容分解为单独的组件,并在每个组件上采用黑盒模型,以便可以根据需要更换/改进各个组件. 。否则,该项目的范围可能会显得巨大。如果您还有其他问题或想了解更多信息,请告诉我,祝您好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top