遥测 /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,但发现它太不灵活,太困难,太刺激了我们的需求。

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

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

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

相关推荐

  • cvt和自动挡哪个好提升驾驶体验的最佳选择

    CVT(可变转换器)是一种由传动带及传动轮组成的无级变速器,它可以在没有传动档位的情况下,根据驾驶者的驾驶习惯,自动调整传动轮之间的转速比,从而实现无级变速。自动挡是指车辆自动变速箱,它使用液力传动来实现变速,可以自动适应车辆的行驶状态,减少司机的疲劳,提高行车的舒适性。…

    2023-06-08 07:42:19
    0 19 21
  • cv一叶扁舟和清影轩阳:漫游在一叶扁舟和清影轩阳之间

    cv一叶扁舟是一款开源的计算机视觉库,用于图像处理、计算机视觉等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。清影轩阳是一款开源的计算机视觉框架,用于图像处理、目标检测、分类等。它提供了丰富的API,可以帮助开发者快速实现各种图像处理任务,如图像分割、目标检测、图像识别等。…

    2023-08-05 07:06:20
    0 92 43
  • css设置滚动条宽度设置:This is a title

    CSS设置滚动条宽度的方法:使用CSS3的。-webkit-属性:…

    2023-06-06 10:53:01
    0 93 71
  • xl和xe汽车cvt:探索XL和XE汽车的CVT技术优势

    XL和XE汽车CVT是一种变速器,它使用液力变矩器代替传统的机械变速器,以达到更高的效率。它的工作原理是,当发动机输出功率时,液力变矩器就会将这些功率转换为液压能量,然后将能量传递到变速器的输出轴上,从而实现变速。…

    2023-04-09 00:41:04
    0 28 77
  • countif 非空:非空单元格的计数

    Countif 非空是指计算某个单元格不为空的数量。代码如下:…

    2023-04-22 15:54:15
    0 92 30
  • java double保留一位小数:How to Round a Double to One Decimal Place in

    示例示例使用类可以轻松实现java double保留一位小数的功能,具体代码如下:// 创建对象…

    2023-05-14 07:40:03
    0 96 99
  • linux如何写c语言一个完整的指南

    示例示例在Linux系统中,可以使用C语言编写源代码文件,然后使用GCC编译器来编译源代码文件,生成可执行文件。下面是一个简单的C语言代码示例:…

    2023-05-16 02:02:45
    0 50 18
  • python输入三个整数 {a}, {b}, {c}.format(a=x, b=y, c=z)

    实现实现# 示例代码a = int(input("请输入第一个整数:"))…

    2023-04-08 12:47:59
    0 67 66

发表评论

登录 后才能评论

评论列表(7条)