繁体   English   中英

我需要创建一个使用WCF的小型HMI / SCADA WPF应用程序

[英]I need to create a small HMI/SCADA WPF application that uses WCF

我必须创建一个简单的应用程序,该应用程序将适合作为使用WPF和WCF创建HMI屏幕的示例。

我不确定WCF在这种应用程序中应该做什么,我想我的应用程序必须连接到OPC服务器。 应用程序是否使用WCF服务连接到OPC服务器,并且WCF服务位于应用程序内部还是外部?

WCF服务是否打算仅用作与OPC服务器的连接? 我还不确定要模拟哪个过程,我需要一些简单的方法。

请欢迎任何想法。

谢谢

请访问www.opcsystems.net,该套件提供了许多工具包,可用于快速,轻松地使用OPC创建WPF SCADA应用程序。

听起来您将拥有一个WPF应用程序,它将充当HMI,其中包含所有UI元素。 WPF应用程序将使用服务的地址(服务在其上运行的主机地址),绑定(可能是tcp或http)和协定(接口)为WCF服务创建客户端代理。

WCF服务将托管在某个位置(主机地址),并公开指定绑定和合同的端点。 这就是您的WPF应用程序的客户端代理将与之通信的内容。 服务合同中实现的方法将实例化OPC类,并根据需要写入或读取OPC项。

以最简单的形式,您可能会拥有一个包含两个项目的解决方案:一个用于WPF应用程序(带有客户端代理),另一个用于WCF服务(带有OPC实现)。

查看OPC Connect,并使用一些免费或商业组件作为您的首选语言,以与某些OPC服务器对话并可视化数据。

如果要创建WPF使用者,最好的WCF方法是使用新的OPC-UA实现。

例如,KepwareEx服务器实现了这些规范,并直接提供了wcf端点。

我与Kepware没有任何隶属关系,但我们经常使用他们的产品。

有关他们的UA指导文档的更多信息,该文档显示了我在说什么。 您可以绑定该客户端以允许xaml集成(我还没有完成)。

同样,值得研究Status Vision的人员的体系结构描述,他们将推出OPC UA-> Silverlight / XAML工具包...

您可以使用Open Automation Software的WPF HMI .NET产品,该产品使用WCF与来自Modbus,AB,西门子,OPC,MQTT,AWS等的数据源进行通信。https: //www.openautomationsoftware.com/products/hmi-scada- 对于网/ WPF的HMI网/

当您提到OPC时,我假设您是在谈论OPC DA。 OPC只是一种通信协议,您可能需要为系统创建包装器。 这是一个松散的示例,说明如何使用C#和托管包装器实现简单的OPC DA读取。

namespace ScadaServiceLibrary
{
    [ServiceContract]
    public interface IDataClass
    {
        [OperationContract]
        string RetrieveValues(string OpcPath);
    }

    public class DataClass : IDataClass
    {

        ....

        public string RetrieveValue(string OpcPath)
        {
            // Retrieve data here. ScadaServer is a Opc.Da.Server type.
            // Example assumes you have a dictionary of the item handles keyed 
            // to the path.

            string value = null;

            Opc.Da.Item item = new Opc.Da.Item();

            item.ItemName = OpcPath;
            item.ClientHandle = Handles[OpcPath];
            item.Active = true;
            item.ActiveSpecified = true;

            Opc.Da.Item[] items = new Opc.Da.Item[1];
            items[0] = item;
            Opc.Da.ItemValueResult[] results = ScadaServer.Read(items);

            if (results != null && results.Length > 0)
            {
                Opc.Da.ItemValueResult result = results[0];
                value = result.Value.ToString();
            }

            return value;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM