用c#从wincc读取

本文关键字:读取 wincc | 更新日期: 2023-09-27 17:54:31

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

用c#从wincc读取

通过Wincc读取PLC值:

乍一看,我建议直接通过PLC读取,要么使用OPC, TCP电报,要么使用libnodave等第三方库。它的性能和优雅的使用。

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

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

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

你的问题有点模糊。你给出的描述是一个基本的WinCC功能。从PLC读出一个值(称为标签)并在WinCC中显示它。我认为这不是问题所在。

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

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

下面是一个使用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" });

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