OPC(OLE for Process Control)技術概要書

OPC技術概要書( Data Access Ver2および共通仕様 )Version2.0

1999年11月
日本OPC協議会技術部会※本文書の複製再利用には使用許諾契約が必要です。

Page iOPC(OLE for Process Control)技術概要書

Page ii

改訂版発行にあたり
1997年2月にOPC技術概要書（第1版）を発行してから約2年が経過しました。この間，OPC Foundation（OPC-F）ではData Access1.0A（DA1.0A）を1997年5月に一般公開し，またD
A2.0も1998年11月上旬に一般公開されました。こういった状況から，OPC技術概要書もDA
2.0の最新仕様を取り込むべく改訂の必要が生じたため，日本OPC協議会（OPC-J）技術部
会メンバーが，第1版同様改訂版の執筆を担当し，ここに改訂版発行の運びとすることができました。これもひとえに技術部会メンバーの努力の賜物であり，それを支えていただいた
幹事会メンバーおよび会員皆様方のご協力なくしては成し遂げることはできなかったことと思います。改めてお礼申し上げます。
さて，DA1.0Aは，1996年8月に一般公開されたDA1.0のマイナーチェンジでありまし
たが，DA2.0ではオートメーションインターフェースの前面改訂やオートメーションラ
ッパーの提供など大きな仕様変更となっています。さらに，OPC-Fでは，Alarm&Event(A&E)やHistorical Data Access（HDA）の策定もほぼ完了となり，順次一般公開されることになっています。OPC-J技術部会では，引き続きA&EやHDAに関する技術概要書を発刊する予定であり，OPC-J会員各位のOPC技術習得に役立ち，ひいてはOPC
技術の普及に寄与したいと考えております。今後ともOPC会員各位のご協力をよろしくお願いいたします。

本書は下記構成になっています。
第1章 OPC概要 ：OPC全体の概要
第2章 OPC機能：OPC全体の機能とOPC仕様区分について
第3章 OPC Data Access概要 ：OPCの仕様の一つであり、基本部であるData Access の概
要について
第4章 OPC 構造と動作 ；、OPCサーバー・クライアントの構造とData Access仕様によるデータの読み取り、書き込み動作について第5章 OPC対応ソフトウェア開発：OPC仕様のサーバ・クライアントの開発に必要な基本事項について第6章 OPCアプリケーションとOPCインタフェース：OPCサーバー・クライアントの応用例とData Access 仕様におけるインタフェースの機能一覧
第7章 DataAccess Ver1.0とVer２．０の主な違い：DataAcessのバージョンによる違いについて
第8章 OPC共通仕様：OPC個別仕様に共通している特記事項について
第9章 技術基盤説明：基盤技術概要
第10章 付録：用語の解説

本書では、単にOPCと記したばあいには、Data Access仕様のみならず、他の仕様をも包含した意味で使用しています。OPC Data Access を他の仕様と区別して記述する必要のある場合には、Data Accesまたは単にDAと省略して記載します。
なお本文中アンダーラインを引いた語（各章の初出のみ）は技術基盤 あるいは付録の用語集などの章で簡単に説明されています。

※本文書の複製再利用には使用許諾契約が必要です。

Page iii

OPC(OLE for Process Control)技術概要書

目次
1

OPC 概要.......................................................................................................................... 1
1.1
1.2

背景 ..............................................................................................................................1
OPCの特長...................................................................................................................2

1.2.1
1.2.2
1.2.3

目的とスコープ .....................................................................................................2
システムにおける位置づけ ..................................................................................3
開発言語とOPCの実装形態 ..................................................................................4

２ OPC 機能 ............................................................................................................................ 5
２．１概要 ..............................................................................................................................5
２．２ 仕様の種類 ..................................................................................................................6
３ OPC DATA ACCESS 概要 ................................................................................................. 8
３．１機能概要 .......................................................................................................................8
３．２ プロセスデータアクセスの基本 .................................................................................9３．２．１ アイテムID ....................................................................................................11
３．２．２ プロセスデータ ..........................................................................................11
３．２．３アイテムの属性 ...............................................................................................13
３．２．４グループの概念 ...............................................................................................13
３．２．５データのキャッシュ........................................................................................13
３．２．６データ変化通知(subscription) ........................................................................14
３．３ OPC DATA ACCESSのオブジェクトモデル ..................................................................14３．３．１ DAサーバオブジェクト ..............................................................................15
３．３．２ DAグループオブジェクト ..........................................................................16

３．３．３ プライベートグループとパブリックグループ ..............................................17
３．３．４ DAアイテムオブジェクト .............................................................................18
３．４ ブラウズ機能 .............................................................................................................18

３．４．１ サーバアドレススペースのブラウズ（オプション） ...............................18
３．４．２ グループのブラウズ.......................................................................................18
３．４．３ アイテムのブラウズ.......................................................................................19
３．５

構成情報のセーブ･ロード機能 ...........................................................................19

３．５．１
３．５．２
３．６

サーバアドレススペースと構成情報 .........................................................19
構成情報のセーブとロード（オプション） ..............................................19

その他 .................................................................................................................19

３．６．１
３．６．２

文字コード .................................................................................................19
NLS(National Language Support)...........................................................19

４ OPC構造と動作 ................................................................................................................ 20
４．１OPCサーバの構造......................................................................................................20

４．１．１
４．１．２
４．１．３
４．２
４．３
４．４

In-Proc Server ...........................................................................................20
Local / Remote Server...............................................................................20
Handlerの併用...........................................................................................21

OPCカスタムインタフェースとOPCオートメーションインタフェース ..........23
OPCクライアントの構造 ...................................................................................23
データの読み込み（ DATA ACCESS 仕様）.........................................................24

４．４．１データのキャッシュ........................................................................................24
４．４．２ 読み込みデータの値 ..................................................................................25
４．４．
３ 読み込み機能 .........................................................................................25
４．５

データの書き込み（DATA ACCESS仕様） ..........................................................28

４．５．１
４．５．２

書き込みデータの値 ..................................................................................28
データの書き込み機能 ...............................................................................28※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

４．６
４．７
４．８
５

Page iv

データの同期（ＳＹＮＣＨＲＯＮＩＺＡＴＩＯN） .....................................................................29
データの順序保証 ...............................................................................................29
サーバのマルチスレッド化 ................................................................................30

OPC対応ソフトウェア開発 ........................................................................................ 31

５．１ 開発資格 ....................................................................................................................31
５．２ 必要な知識 ...............................................................................................................31
５．１
開発項目..............................................................................................................32

５．１.１
５．１.２
５．１.３
５．２
５．３
５．４

開発プラットホームと開発ツール .....................................................................33
認証 .....................................................................................................................33
OPCクライアントの開発 ...................................................................................33

５．４.１
５．４.２
６

In-Proc Server ............................................................................................32
Local/Remote Server(In-Proc Handlerなし) .............................................32
Local/Remote Server(In-Proc Handlerあり) .............................................32

必要な知識 ...................................................................................................34
開発プラットホームと開発ツール ..............................................................34

OPCアプリケーションとOPCインタフェース ........................................................... 36

６．１

OPCアプリケーション ...........................................................................................36

６．１.１
６．１.２
６．１.３

アプリケーションへの適用 .........................................................................36
アプリケーションからオブジェクトへのアクセス.....................................37
OLEコントロール、ActiveXへの応用 ........................................................38

６．２
OPCインタフェース概要 .......................................................................................40
６．３
DAオートメーションインタフェース ................................................................41

６．３．１ DAオートメーションオブジェクトモデル ................................................41
６．３．
２ DAサーバオブジェクト ..........................................................................42６．３．３ DAグループコレクション（Groups）オブジェクト ................................44
６．４

DAカスタムインタフェース...............................................................................49

６．４．１ DA カスタムインタフェース オブジェクト ..................................................49
６．４．２ DAサーバオブジェクト .............................................................................50
６．４．３ DAグループ オブジェクト ........................................................................52
６．４．４ DAクライアント側インタフェース ...........................................................54
７ DATAACCESS VER１．０とVER２．０の主な違い ..................................................... 56
７．１

カスタムインタフェース ....................................................................................56

７．１.１
７．１.２
７．１.３
７．１.４
７．１.５
７．２

オートメーションインタフェース .....................................................................59

７．２．１
７．２．２
７．３

非同期通信インタフェースの変更 ..............................................................56
非同期インタフェースの名称 .....................................................................56
非同期インタフェースの動作 .....................................................................56
追加されたインタフェースと機能 ..............................................................57
バージョンによる互換性一覧表 ..................................................................57
主な相違点 .................................................................................................59
互換性 ........................................................................................................59

データ読み込みとアクティブフラグの関係 .......................................................60

７．３．１ 同期読み込み （ＩＯＰＣＳｙｎｃＩＯ：Ver1.０及びVer2.0） ..............60
７．３．２ 非同期読み込み（IOPCAsyncIO2） .........................................................60
７．３．３ リフレッシュ .............................................................................................61
７．３．４ サブスクリプション（IOPCDataCallback経由のばあい） .....................61
７．３．５ 非同期読み込み（ＩＯＰＣＡＳｙｎｃＩＯ ／ver1.0） .........................62
リフレッシュ（Ver1.0） ..................................................................................................62
７．３．６ サブスクリプション（ IDataObject (old)経由） ......................................62
８ OPC共通仕様 .................................................................................................................... 63※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

８．１
８．２
８．３

Page v

カスタムインタフェースとＷＲＡＰＰＥＲ ＤＬＬ ..................................................63
共通インタフェース ...........................................................................................63
コンポーネントカテゴリとOPCサーバブラウザ ...............................................63

８．３．１コンポーネントカテゴリ ................................................................................63
８．３．２ OPCサーバブラウザ ......................................................................................64９

技術基盤説明 .............................................................................................................. 65

１０ 付録 ............................................................................................................................... 68
１０．１用語集 .....................................................................................................................68
１０．２関連文献 .................................................................................................................75※本文書の複製再利用には使用許諾契約が必要です。

Page 1

OPC(OLE for Process Control)技術概要書

1

OPC 概要1.1

背景以前のコンピュータシステムではハードウェアやソフトウェアなどプラットホームが異なるコン
ピュータ間のデータ共有、通信をおこなうために独自にプログラムを作成する必要があり、多大な労力を費やしてきましたが、現在は確立した規格化のおかげで、たとえばインターネットのように、異なるコンピュータ間を接続する広大なネットワークが実現されました。このため、
例えば企業情報システムの開発においては規格に基づいたデータベースとクライアント／サーバツールを使って、本来の目的であるアプリケーション開発に注力できるようになりました。製造システムにおいても同様な進化が必要です。すなわち、異なるベンダの機器を特別なソフトウェアを開発することなく相互接続できること、また、図 1-1のようなシステムを構築する上で、プラント機器レベルのデータを扱うフィールド管理層、プロセス処理を行う分散制御
システム層、さらに上位の生産管理層に至るまでシームレスにデータ共有化がはかれる規
格作りと普及が急務です。このような状況のもとで製造システムにおいても今後の主流とみられるWindowsの基幹技術であるOLE/COMをプロセス制御用途に拡張するOPCが策定され
ました。

生産管理層
クライアントアプリケーション

オペレータコンソル
ﾘｱﾙﾀｲﾑﾄﾚﾝﾄﾞ・
ヒストリカルデータ
サーバ
ﾘｱﾙﾀｲﾑﾄﾚﾝﾄﾞ・
ヒストリカルデータ
サーバ

オペレータコンソール

コントローラ

分散制御システム層
コントローラフィールドバス

PD メータ
センサ
ー圧力
-温度
-流量
-水位

-解析

Fis h erバルブ
ポジショナー

フィールド管理層

図 1-1 プロセス制御情報アーキテクチャ※本文書の複製再利用には使用許諾契約が必要です。

ｰアナログ I/O
-ﾃﾞｨｽｸﾘｰﾄI/O-TC/RTDPage 2

OPC(OLE for Process Control)技術概要書

1.2 OPCの特長
1.2.1 目的とスコープ
OPCは異なるベンダの機器で実行される異なるアプリケーション間のインタフェースを標準化してデータ交換を容易にすることが目的です。その結果として、開発言語や開発環境などにかかわらず統合的に利用できるプロセス制御用ソフトウェアコンポーネントをユーザへ提供できるようになります。また、現状ハードウェアのドライバインタフェースとこれらを利用する
アプリケーション間のインタフェースには統一性がないため、装置ごとあるいはベンダごとに異なり、たとえば図 1-2の様に３種類のサーバ（装置）とそれを利用するアプリケーションが２種類ある時、合計６種類のインタフェースソフトを多大な時間をかけて作成する必要があります。OPCを利用することによりインタフェースを１種類に統一することができ、図1-3のようなシステムを構築することができます。アプリケーションＸ（Ｙ）からは装置Ａ、Ｂ、Ｃの内部仕様、ベンダなどの変更に無関係に装置を利用することができます。
OPCを利用するシステムは、大きく、アプリケーション（クライアント）の要求に応じてデータ収
集ほかサービスを提供するOPCサーバ、OPCサーバを利用するためのOPCインタフェース、およびサービスをうけるOPCクライアントを用いたアプリケーションで構築することができます。OPCサーバは各ベンダのハードウェアに実装することができますが、OPCサーバにはベ
ンダごとのハードウェア、システムの違いをベンダ固有機能対応として処理する機能、およびデータのフォーマットもクライアントの要求に応じて対応できるVARIANT型とよばれるデータ
タイプを処理する機能があるからです。
ｱﾌﾟﾘｹｰｼｮﾝ Y

ｱﾌﾟﾘｹｰｼｮﾝ X
ｲﾝﾀﾌｪｰｽ

ｲﾝﾀﾌｪｰｽ

A,B,C

A,B,C
ﾛｰｶﾙまたはﾈｯﾄﾜｰｸ

ｲﾝﾀﾌｪｰｽ X,Y

ｲﾝﾀﾌｪｰｽX,Y

ｲﾝﾀﾌｪｰｽ X,Y

ｻｰﾊﾞ

ｻｰﾊﾞ

ｻｰﾊﾞ

A

Ｂ

Ｃ

図 1-2 サーバとアプリケーション

ｱﾌﾟﾘｹｰｼｮﾝ X
OPCｲﾝﾀﾌｪｰｽ

ｱﾌﾟﾘｹｰｼｮﾝ
ﾛｰｶﾙまたはﾈｯﾄﾜｰｸY

OPCｲﾝﾀﾌｪｰｽ

OPCｲﾝﾀﾌｪｰｽ

OPCｲﾝﾀﾌｪｰｽ

OPCｲﾝﾀﾌｪｰｽ

OPCｻｰﾊﾞ

OPCｻｰﾊﾞ

OPCｻｰﾊﾞAB

図 1-3 OPCサーバとアプリケーション※本文書の複製再利用には使用許諾契約が必要です。

CPage 3

OPC(OLE for Process Control)技術概要書

また、OPCは（１）移植しやすく、（２）多くのベンダのニーズに応えられるようフレキシブルで、（３）ハイレベルな機能性を提供し、（４）十分なオペレーションが可能であることを目標に策定されており、メーカやユーザにとってそれぞれ次のようなメリットをもたらします。
（１）装置開発者：デバイスドライバ開発の一元化が可能になります。
（２）アプリケーションソフトウェア開発者：汎用開発ツールを利用できます。独自インタフェースの開発が不要になり、装置とのインタフェースが容易になります。
（３）ユーザ：各種業務パッケージソフトとの連携が可能になり、システム開発コストを低減できます。また、フィールドデバイスやI/O機器を統合し、表示、操作性の統一されたシステムを構築できます。
OPC仕様準拠のコンポーネントが普及するにつれシステムの拡張やコンポーネントの置換が容易になるほか、データアクセスも容易になり、たとえばプロセス制御アプリケーションでのデータをデータベースソフトや表計算ソフトに直接送信し自動編集するなど高度なデータ統合が可能になります。
なお、OPC仕様を実装したサーバの実行環境はWindows NT 4.0以降を必要とします。OPC
クライアントの実行環境はWindows 95（クライアントのみ実行する場合）またはサーバ同様
Windows NT 4.0以降を必要とします。 機能的には装置間の効率的データ読み込み／書き込みに限定されています。アラーム、セキュリティ、履歴管理などは別仕様で追加される予定です。

1.2.2 システムにおける位置づけ
OPCはデータの供給元とデータの利用者間を接続するためのインタフェース仕様です。データの供給元にはたとえばPLC、 DCS、バーコードリーダ、計測解析機などが考えられます。図 1-4の例のように、最も低いレベルとしては物理デバイスからの生データをDCS／SCADA、自動化
制御システムへの供給のために、また、さらにそこからのデータを上位アプリケーションに送る用
途や、直接アプリケーションと物理デバイスとを接続する場合などにも適用できます。このようにOPCインタフェースはシステム上多くの場所に数多く実装することができる柔軟な仕様になっています。

ｸﾗｲｱﾝﾄ
アプリケ
ーション

OPC
ｲﾝﾀﾌｪｰｽ

OPC
ｲﾝﾀﾌｪｰｽ

OPC
ｻｰﾊﾞ

OPC
ｻｰﾊﾞ

OPCｲﾝﾀﾌｪｰｽ

DCS
または
SCADA
システム
（PA）
自動化
制御
システム
（FA）

OPC
ｲﾝﾀﾌｪｰｽ

OPC
ｲﾝﾀﾌｪｰｽ

OPC
ｻｰﾊﾞ

図 1-4 OPCとシステムにおける位置づけ※本文書の複製再利用には使用許諾契約が必要です。

OPC
ｻｰﾊﾞ

OPC
ｻｰﾊﾞ

物理
ﾃﾞﾊﾞｲｽ

Page 4OPC(OLE for Process Control)技術概要書

1.2.3 開発言語とOPCの実装形態
OPCはマイクロソフトのOLE/COM技術に基づき、クライアント／サーバモデルを継承しています。OPCサーバの実装形態には、クライアントと同一マシン上でクライアントと同じプロセスで実行するモデル（In-Proc Server）、別のプロセスで実行するモデル(Local Server)、さらにネットワーク上の他のマシン上で実行するモデル(Remote Server)などがありますが、ネットワ
ーク構成の場合を例に図1-5に実装形態を示します。
OPCサーバはDCSやI/Oドライバなどを供給するハードウェアベンダが提供するソフトウェア
で、図1-5では右側のサーバマシン上で実行されます。そのクライアントは左側のクライアント
マシン上で実行されるIn-Proc Handlerです。ユーザインタフェースなどを提供するアプリケー
ションベンダは左側のクライアントアプリケーションプログラムを開発します。開発言語にはVB(Visual Basic)やC++などを利用することができます。一般には、VBや、VBA（VB for
Applications）のようなスクリプト言語で開発されるアプリケーションはOPCオートメーションイ
ンタフェースを利用し、アプリケーションがC++で作成され、また、最大性能を引き出したい
場合はOPCカスタムインタフェースを利用します。クライアントアプリケーションでOPCオートメ
ーションインターフェースを利用する場合には、Automation Wrapper ｲﾝﾀｰﾌｪｰｽを使用することでOPCカスタムインターフェースに変換され、サーバーにアクセスすることができます。

OPCクライアントアプリケーションから、たとえばプロセス制御装置などへの要求はIn-Proc
Handlerを経由してネットワーク上にあるサーバマシンのOPCオブジェクトのインタフェースを介して伝わります。具体的にはメソッド、プロパティをアクセスしてデバイスへのデータ設定、
デバイスからの読みとりを行います。OPCサーバはこれらの呼びかけで要求に応じた適切な対応（たとえば、装置のﾃﾞｰﾀなど）をOPC仕様に準拠して用意しなければなりません。この装置固有の対応付けなどはOPCサーバを供給するベンダの責任で行います。
In-Proc Handlerはサーバ／クライアント間のデータをバッファリングしておく一種のデータキ
ャッシュで、OPC仕様上必須ではありませんが、ネットワーク間の通信時間を節約して高い性能を実現するために、OPCサーバとともにハードウェアベンダが提供することを推奨されているプログラムです。

ｸﾗｲｱﾝﾄｱﾌﾟﾘｹｰｼｮﾝ（C++）

ｸﾗｲｱﾝﾄｱﾌﾟﾘｹｰｼｮﾝ（ＶＢ）

OPC
In-Proc
Handler

OPCｶｽﾀﾑｲﾝﾀﾌｪｰｽ

OPCｵｰﾄﾒｰｼｮﾝ
ｲﾝﾀﾌｪｰｽ

OPC
サーバ

OPCｶｽﾀﾑｲﾝﾀｰﾌｪｰｽ

ｻｰﾊﾞﾃﾞｰﾀ
ｷｬｯｼｭ

