我需要开发一个应用程序,通过 wincc 接口读取 PLC 中的一些值,我环顾四周,但我发现的例子都使用第三方软件。我需要的功能非常基本:我只需要读取一次 PLC 中的值,无需任何进一步的通信。有没有简单的方法来做到这一点?
通过Wincc读取PLC值:
乍一看,我建议使用 OPC、TCP 电报或一些第三方库(如 libnodave)直接通过 PLC 读取。它的性能更高,使用起来更优雅。
现在回到您的问题,您需要 wincc 来为您的应用程序提供值。我会建议如下:
我认为这种方式在不影响其 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的目标是快速开发HMI软件。 我目前帮助学生通过Python-Snap7做一些Python图像处理与PLC的无缝通信。 c# 中的等效库是 c#-snap7 所以让Wincc靠边站吧