1

我需要编写一个简单的 c# 应用程序,通过 OPC 与 Siemens S7 进行通信。它只需要查询单个输入并设置单个输出。

我需要做什么?我需要来自 OPCFoundation 的 Xi 之类的东西吗?

4

9 回答 9

4

作为更通用的 OPC 解决方案,可能值得一看http://www.codeproject.com/KB/COM/opcdotnet.aspx - 它是一个免费的 OPC DLL,包含完整的源代码。虽然它非常基本,但代码就在那里,因此您可以在需要时轻松更新它,但从您的需求来看,它可能是理想的。

于 2011-02-25T10:35:53.050 回答
4

您可能会查看 www.quickopc.com,它提供了 .NET 和 OPC 服务器之间的完美包装。www.opcfoundation.com 上还有很多关于 OPC 服务器的信息,您自己已经找到了。

如果您不使用 QuickOPC 等库,则必须创建自己的类来将二进制数据转换为可读的 .NET 代码(这本身就是一项任务)。这是完全可行的,主要缺点是每个设备/制造商都有自己的协议,这意味着您最终可以为每个唯一设备使用一个包装器。

于 2011-04-08T07:00:35.627 回答
4

听起来您可能已经拥有适用于 Siemens S7 的 OPC Server。Kepware、Simatic Net 和许多其他公司都支持 OPC UA。

您可以使用这些免费工具在 C# 中构建一个简单的 HMI 应用程序:

  1. Microsoft Visual Studio Express 2013 for Windows Desktop 可从以下网址获得:http: //www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop

  2. 本站最新出处:http: //web.archive.org/web/20140219181837/http ://opcuaservicesforwpf.codeplex.com/

使用此套件,您可以: 直接从 Visual Studio IDE 浏览 OPC UA 服务器。拖放变量节点以创建数据订阅。使用绑定根据订阅的数据值对 UI 控件的属性进行动画处理。

查看示例应用程序“工作站”。

于 2014-02-26T18:08:45.117 回答
2

Siemens 网站上的示例文档和源代码对您很有用。看看他们:

于 2011-02-24T07:43:35.403 回答
1

使用任何中间 dll,例如 opcdaauto.dll、clientAce、MXIO.NET。

使用 C# 开始编码。C# 提供了与 OPC Server 通信的灵活性。

西门子使用 C# 的示例:在 App.config 中:

    Tag1 value="SERVER:\DiagnosticsSummary\CumulatedSubscriptionCount"
    Tag2 value="SERVER:\Capabilities\MinSupportedUpdateRate"
    ServerId value="opcda://localhost/OPC.SimaticNET.1/{B6EACB30-42D5-11D0-9517-0020AFAA4B3C}"/>

--享受编码--参考:http ://www.revanayya.blogspot.com

于 2014-02-10T11:59:00.177 回答
1

另一种可能性是使用 Siemens SAPI-S7 接口(这是本机 Siemens 协议,也被 OPC 使用)。SoftwareOption GmbH 有一个带有 C# 示例的 S7 .NET 编程接口。您可以下载包含 C# 演示程序的源代码。请参见http://www.softwareoption.de/siemens-produkte_e.htm

于 2011-08-05T13:34:49.190 回答
1

我现在正在经历这个过程,我发现他非常有用:http ://www.opcti.com/Download-OPC-Xi-source-code.aspx

于 2013-07-02T07:07:42.343 回答
1

只是用替代解决方案填写列表:如果您只想从 Siemens S7 读取/写入一些数据/输入/输出/标记,则不必使用 OPC。多年来,我一直在使用libnodave,没有任何问题。只要您在 plc 的硬件配置中启用 put/get 访问并访问“未优化”数据块,就可以正常工作。Libnodave 声明它适用于 S7-200,300,400。但我们也将它与 1200 和 1500 一起使用。网上的几个来源,例如http://libnodave.sourceforge.net/

于 2022-02-23T07:46:40.197 回答
0
#region Variable Declaration
 public static Kepware.ClientAce.OpcDaClient.DaServerMgt ObjDaServerMgt = new Kepware.ClientAce.OpcDaClient.DaServerMgt();
            public static Kepware.ClientAce.OpcDaClient.ConnectInfo ObjConnectInfo = new Kepware.ClientAce.OpcDaClient.ConnectInfo();
            public static Kepware.ClientAce.OpcDaClient.ReturnCode ObjReturnCode = new Kepware.ClientAce.OpcDaClient.ReturnCode();
            public static Kepware.ClientAce.OpcDaClient.ItemIdentifier[] ObjItemIdentifiers = new Kepware.ClientAce.OpcDaClient.ItemIdentifier[2];
#endregion


public void Connect()
{

            string OPC_url_Simatic = ConfigurationManager.AppSettings["ServerId"].ToString();


                ObjConnectInfo.LocalId = "en";
                ObjConnectInfo.KeepAliveTime = 5000;
                ObjConnectInfo.RetryAfterConnectionError = true;
                ObjConnectInfo.RetryInitialConnection = true;
                bool connectFailed = false;

                ///define a client handle
                int clientHandle = 1;

                //Try to connect with the API connect method:
                try
                {
                    ObjDaServerMgt.Connect(OPC_url_Simatic, clientHandle, ref ObjConnectInfo, out connectFailed);
                }
                catch (Exception ex)
                {
                   // MessageBox.Show("Handled Connect exception. Reason: " + ex.Message);.
                    log.Error(ex.ToString());
                    // Make sure following code knows connection failed:
                    connectFailed = true;
                }
                // Handle result:
                if (connectFailed)
                {
                    // Tell user connection attempt failed:
                    //MessageBox.Show("Connect failed");
                    log.Error("Connection Failed");
                }
}

注册一些事件处理程序并完成工作。

于 2014-02-11T11:04:57.767 回答