Wrapper
ｲﾝﾀﾌｪｰｽ
ﾃﾞﾊﾞｲｽ
ｲﾝﾀﾌｪｰｽ

ｲﾝﾌﾟﾛｾｽ
ﾃﾞｰﾀｷｬｯｼｭ

ﾃﾞﾊﾞｲｽｻｰﾊﾞﾏｼﾝｸﾗｲｱﾝﾄﾏｼﾝ
ネットワーク

図 1-5 開発言語とOPCの実装形態の例※本文書の複製再利用には使用許諾契約が必要です。

物理ﾃﾞｰﾀPage 5OPC(OLE for Process Control)技術概要書

２ OPC 機能２．１概要
OPCはリアルタイムにプロセスデータを転送する機能を実現するための拡張性を考慮したフレームワークを提供します。アプリケーションはプロセスデータがどのようなフォーマットで、どこにあり、どのように取得しなければならないかを意識することなくプロセスデータアクセス（読み込み/書き込み）ができます。
OPCはクライアント/サーバ構造をとっています。１つのOPCクライアントは１つ以上のベンダが提供するOPCサーバ（複数）に接続できます。逆に、１つのOPCサーバは複数のOPCクライアントとの接続をサポートします。
OPCサーバは物理デバイスやそれに対するアクセス方法を知っており、OPCクライアントはそれらについて知っている必要はありません。

A
ﾞﾞ
Cﾊ
ﾀ
Pｰ
ﾝ
Oｻ
ﾞ
ﾍ

2
#
ﾄ
ﾝ
ｱ
ｲ
ﾗ
ｸ
C
P
O

B
ﾞﾀ
ﾞ
Cﾊ
P
ｰﾞ
ﾝ
O
ｻ
ﾍ

1
#
ﾄ
ﾝ
ｱ
ｲ
ﾗ
ｸ
C
P
O

C
ﾞﾞ
Cﾊ
ﾀ
Pｰ
ﾝ
Oｻ
ﾞ
ﾍ

3
#
ﾄ
ﾝ
ｱ
ｲ
ﾗ
ｸ
C
P
O

図 ２-1 OPCのクライアント／サーバ（例）OPCはデータ交換に関するインタフェース規約 であり、この章ではOPCにより実現される機能について、FA／PAのシステムをモデルとして説明します。
一般に、監視・制御システムではフィールド機器に直結した現場コンピュータが機器からのデータ収集、保管、監視、制御、診断の各機能を担当します。
従来、データの収集、保管、監視、制御、診断、伝送、アラーム表示、その他の業務処理のための機能モジュールはメーカーなどが独自に設計し、そのインタフェースを規定しています。
これらの機能モジュールを標準の論理オブジェクトとして整理し、その呼び出しインタフェー
スを標準化することにより、FA/PAシステムのソフトウェア構築を次のように進めることがOPC
適用のおもなねらいです。

※本文書の複製再利用には使用許諾契約が必要です。

Page 6OPC(OLE for Process Control)技術概要書

トレンド
表示

帳票処理

イベント
処理

ﾓﾆﾀﾘﾝｸﾞアラーム

操 作 ･設 定

表示

状態変化
ロギング

通知

データ収集
O P C ｲﾝﾀﾌｪｰｽ
フィールド データ

図 ２-2 監視・制御システムの機能構成例
監視・制御システムでは、プラント、瞬時データ、トレンド、アラームをはじめ、各種業務処理用の画面が存在します。このような表示画面をオブジェクト部品として整備していけば、それらを利用することによってシステムの生産性を大きく向上できます。さらに、ユーザ仕様に不確定部分の残る初期段階でのプロトタイプ作成や仕様変更に容易に対応できます。
機能部品を実現するためにクライアントとしては、①フィールドデータ収集②ヒストリ③レポー
ト④アラーム／イベントなどの各データを必要とします。
現状ではデータ収集を受け持つアプリケーションがデータのロギングを行い、また、データの整合性等をチェックし異常を検出した場合にはアラームの通知を行う等の処理を実装します。したがって、アラームの表示方法等についてはデータ収集などを行うアプリケーションの処理に依存します。

２．２ 仕様の種類
現状 OPC仕様として、下記４種類の種類があります。
表２．１ OPC仕様の種類
仕様

バージョン

内容

OPC Data Access

１．０A 、２．０

データのアクセスの規定

OPC Common

１．０

OPC仕様の共通部分

Alarm and Events

１．０

アラーム・イベントの規定

Historical Data Access

１．０

ヒストリデータアクセスの規定：本概要書記載範囲

本概要書では、フィールドデータのアクセス方法について規定しているOPC ＤａtaAccess 仕様とOPCの共通仕様であるOPC Commonに関して概要を記載するものです。ヒストリ、アラーム／イベントなどについて規定している仕様として、 OPC Historical Data Access ならびに OPC Alarm ａ※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 7ｎｄ Ｅｖｅｎｔｓがあります。 Historical Data Access ならびに Alarm and Eventsに関しては、別冊として概要書を作成する予定です。

※本文書の複製再利用には使用許諾契約が必要です。

Page 8OPC(OLE for Process Control)技術概要書

３ OPC Data Access 概要
３．１機能概要
OPC Data Access （以下 DAと記載）を実装することにより実現される機能を以下に示します。DAはこれらをすべて必須として要求しているのではなく、オプションと定めているものがあります。その場合、これらが実際にサポートされるかどうかはベンダ依存、サーバ依存となります。オプションか否かは機能単位よりもむしろインタフェース単位で定められており、この章でも概略が示されていますが、詳細については４章またはOPC DAの仕様書 を参照してください。

表 ３-1 DAの機能仕様
機能

方式

説明

プロセスデータ読み込み

同期読み込みアイテムに対応するプロセスデータを読み込みます。
読み込み完了まで待ち合わせます。
アイテムに対応するプロセスデータを読み込みます。
要求後直ちにリターンし、読み込み動作が完了した時点でDAクライアント側のメソッドが呼び出されます。
要求時に受け取りデータのフォーマットを指定できます。
・タイムスタンプ付きデータ
・タイムスタンプなしデータ
すべてのアクティブなアイテムからプロセ
スデータを読み込みます。
（非同期入力の一種）
一定周期でチェックし、データにある幅以上の変化があった場合、DAクライアントに通知します。
アイテムにデータを出力します。
書き込み動作完了まで待ち合わせます。
アイテムにデータを出力します。
要求後直ちにリターンし、書き込み動作が完了した時点でDAクライアント側のメソッドが呼び出されます。
DAサーバ全体の構成情報のセーブ／ロードをサポートします。
グループ、アイテム、属性などの各種情報を閲覧します。

非同期読み込み※ ４つの方式は、
互いに独立していて干渉はありません。

リフレッシュ

データ変化通知(subscription)
プロセスデータ書き込み

同期書き込み非同期書き込み

構成情報のセーブ／ロ
ード
ブラウズ

―
―

DAはその機能仕様よりは実現の仕方、実装の仕方に特長があります。

実際には、これらの機能がDAカスタムインタフェースとDAオートメーションインタフェースという用途別の2つのインタフェースで提供されるよう規定されています。
これらの使い分けについては４.2節を参照してください。

※本文書の複製再利用には使用許諾契約が必要です。

Page 9OPC(OLE for Process Control)技術概要書

３．２ プロセスデータアクセスの基本
基本的なアイデアはDAクライアントがDAサーバを指定して接続し、接続したDAサーバでアクセスできるアイテムの集合（サーバアドレススペースという）中の個々のアイテムを識別する
名前（アイテムID）を指定して、それに対応するプロセスデータを読み込み/書き込みするというものです。実際には、効率向上のためグループという概念を設け、グループのなかに１つあるいは複数のアイテムを対応させます。
DAが定めたオブジェクトモデルでは標準コンポーネントとして、DAサーバオブジェクト、DA
グループオブジェクト、DAアイテムオブジェクトと呼ぶ３種類の論理オブジェクトを提供しています。
DAサーバは図 3-1のようにベンダごとの物理デバイスへの接続を行うもので、ベンダ固有情報を理解するI/Oドライバともいえます。DAサーバがアクセスできる物理デバイスのデータア
イテム（DAアイテム）にはベンダが名前をつけてリストのように登録します。このアイテムの名
前はフラット型でも、また、階層型（例：Tank1.Pump.PV）にすることもできます。また、DAアイ
テムの名前にはサーバが実際にデータを検出するためのアクセスパス名と、識別するためのアイテム定義をベンダが指定することができます。そのほか、後述のDAグループの管理
や２種類のDAインタフェースの提供などを行っています。DAサーバは複数のDAクライアントと接続することができます。

ｶｽﾀﾑ
ｲﾝﾀﾌｪｰｽIF

ベンダ
固有

OPC DA
サーバ

ｵｰﾄﾒｰｼｮﾝ
ｲﾝﾀﾌｪｰｽ

図物理ﾃﾞﾊﾞｲｽ

物理ﾃﾞﾊﾞｲｽ

Tag1
Tag2
Tag3
.....

３−１ OPCサーバ

DAアイテムは上述のようにサーバが認識できるように定義され、通常タグに相当するような単一の変数（セットポイントやプロセスデータ）のデータ供給元にリンクするものです。
DAクライアントはDAアイテムのレベルでメソッドをアクセスすることによりデータの読み込み／書き込みを１点ずつ行うこともできますが（VBの場合）、さらに効率よく、また、目的別にデータをアクセスできるようDAサーバ内にDAグループを１つ以上設けることができます。DAク
ライアントはDAグループ内に任意の個数のDAアイテムを追加することができ、図 3-2 に示
すようDAグループに対して処理を要求することで一括してデータ（例：Ｔａｇ１−３）を読み込
み／書き込みすることができます。

※本文書の複製再利用には使用許諾契約が必要です。

Page 10OPC(OLE for Process Control)技術概要書

OPC サーバ
クライアント-1

OPC グループ-1
Tag1

Tag2

物理ﾃﾞﾊﾞｲｽへ

Tag3

クライアント-２

OPC グループ-2

OPC
ｲﾝﾀﾌｪｰｽ

Tag11
Tag
Tag13

図 ３−２ DAコンポーネント構成の例※本文書の複製再利用には使用許諾契約が必要です。

Tag12

Page 11

OPC(OLE for Process Control)技術概要書

３．２．１ アイテムID
アイテムを識別する任意サイズのUNICODE文字列です。いわゆるタグと呼ばれるものです。
シンタックスはベンダ依存です。
DCSの例：TIC101.PV
PLCの例：COM1.STATION:42.REG:40001;0,4095,-100.0,+1234.0
ただし、DAではアイテムIDについてフラットモデルと階層構造モデルが規定されており、次のような名前の付け方ができるようになっています。（フラット/階層構造いずれをサポートする
かはサーバ依存）フラット ：TIC101
階層構造：AREA1.REACTOR3.TIC101

３．２．２ プロセスデータ
プロセスデータは表３-2に示す３種類のデータで構成されます。通常、この３つのデータは組みで扱われます。

表３ -2 プロセスデータ
データ
データ値(Value)
品質フラグ(Quality Flag)

説明
値そのもの
データの有効性などを表わす

タイムスタンプ

データの取得時刻

備考
VARIANT型
FieldBus Foundation仕様と同様
UTC表現

３．２．２．１ データ値（Value）
DAにおいてはあらゆるデータ型を安全に扱えるようにプロセスデータはVARIANT型と呼ばれるデータ型を使用しています。

Float

String
Float

Integer

VARIANT

IntegerStringUser

Data Source

図 ３-3 DAのデータ型(例)
表３-3の範囲のデータ型を自由に扱えます。
DAサーバの返す値のデータタイプはDAクライアントから要求することができます。DAサーバが、要求されたデータタイプをサポートしていない場合は警告が返され、返される値はDAサーバがそのアイテムに対して標準で規定するデータタイプ(正規化データタイプ)となります。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 12

表 ３ -3 VARIANT型データ（一部）
データ型

バイト数

説明

VT_I2

2

単精度（16ﾋﾞｯﾄ）整数

VT_I4

4

倍精度（32ﾋﾞｯﾄ）整数

VT_R4

4

単精度（32ﾋﾞｯﾄ）浮動小数

VT_R8

8

倍精度（64ﾋﾞｯﾄ）浮動小数

VT_CY

8

VT_UI8と同じ 通貨（10000倍）

VT_DATE8

VT_R8と同じ 1899/12/30からの通算日時

VT_BSTR可変

文字列
VT_UI4で示された文字数の後にUNICODE文字とNULLターミネータを付加

VT_BOOL

1

VT_UI1と同じ ０：FALSE、 −1:TRUE

VT_UI1

1

符号なし文字

VT_ARRAY

可変

上記データタイプの一次元配列

３．２．２．２品質フラグ(Quality Flag)
データ値（Value）が正しく取得できたかどうかを示すフラグです。異常時にはその原因を通知します。たとえば、デバイスやセンサの故障を検出した、あるいはアイテムが削除されている等のステータスが通知されます。この詳細についてはDA仕様書7.8を参照ください。

３．２．２．３タイムスタンプ (Time Stamp）
データが取得されたUTC時刻を表すFILETIME構造体（８バイト）データです。デバイス上の時刻、またはDAサーバ上の時刻を表します。このデータ型で表現できる時刻精度は
100nsです。なお、非同期読み込みの場合はこの項目の取得を省略できます。

※本文書の複製再利用には使用許諾契約が必要です。

Page 13

OPC(OLE for Process Control)技術概要書

３．２．３アイテムの属性
アイテムの属性を表に示します。これらの属性の取得/設定はDAクライアントから任意の時点で行えます。ただし、工業単位についてはDAサーバが提供する機能であり、取得のみサポートされています。

表 ３-4アイテムの属性
属性
Active値
TRUE/FALSE

アクセス権

読み込み可能/書き込み可能

要求データ型

データ型

正規化データ型

データ型

工業単位情報タイプ

なし、アナログ、列挙

工業単位情報アナログ：レンジLOW/HI
指定
列挙：値の0,1,2..に対応
して文字列を指定(例：OPEN, CLOSE, IN
TRANSIT,...)
文字列(サーバ依存)

アクセスパス説明
FALSEにするとデータ読み込みは行われない。
そのアイテムが読み込み/書き込みできるかどうかを示す。セキュリティとは別個の、
そのアイテム本来の性質。
DA仕様では読み込みデータのタイプは読み込み要求時にDAクライア
ントが指定できる。
DAサーバに保持するデータのタイプ。
次項目の工業単位情報のタイプを示す。(オプション)
工業単位情報タイプにより内容が異なる。(オプション)
列挙の場合、DAサーバがローカライ
ゼーションをサポート可能。

プロセスデータアクセスに複数の方法がある場合、そのいずれを使用す
るか要求時に指定できる。(オプション)

３．２．４グループの概念
DAクライアントが効率よくプロセスデータをアクセスする仕組みとして“グループ”が用意されています。グループにはDAクライアントが任意の個数のアイテムを登録することができ、プロセスデータアクセスは通常、これを単位として行います。グループにはActive属性や更新周期の属性などがあります。

３．２．５データのキャッシュ
同期型読み込み、非同期型読み込み要求では（要求時Call単位で）データソースとして
CACHEあるいはDEVICEのいずれかを指定します。
パフォーマンスの問題から通常はCACHEを使用します。DEVICEは診断などの限られた場
合での使用となります。DEVICEのときはグループおよびアイテムのActive属性(アクティブ／非アクティブ)に関わらずデバイスからの読み込みを行います。

※本文書の複製再利用には使用許諾契約が必要です。

Page 14

OPC(OLE for Process Control)技術概要書

OPC
ｸﾗｲｱﾝﾄ

CACHE
指定

OPCｻｰﾊﾞ
Data Cache

UpdateRate

ﾃﾞﾊﾞｲｽI/O

DEVICE
指定

図 ３-4 CACHEとDEVICE
キャッシュの更新には次の２つの場合があります。
DAクライアントからのリフレッシュ要求ではグループ内のすべてのアクティブなアイテムについてキャッシュ値を更新します。
また、DAクライアントからの要求とは無関係に一定の更新周期(UpdateRate)でキャッシュが更新されます。
UpdateRateはグループ毎に設定される属性で、DAクライアントからの要求により、指定された更新周期にできるだけ近い値がDAサーバで設定され、実際に設定された更新周期はDAクライアントに通知されます。

なお、書き込み要求に対してはDAサーバは実際のデバイスへの書き込み完了（または失敗確認）まで実行するためキャッシュ動作は無関係です。

３．２．６データ変化通知(subscription)
表2-1におけるプロセスデータ読み込みの４方式のうち、同期読み込み／非同期読み込み／リフレッシュはDAクライアントからの要求によるものですが、DAクライアントの要求によらずDAサーバから通知を受ける方式がsubscriptionです。更新周期(UpdateRate)によるキャッシ
ュ値更新の際、値に変化があればDAクライアントに通知されます。ただし、DAサーバがデッ
ドﾊﾞﾝﾄﾞ(PercentDeadBand)をサポートしていて、アイテムの工業単位情報タイプがアナログの場合は、現在値と前回値の差の絶対値がこれで決まる値を超えた時のみキャッシュデータを更新し、DAクライアント側のメソッドに通知されます。これによりアナログ値の小さなじょう乱を無視することができ、サーバおよびクライアントの負荷軽減となります。

３．３ OPC Data Accessのオブジェクトモデル
OPC Data Access 仕様の特長のひとつとして、DAサーバ、DAグループ、DAアイテムのオ
ブジェクトモデルを採用していることが挙げられます。
DAサーバオブジェクトはDAサーバ内の詳細をDAクライアントから隠蔽化します。これにより、DAサーバを利用するアプリケーション(DAクライアント)は異なるベンダから提供される
DAサーバを同じ手順で使用することが可能となります。DAアイテムオブジェクトは制御する
物理デバイスなどのハードウェア情報を隠蔽化します。これによりベンダ毎の物理デバイスの仕様の違いに対応できます。
DAグループオブジェクトはこれらのオブジェクトの中で最も優れたメリットがあります。上記の２つのオブジェクトとは性格が異なり、DAサーバ側で各DAクライアントの情報を保持しています。たとえば、データの変更通知レートであるUpdateRate値などを各DAクライアント毎に保持しサーバ側で管理できるので、クライアント／サーバ間での通信負荷を減らすことができ、パフォーマンスの向上を計れます。

※本文書の複製再利用には使用許諾契約が必要です。

Page 15

OPC(OLE for Process Control)技術概要書

３．３．１ DAサーバオブジェクト
DAサーバが最初に生成するオブジェクトです。DAサーバオブジェクトは、DAサーバ全体(共通)の管
理情報および DA クライアントとのコネクションにおける情報を保持しています。 DA グループオブジェ
クト、DAアイテムオブジェクトは、この DAサーバオブジェクトと関連してつくられます。

項目スタート時刻現在時刻
バンド幅
メジャーバージョン
マイナーバージョン
ビルド番号
ベンダ情報
ステータス

グループ数
前回更新時刻

説明
DAサーバ起動時刻
DAサーバの現在時刻
使用率など
DA サーバソフトウェアのメジャーバージョン番号
DA サーバソフトウェアのマイナ
ーバージョン番号
DA サーバソフトウェアのビルド
番号
サーバベンダの文字列情報

備考
UTC
UTC
サーバ依存

ベンダ名とサポートする
デバイスなどDAサーバの現在の状態
正常、エラー、構成情報
なし、テストモードなど(DA仕様書 7.7.5参照)
DA サーバが管理しているグル 主として診断用
ープ数（プライベートも含む）
この DA クライアントに対して値 UTCを更新した前回時刻

表 ３-5 DAサーバの属性

１つのDAサーバオブジェクト内には1つ以上のDAグループを定義できます。１つのグループの中には、１つ以上のDAアイテムを定義できます。図に示すと以下のようになります。

※本文書の複製再利用には使用許諾契約が必要です。

Page 16

OPC(OLE for Process Control)技術概要書

OPC クライアント
Visual Basic

AccessC++ｱﾌﾟﾘｹｰｼｮﾝ

・・・

OPC インタフェース

OPC サーバ

OPC

OPC

サーバ

サーバ

デバイス

デバイス

OPC サーバオブジェク

グループ A

グループ B

アイテム 1

アイテム 1

アイテム 2

アイテム 2

グループ C
アイテム 1

アイテム 3デバイス

図 ３-5 DAサーバオブジェクトの内部

３．３．２ DAグループオブジェクト
DA グループオブジェクトがアイテムの集合を管理するために提供するオブジェクトです。データの入出力は基本的に DAグループ単位で行います。このため、DAクライアントは DA グループ単位でアクティブか非アクティブの設定など、グループ単位でのデータ入出力の制御を行うことができます。表2-6 に DAグループの属性を示します。DAクライアントはこれらの属性の取得／設定ができます。

表 ３-6 DAグループの属性
属性
グループ名

ActiveUpdateRate
Time Zone(Time Bias)

デッドバンドLCID

説明
備考
この DA クライアントグル パブリックグループ(後述)
ープの中でユニークな名前 の場合はすべてのパブリックグループの中でユニークな名前。
アクティブ／非アクティブ
データ変更通知のレート
単位はミリ秒。
デバイスの時刻との差分調 データのタイムスタンプ
整用をデバイスのLocal timeに戻す時に使用される。単位は分。
不感帯（百分率）
工業単位情報タイプがア
ナログの時
DAサーバが値を文字列とし 工業単位列挙を含むアラて返す時に用いられる言語 ームやステータスなど
識別子※本文書の複製再利用には使用許諾契約が必要です。

Page 17

OPC(OLE for Process Control)技術概要書

３．３．３ プライベートグループとパブリックグループ
通常、グループはプライベートグループとして作成されます。プライベートグループはそれを作成したDAクライアントのみがアクセスできますが、複数のDAクライアントからアクセスできるパブリックグループもオプションとして用意されています。この場合、最初、プライベートグ
ループとして作成されたグループをMoveToPublicメソッド(5.3節および5.4節参照)によってパブリックグループに変更します。1
DAクライアントは、一度パブリックグループとして接続すると、プライベートグループと同じよ
うに簡単に操作することができます。グループやグループ内のアイテムを実行/停止させた
り、クライアントハンドルをセットしたり、アイテムに要求データタイプを設定することができます。これらのすべての操作はそのDAクライアントからのみ影響を及ぼし、そのパブリックグ
ループへ接続されたほかのDAクライアントの動作には影響しません。例外はアイテムの追加および削除ができないことです。
クライアントごとに保持される属性
グループ属性のうち、Active属性、UpdateRate、TimeZone
アイテム属性のうち、Active属性、要求データタイプ

OPC サーバオブジェクト

グループ A

グループ B

ｱｲﾃﾑ 1

ｱｲﾃﾑ 1

ｱｲﾃﾑ 2・・・

クライアントクライアントアプリケーション A

アプリケーション B

図 ３-6 通常のDAグループのアクセス例

1

OPC仕様では、クライアントからの要求によらずOPCサーバも作成できる。

※本文書の複製再利用には使用許諾契約が必要です。

Page 18

OPC(OLE for Process Control)技術概要書

OPCサーバオブジェクト

パブリックグループ A
ｱｲﾃﾑ 1
ｱｲﾃﾑ2

クライアントアプリケーション A

クライアントアプリケーションB

図 ３-7 DAパブリックグループのアクセス例

３．３．４ DAアイテムオブジェクト
DAオートメーションインタフェースではアイテム単位でのアクセスが可能なため、DAオートメーションイ
ンタフェースに限り DAアイテムオブジェクトがあります。

３．４ ブラウズ機能
ブラウズ機能とはその内容を閲覧する機能です。これによってDAクライアントはたとえば、そのDAサーバでどのようなアイテムが利用可能か、DAサーバに現在どのようなグループがあ
るのか、あるいはそのグループにどのようなアイテムが登録されているのか、などを知ることができます。

３．４．１ サーバアドレススペースのブラウズ（オプション）
そのDAサーバで利用可能なアイテムをブラウズすることができます。このとき、アイテムID、
データ型、アクセス権それぞれにフィルタをかけられます（このフィルタ仕様はベンダ依存）。
階層構造モデルの場合はさらにブラウズ位置の変更ができ、その時のブラウズ位置から上/下方向でアイテムをブラウズできます。

３．４．２ グループのブラウズ
グループに関してはブラウズのために下記の列挙(Enumeration)機能が規定されています。
そのDAクライアントが接続しているプライベートグループの列挙
そのDAクライアントが接続しているパブリックグループの列挙
そのDAクライアントが接続している全グループの列挙
そのDAクライアントが作成したすべてのプライベートグループの列挙
DAサーバで利用可能なすべてのパブリックグループの列挙
すべてのプライベートグループとすべてのパブリックグループの列挙※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 19３．４．３ アイテムのブラウズ
アイテムに関してはブラウズのために下記の列挙(Enumeration)機能が規定されています。
グループ中のアイテムのブラウズ
指定アイテムのアクセスパスのブラウズ

３．５

構成情報のセーブ･ロード機能

３．５．１ サーバアドレススペースと構成情報
サーバアドレススペースの定義方法についてはDAでは規定していませんが、例として次のような方法を挙げています。
・完全に固定・DA環境の外で完全に決める
・”intelligent”なDAサーバの立ち上げ時に自動的に定義（ポーリングして）・DAクライアントアプリケーションが要求しているアイテムの名前に基づき、”intelligent”なDA
サーバがその場で定義する
これとは別にDAサーバ全体の構成情報については、それらの情報のセーブ/ロードのインタ
フェースが用意されており、これを利用してDAサーバ立ち上げ/シャットダウン時での構成情報の保持ができる仕組みが作られています。これは、グループやアイテムの定義などクライ
アント特有の情報を対象にしてはいません。

３．５．２ 構成情報のセーブとロード（オプション）
DAサーバが保持する構成情報はIPersistFileインタフェースを実装することによりファイルセーブ／ロードができます。（IPersistFileインタフェースはOLE標準インタフェースのひとつで、これを実装するかどうかはベンダに依ります）

３．６

その他

３．６．１ 文字コード
DA インタフェースでの文字列パラメータはすべて UNICODE と規定されています。
(Windows NT の文字コード体系をそのまま利用している)。

３．６．２ NLS(National Language Support)
DA クライアントはグループの属性として LCID を設定できます。DA サーバが文字列データを返すとき、この LCID を参照して処理を行うことができます。(サーバ依存)※本文書の複製再利用には使用許諾契約が必要です。

Page 20

OPC(OLE for Process Control)技術概要書

４ OPC構造と動作
本章ではOPC仕様に従ったサーバおよびクライアントの構造と動作について説明します。
（注意） OPCサーバの実行環境はWindows NT 4.0 以上が必要となります。また、OPCクライ
アントの実行環境はWindows NT 4.0以上またはWindows 95 (Remote ServerへのアクセスにはDCOM９５が必用)・９８が必要となります。以下の説明はWindows NT 4.0の使用を前提にします。

４．１OPCサーバの構造
OPCサーバの構造にはIn-Proc Server (DLLサーバ)、Local / Remote Server (EXEサーバ)の実装形態があり、さらにパフォーマンス向上のためにLocal / Remote ServerにHandlerを併用した構造とすることが考えられます。

４．１．１ In-Proc Server
In-Proc ServerとはOPCサーバを利用するクライアントアプリケーションのプロセス空間内で動作するサーバです。すなわち、DLLとして実装されたサーバで、OPCクライアントからのOPC
サーバオブジェクト生成要求があると、自動的にOPCクライアントプロセス内にサーバプログ
ラムがロードされて実行されます。 In-Proc Serverの構造を図 ４--1に示します。

クライアントプログラム

デバイスへのアクセスI/F（サーバ固有)In-Proc
Server
OPC I/F

