2

HMI画面を作成するためにWPFとWCFを使用する例として適した、単純なアプリを作成する必要があります。

そのようなアプリケーションでWCFが何をするのかわかりませんが、アプリケーションが接続するOPCサーバーが必要だと思います。アプリはWCFサービスを使用してOPCサーバーに接続し、WCFサービスはアプリケーションの内部または外部に存在しますか?

WCFサービスは、OPCサーバーへの接続としてのみ使用されることを意図していますか?どのプロセスをシミュレートするかはまだよくわかりません。簡単なものが必要です。

どんなアイデアでも大歓迎です。

ありがとうございました

4

6 に答える 6

2

すべての UI 要素を含む、HMI として機能する WPF アプリケーションが作成されるようです。WPF アプリケーションは、サービスのアドレス (サービスが実行されているホスト アドレス)、バインド (おそらく tcp または http)、およびコントラクト (インターフェイス) を使用して、WCF サービスのクライアント プロキシを作成します。

WCF サービスはどこか (ホスト アドレス) でホストされ、バインディングとコントラクトを指定するエンドポイントを公開します。これは、WPF アプリのクライアント プロキシが通信する相手です。サービスのコントラクトに実装されたメソッドは、OPC クラスをインスタンス化し、必要に応じて OPC アイテムの書き込みまたは読み取りを行います。

最も単純な形式では、2 つのプロジェクト (クライアント プロキシを使用する WPF アプリケーション用) と OPC 実装を使用する WCF サービス用の 1 つのソリューションを持つ可能性があります。

于 2010-12-22T05:38:41.973 に答える
2

www.opcsystems.net をご覧ください。OPC を使用して WPF SCADA アプリケーションを迅速かつ簡単に作成するための優れたキットが提供されています。

于 2010-12-21T22:19:17.620 に答える
1

WPF コンシューマーを作成する場合、WCF で行う最善の方法は、新しい OPC-UA 実装を使用することです。

たとえば、KepwareEx サーバーはこれらの仕様を実装し、すぐに wcf エンドポイントを公開します。

私は Kepware とは何の関係もありませんが、Kepware の製品をよく使用していました。

私が話していることを示すUAガイダンス文書の詳細。そのクライアント エンドをリグして、xaml 統合を許可することができます (私はまだ行っていません)。

また、 OPC UA -> Silverlight/XAML ツールキットを発表しているStatus Visionの人たちのアーキテクチャの説明を調べる価値があります...

于 2011-03-09T22:34:08.383 に答える
1

OPC Connectを見て、任意の言語の無料または商用のコンポーネントを使用して、OPC サーバーと通信し、データを視覚化します。

于 2010-12-21T19:41:43.697 に答える
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;
        }
    }
}
于 2010-12-21T22:40:25.763 に答える