2011-02-07 44 views
1

OPCDotNetLibを使用しましたが、リモートOPCサーバからデータを読み取ることができません。OPCクライアント - リモートOPCサーバからの読み取り方法

私は

Type typeofOPCserver = Type.GetTypeFromProgID(clsidOPCserver, ip); 

しかしDataChangedまたはReadCompletedが仕事をしたり、間違った作品はありません方法を探しているように、接続することができます。

ローカルのOPCサーバーと同じテストを行い、リモートOPCサーバーを使用して接続できます。項目を追加してデータを読み取ることができます。リモートマシン上のOPCサーバーは、それらを読み取ったが、データは表示されません。リモートOPCサーバーのOPCDotNetLibに関する別の回避策が必要なようです。

が、私もこのライブラリ/ DLLは、リモートサーバー上で動作しませんが

コメントを見つけ、ローカルのみ使用が可能です。

利用可能なOPCクライアント.NETライブラリがありますか?

答えて

9

OPCとの互換性にはいくつかのオプションがあります。 OPC Foundationが提供する古典的なCOMラッパーを使用することも、.NET用に設計された新しいOPCライブラリーを使用することもできます。

私は個人的にはまだ新しいライブラリに切り替えていないが、これは、接続を初期化し、DataChangedイベントをサブスクライブするOpcNetApi.dllOpcNetApi.Com.dll、およびOpcRcw.Da.dllを使用する方法のブレークダウンです:

Opc.Da.Server scadaServer = null; 
List<Opc.Da.Item> scadaItems = null; 
Opc.Da.Subscription scadaSubscription = null; 

string scadaUrl = string.Format("opcda://{0}/{1}", hostname, 
                opcServerVendor); 

scadaServer = new Opc.Da.Server(new OpcCom.Factory(), new Opc.URL(scadaUrl)); 
scadaServer.Connect(); 

var scadaItems = new List<Opc.Da.Item>(); // I'm using a List<T>, but cast back to a simple array using ToArray(); 

// Repeat this next part for all the items you need to subscribe 
Opc.Da.Item item = new Opc.Da.Item(); 
item.ItemName = TagPath; // Where TagPath is something like device.channel.tag001; 
item.ClientHandle = handle; // handle is up to you, but i use a logical name for it 
item.Active = true; 
item.ActiveSpecified = true; 

scadaItems.Add(item); 

Opc.Da.SubscriptionState subscriptionState = new Opc.Da.SubscriptionState(); 
subscriptionState.Active = true; 
subscriptionState.UpdateRate = 40; 
subscriptionState.Deadband = 0; 

scadaSubscription = scadaSubscription ?? (Opc.Da.Subscription)scadaServer.CreateSubscription(subscriptionState); 

Opc.Da.ItemResult[] result = scadaSubscription.AddItems(scadaItems.ToArray()); 
for (int i = 0; i < result.Length; i++) 
    scadaItems[i].ServerHandle = result[i].ServerHandle; 

scadaSubscription.DataChanged += new Opc.Da.DataChangedEventHandler(OnDataChange); 
scadaSubscription.State.Active = true; 
+0

OpcNetApi.dll、OpcNetApi.Com.dll、およびOpcRcw.Da.dllはどこで入手できますか?私は、OPC 財団のメンバーを払っていません。 – Cynede

+0

@nCdyあなたは信頼できるソースから 'OPC Redistributable 2.00'が必要です。そうでなければ、KepwareやMatrikonのような会社から部品を購入することができます。 –

4

私はそれがしばらくしているが、図書館を必要とする人々を助けることを知っている。 Greg Buehlersと一緒に答えてください。 これらは無料でコアOPC Foundationの一部です。以前のバージョンが必要な場合は、hereをクリックして[Archives]タブをクリックしてください。これが私を永遠に見つけたので、これが誰かを助けてくれることを願っています。

関連する問題