ユーザ作成

クライアントプログラムのプロセス空間ベンダ作成

図 ４--1 In-Proc Serverの構造

４．１．２ Local / Remote Server
Local / Remote ServerとはOPCサーバを利用するOPCクライアントアプリケーションとは別なプロセスとして動作するサーバです。すなわち、EXEプログラムとして実装されたサーバで、OPCクライアントからのOPCサーバオブジェクト生成要求があると、自動的に該当プログラムが実行され、サーバプロセスが生成されます。Local / Remote Serverの構造の概略を図 3-2(a)に示します。
Local / Remote Serverでは複数クライアントから接続要求があった場合、新たなサーバプロセ
スを生成せず単一のプロセス内で全てのOPCサーバオブジェクトを作成することが可能です。この構成ではサーバ内で物理デバイスに対する複数アクセスのロックを実現できます。
サーバの動作するマシンはクライアントと同じマシン(Local Server)でも異なるマシン(Remote
Server)でも可能です。異なるマシン間の接続にはDCOM (分散COM)によるRPC通信が使用されます。サーバから見た場合、同一マシン内での接続もリモートマシンからの接続も全く同様に行われるため、サーバプログラム内で接続形態を意識する必要はありません。
Local / Remote Serverとクライアントは異なるプロセス空間で動いているため直接、メソッドの呼び出しやデータ交換を行うことはできません。実際には、図 ４-2 (b) に示すように各々のプロセスにProxy / Stubと呼ばれるDLLがロードされ、OSの提供する通信機能を用いてメソッドの呼び出しやデータ交換を行います。
※本文書の複製再利用には使用許諾契約が必要です。

Page 21

OPC(OLE for Process Control)技術概要書

OPCカスタムインタフェースの場合、Proxy / Stub DLLは全てのサーバに共通に使用されます。このDLLはOPC仕様書付録のOPC.IDLから、MIDLと呼ばれるツールにより生成されます(OpcProxy.dll)。また、OPCオートメーションインタフェースの場合、OS標準のProxy / Stub
DLL (oleaut32.dll)が使用されます。

クライアントプログラム
OPC I/F
プロセス境界または
マシン境界

クライアントプログラムのプロセス空間Local / Remote
Server(EXE)

デバイスへのアクセスI/F（サーバ固有)サーバプログラムのプロセス空間(a) Local / Remote Serverの概念図

OS が通信手段を提供
異なるマシン間の通信にはRPCが使用されるクライアント
プログラム

ユーザ作成

OPC I/F

Proxy
(DLL)

Stub
(DLL)

Local / Remote
Server
OPC I/F(EXE)

Proxy / Stub DLLは全てのOPC Serverに対して共通に使用される (OpcProxy.dll)

ベンダ作成(b) Local / Remote Serverの実際の構造

図 ４ -2 Local/Remote Serverの構造

４．１．３ Handlerの併用
Local / Remote Server (EXEサーバ)の場合、プロセス間通信が行われるため、In-Proc Server(DLLサーバ)に比べると低速です。
そこでパフォーマンス改善のため、Handlerと呼ばれる一種のサーバを併用することがOPC
仕様では推奨されています。HandlerはクライアントとLocal / Remote Serverの中間に位置し、サーバからのデータをキャッシュするなどの機能を持ちます。Handlerはクライアントプロセス
空間内で動作し、Local / Remote Serverへのプロセスの切り替えやプロセス間通信、ネットワ
ーク通信によるオーバヘッドを軽減することができます。
一般的に、Handlerは各Local / Remote Serverに対応してデータアクセスを最適化したものをベンダが作成して提供します。構造としてはIn-Proc Serverと同様で、Handlerの中から実際のLocal / Remote Serverに接続します。
なお、一般的なOLEの Handlerはクライアントからの特定のEXEサーバに対するアクセス時にシステムによって自動的にロードされます。（レジストリの該当サーバのInProcHandler32エ
ントリに登録される。）しかし、OPC仕様書で規定しているHandlerは通常のDLLサーバと等価で、クライアントはHandlerを明示的に接続する必要があります。

※本文書の複製再利用には使用許諾契約が必要です。

Page 22

OPC(OLE for Process Control)技術概要書

クライアントプログラム

Handler
OPC I/F ローカル

Proxy
(DLL)

Stub
(DLL)

OPC I/F

Local/Remote
Server

キャッシュ
ユーザ作成

ベンダ作成

全てのOPC Serverに対して共通(OpcProxy.dll)

ベンダ作成

図 ４ -3 Handlerを併用した構造
サーバの構造によるパフォーマンスの違いについては次の記事を参照してください。この記
事のデータによれば、Local / Remote Serverに対して、Handlerを併用することによりかなりの性能改善が期待できることがわかります。
Microsoft System Journal 1995 December “OLE Q&A” (日本語版 1996年2月号 )※本文書の複製再利用には使用許諾契約が必要です。

Page 23

OPC(OLE for Process Control)技術概要書

４．２

OPCカスタムインタフェースとOPCオートメーションインタフェース

OPC仕様はOPCカスタムインタフェースとOPCオートメーションインタフェースと呼ばれる２種類のインタフェースを規定しています。データアクセスの機能としては２つのインタフェースはほぼ同等の機能を備えていますが、想定しているクライアントプログラムが異なります。
OPCサーバは、通常、両方のインタフェースを実装し、いずれの種類のクライアントプログラ
ムにも対応できるようにします。
２つのインタフェースの比較を表3-1に示します。

表 ４ -1OPCが規定するカスタムインタフェースとオートメーションインタフェースの特長
カスタムインタフェース

オートメーションインタフェース

用途

SCADA / MES / 解析ソフトなどの専用アプリケーション向け

スクリプト言語からの簡便なアクセス向け

クライアントの使用言語

C / C++

Visual Basic, Delphiなど(C / C++からのアクセスも可能)

パフォーマンス○△

単一アイテムデータアク
セス

△

○

OPCカスタムインタフェースはOLE / COMの基本的な機能をそのまま用いたインタフェース
で、高速に動作します。
OPCオートメーションインタフェースはVisual Basic等からのアクセスを実現するOLEオートメ
ーションインタフェースに従っています。スクリプト言語からのアクセスを容易にするための処
理がオーバヘッドとなり、OPCカスタムインタフェースよりもパフォーマンスが劣ります。
オートメーションインタフェースの実装方法は複数ありますが、OPC仕様では”Dual”と呼ばれる実装方法を使用することが決められています。Dualの実装方法に従ったサーバは、Visual
BasicなどのDual対応のオートメーションコントローラから呼び出された場合、IDispatch (通常のOLEオートメーション呼び出しで使用されるインタフェース)呼び出しではなく、VTABLE参照と呼ばれる呼び出し方法が使われます。これにより、OPCカスタムインタフェースに近い、高いパフォーマンスが得られます。
２つのインタフェースのパフォーマンスの違い、およびDual実装による高速化の効果は、前節で参照したMicrosoft System Journalの記事を参照してください。

４．３

OPCクライアントの構造

OPCクライアントは複数のベンダから提供されたOPCサーバを任意の個数アクセスすることが可能です。
OLE / COMの仕様により、サーバがIn-Proc Serverなのか、Local Serverなのか、Remote
Serverなのかを、OPCクライアントでは全く意識する必要がありません。
また、Handlerに対しては通常のIn-Proc Serverと同様にクライアントからアクセスします。実際のデバイスに対する処理を行うLocal / Remote Serverへの接続はHandlerが行います。

※本文書の複製再利用には使用許諾契約が必要です。

Page 24

OPC(OLE for Process Control)技術概要書

クライアントのプロセス空間クライアントプログラム

OPC I/FOPC I/F

In-Proc
Server(DLL)

ベンダA作成Local Server(EXE)

ベンダB作成OPC I/F
Remote Server(EXE)

OPC I/F
Handler(DLL)

Local / Remote
Server(EXE)

ベンダC作成ベンダD作成図 ４-4 OPCクライアントの構造

OPCサーバはそのインストール時にサーバに関するレジストリエントリ内にOPCという名前のキーを作成することになっています。OPCクライアントはレジストリからこのキーを検索することで利用可能なOPCサーバをリストアップすることができます。

４．４

データの読み込み（ Data Access 仕様）

４．４．１データのキャッシュ
DA仕様ではデバイスの実データを一旦DAサーバ内のバッファに格納する構造を想定しています。図 ４-5にこの構造を示します。DAサーバはグループ単位で設定された更新周期(UpdateRate)ごとに実際のデバイスからデータを取得しバッファに保存します。
更新周期はグループごとに設定される値です。DAクライアントはDAサーバに対して更新周期の希望設定値を申告します。DAサーバは希望値にできるだけ近い更新周期を実際に設定します。実際に設定された更新周期をDAクライアントに対して通知します。
グループやアイテムはActive属性を持ち、DAクライアントが設定できます。この属性がFALSEに設定されるとそのグループ/アイテムのキャッシュデータ更新を行いません。各時点
でDAクライアントが使用しないグループ/アイテムに対してFALSEを設定することにより、DA
サーバの負荷を軽減することができます。
オプションの仕様である”Percent Deadband”パラメータをDAサーバがサポートする場合、DAサーバは更新周期ごとにキャッシュ保存値とその時点での実データを調べ、変化幅の割合が指定した値よりも小さかったときにはキャッシュデータを更新しないという動作になります。
DAインタフェースの読み込みメソッドのパラメータには”CACHE”と”DEVICE”という属性があります。”CACHE”が指定されたとき、DAサーバはバッファにあるデータをDAクライアントに※本文書の複製再利用には使用許諾契約が必要です。

Page 25

OPC(OLE for Process Control)技術概要書返します。このため処理速度は高速です。一方、”DEVICE”が指定された場合は、その都度デバイスに直接アクセスしてデータを取得します。
なお、以上のキャッシュの構造と動作は“強く推奨”されているものですが、必ずしも守らなけ
ればならない仕様ではありません。

“DEVICE”指定の読み取り
クライアント“CACHE”指定の
読み取り

サーバ

デバイス

キャッシュ

指定した更新時間ごとに実データを取り込み

図 ４--5 DAサーバの読み込みとキャッシュ

４．４．２ 読み込みデータの値
DAサーバからDAクライアントに返されるデータ値 (Value)はVARIANT型の変数で扱われます。 VARIANT型とはデータ実体とそのデータタイプを示すフラグを収めた自己記述型のデータ型です。
DAサーバの返す値のデータタイプはDAクライアントから要求することができます。DAサーバが要求されたデータタイプをサポートしていない場合は警告が返され、返される値はDA
サーバがそのアイテムに対して標準で規定するデータタイプ(正規化データ型)となります。

４．４． ３ 読み込み機能
DAインタフェースではデータの読み込みについて同期読み込み、非同期読み込み、 リフレ
ッシュ、Subscriptionの４種類の方法を定めています。DAクライアントはこれら４種類の読み込みをどのように組み合わせて使用してもかまいません。DAサーバ側ではこの４種類の呼び出しが相互に影響を与えないように設計する必要があります。
同期読み込みを除く読み込み方法ではデータ転送のためにDAサーバとDAクライアント間に通信路が必要となります。これにはOLE / COMが標準で規定している
IConnectionPointContainer / IOPCDataCallbackインタフェースによる接続が使用されます。
DAクライアント側はIOPCDataCallbackインタフェースを実装し、DAサーバのIconnectionPointContainer:: EnumConnectionPoints またはIconnectionPointContainer::
FindConnectionPointメソッドでこれを登録し、あらかじめ接続を確立しておく必要があります。
IOPCDataCallback経由のデータ転送路は各読み込み要求の応答で共通に使用されます。
このため、転送されるデータの先頭にはトランザクション IDが付され、どの呼び出し要求に対応したデータなのかをDAクライアント側で判断することができるようになっています。

※本文書の複製再利用には使用許諾契約が必要です。

Page 26

OPC(OLE for Process Control)技術概要書

コメント [‹T“c1]:

４．４．３．１ 同期読み込み (IOPCSyncIO::Read)2
DAサーバはDAクライアントからの要求に対してメソッドの引数にデータを格納して返します。DAクライアントはそのメソッドがリターンするまで待ち状態となります。
DAクライアントは読み込み方法としてCACHEまたはDEVICEを指定します。CACHE指定の場合、グループおよび各アイテムのActive属性がTRUEになっているものに対してのみ有効なデータを返します。FALSEの場合は品質フラグが“データ無効”を示します。DEVICE指定の場合、Active属性とは関係なく実データを返します。
サーバ側の処理

クライアントプログラム

待ち状態

IOPCSyncIO::Read
呼び出し

IOPCSyncIO::Read戻り、データ取得完了

時刻

図 ４-6. 同期読み込みのタイムチャート

４．４．３．２ 非同期読み込み (IOPCAsyncIO2::Read)
DAサーバは要求を受付けた後すぐにメソッドをリターンします。DAクライアントはこの時点で他の処理を継続して実行できます。DAサーバ側は要求された全アイテムのデータを返す準備ができた時点でDAクライアント側のIOPCDataCallback::OnReadComplete メソッドを呼び出し、データを転送します。
DAクライアントは読み込み方法としてCACHEまたはDEVICEを指定します。CACHE指定の場合、グループおよび各アイテムのActive属性がTRUEになっているものに対してのみ有効なデータを返します。 FALSEの場合は品質フラグが“データ無効”を示します。DEVICE指定の場合、Active属性とは関係なく実データを返します。

サーバ側の処理

クライアントプログラム
IOPCDataCallback::OnReadComplete
経由によりデータ通知
IOPCAsyncIO2::Read
IOPCAsyncIO2::Read 戻り呼び出し

図 ４ -7. 非同期読み込みのタイムチャート
2

IOPCSyncIOインタフェースのReadメソッドを意味します。以下同様。

