问题标签 [wonderware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
4102 浏览

python - 长时间运行过程中的 SQLAlchemy 会话管理

设想:

  • 基于 .NET 的应用服务器(Wonderware IAS/System Platform)托管与工厂车间的各种设备通信的自动化对象。
  • CPython 托管在此应用程序服务器中(使用Python for .NET)。
  • 自动化对象具有内置的脚本功能(使用自定义的、基于 .NET 的语言)。这些脚本调用 Python 函数。

Python 函数是跟踪工厂车间工作进度的系统的一部分。系统的目的是沿着流程跟踪生产的小部件,确保小部件以正确的顺序通过流程,并检查在流程中是否满足某些条件。小部件生产历史和小部件状态存储在关系数据库中,这就是 SQLAlchemy 发挥作用的地方。

例如,当一个小部件通过扫描仪时,自动化软件会触发以下脚本(以应用服务器的自定义脚本语言编写):

该脚本调用WidgetScannedpython函数:

我的问题是:在这种情况下如何最好地管理 SQLAlchemy 会话?应用程序服务器是一个长时间运行的进程,通常在重新启动之间运行数月。应用程序服务器是单线程的。

目前,我通过以下方式进行操作:

我将装饰器应用于我使应用程序服务器可用的功能:

问题:上面的装饰器是否适合处理长时间运行的会话?我应该打电话session.remove()吗?

SQLAlchemy 会话对象是一个作用域会话:

我想将会话管理排除在基本功能之外。有两个原因:

  1. 还有另一类函数,序列函数。序列函数调用几个基本函数。一个序列函数应该等于一个数据库事务。
  2. 我需要能够使用其他环境中的库。a) 从 TurboGears Web 应用程序。在这种情况下,会话管理由 TurboGears 完成。b) 从 IPython 外壳。在这种情况下,提交/回滚将是明确的。

(对于这个冗长的问题,我真的很抱歉。但我觉得我需要解释这个场景。也许没有必要?)

0 投票
2 回答
2639 浏览

user-interface - 在 Wonderware 中使用 FileReadFields

考虑到我在这里看到的 Wonderware 问题很少,我想这是一个长镜头,但无论如何......

Wonderware 中的 FileReadFields 函数应该将 CSV 文件解析为内存标签。当东西在 Wonderware 中不起作用时,没有调试消息(这不是我选择的 HMI 软件,这是肯定的),所以我不知道为什么这不起作用:

一切都正确,文件未在使用中。我不知道如何使它工作。

0 投票
1 回答
2773 浏览

historian - 目前有哪些历史数据库可用?

我有一个与历史数据库有关的问题。这是我们的要求。我们需要一个能够以平均每秒 1000 次更新的速率从设备收集数据的历史数据库。每个历史数据库都会有一个设备。鉴于此要求,哪个历史数据库最适合我的要求?我看过很多选项,包括 OSISoft 的 PI System、Wonderware historian、canary 实验室的 Canary logger、GE proficy、Iconic 的 hyperhistorian 等等。这个链接帮助了我: Historian Comparison

但我遇到的最大问题是这些历史学家是高度可扩展的数据库,这意味着它可以收集整个工厂的数据。因此,将其用于具有 500 个数据点的设备可能会过度杀伤且成本高昂。

我想知道你们是否可以帮助我列出适合我需要的历史数据库。

0 投票
2 回答
1398 浏览

sql - SQL在其他列的状态定义的范围内查找列的最大值

在下面的数据中,Event1 代表一个制造周期的结束。Event2 发生在一定百分比的周期内。我想知道是否可以在该周期内拉出循环时间结束(当 Event1 返回 0 时)和 Event2 的最大值(0 或 1)。这两个值都是二进制的。

我正在使用 WonderWare 历史数据库,因此查询中有一些独特的选项。以下是我用来查找循环时间结束的方法。

有没有办法使用此查询的结果来生成附加查询的 DateTime 限制?

0 投票
1 回答
2113 浏览

javascript - 通过 Javascript 控制 ActiveX 控件

我正在尝试通过 ActiveX 使用 WonderWare 的一些软件。我已经让对象出现,但我想向它传递一些参数并消除每次都必须设置对象。ActiveX 和.NET 控件有两个版本。我根本没有让 .NET 控件工作,但我可以得到 ActiveX 一个 / 只是没有参数。

以下是手册中的说明:

aaHistClientTrend 控件允许您从 Wonderware InTouch HMI 软件或 .NET 容器(如 Visual Basic .NET 或 Internet Explorer)中运行 Wonderware Historian Client Trend 程序(或功能子集)。

我拥有的 HTML 代码:

