用 C# 从 wincc 读取

问题描述 投票:0回答:4

我需要开发一个应用程序,通过 wincc 接口读取 PLC 中的一些值,我环顾四周,但我发现的例子都使用第三方软件。我需要的功能非常基本:我只需要读取一次 PLC 中的值,无需任何进一步的通信。有没有简单的方法来做到这一点?

c# plc opc
4个回答
1
投票

通过Wincc读取PLC值:

乍一看,我建议使用 OPC、TCP 电报或一些第三方库(如 libnodave)直接通过 PLC 读取。它的性能更高,使用起来更优雅。

现在回到您的问题,您需要 wincc 来为您的应用程序提供值。我会建议如下:

  1. 创建 .net 控件或全局脚本。
  2. 创建一个 wcf 服务或数据库连接接口(取决于您的应用程序)。
  3. 在 wincc 控件中连接 plc 发送值的标签,并通过 wcf 或数据库接口填充它。

我认为这种方式在不影响其 wincc 的情况下从 wincc 中获取值要干净得多。 另一方面,您也可以使用 wincc 作为 opc 服务器。


0
投票

你的问题有点含糊。 您给出的描述是基本的 WinCC 功能。从 PLC 中读出一个值(称为变量)并将其显示在 WinCC 中。我认为这不是问题。

您的意思是从 WinCC 中读出变量(内部或外部)到您自己的应用程序吗? 这可以通过 WinCC 中的 ODK 选项来完成。但这就是说,就像 Scada/DCS 中的每个开发工具包一样,不是免费提供的。

或者你想从 PLC 中读出一个在 WinCC 中也使用的值,你需要一个 S7 连接或一个开放式通讯。 S7 需要 PLC 中的连接资源和配置。 开放式通信(通过 TCP/IP 完成)需要在 PLC 中编程。


0
投票

这里是使用WinCC程序标识符的例子:

System.Type oType = System.Type.GetTypeFromProgID("WinCC-Runtime-Project");
object wincc = System.Activator.CreateInstance(oType);

//Read the name of the runtime database (the @-Prefix identifies WinCC-System-Tags)
object catalog = oType.InvokeMember("GetValue", System.Reflection.BindingFlags.InvokeMethod, null, wincc, new object[] { "@DatasourceNameRT" });

//Read the computer name
object serverName = oType.InvokeMember("GetValue", System.Reflection.BindingFlags.InvokeMethod, null, wincc, new object[] { "@ServerName" });

//Read a WinCC-Tag with the name "MyTag"
object myTag = oType.InvokeMember("GetValue", System.Reflection.BindingFlags.InvokeMethod, null, wincc, new object[] { "MyTag" });

0
投票

我觉得提问者一行代码都没有写过,c#和Ansi-C Wincc都没有。 我自己不是来自自动化工业领域,但我知道您可以直接从任何现代语言与 PLC 通信以满足您的需求。 而Wincc的目标是快速开发HMI软件。 我目前帮助学生通过Python-Snap7做一些Python图像处理与PLC的无缝通信。 c# 中的等效库是 c#-snap7 所以让Wincc靠边站吧

© www.soinside.com 2019 - 2024. All rights reserved.