创建使用OPC的简单C#app需要什么?

时间:2011-02-22 11:33:39

标签: c# opc

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

我需要做什么?我是否需要OPCFoundation中的Xi这样的东西?

8 个答案:

答案 0 :(得分:3)

作为一种更通用的OPC解决方案,值得查看http://www.codeproject.com/KB/COM/opcdotnet.aspx - 它是一个带有源代码的免费OPC DLL。虽然它非常基础,但是代码就在那里,所以你可以根据需要轻松更新代码,但是根据你的要求,它可能是理想的。

答案 1 :(得分:3)

您可能会查看www.quickopc.com,它可以在.NET和OPC服务器之间提供完美的包装。您也可以通过www.opcfoundation.com获取OPC服务器的大量信息。

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

答案 2 :(得分:3)

听起来您可能已经拥有西门子S7的OPC服务器。 Kepware,Simatic Net和许多其他公司都支持OPC UA。

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

  1. 适用于Windows桌面的Microsoft Visual Studio Express 2013可从以下网址获取:http://www.microsoft.com/visualstudio/eng/products/visual-studio-express-for-windows-desktop

  2. 本网站的最新消息来源: http://web.archive.org/web/20140219181837/http://opcuaservicesforwpf.codeplex.com/

  3. 使用此套件,您可以: 直接从Visual Studio IDE浏览OPC UA服务器。拖放变量节点以创建数据订阅。使用绑定从订阅的数据值中为UI控件的属性设置动画。

    查看示例应用程序'Workstation'。

答案 3 :(得分:2)

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

使用C#开始编码.C#提供与OPC服务器通信的灵活性。

西门子使用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

答案 7 :(得分: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");
                }
}

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