※本文書の複製再利用には使用許諾契約が必要です。

時刻

OPC(OLE for Process Control)技術概要書

Page 27

４．４．３．３ リフレッシュ (IOPCAsynIO2::Refresh)
DAサーバはこのメソッドが呼び出された場合、グループ内のすべてのActiveなアイテムについてそのキャッシュ値を更新し、変化のあったアイテムのデータをDAクライアント側の
IOPCDataCallback::OnDataChange メソッドを呼び出して転送します。
インタフェース規定上、読み込み方法としてCACHEまたはDEVICEが指定できますが、意味があるのはDEVICE指定の場合のみです。DEVICE指定でこのメソッドが呼び出されると、グループのActive属性には関係なく、グループ内のActiveなアイテムについてデバイスからデータを取得してキャッシュ値を更新し、データ転送を行います。
本メソッドの実行はグループのActive属性に無関係なため、グループをInactiveとした上でデータが必要なときに本メソッドを呼び出すことが可能です。このようにすると、メソッド呼び出し
時にのみデータが更新・転送されるのでサーバの負荷が軽減されます。次節で説明する
Subscription動作は不要だが非同期の読み込み動作が必要というクライアントの要求に対してはこの使用方法が適しています。
本メソッドによるキャッシュ値更新はグループの更新周期(UpdateRate)に基づくキャッシュ更新の自動実行タイミングには影響を与えません。たとえば更新周期が１時間に設定されていて、自動更新から４５分後にリフレッシュを実行したとすると、さらにその１５分後にキャッシュの更新が自動的に実行されます。

４．４．３．４ Subscription
DAサーバはグループの更新周期(UpdateRate)ごとにDAサーバ内のキャッシュ値を更新します。DAクライアント/サーバ間にIConnectionPointContainerによる接続が確立されている場
合、DAサーバはキャッシュ更新時にデータ値の変化をチェックし、変化があったアイテムについてそのデータをDAクライアントのIOPCDataCallback::OnDataChangeへ自動的に送信します。このデータ送信はトランザクション IDとして0という特別な値を設定するため、DAクライ
アントはリフレッシュによるデータと区別することができます。
DAサーバが“Percent Deadband”パラメータをサポートしている場合、アナログデータに関する上記のキャッシュ更新および通知を、指定した割合を超える変化が生じたアイテムのみに限定することができます。

※本文書の複製再利用には使用許諾契約が必要です。

Page 28

OPC(OLE for Process Control)技術概要書

４．４．３．５ まとめ
表 ４-2読み込み動作のまとめ
読み込み方法同期読み込み

ソース
Cache

グループ
Activeアイテム
ActiveCache

ActiveInactive

Cache

Inactive×

Device××

非同期読み込み×××

リフレッシュ

Cache

Active×

Cache

Inactive×

DeviceActive×

Device×

Inactive
Active×
Activesubscription

ActiveInactive×
Inactive××
×＝いずれの設定値でも同じことを示す。

サーバの動作指定されたアイテムについて有効なキャッシュデータを返す。
指定されたアイテムについて“無効”品質フラグを持つデータを返す。
指定されたアイテムについて“無効”品質フラグを持つデータを返す。
指定されたアイテムの現在のデバイス値を返す。
指定されたアイテムの現在のデバイス値を返す。
すべてのアクティブなアイテムについてキャッシュデータを返す。もしアクティブなアイテムが一つも無ければE_FAILを返す。
E_FAILを返す。
キャッシュを更新し、すべてのアクティブなアイテムについてキャッシュデータを返す。もしアクティブなアイテムが一つも無ければE_FAILを返す。
E_FAILを返す。
キャッシュ値が変化したアイテムすべてのデータを送る。
このアイテムのデータは送らない。
このアイテムのデータは送らない。

同期読み込みではメソッドの戻り値としてデータを返す。
そのほかの読み込みではDAサーバがIOPCDataCallbackのOnDataChangeまたはOnReadCompleteメソッドを呼び出してデータを送る。

４．５

データの書き込み（Data Access仕様）

４．５．１ 書き込みデータの値
DAクライアントは、デバイスに対して書き込みたい値をVARIANT型変数でDAサーバに渡します。
DAクライアントから渡されたデータのデータタイプが対象アイテムに対して適切でない（DA
サーバがサポートしていない）場合にはエラーとなります。

４．５．２ データの書き込み機能
DA仕様ではデータの書き込みについて同期書き込み、非同期書き込みの２種類の方法を定めています。DAクライアントはこれら２種類の書き込みを組み合わせて使用してもかまい※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 29

ません。DAサーバ側ではこの２種類の呼び出しが相互に影響を与えないように設計する必要があります。
なお、書き込み動作に関してはグループやアイテムのActive属性の値は影響を与えません。また、書き込み要求に対してはDAサーバは実際のデバイスへの書き込み完了（または失敗確認）まで実行する仕様になっており、キャッシュ動作は無関係です。

４．５．２.１

同期書き込み (IOPCSyncIO::Write)

DAクライアントは書き込みたいアイテム（複数可）の値を引数にこのメソッドを呼び出します。
DAサーバは実際にデバイスへの書き込みを実行し、全ての要求された書き込みが完了（または実行失敗を確認）するまでリターンしません。DAクライアントはメソッドが完了するまで待ち状態となります。

４．５．２.２

非同期書き込み (IOPCAsyncIO2::Write)

DAクライアントは書き込みたいアイテム（複数可）の値を引数にこのメソッドを呼び出します。
DAサーバは要求を受付けた後すぐにリターンします。DAクライアントはこの時点で他の処理を継続して実行できます。
DAサーバは実際にデバイスへの書き込みを実行し、全ての要求された書き込みが完了（または実行失敗を確認）した時点でDAクライアントに処理完了を通知します。
DAクライアントへの処理完了通知にはIOPCDataCallback::OnWriteCompleteメソッドの呼び出しが使われます。 DAクライアントはDAサーバとの間に３．４節にて説明した
IConnectionPointContainer / IOPCDataCallbackによる通信路をあらかじめ設定しておく必要があります。

４．６

データの同期（Ｓｙｎｃｈｒｏｎｉｚａｔｉｏn）

ここで同期と呼んでいるのは１回の処理で読み込みあるいは書き込みされる複数データの同時性のことをさしています。例として次のような問題があります。
z

すべてのアプリケーションはDAサーバから返されるあるアイテムに対するデータの値、
品質フラグ、タイムスタンプの同期がとれていることが必須と考えられます。

z

バッチ処理ではレポート作成に必要な複数の読み込みデータの同期が取れていること、またバッチ開始前に必要な指示データが全てダウンロードされていることが必要と考えられます。

これらのデータの読み書きの同期はDAインタフェース単独では保証していません。
サーバをマルチスレッドとした場合、処理スレッドが待ち状態になる場合があり、その再開時にはデータの処理時刻がずれてしまいます。通常、処理の同期が必要なデータにはロックをかけて対応しますが、その分だけ他の処理待ちが長くなる可能性が高くなります。処理待ちが増えると、サーバとしての処理性能は低下します。
したがって、サーバの対象とする実際のデバイスでのデータ同期の必要性を性能とのトレードオフで十分検討し、サーバを設計することが必要となります。

４．７

データの順序保証※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 30

すべてのDAサーバは同一デバイスに対する書き込み要求に対して要求された順序に従って処理を実行します。
たとえば、バッチ処理で考えると、書き込み順序が逆転した場合、必要なデータのダウンロ
ード前にバッチ開始フラグが立ってしまうというようなことが生じてしまいます。このため、デー
タ書き込みの順序保証が必要となります。
DAサーバがデータの順序保証を行うことはDAのインタフェース規定として必須ではありませんが、“強く推奨”されています。

４．８

サーバのマルチスレッド化

サーバのパフォーマンスを高めるためにはマルチスレッド化するのが有効です。OPC仕様ではサーバがどのようなスレッディングモデルを用いるかは定めていませんが、その処理内容から考えてフリースレッディングモデルを適用するのが妥当です。
このモデルによるマルチスレッド化ではスレッドセーフの保証はすべてサーバの責任となります。前述のデータの同時性や書き込み順序保証などの設計に十分注意が必要です。
フリースレッディングモデルの詳しい説明は下記を参照してください。
Microsoft System Journal 1996 May “Introducing Distributed COM and the New OLE
Features in Windows NT 4.0” (日本語版 1996年6月号)※本文書の複製再利用には使用許諾契約が必要です。

Page 31

OPC(OLE for Process Control)技術概要書

５

OPC対応ソフトウェア開発
本章ではOPC仕様に準拠したOPCサーバ／OPCクライアントソフトウェア開発の概要を説明します。OPC仕様書ではあまり触れられていない、開発に必要な資格、知識、項目、環境についての概要を記述します。さらに詳しい実装方法や開発手順については、“OPC実装ガイド”に解説されています。ただし，OPC実装ガイドを入手するにはOPC-F会員になる必要性があります。
まず、OPCサーバの開発概要を説明し、OPCクライアントの開発については“５．４ OPCクライ
アントの開発”でまとめて説明します。

５．１ 開発資格
OPCのロゴを使用したOPCサーバを製品化するにはOPC-J会員となるべきです。OPC-J会員になることにより次のような特典が得られます。
・ OPCのロゴ使用と製品カタログ掲載
・ サンプルコード取得
・ 各種ドキュメント取得
・ 最新情報入手
・ 技術サポート

なお、OPCサーバを開発するために必ずしもOPC-Jの会員となる必要はありません。公開されている仕様書に基づき開発し、販売することができます。しかし、この場合はOPCのロゴを使用して製品化することはできません。

５．２ 必要な知識
OPCサーバを作成するには以下の知識を必要とします（実装に関しては前述の”OPC実装
ガイド”を参照してください）。また、各項目に関しては6章の技術基盤説明を参考にしてください。

表 ５-1 OPCサーバ作成に必要な知識
分 類

項 目
インタフェースの定義

OLE/COMの一般知識

OLEコンポーネントの実装形態
マーシャリングの概要
OLEオートメーションの実装形態

OLE標準インタフェースの知識
OPCの知識コネクションポイントの実装形態
OPCで規定されたインタフェースの知識

また、上記の前提とする知識以外に、OPC-Jで開催される技術セミナーを受講することを推奨します。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 32