我尝试通过以下方式传递参数:

它使 Internet Explorer 崩溃。

编辑:有什么想法吗?

0 投票
2 回答
685 浏览

c# - 在 Wonderware Application Server 中将可为空的类型分配给导入的 .NET 类

我在 Wonderware ArchestrA IDE (2012 R2) 中为可空类型分配值时遇到问题。

我导入的 .NET 类如下所示:

然后我使用 Import -> Script Function Library 将其导入 Galaxy。

然后,我的 ArchestrA 脚本实际上由以下内容组成:

脚本验证,但分配给MyNullableInt会导致在管理控制台中记录脚本错误:

ProdCapability_001.GetMESWOData:{0896E675-F7D7-4F77-9FD2-20477058E072}:JIT 编译器遇到内部限制。

.NET 4.5 安装在服务器上。Wonderware Application Server 中导入的 .NET 类可以不使用 Nullable 类型吗?还是我错过了什么?

0 投票
0 回答
908 浏览

c# - ArchestrA 对象工具包:将数据从配置时间传递到编辑器

我是使用 c# 编程的新手,我正在为 Wonderware 的 ArchestrA IDE 创建一个应用程序对象。

我想制作一个带有复选框列表的标签页,该列表是根据 configtime 中的对象列表创建的,但我不知道如何将此列表从 configtime 传递给编辑器。

这是代码的摘录:

配置时间中的代码:

编辑器中的代码:

希望任何人都可以帮助我。先感谢您!

0 投票
1 回答
396 浏览

distributed - Wonderware Archestra 分布式应用程序

我正在使用 System Platform 并部署 InTouch 应用程序。我尝试制作分布式应用程序。有一个带有 InTouch 应用程序的服务器和一个必须显示 InTouch 应用程序的计算机工作站。如何在 System Platform 中配置分布式应用程序?

0 投票
1 回答
678 浏览

sql-server-2008 - Wonderware Historian Ver 10:将数据从旧标记名传输到新标记名

是否可以将旧的历史数据从对象/属性标记名转移到新的对象/属性标记名?

我的客户使用 Archestra 2009 来测量各种压力和温度。他们出于审查和安全原因对数据进行历史记录。此数据已存储并可通过 MS SQL Server 2008 R2 查看。

几年前,我开发了一份阀门统计报告,它将读取历史阀门状态数据。此报表是在 Visual Studio 2008 上创建的,并引用一个存储过程来检索数据并构建报表。该过程是,如果吸入阀从关闭状态触发到打开状态,那么它将检索一组特定的压力、温度和气流读数。

让我们调用其中一个 SuctionPressure101.SuctPressReading。SuctionPressure101 是 Archestra 中的对象,而 SuctPressReading 是对象中的一个模拟属性。当您参考历史记录并查找 SuctionPressure101.SuctPressReading 时,您将从其创建的历史时刻到当前时间之间的任何时间范围内检索数据。

客户升级了他们的一些程序,并将名称从 SuctionPressure101.SuctPressReading 改为 SuctionPressure101.PV。SuctionPressure101.PV 现在已被历史记录,但这是两难的选择。

该报告正在查看旧标签,因此通过存储过程返回空白或 NULL,因为如果在更改后的任何时间查看它,它不再存在。我可以轻松更新存储过程和相关表以引用新标记名,但代价是客户端将不再能够引用旧标记名以进行记录。我也可以在报告中同时存在两者,但旧的或新的标记名将为空,而另一个将显示数据。这可能是解决方案,但我想知道这条路线是否存在:

是否可以将 SuctionPressure101.SuctPressReading 中的旧数据传输或“复制粘贴”到 SuctionPressure101.PV 中,以便它可以保存新旧数据,从而使报告看起来更清晰和无缝?

这样,SuctionPressure101.PV 可以显示来自 SuctionPressure101.SuctPressReading 的数据及其历史数据。

0 投票
3 回答
1495 浏览

sql-server - 简单的 SQL - 在 openquery 中使用格式

我有以下查询,在 Wonderware(工业 HMI)Historian 应用程序中使用 MS SQL Server。以“ww”开头的关键字是 Wonderware 特有的,wwResolution 每 24 小时获取一次结果:

SET QUOTED_IDENTIFIER OFF

我想尝试格式化查询,所以我这样做:

format([BarRoom_GASMETER.ACC],'###,###,###,###,###.##') as 'Bar Room'

但我得到“发生错误”。在这种情况下我应该如何使用格式有什么建议吗?提前感谢您的答案。添加快照,您必须将其保存在本地才能阅读:在此处输入图像描述

我认为这与处理“引用标识符”的方式有关。