我必须创建一个简单的应用程序,它将作为使用WPF和WCF创建HMI屏幕的示例。
我不确定WCF应该在这样的应用程序中做什么,我想我的应用程序必须连接到一个OPC服务器。 app是否使用WCF服务连接到OPC服务器并且WCF服务是驻留在应用程序内还是驻留在外部?
WCF服务是否仅用作与OPC服务器的连接?我还不确定要模拟哪个过程,我需要一些简单的东西。
请欢迎任何想法。
谢谢
答案 0 :(得分:2)
请浏览www.opcsystems.net,提供快速,轻松地使用OPC创建WPF SCADA应用程序的大量工具包。
答案 1 :(得分:2)
听起来你将拥有一个WPF应用程序,它将充当HMI,包含所有UI元素。 WPF应用程序将使用地址(运行服务的主机地址),绑定(可能是tcp或http)和服务的契约(接口)为WCF服务创建客户端代理。
WCF服务将托管在某处(主机地址)并公开指定绑定和合同的端点。这是您的WPF应用程序的客户端代理将与之通信的内容。服务契约中实现的方法将实例化OPC类,并根据需要写入或读取OPC项。
在最简单的形式中,您可能有一个包含两个项目的解决方案:一个用于WPF应用程序(使用客户端代理),另一个用于WCF服务(使用OPC实现)。
答案 2 :(得分:1)
查看OPC Connect并使用一些免费或商业组件作为首选语言与某些OPC服务器通信并可视化数据。
答案 3 :(得分:1)
如果您想创建WPF使用者,那么您最好的WCF方式就是使用新的OPC-UA实现。
例如,KepwareEx服务器实现了这些规范并公开了wcf端点。
我与Kepware没有任何关系,但我们经常使用他们的产品。
关于他们UA Guidance document的更多信息,显示了我在说什么。您可以装配该客户端以允许xaml集成(我还没有完成)。
此外,值得研究Status Vision的人员的建筑描述,他们将推出OPC UA - > Silverlight / XAML工具包......
答案 4 :(得分:0)
当你提到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;
}
}
}
答案 5 :(得分:0)
您可以使用Open Automation Software的WPF HMI .NET产品,该产品使用WCF与Modbus,AB,Siemens,OPC,MQTT,AWS等数据源进行通信。 https://www.openautomationsoftware.com/products/hmi-scada-for-net/wpf-hmi-net/