５．１ 開発項目
３章で説明したように、OPCサーバにはC/C++用のカスタムインタフェースと，主にVisual
Basic用のオートメーションインタフェースをサポートしたものが存在します。このうち，オートメ
ーションインタフェースをサポートしたOPCサーバは，OPC-Fから提供されるautomation
wrapper dllが使用可能なため，開発は不要です。ここでは，カスタムインタフェースをサポートしたOPCサーバに関する開発項目を示します。カスタムインタフェースをサポートしたOPC
サーバの構造には、In-Proc Server、Local/Remote Server(In-Proc Handlerなし）、Local/Remote Server(In-Proc Handlerあり）が存在しますが，すべての形式のサーバを開発する必要はなく、サーバベンダにとって適切なタイプのサーバを用意することになります。これらの特徴については、“３章 構造と動作”を参照してください。以下にカスタムインタフェー
スに関して開発に必要な項目を示します。

５．１.１ In-Proc Server(1)DLL形式のサーバ
OPC-Fから提供されるサンプルコードを利用して作成することができます。
(2)インストーラ
サーバ、タイプライブラリのインストールを行うとともに、レジストリにサーバオブジェク
トの情報を登録するものです。

５．１.２ Local/Remote Server(In-Proc Handlerなし)（１）EXE形式のサーバ
OPC-Fから提供されるサンプルコードを利用して作成することができます。
（２）Proxy/Stub DLL
OPC-Fから提供されるIDL（インタフェース定義言語）ファイルをMIDLコンパイラによりコンパイルして作成します。
（３）インストーラ
サーバ､タイプライブラリ、Proxy/Stub DLLのインストールを行うとともに、レジストリに
サーバオブジェクトの情報を登録するものです。

５．１.３ Local/Remote Server(In-Proc Handlerあり)（１）EXE形式のサーバ
OPC-Fから提供されるサンプルコードを利用して作成することができます。
（２）DLL形式のIn-Proc Handler
独自に作成する必要があります。
（３）Proxy/Stub DLL
OPC-Fから提供されるIDL（インタフェース定義言語）ファイルをMIDLコンパイラによりコンパイルして作成します。
（４）インストーラ
サーバ､In-Proc Handler､タイプライブラリ、Proxy/Stub DLLのインストールを行うとともに、レジストリにサーバオブジェクトの情報を登録するものです。
なお、サンプルコードやProxy/Stub DLL はOPC-Fより提供されております。サンプルコードは※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 33

C++で記述されたコードで基本的な機能が盛り込まれたスケルトンとなっています。
また、インストーラはOPC仕様で規定されているものではありませんが、製品としては必須のものです。これについてのサンプルコードはありません。

５．２ 開発プラットホームと開発ツール（１）開発プラットホーム - - - Windows NT 4.0以降
OPCサーバを開発するプラットホームとしては、Windows NT4.0以降が必要です。今後、他のプラットホームでも開発できる環境が整備されるかもしれませんが、現状はWindows
NT4.0のみしか動作を確認していません。なお，リモートマシンからDCOMを利用したテストを行うには，Windows NT 4.0 Servce Pack2以降が必要になります。

（２）開発ツール - - - Microsoft Visual C++ 5.0以降
OPCサーバを開発するツールとしては、Microsoft Visual C++5.0以降が必要です。他の開発ツールでもMicrosoft Visual C++5.0と同様の機能を持つ開発ツールであれば、開発することは可能ですが、OPC-Fが提供するサンプルコードや今後、作成が計画されている
OPC実装ガイドではMicrosoft Visual C++を前提に記述されることが予定されており、他の開発ツールはサポートされません。また、Microsoft Visual C++4.1以前のバージョンでは、
一部、開発に支障をきたします。

５．３ 認証OPC-Fが規定する適合性テストを受けて認証を取得する仕組みが現在，検討されています。仕組みが完成され次第，別途アナウンスを行う予定です。

５．４ OPCクライアントの開発製品としてOPCクライアントを開発する場合はOPCサーバを開発するのと同等の開発資格と認証が必要になります。製品としてではなく、各ベンダから購入したOPCサーバを単に利用するためのOPCクライアント開発には特に開発資格、認証の規定は適用されません。いずれの場合も必要とする知識はOPCサーバ開発の場合と比較して非常にわずかです。
OPCクライアントの開発ではOPCカスタムインタフェースで開発する場合とOPCオートメーションインタフェースで開発を行う場合で必要な知識、開発ツールが異なります。

OPCカスタムインタフェースでのOPCクライアント開発
CおよびC++言語での開発。
OPCオートメーションインタフェースでのOPCクライアント開発
Visual BasicやVBA（Visual Basic for Applications）での開発。

以下にOPCクライアントを開発する場合の必要な知識、開発プラットホームと開発ツールについて記述します。なお、各項目に関しては“6章 技術基盤説明”を参考にしてください。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 34

５．４.１ 必要な知識
表 ５-2 OPCカスタムインタフェースで開発する場合の必要な知識
分 類
OLE/COMの一般知識
OLE標準インタフェースの知識
OPCの知識項 目
インタフェースの定義
コネクションポイントの概要
OPCで規定されたインタフェースの知識

表 ５-3 OPCオートメーションインタフェースで開発する場合の必要な知識
分 類
OLE標準インタフェースの知識
OPCの知識項 目
OLEオートメーションの概要
OPCで規定されたインタフェースの知識

５．４.２ 開発プラットホームと開発ツール
５．４.２.1

OPCカスタムインタフェースで開発する場合

開発プラットホーム - - - Windows 95以降あるいはWindows NT 4.0以降
OPCカスタムインタフェースでOPCクライアントを開発するプラットホームとしてはWindows
95以降あるいはWindows NT 4.0以降が必要です。今後、他のプラットホームでも開発できる環境が整備されるかもしれませんが、現状はWindows 95あるいはWindows NT 4.0のみでしか動作を確認していません。なお，リモートマシンからDCOMを利用したテストを行うには，Windows NT 4.0 Servce Pack2以降が必要になります

開発ツール - - - Microsoft Visual C++ 5.0以降
OPCカスタムインタフェースでOPCクライアントを開発するツールとしてはMicrosoft VisualC++ 5.0以降が必要です。他の開発ツールでもMicrosoft Visual C++5.0と同様の機能を持つ開発ツールであれば開発することは可能ですが、OPC-Fとして提供するサンプルコード
や今後、作成が計画されているOPC実装ガイドではMicrosoft Visual C++を前提に記述されることが予定されており、他の開発ツールはサポートされません。また、Microsoft VisualC++4.1以前のバージョンでは、一部、開発に支障をきたす場合があります。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

５．４.２.2

Page 35

OPCオートメーションインタフェースで開発する場合

開発プラットホーム - - - Windows 95以降あるいはWindows NT 4.0以降
OPCクライアントを開発するプラットホームとしてはWindows 95以降あるいはWindows
NT 4.0以降が必要です。今後、他のプラットホームでも開発できる環境が整備されるかもしれませんが、現状はWindows 95あるいはWindows NT 4.0のみでしか動作を確認していません。なお，リモートマシンからDCOMを利用したテストを行うには，Windows NT
4.0 Servce Pack2以降が必要になります

開発ツール - - - Visual Basic 5.0 Professional Edition以降およびVBA（Visual Basic forApplications）の機能を持つ開発ツール
他の開発ツールでもOLEオートメーションのクライアント機能を持つ開発ツールであれば開発することは可能ですが、OPC-Fとして提供される予定のサンプルコードやOPC仕様書の資料ではVisual Basic以外の開発ツールはサポートされません。

※本文書の複製再利用には使用許諾契約が必要です。

Page 36

OPC(OLE for Process Control)技術概要書

６

OPCアプリケーションとOPCインタフェース

６．１OPCアプリケーション
OPCはOLE/COMの技術を基盤としたデータ交換インタフェースです。OLE/COMの技術を基盤とするOCXやActiveXコントロールへの応用などさまざまな部分で実装することが可能です。この節ではOPCアプリケーションの適用例やOPCインタフェースを使用したサンプル
プログラムについて記述します。

６．１.１ アプリケーションへの適用
アプリケーションとOPCインタフェースの結合および実装についてはさまざまな方法が考えられます。プロセス制御への適用例としては、ネットワークモニタ、デバイスステータス、履歴管理、デバイス制御、ファイル、データ、プログラムのアップロードおよびダウンロードなどで実装可能です。OPC仕様に基づいたインタフェースに準拠していれば、クライアント／サーバ間のデータ交換やコンフィグレーションなどのあらゆる通信を簡単に実行することができます。次の例ではアプリケーションとハードウェアおよび外部アプリケーションとのOPCインタフ
ェースでの適用例を示しています。
･外部アプリケーション(Visual Basic,VC++,Excelなど)･RDB(SQL Server,Oracleなど)とのデータ交換･ネットワーク制御など

OPCクライアント②
アプリケーション

OPCサーバ

ＭＭＩ、データロギング、デバイス制御
ネットワークモニタ、デバイスステータス、履歴管理、
データ読み取りと書き込み(同期/非同期/ポーリング)など

OPCクライアント①
OPCサーバ･ハードウェアのアクセス(PLC,DCSなど)･DDEアプリケーション、ドライバなど

図 ６ -1 OPCの適用例(1)ハードウェアとのインタフェース（①）
アプリケーションとハードウェア間のインタフェースに使用する例です。この場合、OPCサー
バはハードウェアとのインタフェースを制御するI/Oドライバプログラムになります。アプリケー
ション（OPCクライアント）はOPCサーバへの要求により、ハードウェアのデータや設定情報などを取得、設定することができます。

※本文書の複製再利用には使用許諾契約が必要です。

Page 37

OPC(OLE for Process Control)技術概要書(2)外部アプリケーションとのインタフェース（②）
アプリケーションと外部アプリケーションとのデータ交換を行うインタフェースの例です。この場合の外部アプリケーションとは、Visual BasicやVisual C++などで作成したカスタムアプリケーションやRDBとのデータ交換を実行する制御アプリケーションなどです。アプリケーションにOPCのインタフェース（OPCサーバ機能）を実装することにより、外部アプリケーションからのアクセスが簡単に実行できます。

６．１.２ アプリケーションからオブジェクトへのアクセス
OPCオートメーションインタフェースはOLEオートメーションインタフェースに従っており、あるアプリケーションが別のアプリケーションで実装されたコンポーネントを操作したり、別のアプ
リケーションが操作できるようにコンポーネントをエクスポーズ（公開）することを可能にします。OLEオートメーションオブジェクトにアクセスするアプリケーションのことを、OLEオートメ
ーションコントローラと呼びます。OLEオートメーションコントローラは、別のアプリケーションに存在するOLEオートメーションオブジェクトを作成し、OLEオートメーションオブジェクトがサポートするプロパティとメソッドを使用してこれらのオブジェクトを簡単に操作することができます。このしくみは、オブジェクトが管理するデータ領域や機能を、あたかも自分自身のアプリ
ケーションのものであるかのように扱えるようにしています。
オートメーションコントローラ

VendorInfo
UpdateRate.....
OPCRead()
{
.....
}

オートメーションオブジェクト

公開

データ
VendorInfo
UpdateRate

プロパティ

機能
OPCReadメソッド

公開

図 ６-2 オートメーションコントローラとオートメーションオブジェクト
Visual Basic を使用して、オートメーションオブジェクトのプロパティに値をセットするには、<オブジェクト変数>.<プロパティ名> = <値>と記述します。また、オブジェクトからプロパティ値を取得するには、<格納する変数> = <オブジェクト変数>.<プロパティ名>と記述します。これらの構文を使用することにより、アプリケーションからオートメーションオブ
ジェクトに簡単にアクセスすることが可能です。

※本文書の複製再利用には使用許諾契約が必要です。

Page 38

OPC(OLE for Process Control)技術概要書

Description(Read-only) The unique identifier for this item.

Syntax

ItemID As String

ExampleDim AnOPCItem as OPCItem
Set OPCItem = GetOPCItem(SomeItemServerHandle)
VB Syntax Example (getting the property):
Dim CurrentValue As String
Dim SomeValue As String
CurrentValue = AnOPCItem.ItemID

リスト ６-1 OPCオートメーションインタフェースの使用例

６．１.３ OLEコントロール、ActiveXへの応用
OLEコントロール(OCX)は、さまざまな開発環境で使用することができる、OLEを介して機能している再利用可能なソフトウェアコンポーネント（汎用性のある部品）です。OLEコントロー
ルは機能を拡張したIn-Proc Serverです。OLEコントロールには①３２ビット環境で使用できる部品規格、②データ取り込み容量の制限が大幅に緩和されている、③プロパティなどで容易にカスタマイズ可能、などの優れた特徴があります。

アプリケーション
データロギング、MMI（マンマシンインタフェース）
PCベースDCS、PCベースのロジック制御など
OLEオートメーション

OLEコントロール
制御信号

入出力データ

データ転送レイヤオブジェクト
OLE UDTによるクリップボード形式の転送など

デバイスドライバ
オブジェクトデバイスドライバ
オブジェクトデバイスドライバ
オブジェクト

デバイス依存の通信
PLC,DCS,PID

フィールドI/Oポイント
リアルタイムプロセス

図 ６-3 OPCコンポーネントを連携させたシステム構成※本文書の複製再利用には使用許諾契約が必要です。

Page 39

OPC(OLE for Process Control)技術概要書

図６-3 はOLEコントロール、ActiveXコントロールとOLEオートメーションを使用して、OPCコン
ポーネントを連携させ、プロセス制御アプリケーションを構築する例です。OLEオートメーショ
ンインタフェースを使用して、各種デバイスドライバオブジェクトを経由し、各ハードウェアにアクセスしています。アプリケーションとハードウェアとのインタフェースをオブジェクトインタフ
ェース、OLEインタフェースで標準化しています。下記に現状入手可能なＡｃｔｉｖｅＸコントロールの例を記載します。
ActiveXコントロール 製品例 （注）分野

ActiveBar

GUI作成支援

PerfectGrid

GUI作成支援

ChartBuilder

グラフ作成

ChartFX

グラフ作成

VS-VIEW

帳票作成・印刷

ImageGear/ActiveX

画像処理用ソフトウェア開発支援

WinRT-VB

ハードウェア制御（ポート入出力、メモリ入出力）

ComponentWorks

機器制御（データ解析・表示、計測制御）

DbComplete

データベースアクセスアプリケーション構築用

VBMan ActiveX Control for RS232C

RS232Cの通信制御コントロール

FA-Engine

機器制御（注）「開発ツール完全ガイドʼ９９」(日経BP社)より抜粋
このようなOLEコントロール、ＡｃｔｉｖｅＸコントロールとOLEオートメーションを組み合わせて開発することにより、アプリケーションで必要な機能をすべて新規に開発する必要はなくなります。すなわち、アプリケーション内で利用できるところはコンポーネントとして組み込み、それを利用できます。開発者はアプリケーション本来の機能部分の開発に専念することができます。
ActiveXはインターネットに対応するためにいろいろな工夫が追加されています。インターネ
ット上で遠隔地のサーバからダウンロードされることを前提に設計されており、通信負荷を下げる目的で、よりモジュールサイズが小さくなるようにシンプルに設計されています。ActiveX
コントロールは他のActiveXコントロールまたは任意のCOMオブジェクトで動作します。

DCOM
ActiveXコントロール

ActiveXコントロール

COMオブジェクト

Internet Explorer

COMオブジェクト

ActiveXコントロール

図 ６-4 ActiveXコントロールの例(1)※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 40

図5-5は多数のプロセス制御用のActiveXコントロールをインターネットエクスプローラ上で表示させている例です。リアルタイムチャートやメータなどの各部品のデータ表示はネットワー
ク上のリモートPCからのデータを表示することも可能です。

図 ６-5 ActiveXコントロールの例(2)６．２ OPCインタフェース概要
OPCサーバオブジェクトはデータソースの特定のクラスからデータを得る方法を提供します。
利用できるソースの数とタイプはサーバインプリメンテーションの関数です。
OPCサーバには“グループ“として定義される機能があります。これらのグループによって、
OPCクライアントはアクセスしたいデータを取りまとめて扱うことができ、それを一つの単位として起動させたり停止させたりすることができます。さらに、グループはOPCクライアントに、変更するとき、通知できるように項目リストへ”署名”方法を提供します。
OPCインタフェースには、COMオブジェクトのインタフェースを経由してアクセスするカスタム
インタフェースと、“OPCオートメーションラッパDLL”経由でCOMオブジェクトインタフェース
をアクセスするオートメーションインタフェースがあります。
“OPCオートメーションラッパーDLL”は、ＯＰＣサーバのカスタムインタフェースと、オートメー
ションインタフェースを使用するクライアントの間を翻訳するもので、OPC Data Access Ver2.
０対応として各ベンダ共通に使えるようOPC-Fから提供されるものです。
従来のＶｅｒ１．０ではオートメーションインタフェースを実現するために、ＯＰＣサーバーに実装されたＩＤｉｓｐａｃｈインタフェースによって、カスタムインタフェースをエクスポーズしました
が、Ｖｅｒ２．０では、この“OPCオートメーションラッパーDLL”が同様の機能を提供するため、
ＯＰＣサーバにＩＤｉｓｐａｔｃｈインタフェースを実装する必要はありません。
一般に、クライアントプログラムは、VisualBasic,VBAのようなスクリプト言語などを利用してオートメーションインタフェースを使用します。また、一般に、C++言語で作成される、最大のパフォーマンスを達成する目的をもつクライアントプログラムはカスタムインタフェースを使用することが最も簡単でしょう。

※本文書の複製再利用には使用許諾契約が必要です。

Page 41

OPC(OLE for Process Control)技術概要書

６．３ DAオートメーションインタフェース
OLEオートメーションは、“ DA オートメーションラッパーDLL” を通して、ＯＰＣデータ アクセス カスタムインタフェースを、ほぼ忠実にエクスポーズします。実装されているカスタムインタ
フェースの一部のオプション機能や未実装のオプション機能を、オートメーションインタフェースがアクセスした場合には、デフォルトとして仕様書に記載されている動作をします。
DAオートメーションは、OLEオートメーションコントローラを持つアプリケーション(VB５/6、
C++, VBA５/６ アプリケーション)をサポートします。ただしＶＢＳｃｒｉｐｔやＪａｖａ Ｓｃｒｉｐｔのサポー
トは範囲外です。

６．３．１

DAオートメーションオブジェクトモデル

DAオートメーションインタフェースは図 ６-６のように DAサーバ（OPCServer）、DAグループ
コレクションオブジェクト（OPCGroups）とDAグループ（OPCGroup）、およびOPC DAアイテム
コレクションオブジェクト（OPCItems）とそのDAアイテム（OPCItem）のオブジェクト階層から成り立っています。DAグループコレクションオブジェクト（OPCGroups）とDAブラウザオブジェク
ト（OPCBrowser）はDAサーバオブジェクトに含まれています。
各オブジェクトの概要を図６-６に記載します。

OPCServer

ＯＰＣＢｒｏｗｓｅｒ

ＯＰＣＧｒｏｕｐｓ（ｃｏｌｌｅｃｔｉｏｎ）

ＯＰＣＧｒｏｕｐ

ＯＰＣＩｔｅｍｓ（ｃｏｌｌｅｃｔｉｏｎ）

ＯＰＣＩｔｅｍ

図 ６-６ DAオートメーションオブジェクトの階層構造

表６-1 DAオートメーション オブジェクト モデル※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

オブジェクトPage 42

説明（名称）

OPCServer（OPCサーバー）

OPCサーバオブジェクト のインスタンスで、他のオブジェクトを参照する前に生成する必要があります。OPCGroupｓコレクションを含み、OPCBrowserオブジェクトを生成します。

DABroｗser（DAブラウザ）

DAサーバ構成中のアイテムの、名前をブラウズするオブジェクト。
DAサーバーオブジェクトのインスタンスごとに1つだけ生成することができます。
クライアントがOPCサーバー中に生成したすべてのOPCグループ
オブジェクトのオートメーションコレクション。

OPCGroups（OPCグループコレクシ
ョン）
OPCGroup（OPCグループ）
OPCItemｓ（DAアイテムコレクション）
OPCItem（DAアイテム）

ＯＰＣグループオブジェクトのインスタンス。
ステータスの管理やOPCアイテムコレクションでのデータ収集機構を行います。
クライアントがDAサーバー中に生成したすべてのDAアイテムオブ
ジェクトのオートメーションコレクション。
アイテム定義、現在値、ステータス、最終更新時刻などを保守する
オブジェクト。カスタムインタフェースでは、分離したアイテムオブ
ジェクトを提供していない点に注意してください。

６．３．２ DAサーバオブジェクト
DAサーバーオブジェクトは、データソース（DAカスタムインタフェースサーバー）との交信やデータアクセス（読み出し・書き込み）の方法を提供するもので、グループとアイテムのオブジ
ェクトを作成する前にDAサーバ オートメーションオブジェクトを作成し、次にDAデータアクセ
スカスタムインタフェースに“connect”メソッドを使って接続します。
DAサーバは次に示すプロパティ、メソッド、イベントを用意しています。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

プロパティ

説明

StartTime
CurrentTime
LastUpdateTime
MajorVersion
MinorVersion
BuildNumber
VendorInfo

DAサーバが起動された時間(UTC)。
DAサーバで識別する現在時間(UTC)。
このDAクライアントへの最終データ更新時間(UTC)。
DAサーバソフトウェアのメジャーバージョン。
DAサーバソフトウェアのマイナーバージョン。
DAサーバソフトウェアのビルド番号。
DAサーバについての追加情報として用意されるベンダ独自の文字列。（会社名およびサポートするデバイスのタイプを含めることを推奨します。）
DAｻｰﾊﾞｰの実行状態を返す（OPCServerStatusの一部）。
（R/W）ロケール識別（言語ID）文字列を返す。
サーバ固有値。サーバーの利用可能なバンド幅比率（％）を返す。カスタムサーバーのGeStaus（）から得る値。
DAグループオブジェクトのコレクション。DAサーバーオブジェクトのデフォルトのプロパティ。
サーバーのパブリックグループ名を返す。

ServerState
LocaleID
BandWidth
OPCGroups

Page 43

PublicGroupNameｓ
クライアントが接続したサーバー名を返す。
ServerName
クライアントが接続したサーバーのノード名を返す。
ServerNode（R/W）クライアント がサーバーに名前を登録する。デバッグ用。
ClientName（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。
メソッド

説明

GetOPCServers
Connect
Disconnect
CreateBrowser
GetErrorString
QueryAvailableLocaleI
Ds
QueryAvailableProperties
GetItemProperties
LookUpItemIDs

登録されたDAサーバーの名前（ProgID）を返す。
カスタムインタフェースを実装したDA Data Accessサーバに接続する。
DAサーバーから切断する。
DAブラウザオブジェクトを生成する。
エラーコードをロケールIDで指定の文字列に変換する。
サーバー・クライアントセッション間で、利用できるロケールIDを返す。
利用できるプロパティを知りたいIアイテムDを指定すると、利用できるプロパティのIDコードリストとデスクリプション（テキスト）を返す。
アイテムIDとプロパティIDから、現在のデータ値のリストを返す。
プロパティIDから該当するアイテムIDのリストを返す。

イベント

説明

ServerShutDown

サーバーがシャットダウンを行うことをクライアントに通知する。
クライアントはサーバーと切断できるようこのメソッドを提供する。

６．３．２．１ DAブラウザ オブジェクト
DAブラウザオブジェクトは、サーバー内にあるブランチやアイテムの名前のコレクションです。ブラウジングはオプションですので、サーバーがサポートしてない場合は、
CreateBrowserを実行してもこのオブジェクトは生成されません。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

プロパティ

説明

Organization
Filter

DAサーバのネームスペースのタイプ（フラットまたは階層）。
（R/W）ShowBranchesやShowLeafsメソッドに適用するフィルタです。このフィルタを使って名前リストの範囲を絞ることができます。
（R/W）ShowLeafsメソッドに適用する要求データタイプです。
（R/W）ShowLeafsメソッドに適用する要求アクセス権です。
ツリー構成における現在位置を返します。
コレクション中の、アイテム数を返します。

Page 44

DataType
AccessRights
CurrentPosition
Count（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。

メソッド

説明

Item

ShowLeafs
MoveUpMoveToRoot
MoveDown
MoveToGetItemID
GetAccessPath

ＩｔｅｍＳｐｅｃｉｆｉｅｒ（コレクション中のインデックス）にてインデクス
された名前を返します。
現在のブラウズポジションのブランチ名をコレクションにいれます。
現在のブラウズポジションのリーフ名をコレクションにいれます
階層を１つ上に移動します。
第１階層に移動します。
下位の指定ブランチに移動します。
絶対位置に移動します。
アイテムの名前から、アイテムIDを返します。
アイテムIDのアクセスパスを文字列で返します。

イベント

説明

ShowBranches

−

６．３．３

DAグループコレクション（Groups）オブジェクト

DAグループコレクションオブジェクトは、DAグループ オブジェクトのコレクションで、これらの生成、削除、管理を行うオブジェクトです。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

プロパティ

説明

ParentDefaultGroupIsActive

親のDAサーバーへのレファレンスを返します。
（R/W）Groups.Addで生成されたOPCGroupsのために、アクティ
ブステートをデフォルトとします。
（R/W）Groups.Addで生成されたOPCGroupsのために、デフォ
ルトのUpDateRateを設定（１０００ｍｓ）します。

DefaultGroupUpdateR
ate
DefaultGroupDeadBａｎdDefaultGroupLacaleID
DefaultGroupTimeBias

Page 45（R/W） Groups.Addで生成されたOPCGroupsのために、デフォ
ルトのDeadBand（０％）を設定します。
（R/W） Groups.Addで生成されたOPCGroupsのために、デフォ
ルトのLocaleIDを設定します。
（R/W） Groups.Addで生成されたOPCGroupsのために、デフォ
ルトのTimeBias（０分）を設定します。
コレクションのプロパティ

Count（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。

メソッド

説明

Item

ConnectPublicGroup
RemovePublicGroupOPCGroupsのデフォルトメソッド。 ItemSpecifier(コレクションのインデックス)で指定されるOPCグループを返します。
新しくDAグループを生成し、コレクションに追加する。
ItemSpeｃｉｆｉｅｒのDAグループを返します。
ItemSpeｃｉｆｉｅｒのDAグループを削除します。
ｓｅｒｖｅｒｓｈｕｔｄｏｗｎに備えて、すべてのDAグループとDAアイテ
ムを削除します。
ＰｕｂｌｉｃＧｒｏｕｐに接続します。
ＰｕｂｌｉｃGroupを削除します。

イベント

説明

AllGroupsDataChange

複数のグループ間にまたがるデータ変化を受け、処理する一つのイベントハンドラの実装用。

Add
GetOPCGroup
RemoveRemoveAll

６．３．３．１ DAグループ オブジェクト
DAグループは、クライアントが用途に応じて、アクセスしやすくデータを構成する方法を提供するものです。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

プロパティ

説明

ParentName
IsPublic
IsActive

親サーバーオブジェクトへのレファレンスを返します。
(R/W)グループの名前の書き込みまたは読み出し。
グループがPublicの時にはTrueを返します。
（R/W）グループのアクティブ状態をコントロールします。InActive
なグループはデータの収集を行いません。
(R/W)グループへの非同期通知をコントロールします。
(R/W)グループにつける値。データやステータスとともにクライアン
トに返されます。
サーバーがグループに割り当てたユニークな値。
(R/W)ロケールIDの設定、読み出し。
(R/W)データのタイムスタンプをデバイスのローカルタイムに変換するために必用な情報。
(R/W)デッドバンド（フルスケールの％；0-100）を指定します。
(R/W)アプデートレート（ｍｓ単位）を指定します。
OPCIemオブジェクトのコレクション。

IsSubscribed
ClientHandle
ServerHandle
LocaleID
TimeBias

Page 46

DeadBandUpdateRate
OPCItems（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。

メソッド

説明

SyncRead

グループ内アイテムのデータ値、品質フラグ、タイムスタンプを同期読み出しします。データ値は、CacheまたはDeviceから読み出します。
グループ内アイテムに、サーバーハンドルとデータ値を同期書き込みします。データ値はDeviceに書き込まれます。
グループ内アイテムのデータ値、品質フラグ、タイムスタンプを非
同期読み出しします。結果はASyncReadCompleteイベント経由で返されます。
グループ内アイテムに、サーバーハンドル、トランザクションIDとデータ値を非同期書き込みします。結果はAsyncWriteCompleteイ
ベント経由で返されます。
グループ内アクティブな全アイテムのイベントを発生させます。結果はAsyncRefreshCompleteイベント経由で返されます。
未処理のトランザクションをキャンセルします。結果はASyncCancelCompleteイベント経由で返されます。

SyncWrite
AsyncRead

AsyncWrite

AsyncRefresh
AsyncCancel

イベント

説明

DataChange

グループ内アイテムのデータ値、またはデータ値の品質フラグに変化が起きたときに発生します。なおグループのUpDateRateより早く発生することはありません。
AsyncRefreshが完了したときに発生ます。
AsyncWriteが完了したときに発生します。
AsyncCancelが完了した時に発生します。

AsyncRefreshComplete
AsyncWriteComplete
AsyncCancelComplete※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 47

６．３．３．２ DAアイテムコレクション （Items）オブジェクト
DAアイテムに対するデフォルトのプロパティを有しており、DAアイテムが加えられたとき、下記Defaltｘｘｘが、その初期状態になります。
プロパティ

説明

ParentDefaultRequestedData
Type
DefaltAccessPath

親であるDAグループオブジェクトを返します。
（R/W）Ａｄｄコールを使う時の、要求データタイプのデフォルト値（
VT_Empty（cannonical data））。

DefaultIsActive（R/W）Addコールを使うときの、アクセスパスのデフォルト値（ʻʼʻʻ）。
（R/W）Addコールを使うときのデフォルトアクティブステート（True）
値。
コレクション中のオブジェクト数を返します。

Count（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。

メソッド

説明

Item

SetClientHandles
SetDataTypes

ItemSｐecifierで指定するOPCItemsコレクション内のDAアイテムを返す。
Addの戻り値（サーバハンドル）で指定するDAアイテムを返す。
新しいDAアイテムオブジェクトを生成してコレクションに追加する。
そのプロパティは、DAアイテムコレクションオブジェクトのデフォル
ト値で決まります。
DAアイテムを削除します。
Addメソッドで正しくDAアイテムが生成されたか否か決める。
DAアイテム個々に付いて、アクティブまたは非アクティブに設定する。
グループ内アイテムのクライアント ハンドルを設定します。
グループ内アイテムの要求データタイプを設定します。

イベント

説明

GetOPCItem
AddItemRemoveValidate
SetActive---※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 48

６．３．３．３ DAアイテムオブジェクト
DAアイテムはサーバー内のデータソースへのコネクションをあらわします。個々のアイテム
は、データ値、品質フラグ、タイムスタンプより構成されます。
プロパティ

説明

ParentClientHandle

親のDAグループオブジェクトへのレファレンスを返します。
（R/W）DAアイテムにクライアント ハンドルを設定します。このハンドルは、DAグループのイベント発生時にクライアントに返されます。
サーバーによって割り当てられたハンドルデータを返す。ハンドル
データは個々のDAアイテムをユニークに識別する値。
クライアントが指定したアクセスパスを返す。
アイテムのアクセス権を返す。
このアイテムのユニークな識別子を返す。
（R/W）このアイテムのデータ収集状態フラグを設定。Trueであればアイテムはアクティブ。
（R/W）アイテムのデータ値を返すときの、要求データタイプ。
サーバーから読み出した、最新のデータ値。
サーバーから読み出した、最新の品質フラグ。
サーバーから読み出した、最新のタイムスタンプ。
サーバー内のネイティブなデータタイプを返します。
Engineering Unit（EU）のタイプに関する情報を返します。
Engineering Unit情報を含むＶａｒｉａｎｔ値。

ServerHandle
AccessPath
AccessRight
ItemID
IsActive

RequestedDataType
Value
Quality
TimeStamp
CanonicalDataType
EUTypeEUInfo（注）（R/W）は読み出し・書き込みのプロパティをあらわします。注記の無いものは読み出し
専用です。

メソッド

説明

Read
Write

サーバーからアイテムをブロック読み出しします。
サーバーからアイテムをブロック書き込みします。

イベント

説明

――

※本文書の複製再利用には使用許諾契約が必要です。

Page 49

OPC(OLE for Process Control)技術概要書

６．４

DAカスタムインタフェース

図６-７〜図６-８はDAオブジェクトとインタフェースの要約です。インタフェースのいくつかがオプションであることに注意してください。（オプションのインタフェースは[ ]で示されています。）
なお、インタフェースの名前には次のような取り決めがあります。
IOPCxxx

OPCカスタムインタフェース

Ixxx

OLE標準インタフェース(IPersistFile,IDataObjectなど)
IUnknown

IOPCCommon
IOPCProperties
IOPCServer[IOPCServerPublicGroups][IOPCBrowseServerAddressSpace][IPersistFile]

Standard
OPC Server
ObjectIConnectionPointContainer

図 ６-７ 標準（カスタムインタフェース）DAサーバオブジェクト

IUnknown

IOPCItemMgt
IOPCGroupStateMgt[IOPCPublicGroupStateMgt]
IOPCSyncIO
IOPCASyncIO2
IConnectionPointContainer[IOPCAsyncIO]old[IDataObject]old

Standard
OPC Group
Object

図 ６-８ 標準（カスタムインタフェース）DAグループオブジェクト

６．４．１ DA カスタムインタフェース オブジェクト
DAカスタムインタフェースには次のカスタムオブジェクトがあります。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書•

DAサーバオブジェクト•

DAグループオブジェクト

Page 50

DAカスタムインタフェースは、DAコンポーネントとオブジェクトのインタフェースと動作についてのインタフェースです。DAサーバの開発者はこの節で定義された機能を用意することによりDAオブジェクトを実装することができます3。また、この節ではDA準拠のコンポーネントを作成するために必要な標準のOLEインタフェースの動作についても記述しています。
列挙オブジェクトとそのインタフェースについてはOLEの仕様によって十分に定義されているので、ここでは簡単に記述されています。列挙には以下のインタフェースがあります。
•

グループの列挙 - (IOPCServer::CreateGroupEnumerator)•

アイテム属性の列挙 - (IOPCItemMgt::CreateEnumerator)•

サーバアドレススペースの列挙 (IOPCBrowseServerAddressSpace::BrowseOPCItemIDs)•

アクセスパスの列挙 - (IOPCBrowseServerAddressSpace::BrowseAccessPaths)

６．４．２

DAサーバオブジェクト

DAサーバオブジェクトはDAサーバをエクスポーズするメインオブジェクトです。

６．４．２．１ IOPCServerインタフェース
DAサーバのメインインタフェースです。
メンバ

説明

AddGroup
GetErrorString

DAサーバへグループを追加します。
DAサーバのエラーコードに対応するエラー文字列を返します。
同一DAクライアントによって作成されたプライベートグループのポインタを返します。（パブリックグループへのアタッチには
GetPublicGroupByNameを使用します。）
DAサーバの現在の状態を取得します。
グループを削除します。
DAサーバで用意されたグループの様々な列挙を作成します。

GetGroupByName

GetStatus
RemoveGroup
CreateGroupEnumerator

６．４．２．２ IOPCServerPublicGroupsインタフェース(オプション)
パブリックグループを管理するためのインタフェースです。
メンバ

説明

GetPublicGroupByNameRemovePublicGroup

DAクライアントをパブリックグループへ接続する。グループへのポインタを返します。
パブリックグループを削除します。

６．４．２．３ IOPCBrowseServerAddressSpaceインタフェース(オプション)
DAサーバで利用可能なアイテムIDをブラウズするためのインタフェースです。

3

OLE標準の一部のインタフェースについては省略されています。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

メンバ

説明

QueryOrganization
ChangeBrowsePosition
BrowseOPCItemIDs

システム構造がフラットか階層構造かを調べます。
階層スペース内で’Up’ または‘Down’へ移動します。
アイテムIDのリスト(IEnumString)を返します。（ブラウズの位置はChangeBrowsePositionで設定される。）
階層スペース内のアイテムIDを取得します。
アイテムＩＤのアクセスパス(AccessPaths)をブラウズします。

GetItemID
BrowseAccessPaths

Page 51

６．４．２．４ IPersistFileインタフェース(オプション)
DAサーバの構成情報をファイルにセーブしたり、ファイルからロードするためのインタ
フェースです。
メンバ

説明

IsDirty
Load
Save
SaveComplete d
GetCurFile

構成情報に変更があったかどうかを返します。
構成情報をロードすることをDAサーバに要求します。
構成情報を保存します。
スタブとして実装します。
現在ロードされている構成情報ファイルの名前を返すようにDA
サーバに要求します。

６．４．２．５ IOPCItemProperties (new4)
DAサーバで利用可能なアイテムIDをブラウズするためのインタフェースです。
IOPCBrowseServerAddressSpaceやEnumItemAttributesなどと似た機能ですが、より簡単に少数のItemIDをブラウズするためのインタフェースです。
通常、あるDA ItemID（ユニーク）には、それに関連するさまざまなプロパティ（値、品質、Hi,Lo.など）が割り当てられます。このプロパティには、その種類ごとにプロパティIDがDAで定められています。
メンバ

説明QueryAvailableProperties
GetItemProperties

指定のItemIDに対して、利用できるプロパティIDを返します。

LookupItemIDs

クライアントが要求するItemIDとプロパティIDに対して、現在のデータリストを返します。
クライアントが要求するItemIDとプロパティIDに対して、該当する
ITEMIDリストを返します。

６．４．２．６ IConnectionPointContainer（new）
IDAShutdown（クライアントに実装）とのconnection pointをアクセスするためのインタフェー
スです。

4

newは、ver2.0で追加になったインタフェースを示します。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

メンバ

説明

EnumConnectionPoints

DAサーバーとクライアント間でサポートされているconnectionｐｏ
ｉｎｔの列挙を生成します。
DAサーバーとクライアント間にある特定のconnection pointsを検索します。

FindConnectionPoint

Page 52

６．４．２．７ IOPCCommon （new5）
特定のサーバー／クライアントセッションで有効なLocaleIDの設定などを行うインタフェー
スです。他のOPCｻｰﾊﾞｰ（AlarmandEventなど）と共通に使うことができます。
メンバ

説明

SetLoacleID
GetLocaleID
QueryAvailableLocaleIDs
GetErrorString
SetClientName

デフォルトのLocaleIDを設定します。
デフォルトLocaleIDを返します。
利用可能なLocaleIDのリストを返します。

６．４．３

サーバー固有のエラーコードを返します。
サーバーにクライアントの名前を登録することができます。（デバッグ用）

DAグループ オブジェクト

DAグループオブジェクトはDAサーバがアイテムコレクションの管理をするためのオブジェク
トです。

６．４．３．１ IOPCGroupStateMgtインタフェース
グループの全体的な状態を管理します。
メンバ

説明

GetState
SetState
SetName

グループの現在の状態を取得します。
グループのプロパティを設定します。
プライベートグループの名前を変更します。名前はユニークです。また、パブリックグループは変更できません。
グループのコピーを作成します。

CloneGroup

６．４．３．２ IOPCPublicGroupStateMgtインタフェース(オプション)
プライベートグループをパブリックグループに変更するためのオプションのインタフェースで
す。
メンバ

説明

GetState
MoveToPublic

グループがパブリックグループかどうか調べます。
プライベートグループをパブリックグループに変換します。

６．４．３．３ IOPCSyncIOインタフェース
DAクライアントからDAサーバへの同期読み込み／書き込みを実行します。
5

NewはVer2.0で追加になったインタフェースをあらわします。
・※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

メンバ

説明

Read

グループ内のアイテムのデータ値、品質フラグ、タイムスタンプの読み込み。
グループ内のアイテムにデータを書きます。

Write

６．４．３．４ IOPCAsyncIOインタフェース （old6）
DAクライアントからDAサーバへの非同期読み込み／書き込みを実行します。
メンバ

説明

Read
Write
RefreshCancelグループ内のアイテムを読み込む。
グループ内のアイテムへ書き込む。
グループ内のアクティブなアイテムをコールバックします。
DAサーバに未処理のトランザクションをキャンセル要求します。

６．４．３．５ IOPCItemMgtインタフェース
グループ内のアイテムの動作を制御します。
メンバ

説明

AddItems
ValidateItems
RemoveItems
SetActiveState
SetClientHandles
SetDatatypes
CreateEnumerator

グループへアイテムを追加します。
アイテムが有効かどうか調べます。アイテムの情報を返します。
グループからアイテムを削除します。（ AddItemsの逆）
グループ内のアイテムにactive/inactiveを設定します。
グループ内のアイテムのクライアントハンドルを変更します。
グループ内のアイテムの要求データタイプを変更します。
グループ内のアイテムの列挙を作成します。

６．４．３．６ IEnumOPCItemAttributesインタフェース
グループのアイテムと属性を検索します。
メンバ

説明

Next
Skip
Reset
Clone

グループからアイテムを取得します。
アイテムをスキップします。
列挙の先頭アイテムにリセットします。
列挙の現在状態のコピーを作成します。

６．４．３．７ IDataObjectインタフェース （old ）IDataObjectはDAグループ上で実行されます。

6

oldは、Ver1.0対応のインタフェースであることを示します。

※本文書の複製再利用には使用許諾契約が必要です。

Page 53

OPC(OLE for Process Control)技術概要書

メンバ

説明

DAdviseDUnadvise

DAグループとDAクライアントの接続を確立します。
DAグループとDAクライアントの接続を切断します。

Page 54

６．４．３．８ IOPCASyncIO2インタフェース（new）
IOPCAsyncと同様、クライアントと非同期読み込み／書き込みを行うインタフェースです。クラ
イアントとの接続にはIConnectionPointを使います。
メンバ

説明

Read
Write
Refresh２
Cancel２

DAグループ内のアイテムを読み込みます。
DAグループ内のアイテムに書き込みます。
DAグループ内のアクティブなアイテムをコールバックします。

SetEnable

GetEnable

DAサーバーに未処理のトランザクションのキャンセルを要求します。
OnDataChangeコールバックを制御します。TRUE（デフォルト）/Falseにて、DAグループとのコールバックを有効／無効にする
ことができます（ただしRefreshには、無関係）。
最後のコールバック制御値（TRUE/FALSE）を復帰します。

６．４．３．９ IConnectionPointContainerインタフェース（new）
ＩＤａｔａＯｂｊｅｃｔに代わるもので、クライアントとのcallback接続を行うインタフェー
スです。各アイテムではなく、グループに実装します。ver2.0では必須のインタフェースです。
メンバ

説明

EnumConnectionPoints

DAグループとクライアント間のConnectionPointを列挙します。

FindConnectionPointDAグループとクライアント間のConnectionPointを検索します。

６．４．４

DAクライアント側インタフェース

６．４．４．１ IAdviseSinkインタフェース （old）
クライアントはOnDataChangeの実装を用意する必要があります。
メンバ

説明

OnDataChange

DAグループからの例外ベースのデータ変化を通知させるためにDAクライアントが用意するメソッドです。

６．４．４．２ IOPCDataCallBackインタフェース（new）
ver２ではConnectionPointを使うため、クライアントにはIOPCDataCallBackを実装する必用があります。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

メンバ

説明

OnDataChange

DAグループからの例外ベースのデータ変化とリフレシュを通知させるためにDAクライアントが用意するメソッドです。
DAグループからの非同期読み込み（AsyncIO2 Read）完了を通知させるためにDAクライアントが用意するメソッドです。
DAグループからの非同期書き込み（AsyncIO2 Write）完了を通知させるためにDAクライアントが用意するメソッドです。
DAグループからの非同期キャンセル要求（AsyncIO2 Cancel）
完了を通知させるためにDAクライアントが用意するメソッドです。

OnReadComplete
OnWriteComplete
OnCancelComplete

Page 55

６．４．４．３ IOPCShutdownインタフェース （new）
ver2.0対応のクライアントは、IOPCShutdwonを実装するオブジェクトを生成する必要があり
ます。
メンバ

説明

ShutdownRequest

サーバーがshutdownする必要あるときに、サーバーによりコー
ルされます。クライアント はサーバーとのコネクションを切断します。

※本文書の複製再利用には使用許諾契約が必要です。

Page 56

OPC(OLE for Process Control)技術概要書

７ DataAccess Ver１．０とVer２．０の主な違い
７．１ カスタムインタフェース
７．１.１ 非同期通信インタフェースの変更
Ver１．０およびＶｅｒ１．０A（以下Ｖｅｒ１．０と記述）7では非同期インタフェースにIDataObject(サーバーサイド)とIAdviseSink（クライアントサイド）を適用しましたが、Ver2.0
ではより実装しやすく、またスマートにプラグアンドプレイを実現できるIConnectionPointを採用しました。

Ver1.0Ver2.0

サーバー/グループ
IDataObject::Dadvise::Dunadvise(On Server and Group)
IConnectionPointContainer::FindConnectionPoint::EnumConnectionPoints

クライアントIAdviseSink::OnDataChange

仕様書上の表記
old

IOPCDataCallback::OnDataChange::OnReadComplete::OnWriteComplete::OnCancelCompletenew

これに伴い、下記非同期インタフェースの仕様、例外処理も変更になりました。

７．１.２ 非同期インタフェースの名称
上記１の理由により、DAでの非同期インタフェースの名称とメソッドとそのパラメータなどが変更になりました。
Ver２では、IOPCAsyncIO２を使用することが必須条件です。また、SetEnable、GetEnableというメソッドが追加になりOnDataChangeの動作を制御できるようになりました。
バージョン
Ver1.0Ver2.0

インタフェース
IOPCAsync
IOPCAsyncIO2

メソッド
Read,Write,Cancel、Refresh
Read,Write、Cancel2,Refresh2、SetEnable、GetEnable

７．１.３ 非同期インタフェースの動作
DAサーバとDAクライアント間で同期あるいは非同期データ転送を行う際、グループ、アイ
テムのアクティブフラグの状態が、DAサーバの挙動に影響します。Ver２．０ではCallBack::OnDataChangeを制御するSetStateが追加されており、特にsubscription（変化通知）での挙動に若干の相違があります。SubscriptionとはUpDateRateで指定した周期で、デバイスのデータとQuality（品質）データを取得・更新するものですが、Ver２．０ではcallbackがTrueであれば、Qualityの変化をみて、新しいデータとQualtyを非同期通信路（callback）を介して、クライアントに転送し、サーバー自身のキャシュの更新を行いますが、Falseであればサーバ
ーは自身のキャッシュの更新のみとなります。ver1.0ではこの切り替えができなく、サーバーのキャッシュ更新とデバイスデータの転送を非同期通信路（IAdviseSink）を介しておこないます。

7

OPC DataAccess Specification Ver１．０ とVer１．０Aでは、機能的にほぼ同等のため、Ver
１．０で代表して記載します。
※本文書の複製再利用には使用許諾契約が必要です。

Page 57

OPC(OLE for Process Control)技術概要書

７．１.４ 追加されたインタフェースと機能
下記インタフェースおよび機能がVer２．０であらたに追加になりました。
追加機能またはインタフェース
IOPCProperties::QueryAvailableProperties::GetIytemProperties::LookupItemIDs

IOPCCommon::SetLocaleID::GetLocaleID::QueryAvailableLocaleIDs::GetErrorString::SetClientName
BrowseServerAdddressSpace::ChangeBrowsePosition
Shutdown機能
IOPCShutdown::
ShutdownRequest（クライアント用）
IConnenctionPointContainer（サーバ上）
グループの列挙方法：
IEnumUnkownが削除された。

主な機能
クライアントがアイテムの属性やtagなどをより簡単にアクセスできるようにするための“便利”インタフェース。
ItemIDを直接指定する代わりに、
DataTyteなどで分類したPropertyIDを指定することができる。
特定のサーバ／クライアント間でLocaleIDの設定、問い合わせをする機能を提供するもの。

備考
PropertyIDSetはDAで定義される。

他のOPCサーバ（A&Eなど）でも実装する。

BrowsingDirection OPC_BROWSE_TOが追加された。

Ver１．０では
UP/DOWNのみ。
DAサーバーがクラッシュなどの異常にクライアント
なったときに、そのサーバーが接続して が複数のサーいるクライアントを探せるようにするも バーとコネクの。クライアントはサーバーのshutdown トしても可能。
要求と理由を受け、サーバーとのコネクションを開放できる。
IOPCServer::CreateGroupEnumratorを使う

実装上の問題。

７．１.５ バージョンによる互換性一覧表
下記にVer1.0とVer2.0の互換表を示します。
現状Ver1.0とVer2.0対応のDAサーバとクライアントが混在する可能性がありますが、
サーバーベンダに対しては、既存のｻｰﾊﾞｰにはVer２．０の機能の追加ならびに、既存のVer1.0
対応のクライアントのためにVer1.0のサポート機能を残すことが推奨されています。

Data Access Server

1.0

2.0

Iunknown

Required

Required

IOPCServer

Required

Required

Required Interfaces
OPCServer

IOPCCommon

N/A

RequiredIConnectionPointContainer

N/A

Required

IOPCItemProperties

N/A

Required

IOPCServerPublicGroups

Optional

Optional

IOPCBrowseServerAddressSpace

Optional

Optional※本文書の複製再利用には使用許諾契約が必要です。

Page 58

OPC(OLE for Process Control)技術概要書

OPCGroup
Iunknown

Required

Required

IOPCItemMgt

Required

Required

IOPCGroupStateMgt

Required

Required

IOPCPublicGroupStateMgt

Optional

Optional

IOPCSyncIO

Required

Required

IOPCAsyncIO2

N/A

Required

IconnectionPointContainer

N/A

Required

IOPCAsyncIO

Required

N/A

IdataObject

Required

N/A※本文書の複製再利用には使用許諾契約が必要です。

Page 59

OPC(OLE for Process Control)技術概要書

７．２ オートメーションインタフェース
７．２．１ 主な相違点
下表に主な相違点を記載します。
項目
仕様書

サポート言語
インタフェース実装
ならびに表記方法

オブジェクトモデル

イベントプロパティ
カスタムインタフェースver２．０ 新イン
タフェースのサポートVer1.0Ver2.0
カスタムインタフェース
カスタムインタフェースVer2.0仕様
Ver1.0A仕様書と同一仕様
書とは別冊。
書。
VisualBasic ver4、
VisualBasic ver５、６
VBA４
VBA５，６
デュアルインタフェースと ラッパDLLを経由して、カスタムイ
してカスタムインタフェー ンタフェースVer2.0をアクセスすスとともに実装。カスタム る。オートメーションクライアント
インタフェースと区別する は、サーバのカスタムインタフェー
ため、IOPCxxxDispと表記。 スを意識する必要はない。
コレクションオブジェクト コレクションオブジェクトモデルのモデルはなし。
として、OPCGroups,OPCItemsを追加。

OPCBrowerオブジェクトなし。

DAブラウザオブジェクトモデルを追加。

サポートなし。
なし

VB５のイベント機能をサポート。
サポートする。

７．２．２ 互換性
オートメーションｖｅｒ１．０とｖｅｒ２．０では、ＶＢ Ｓｙｎｔａｘにかなりの相違があるため、コードレベルでの互換性はありません。

※本文書の複製再利用には使用許諾契約が必要です。

Page 60

OPC(OLE for Process Control)技術概要書

７．３

データ読み込みとアクティブフラグの関係

７．３．１ 同期読み込み （ＩＯＰＣＳｙｎｃＩＯ：Ver1.０及びVer2.0）
IOPCSyncIO::Read
SourceEnableCallbacks
（＊）

Group
ActiveState

Item
Active
State

Cache

NA

ActiveActiveCache

NA

ActiveInActive

Cache

NA

InActive

NA

DeviceNA

NA

NA

読み込み動作

備考○：正しくデータを読める。
×：データを読めない、または品質フラグにエラービットがセットされる○（値と品質）
×（OUT_OF_SERVICEの品質フラグ）
×（OUT_OF_SERVICEの品質フラグ）○（値と品質フラグが返る。サーバはキャッシュを更新する）（＊）AsyncIO2::SetEnable、DisEnableによる（Ver2.0）。

７．３．２ 非同期読み込み（IOPCAsyncIO2）
IOPCAsyncIO2::Read
SourceEnableCallbacks

NA

NA

Group
Active
State
NA

Item
ActiveState
NA

読み込み動作○（DEVICEから読みこんだ値と品質フラグを得る。サーバは、キャッシュの値と品質フラグを更新）※本文書の複製再利用には使用許諾契約が必要です。

備考Page 61

OPC(OLE for Process Control)技術概要書

７．３．３ リフレッシュ
IOPCAsyncIO2::Refresh2

NA

Group
ActiveState
ActiveItem
ActiveState
ActiveCache

NA

ActiveInActive

Cache

NA

InActive

NA

DeviceNA

ActiveActiveDeviceDeviceNA
NA

ActiveInActive

InActive
NA

SourceEnableCallbacks

Cache

読み込み動作○（キャシュ内の値と品質フラグを得
る。

備考

.

×
（グループ内の非アクティブなアイテ
ムのデータは、送信されない。アクティブなアイテムがゼロのときは、エラーメッセージを返す。）
×（E_FAIlを返す。）○（DEVICEからの値と品質フラグを返す。キャッシュも更新する。）
××

７．３．４ サブスクリプション（IOPCDataCallback経由のばあい）
Subscription via IOPCDataCallback::OnDataChange

TRUE

Group
ActiveState
ActiveItem
ActiveState
ActiveTRUE

ActiveInActive

TRUE

InActive

NA

NA

FALSE

ActiveActiveNA

FALSE

ActiveInActive

NA

FALSE

InActive

NA

SourceEnableCallbacksNA

読み込み動作○
更新周期でスキャンして、DEVICEからよみとった値と品質フラグを送信する。
品質フラグが変化した場合も同様。
品質が変化ないとき、デッドバンドとの比較をし、変化幅を超えるときも、送信する。
×
物理データソースから、値を収集するだけ。
×
物理データソースから、値を収集するだけ。
×
更新周期でスキャンして、DEVICEからよみとった値と品質フラグを送信する。品質フラグが変化した場合も同様。
品質が変化ないとき、デッドバンドとの比較をし、変化幅を超えるとき、送信はせずにキャシュの更新のみ行う。
×
サーバーはアクティブなアイテムの物
理データソースから、データを収集はするが、送信はしない。
×（同上）※本文書の複製再利用には使用許諾契約が必要です。

備考.

Page 62

OPC(OLE for Process Control)技術概要書

７．３．５ 非同期読み込み（ＩＯＰＣＡＳｙｎｃＩＯ ／ver1.0）
IOPCAsyncIO::Read
SourceEnableCallbacks

Cache

NA

Cache

NA

Cache

NA

DeviceNA(through the IadviseSink::OnDataChange method)
Group
Item
読み込み動作
ActiveActiveState
State
ActiveActive○キャシュ内の値と品質フラグが送信される。
ActiveInActive×
品質フラグに、out_of＿serviceがセットされ、送信される。
InActive
NA
×
（同上）
NA
NA
○
DEVICEの値と品質フラグが送信される。
キャッシュも更新される。

備考

リフレッシュ（Ver1.0）
IOPCAsyncIO::Refresh
SourceEnableCallbacks

Cache

NA

Group
ActiveState
ActiveItem
ActiveState
ActiveCache

NA

ActiveInActive

Cache

NA

InActive

NA

DeviceNA

ActiveActiveDeviceDeviceNA
NA

ActiveInActive

InActive
NA

読み込み動作○値と品質フラグが送信される。
×
非アクティブなアイテムの値、品質フ
ラグは送信されない。
×
E_FAILがリターンされる。
○
DEVICEから読み込んだ値と品質フラグを送信する。同時にキャッシュも更新する。
××
E_FAILをリターンする。

備考.

７．３．６ サブスクリプション（ IDataObject (old)経由）
Subscription via(IDataObject::DAdvise) & (IAdviseSink::OnDataChange)ｓ
SourceEnableCallbacks

NA

NA

Group
ActiveState
ActiveItem
ActiveState
ActiveNA

NA

ActiveInActive

NA

NA

InActive

NA

読み込み動作○
更新周期でスキャンして、DEVICEからよみとった値と品質フラグを送信する。
品質フラグが変化した場合も同様。
品質が変化ないとき、デッドバンドとの比較をし、変化幅を超えるときも、送信する。
×
物理デバイスのデータを収集するのみ。
×
同上※本文書の複製再利用には使用許諾契約が必要です。

備考

OPC(OLE for Process Control)技術概要書

Page 63

８ OPC共通仕様
上述の3種類のＯＰＣ仕様（ＤａｔａＡｃｃｅｓｓ、Ｈｉｓｔｏｒｉｃａｌ ＤａｔａＡｃｃｅｓｓ、Ａｌａｒｍ and Events）
は、互いに独立した仕様ではありますが、共通している機能も多く、”OPC Common”として、規定されている事項を本項で、記載します。

８．１ カスタムインタフェースとｗｒａｐｐｅｒ ｄｌｌ
OPCサーバのカスタムインタースは、必須で、OPCサーバベンダは必ず実装する必要があり
ますが、オートメーションインタフェースに関しては、wrapper ｄｌｌが各OPCの仕様ごとにOPC−Fから提供されますので、これを利用することができます。

８．２ 共通インタフェース
下記インタフェースは、各OPC仕様のサーバーに共通のインタフェースです。すなわち、
OPCData Access Ｓｅｒｖｅｒ、Ａｌａｒｍ and Events Server、Histrical Data Access Ｓｅｒｖｅｒ のいずれにも実装する必要があります。

（１）OPCShutdown機能
サーバーがクラッシュなど異常な状態に成ったときなど、接続しているクライアントに接続解除を通知するためのインタフェースです。クライアントは、IOPCShutdownとIUnkownインタフェースをもったオブジェクトを接続するOPCサーバーごとに生成する必要があります。OPCサーバには、このIOPCShutdownインタフェースを持つ
オブジェクトを列挙し、メッセージを通知するためのインタフェースIConnectionPointを実装します。

（２）IOPCCommon
特定のクライアントとサーバーセッションで有効（他のクライアントに影響を与えない）となる言語ＩＤの設定や問い合わせを行うために、サーバーに実装する必要があります。
詳細は、“7.1.4追加されたインタフェースと機能”を参照ください。

８．３ コンポーネントカテゴリとOPCサーバブラウザ
８．３．１コンポーネントカテゴリ
OPCサーバの実装の際、Data Access Ver1.0の段階ではコンポネントカテゴリを使用するという考えはありませんでしたが、現在OPCサーバのカテゴリ（DataAccessやAlarm＆Events、Historical Data Accessなど）とバージョンごとに、コンポーネントカテゴリを生成する必要があります。このコンポーネントカテゴリを適用することで、多くのOPC コンポーネントをマシン上に実装した場合でも、その管理ならびにクライアント からOPCサーバを閲覧する際、効率的に実現することができます。
なお、 さまざまな種類のOPCサーバに対応するために、このコンポーネントカテゴリのタイプは、OPC仕様ごとに定義されて（opc_cat.cファイル）います。
OPC DataAccessの場合、下記のようにバージョンがわかるようなCATIDとそのGUID番号を定義しています。サーバの実装に当たっては、まずこれらのコンポーネントカテゴリを生成し、次にそのコンポーネントカテゴリにサーバを登録します。

※本文書の複製再利用には使用許諾契約が必要です。

Page 64

OPC(OLE for Process Control)技術概要書（例）"OPC Data Access Servers Version 1.0"

CATID_OPCDAServer10 = {63D5F430-CFE4-11d1-B2C8-0060083BA1FB}"OPC Data Access Servers Version 2.0"
CATID_OPCDAServer20 = {63D5F432-CFE4-11d1-B2C8-0060083BA1FB}

８．３．２ OPCサーバブラウザ
ローカルまたはリモートマシン上に、どのようなOPCサーバが実装されているかを、クライ
アントが調べるために、上記コンポーネントカテゴリと、OPCから提供されるOPC Server
Browser（OPCENUM.EXE）ならびにマーシャリングＤＬＬ（OPCCommon_ps.dll）を使用します。
OPCENUM.EXEは、OPCサーバを実装しているマシン（ローカルまたはリモートマシン）に実装します。OPCクライアントは、OPCサーバが実装されているマシン内にOPCENUM.EXEが実装されていれば、下記IOPCServerListというインタフェースとメソッドを使い、ローカル
またはリモートにあるマシンの各コンポーネントカテゴリを調べ、そこに登録されている
OPCサーバの詳細を閲覧することができます。

表８．１ IOPCServerList

メソッド

IOPCServerList

機能::EnumClassesofCategory

ターゲットマシンに対して、ＣＡＴ
ＩＤを指定し、そのＣＬＳＩＤ（= ＧＵＩＤ番号）を列挙する。
ＣＬＳＩＤを指定して、そこからＰ
ｒｏｇＩＤやユーザが読めるサーバの名前を得る。
ＰｒｏｇＩＤを指定して、そこから
ＣＬＳＩＤ（＝ＧＵＩＤ番号）を得る。

::GetClassDetails::CLSIDFromProgID※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

９Page 65

技術基盤説明OPC自体はそれほど特長のあるものではありませんが、OPCの特長の多くは、それがOLE/COM技術の上に構築されていることに起因しています。したがって、OLE/COMを理解することはOPCを理解する早道でもあります。
ここでは、マイクロソフトのオブジェクト技術であるOLE/COMについて概略理解し、さらなる情報へのポインタを示すことを目的として、説明を行っています。
注意 ：以下で参照する情報は、複数の情報源のうち最も適切でかつ詳細な情報だけを選択しています。
z オブジェクトモデル
COMのオブジェクトモデルは、アプリケーションをCOMオブジェクトの集合として構築した
場合に、そのオブジェクト構造が外部アプリケーションからどのように見えるかを示している。狭義にはCOMサーバの階層的なオブジェクト構造を指す場合が多い。オブジェ
クトモデルは、必ずしもアプリケーションの実装上の構造とは一致しない。たとえば、
C++でアプリケーションを構築した場合、C++のクラス定義がCOMオブジェクトに1対1に対応するわけではない。オブジェクトモデルをどのように設計するかでアプリケーシ
ョン間連携の性能や機能の使い勝手が決まってしまうので、設計は重要な問題である。
OPCでは、すでにOPCアプリケーションのオブジェクトモデルは決められているので、開発者が設計の必要はない。よりわかりやすいオブジェクトモデルの一般的説明は、
http://www.microsoft.com/oledev/oleauto/ole2soln.htmに書かれている。
z COMオブジェクト生成
COM オブジェクト生成は C++では CoCreateInstance、CoGetClassObject などの API、Visual Basic
では、CreateObject、GetObject の API で生成される。これにより、オブジェクトのインタ
フェースのポインタがローカル変数へ返されるので、それを用いてプロパティやメソッ
ドへアクセスする。オブジェクト生成には、そのクラス識別子を指定する必要があるが、一旦生成されると、そのインタフェースポインタがどのオブジェクトのものかを考えてプログラムする必要はなくなる。これらとは別に、モニカーと呼ばれるものや、HTMLの<OBJECT>タグでオブジェクトを生成することも可能である。より詳しいオブジェク
ト生成の説明は、 OLE KBase Q104139 および Microsoft Systems Journal 1996 May,
Introducing Distributed COM and the New OLE Features in Windows NT 4.0 に書かれている。
z クラスファクトリ
オブジェクトの機能をクライアントが利用できるようにするためには、オブジェクトを作り、そのインタフェースをクライアントへ返す機能をサーバが提供しなければならない。サーバとはオブジェクトを提供するアプリケーション、クライアントはそのオブジェクトを利用するアプリケーションである。サーバのオブジェクトを作り出す機能、クラスフ
ァクトリをシステムに登録し、クライアントからの要求がシステムからサーバに導かれるようにする。クラスファクトリの登録方法は、DLLサーバとEXEサーバでは異なる。
クラスファクトリの作成方法はサーバの開発者が知らなければいけない基本知識であり、Component Object Model(COM) Specification 0.9 Chapter 6, 6.2 Implementing theClass Factory, 6.3 Exposing the Class Factoryに書かれている。
z コレクションオブジェクト
コレクションオブジェクトとは、オブジェクトの集合を扱うため、集合への追加、削除、要素検索、要素総数、などを容易に扱えるようなメソッドやプロパティをもつ集合オブジ
ェクトである。配列やリスト構造のようなもので実装される。実装に関する詳しい説明
は、http://www.microsoft.com/oledev/oleauto/collect.htm (MFC), OLE KBase Q107546 に書かれており、OPC の OPCGroup オブジェクトの実装などサーバ開発で必要とされる。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 66z オートメーションインタフェース
クライアントがサーバのインタフェースを実行時に選択してアクセスする動的バインディングと呼ばれる機能。これに対して、開発時にサーバのインタフェースをコード上に固定的に書き込むのがVTABLEインタフェースに基づく静的バインディングと呼ばれるものである。オートメーションでは、インタフェース名の一致からサーバのインタフェースが選択され、実行される。サーバにおけるオートメーションの実装方法は、Inside OLE 2nd
Edition, Chapter 14 Five Variations on the Theme of Implementing a Simple Automation
Objectに書かれている。クライアントからサーバへのオートメーションの利用を説明した例は、Visual BasicはVisual Basic Programmer’s Guide, Chapter 9 Programming Other
Applications’ Objects、Visual C++は、Microsoft Systems Journal 1995 June OLE Q&A,
MSDN Technical Articles/Windows Articles/OLE Articles/Component Object Model,
MFC/COM Objects 7: Creating and Using COM Objects with OLE Automation Interfacesにある。
z カスタムインタフェース
OLEが標準で定義したインタフェース以外の、個別拡張インタフェースをカスタムインタフ
ェースと呼ぶ。カスタムインタフェースはクライアントからVTABLE経由で静的バイン
ディングでアクセスされるインタフェースである。カスタムインタフェースをEXEサー
バが実装する場合、インタフェースごとのプロキシコード、スタブコードと呼ばれるDLLを同時に開発し、インストールする必要がある。プロキシとスタブコードの説明は、Component Object Model(COM) Specification 0.9 Chapter 7 Interface Remotingにあり、その開発はカスタムインタフェースの開発の例として、
http://www.microsoft.com/msdn/sdk/platforms/doc/activex/src/custintf_2.htm以降のActiveX SDKおよびhttp://www.microsoft.com/msdn/library/mfccom.htmのTom’s Handy
Dandy MFC/COM/MIDL Recipe Book for Creating Custom Interfacesに書かれている。
z Dualインタフェース
Dualインタフェースとは、オートメーションインタフェースの動的バインディングの機能にカスタムインタフェースの静的バインディングを組み合わせ、どちらの方法でもクライアントからオブジェクト機能にアクセスできるようにするための技術である。その説明と実装方法は、Microsoft Systems Journal 1995 Volume 10 December 12 OLE Q&A, Visual
C++ MFC Technical Notes TN065 (MFC)に書かれている。OPCではカスタムインタフェースとDualインタフェースをサポートするオートメーションインタフェースを個別に定義している。
z In-Proc Handler(in-processハンドラ)
クライアントがサーバと連携するとき、連携の性能向上、セキュリティや信頼性の強化などの目的に必要とされる技術である。したがって、必ずしも連携のための必須機能ではない。in-processハンドラはクライアントマシンのクライアントプログラムと協調するDLL
形式のプログラムで、そのプログラムが擬似的なサーバオブジェクトを生成して、クライアントに対して真のサーバオブジェクトの“ふり”をする形で実装される。in-process
ハンドラは、通常のDLL形式のCOMサーバと実装上は変わらない。したがって、その実装方法はDLLサーバの実装方法、例えば、 http://www.microsoft.com/intdev/sdk/
DLLSERVE-Lesson 7を参照するとよい。
z イベント通知
クライアントがサーバへ非同期要求を行ったとき、あるいは、サーバやネットワークエラーが発生したとき、その結果通知をイベントとしてクライアントは受信する。クライアン
トはあらかじめ受信するイベントの種類と、イベント通知で呼ばれる処理をサーバに登録しておく必要がある。イベント通知にはOLEの標準インタフェース、IAdviseSinkを利用することがOPCでは決められている。その開発方法は、Inside OLE 2nd Edition, Chapter
10 Uniform Data Transfer and Notificationsなどに書かれている。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 67z スレッディングモデル
COM/DCOMにはオブジェクトをマルチスレッド環境で実行させる方法の規定がある。これをスレッディングモデルと呼ぶ。オブジェクトの開発者は、実行に使うスレッディ
ングモデルをシステムに登録し（DLLサーバではレジストリに、EXEサーバでは
CoInitializeEx()の引数に設定）、そのモデルに合った実装を行う必要がある。スレッ
ディングモデルの種類は、OLE KBase Q150777に書かれている。その実装のサンプルとして、OPCのサーバオブジェクトに適切なフリースレッドモデルの例が、
http://www.microsoft.com/intdev/sdk/ FRESERVE-Lesson 17 にある。
z
9
9

z
9
9
9

管理ツール
OLEView−システムにインストールされたCOMオブジェクト、そのインタフェース、各種レジストリ情報を一覧する。
DCOMCNFG−DCOMオブジェクトの起動方法、セキュリティ、その他の管理をする
NT4.0標準のGUIツール
デバッグツール
HookOLE−OLE、COM呼び出しのトレースを行う
ROTView−Running Object Tableに登録されたCOMオブジェクトのチェック
NuMega社のBoundsChecker 4.2※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 68

１０ 付録
１０．１用語集
アルファベット順A ActiveX コントロール
ActiveX コントロールはコンテナと呼ばれるアプリケーションで利用してソフト製品を開発します。コンポーネント間の連携をスクリプト言語で記述することで、カスタマイズ可能です。
ActiveX の技術により、コンポーネントを利用時にインターネットからダウンロードして実行することもできます。
 Application Programming Interface (API)OS がアプリケーションに対して公開しているプログラムインタフェースです。アプリケーショ
ンは、API を経由して OS の機能を利用します。 現在、一般的な OS の API は関数の形式
をとっており、アプリケーションからは適当なパラメータ（引数）を指定して API の関数を呼び出します。
 ATL (Active Template Library)
ATL は、MS VC++ 5.0 に付属するテンプレートを基本にした C++ のクラスの集合です。このテンプレートを使うと、小さくて高速な COM (Component Object Model) オブジェクトを簡単に作成できます。ATL は COM の主要な機能をサポートしています。その中には、
IUnknown、IClassFactory、IClassFactory2、そして IDispatch のインプリメンテーションと、
デュアル インターフェイス、標準の COM 列挙子 インターフェイス、コネクション ポイント、
ティアオフ インターフェイス、そして ActiveX コントロールが含まれます。
ATL コードを使って、シングルスレッド オブジェクト、アパートメント モデル オブジェクト、フリースレッド モデル オブジェクト、またはフリースレッドのアパートメント モデルのオブジェク
トを作成できます。
C CLSID
CLSID はレジストリの登録されたキーの 1 種でコンポーネントの名前や場所の情報をサブキーとして持ち、コンポーネントを含む DLL を特定する目的で利用されます。
 COM (Component Object Model)
ソフトコンポーネントの持つべき基本サービスを提供するアーキテクチャです。オブジェクトの生成と消去、バージョン管理、インタフェースの実行時折衝、メモリ管理、ネットワーク透過性などを提供します。ActiveX コントロールは、OLE 複合ドキュメントなどのオブジェクト間連携技術です。DCOM 欄参照。
 COM+ (Component Object Model +)DCOM Version 2.0 のことです.
D DCOM (Distributed COM、分散 COM)COM のオブジェクト間連携機能をネットワークのクライアント／サーバへ拡張したものです。
Windows NT 4.0 標準装備です。COM の欄参照。
 DDE (Dynamic Data Exchange)
Windows に依存したアプリケーション間通信機構。初期(Windows3.0)の OLE は DDE で実現されていました。
 Dynamic Link Library (DLL)※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 69

Windows プログラム（Windows カーネルなどのシステムプログラム、アプリケーション）は、通常の.EXE ファイルとは別にダイナミックリンクライブラリを用意し、これを実行時にリンクすることができます。 実際には Windows カーネル（KERNEL、USER、GDI）やデバイスド
ライバもダイナミックリンクライブラリです。複数のプログラムで 1 つの.DLL ファイルを共有できるので、ディスクサイズや実行時メモリを節約することができます。
 DCS
Distributed Control System の略です。
E
 Embedded Object
エンベディデド オブジェクトとは、OLE 複合ドキュメントにそのデータごと完全に埋め込まれたオブジェクトを指します。
 EXE Server
EXE サーバはコンテナのプロセスとは別のプロセスとして動作する EXE タイプの OLE サーバのことです。 アウトプロセスサーバーのうちコンテナと同じマシンで実行されるものがローカルサーバーであり、マシン境界を越えて実行されるものがリモートサーバです。
In-Proc Server / Local Server / Remote Server 参照
F FILETIME
FILETIME 構造は、ファイルの 64 ビット長の時間値を持ちます。この値は、1601 年 1 月 1日からの通算時間を 100 ナノ秒の単位で表現します。
G GUID (Globally Unique Identifier)
OLE コンポーネントオブジェクトに割り振られる ID であり、特殊なアルゴリズムにより生成されます。 分散システム上に無数のオブジェクトが存在するような状況においても、名前の競合が起こらない環境を実現するユニークな ID をこのアルゴリズムは全てのコンポーネン
トに対して提供します。 OLE2 SDK で提供されるソフトウェアを使って、ソフトウェアデベロ
ッパーはコンポーネントオブジェクトに対する GUID を簡単に作成することができます。
I IDispatch インタフェース
OLE オートメーションインタフェースが備えるべきインタフェースで、クライアントは通常、このインタフェースを通してメソッドやプロパティにアクセスします。
 In-Proc Server
インプロセスサーバはコンテナのプロセス内で動作する、DLL タイプの OLE サーバのことです。 具体的には OCX のことを示します。これまでの OLE サーバがユーザやオートメー
ションプログラムからのトリガーによりメモリ上にプロセスを作成したのに対して、DLL である
OCX は常にメモリ上に展開されています。
EXE Server / Local Server / Remote Server 参照※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 70

 Interface Definition Language (IDL)
オブジェクトを実装するとき、実装とインタフェースを分離することが実装のカプセル化には重要です。そのために、実装言語とは独立する中間言語でインタフェースを定義し、それをターゲットの実装言語にマップするようにします。こうすることで、オブジェクトの実装は
言語非依存となります。IDL が表現する COM オブジェクトの属性は、インタフェースの引数のデータ型や並び順、戻り値、インタフェース識別子、クラス識別子、各国語情報（locale ID）などです。IDL のソースファイルはコンパイルされ、ヘッダファイル、プロキシ、
スタブのソースコードへ変換され、コンパイルされて、オブジェクトやクライアントの実装コードとリンクされます。
L LCID
LCID 属性は、タイプライブラリあるいは関数 argument 用のロカールを確認します。
 Linked Object
リンクト オブジェクトとは、OLE で複合ドキュメントに連結されたオブジェクトを指します。
 Local Server
Local Server は同一マシン上の独立したプロセス空間で走る OLE サーバアプリケーションです。この場合、クライアントと Local Server は別プロセスとして実行されるため、信頼性は向上しますが、性能は In-Proc Server に対してかなり遅くなります。したがって、サーバの設計ではどちらの方法で実装するほうがいいかの選択をする必要があります。
EXE Server / In-Proc Server / Remote Server 参照
M
 MES
Manufacturing Execution System の略です。
 Microsoft Foundation Classes (MFC)
マイクロソフトの Windows（Windows 95）、Windows NT アプリケーション開発用の C++クラスライブラリです。マイクロソフトが販売する C++処理系パッケージである Visual C++に付属しています。
 MIDL 3.0
IDL をコンパイルしてヘッダ、プロキシとスタブのソースコードを出力するためのツールです。MIDL は OpenGroup の DCE RPC と上位互換機能を持ち、また、MIDL3.0 は従来のODL ファイルをコンパイルする MKTYPLIB ツールを代替する機能を持ちます。
O OCX(OLE Custom Control)
OCX はコンポーネントオブジェクトおよびオートメーションオブジェクトの一種です。OCX
は複数のソフトウェアベンダから提供され、DB アクセスやマルチメディア、グループウェア
機能などのソフトウェア部品を構成します。OLE による複合ドキュメント作成のケースと同じ方式で、OCX を利用した“複合アプリケーション”の開発を行うことができます。ただし、OCX はコンテナのプロセス内で動作する In-Proc Server であるため、通常の OLE サーバとは異なり瞬時に反応することができます。
 OLE (Object Linking & Embedding)
マイクロソフトが開発したオブジェクト連携技術です。 COM のベースアーキテクチャの上で提供される種々のアプリケーション機能です。複合ドキュメント、ドラッグ＆ドロップ、オブジェクト保存、OLE オートメーション、OLE コントロールなどが存在します。そのうち、ソフト
ウエア再利用技術と分散処理技術が ActiveX 技術として改称され、拡張されました。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 71

 OLE オートメーション
外部のプログラムから既存のアプリケーション機能を利用するための技術です。ActiveX
コントロールが主に GUI を持つ機能に向くのに対して、オートメーションは計算処理など
負荷が大きなサーバー型のアプリケーションに適用されます。スクリプト言語（例：Visual
Basic）により機能の制御が可能です。
クライアント（OLE オートメーションコントローラ）とサーバ（OLE オートメーションサーバ）の間のオブジェクト連携を可能にしています。
 OPC-F (OPC Foundation)
米国に本拠を置く国際非営利法人です。
P PLC
Programmable Logic Controller の略です。
 ProgID
ProgID はレジストリの登録されたキーの 1 種でコンポーネントを識別する文字列を CLSIDに変換する。Visual Basic など、コンポーネントを CLSID ではなく ProgID で識別する言語もあります。
 Proxy
Proxy はクライアントアプリケーションと同一のアドレス空間に存在するライブラリです。クラ
イアントがリモートオブジェクトと通信するとき、メソッド呼び出しやプロパティへのアクセス
を RPC メッセージの正規表現に変換するためのコードです。Proxy はクライアントプログラ
ムの実行時に自動的にロードされます。
R Remote Procedure Call (RPC)
RPC は分散したプログラム同士が通信し合うための基本機能です。 各プログラムの入出力インタフェースをそれぞれ IDL（インタフェース定義言語）という統一した言語で記述します。
 Remote Server
Remote Server はクライアントアプリケーションとは別のマシン上で DCOM を介して実行される OLE サーバアプリケーションです。EXE Server /In-Proc Server/Local Server 参照
S SCADASupervisory Control and Data Acquisition の略です。
 Software Development Kit (SDK)Windows アプリケーションプログラマ向けのソフトウェア開発キットです。 マイクロソフトが自社の OS 向けのアプリケーション開発環境をセットにしたものをこう呼んでいます。SDK には、各種サンプルプログラムやヘッダファイル、ライブラリ（スタティックライブラリ／ダイナミ
ックリンクライブラリ／インポートライブラリ）、ドキュメントなど、言語処理系（コンパイラ）を除く関連ファイルがひとまとめにされています。
 Stub
サーバ側のオブジェクトに RPC メッセージを渡すときに、正規表現からローカル表現に変換するためのコードです。さらに、オブジェクト実行中のサーバのメモリからのアンロードを抑制するロック機能も果たします。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 72

T
 TCP/IP (Transmission Control Protocol / Internet Protocol)
現在のインターネットを支えるネットワークプロトコルです。米国の研究機関や大学を接続した ARPANET 用に開発されたプロトコルです。ARPANET はのちインターネットの源流の一つになりました。
U URL (Uniform Resource Locator)
ネットワークにどのようなプロトコルでアクセスするかを明示的に指定するための書式です。
http や ftp など URL の先頭に指定されたプロトコルに応じてアクセス用のアプリケーションを使い分けます。
 UNICODEUNICODE は米国のコンピュータメーカ団体である UNICODE コンソーシアムによって規格化された、業界標準の統一文字コード国際規格です。
 UTC
Windows はシステム時間のコーディネートされた普遍的な時間（UTC）の基礎を形成します。UTC 時間はほぼグリニッジ（イングランド）の現在の日付と時間として定義されています。
 UDT(Uniform Data Transfer)
統一データ転送は、オブジェクト間の標準的な情報交換の方法を提供するテクノロジーです。UDT は DDE の後継的位置づけにあります。
V Variant
OLE オートメーション互換データ型ともいわれ、Visual Basic 変数のデフォルトデータ型としても知られる自己記述データ型です。
 Visual Basic(VB)
マイクロソフトの簡易版言語開発ツールです。
 Visual Basic for Applications(VBA)
マイクロソフト社が自社のアプリケーションのための共通マクロ言語として採用しようとしているプログラミング言語です。 基本的な言語仕様は Visual Basic に準拠しています。VBA
はマイクロソフト オフィスを中心とするアプリケーションプログラミング用の Visual Basic のサ
ブセットとして位置づけられ、単体でのパッケージ販売はされません。
 Visual C++
マイクロソフトの C 言語開発ツールです。
 VTABLE
COM インタフェースを表現するメモリ上構造。これをオブジェクト間の連携のバイナリ表現
として標準化したのが COM の基本仕様です。VTABLE は C++のネストクラスやインタフェースクラスの多重継承で実装されるが、C や Java などの言語でも同様の構造体を作成して実装可能です。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 73

五十音順
イ インターネット
企業や学術施設、商用ネットワークを相互に結んだ世界最大のネットワークです。電子メール、ファイル転送、リモート接続、WWW など、TCP/IP をサポートする様々なサービスが提供されています。利用者は現在世界 150 ｹ国以上、1 億人と言われています。
 イントラネット
インターネットの仕組みをそのまま、企業や団体などの組織内に構築したものです。社内
ネットワークに WWW サーバーを設置して、ユーザはブラウザで社内情報を閲覧します。
 インタフェース
インタフェースはシンプルなメカニズムであり、ソフトウェア内の異なる部分を接続する働きを持ちます。 具体例として、API はオペレーティングシステムとともに提供され、システムレ
ベルのサービスに対するプログラミング言語からのアクセスを実現します。なお、COM お
よび OLE における"インタフェース"の定義は、オブジェクト間のコミュニケーションを定義
するメソッドのコレクションとなります。
エ エクスポーズ
エクスポーズとはオブジェクトの機能を開示することです。このエクスポーズを利用してOLE オートメーションは実行されます。
オ オートメーション
OLE2.0 で提供されるオートメーションは、複数のコンポーネントを結合し、アプリケーションを自動化するための機能です。 オートメーションはコンポーネントから他のコンポーネントの持つサービスを、ダイナミックに利用する環境を実現します。 OLE オートメーションに対応したコンポーネントは、オートメーションオブジェクトと呼ばれるアブストラクションを利用して、自分自身のサービスをエクスポーズします。
カ クラス
オブジェクトのタイプ指定に関するデータとメソッドの定義を行う、抽象的なデータタイプをクラスといいます。
 クラスライブラリ
オブジェクト指向型言語において、あらかじめ設計されたクラスモデルを提供するライブラ
リのことです。
キ キャッシュ
データへのアクセスを効率的にするため、よく使用するデータを一時的に格納するメモリ領域です。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 74サ サーバ
一般に、サーバという単語はクライアントアプリケーションにサービスを提供するコンピュー
タを示すために使われます。しかし、OLE2 の世界では OLE コンテナに対してオブジェクトを提供する、OLE2 対応アプリケーションのことをサーバといいます。例として、グラフをワープロ内にエンベッドしたとき、グラフは OLE サーバでありワープロは OLE コンテナです。
OLE2 対応アプリケーションはコンテナとサーバの双方の機能を持つことができます。 なお、
サーバはコンテナから独立したプロセスを持ち、OCX はコンテナのプロセス内で動作します。
ス
 スクリプト
オペレーティングシステム(OS)やアプリケーションソフトの機能（コマンド）を使うー連の処理手順をテキスト(文字)で記述した簡易なプログラムです。
 スレッド（Thread）
マルチスレッド OS におけるプログラム実行の単位です。マルチスレッド OS では、プログラム（プロセス）の中で複数のスレッドを実行することができます。同じプロセスの中のスレッド
同士はメモリ資源などを共有するので、スレッド間のデータ転送は比較的容易です。
タ タイプライブラリ
タイプライブラリは COM オブジェクトのクラス識別子、インタフェース識別子、メソッド名、その引数、そのデータ型、引数の並び順、戻り値のデータ型、プロパティ名とその引数の情報など、COM オブジェクトに関する情報を OLE コンパウンドドキュメントファイル（.tlb ファイル）に格納したバイナリファイルです。
ハ ハンドル
MIDL は、OLE サーバアプリケーションを含むリモートアプリケーションに接続するために、いくつかの種類のハンドルを提供します。ハンドルは、アプリケーションにネットワーク接続をするためのプロトコル情報、アドレス、その他の情報を含みカスタマイズ可能です。
 ハンドラEXE タイプの OPC サーバは、オーバヘッドにより DLL タイプのサーバよりも応答速度が低速となります。クライアントから見た性能改善の為にローカルデータキャッシュやデータアクセス最適化機能を持つハンドラをベンダは提供することができます。このモデルは、クライアントから見た場合に DLL タイプのサーバと同様となり、実際の EXE サーバとの接続はハンドラが代行します。
フ プロトコル
データやメッセージをやりとりするために必要な手順や約束事、方式を決めたものです。
 プロパティ
プロパティはコンポーネントオブジェクトに組み入れられるアトリビュートです。

※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 75マ マーシャリング（Marshaling）
プロセス空間、ネットワークをまたいだ通信を行うために、CPU アーキテクチャや OS による
データ型、ビット配列順、境界の違いを吸収するために行う正規表現への変換です。クラ
イアントの要求はプロキシのマーシャリング機能で正規表現のパケットを送信し、サーバのスタブはこのパケットをローカル表現に逆変換してオブジェクトに渡す。戻り値はサーバからクライアントに逆向きの変換が行われれます。
メ メソッドメソッドはオブジェクトにより提供される論理的な操作であり、オブジェクト上で機能するオ
ペレーションは、"オブジェクトのメソッド"として定義されます。 メソッドを実行するためにオブジェクトは、receiving object と特定のメソッド名で構成されるメッセージを送信します。メ
ソッドの名前はセレクタとも呼ばれます。
レ レジストリWindows NT や Windows 95 において、デバイスドライバ設定からアプリケーション設定まで、コンピュータに関するあらゆる設定情報を集中管理するデータベースのことです。
 列挙オブジェクト
ある項目のリストを順次処理する場合に使用されるオブジェクト。項目のリストを列挙オブ
ジェクト（Enumerator）として作成し、このオブジェクトが持つインタフェース（Ienumxxx）を通して処理を行います。

１０．２関連文献
オンライン：
OPC1.0仕様
ftp://zilker.net/pub/opc/OPCFinal.zip
日本OPC協議会ホームページ (日本OPC協議会情報)
http://www.asia.microsoft.com/japan/partners/industry/opchome.htm
OPC-F ホームページ
http://www.opcfoundation.org/
OPCサンプルコード 他 (株式会社 インテリューション)
http://www.intellution.co.jp/internet_opc_foundation/
雑誌 (OPC関連)：
プラントエンジニア 1996年 6月号
プロセス制御システムの可能性を拡げるOPC
計装 1996年 9月号
32ビット対応分散制御ソフトウェアの進展とOPCへの取り組み※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 76

オーム社エレクトロニクス 1996年11月号
OPCの目指すもの
Open Network 1996年 12月号
マイクロソフトの企業情報システム戦略
日経メカニカル別冊 ディジタルファクトリ
生産プロセスのためのOLE
オートメーション 1996年11月号
OPCと汎用監視制御用パッケージソフトFIXへの適用
オートメーション 1996年11月号
FA/PAにおけるOPCの適用
計装 1997年1月号“OLE for Process Control「ＯＰＣ」ーその技術概要と期待される効果”
オートメーション 1997年1月号
DCSとその周辺におけるオープンソフトウェア利用システム技術
オートメーション 1997年1月号
RELAY! ESSAY 計装と情報処理 − OPC(OLE for Process Control)
計装 1997年9月号“OPCサポートによるバッチ制御ソフトウェアと統合設定環境”
計装 1998年8月号“OPC技術がもたらすフィールド計装の新局面”
書籍･雑誌 (OLE/COM/ActiveX関連)：
Inside OLE, second edition (1995)
OLEのバイブルというべきもの。約1200ページの大部、OLEを駆使するためには必読の書。
1995年に出た本なので、DCOMやActiveXは触れられていない。
Understanding ActiveX and OLE (1996) Microsoft Press, $22.95 ISBN 1572312165"A guide for developers & managers"と銘打っているだけあって、320ページほどの分かりやすく、最新機能(DCOM、ActiveX、など）の解説ドキュメント。日本語版も出ている。
OLE2 Programmer's Reference(1994)
プログラマー向け。日本語版も出ている。
OLE Automation Programmer's Reference(1996)
プログラマー向け。日本語版も出ている。
DCOM デベロップメントガイド (1998)
COMオブジェクトの作成からDCOMの導入
出版社:翔泳社 著者:フランク・E.レッドモンド ISBN:4881356038
DCOMガイドブック (1997)
出版社:オーム社 著者:古山一夫 ISBN:4274062163※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Page 77

Inside COM (1997)
出版社:アスキー 著者:デイル・ロジャーソン ISBN:4756121764
パワープログラミング MFC COM (1998)
出版社:ソフトバンク 著者:テンプルマン、ジュリアン ISBN:4797305541
OLEコントロール入門 (1998)
出版社:プレンティスホール出版 著者:プオポロ、ジョン・P ISBN:4894710382
UNDERSTANDING ActiveX AND OLE (1997)
出版社:アスキー 著者:チャペル、デビッド ISBN:4756117066
Inside OLE (1997)
出版社:アスキー 著者:クレーグ・ブロックシュミット ISBN:4756116183
OLE オートメーションプログラマーズリファレンス (1996)
出版社:アスキー 著者:Microsoft Corporation ISBN:4756110584
Microsoft System Journal December 1995
・“OLE Q&A” (日本語版 1996年2月号 )マイクロソフトシステムジャーナル日本版 No.44 August 1996
・Windows NT4.0の分散COMと新しいOLE機能
・コンポーネントソフトウェアデザインに対するOLEとCOMの解答
マイクロソフトシステムジャーナル日本版 No.45 October 1996
・ActiveXプログラミング
マイクロソフトシステムジャーナル日本版 No.47 February 1997
・IDLを使ったCOMインターフェイス定義での属性
マイクロソフトシステムジャーナル日本版 No.49 June 1997
・COMサーバの寿命を正しく管理するにはマイクロソフトシステムジャーナル日本版 No.51 October 1997
・アプリケーションのコンポーネント化と拡張
・VBやC++で書いたクライアントにオブジェクトを正しく作成するためのメカニズムを提供する
方法/COMでシングルトンオブジェクトを実装するにはマイクロソフトシステムジャーナル日本版 No.52 December 1997
・オブジェクト指向ソフトウェアを単純化するCOM+ランタイムサービス Part I
マイクロソフトシステムジャーナル日本版 No.53 February 1998
・オブジェクト指向ソフトウェアを単純化するCOM+ランタイムサービス Part II
マイクロソフトシステムジャーナル日本版 No.54 April 1998
・メッソドのなかから呼び出してきたコードのホストアドレスを知る方法
マイクロソフトシステムジャーナル日本版 No.54 April 1998
・メッソドのなかから呼び出してきたコードのホストアドレスを知る方法
マイクロソフトシステムジャーナル日本版 No.55 June 1998
・ネットワークデータパケットを分析してDCOMプロトコルを理解する※本文書の複製再利用には使用許諾契約が必要です。

OPC(OLE for Process Control)技術概要書

Cマガジン 1996年 11月号
・ActiveX特集の中で、ActiveXの基礎技術として11ページにわたりDCOMを解説
Cマガジン 1997年 8月号
・最新ActiveXアプリケーション開発手法
Cマガジン 1997年 12月号
・特集ATL(Active Template Library) 2.1
日経コンピュータ 1996年11月25日、12月9日
・分散オブジェクト技術 DCOMの全貌(上)、(下）
日経バイト 1997年7月25日
・分散オブジェクトを検証する
日経デジタル・エンジニアリング 1998年5月
・計測制御装置をOLE/COMで結ぶ まずはデータの読み書きで実現※本文書の複製再利用には使用許諾契約が必要です。

Page 78