Co to je OPC
OPC Foundation je nezisková organizace, která na základě OLE/COM
standartu stanovila protokol pro rychlejší a bezpečnější přenos technologických
dat. OPC (OLE for process control) je množina OLE/COM rozhraní které
zpostředkovávají výměnu informací mezi klientem a serverem.
Klient
Prostřednictvím OPC klienta jsou aplikace schopny komunikovat
s libovolným OPC serverem. Nikde naní stanoveno, jakým způsobem bude
klient komunikovat s aplikací. Rovněž není nikde stanoveno, jakým spůsobem
bude server komunikovat s v/v zařízením. Avšak způsob komunikace
server — client je pevně stanoven OPC protokolem. Proto existuje-li pro danou
aplikaci OPC klient, je možno v ní spracovávat data z libovolného
v/v zařízení pro které existuje OPC server (OPC servery dnes existují pro
drtivou většinu všech v/v zařízení).
Server
Server je program, který získává data z konkrétního v/v zařízení.
Klientovi je poskytuje ve formě tzv. položek. To znamená, že mapuje paměťové
místo v/v zařízení na položku ke které má přístup klient. Položka je tedy
symbolické jméno, proměnná, která ukazuje na konkrétní místo v paměti
v/v zařízení. Správu položek, to znamená jejich přidávání, odebírání a
editaci má na starosti server.
Struktura OPC
Jak bylo uvedeno výše, data jsou v OPC předávána pomocí položek.
Položky jsou združovány do skupin. Každá skupina má tři základní parametry.
update rate — Tento parametr určuje frekvenci obnovování všech položek
v dané skupině.
percent deadband — Tento parametr je aplikován pouze na položky, které
obsahují dwEUType of anolog informaci (určuje server). Server potom
předá klientovi pouze tu informaci, která bude splňovat následující
podmínku:
abs(last cached value - current value) >
pPercentDeadband * (EU_High - EU_Low)
time bias — Data mohou být zpracovávána zařízením, které pracuje
s jiným časem a tato hodnota slouží k tomu, aby časová informace,
kterou od serveru obdrží klient byla správně prezentována.
Ke každé položce jsou kromě její hodnoty poskytovány doprovodné informace.
Ty jsou:
kvalita — Může být DOBRÁ, ŠPATNÁ nebo NEURČITÁ , informaci
o kvalitě získává klient od serveru Kvalita je špatná, když se nějakým
způsobem serveru nedaří komunikovat s v/v zařízením. Neurčitá je,
když o ní klient nemá k dispozici informaci (většinou je to tím že na
danou položku nebyl žádný požadavek na čtení nebo zápis.)
čas — Je to doba od předání požadavku serveru do jeho vybavení. Je
udána v milisekundách.
Schéma propojení plikace v systému Control Web a v/v zařízení
prostřenictvím OPC.

Schéma propojení aplikace a v/v zařízení
Komunikace
klient-server
Každý OPC server má datové rozhraní pomocí kterého klient uplatňuje
požadavky na čtení nebo zápis. Čtení nebo zápis dat může vůči klientovi
probíhat buď synchronně, nebo asynchronně. 'Požadavek na čtení nebo zápis'
znamená v podstatě volání procedury serveru. Pokud je tedy použita
komunikace synchronní, zavolá klient proceduru serveru a program nebude
pokračovat do té doby, dokud server nezíská požadovaná data. To můžou být
řádově sekundy. Při použití asynchronní komunikace po zavolání procedury
serveru program pokračuje bez přestávky dál. Až server získá požadovaná data,
informuje o tom klienta pomocí návratového volání.

Rozdíl mezi použitím synchronní a asynchronní
komunikace
Synchronní komunikace
- Požadavek na čtení dat
- Vyslání požadavku do klienta
- Zpracování požadavku klientem
- Zaslání požadavku serveru a čekání na odpověď
- Zpracování odpovědi serveru a poslání do aplikace
Asynchronní komunikace
- Požadavek na čtení dat
- Vyslání požadavku do klienta
- Zpracování požadavku klientem
- Zaslání požadavku serveru, program pokračuje v činnosti
- Server poslal odpověď — zpracování odpovědi a poslání do aplikace
Komunikace se vzdáleným
serverem
OPC umožňuje klientovi komunikovat se serverem na vzdáleném počítači
prostřednictvím rozhraní DCOM (distributed COM). Pro přenos dat pomocí OPC mezi
dvěma počítači musí být splněny tyto podmínky:
- Na obou dvou počítačích musí být nainstalovaný DCOM. Ve WinNT4.0 je
součástí systému, u Win95 se musí nainstalovat dodatečně.
- Uživatel se musí z počítače, na kterém je klient přihlásit na
počítač, na kterém je server jako ADMINISTRÁTOR (mít administrátorská práva, to
znamená mimo jiné přístup do systémového registru). Tohoto přihlášení lze
dosáhnout například z Exploreru.
- DCOM u serveru musí být nastavený tak aby ho směl spouštět daný
vzdálený uživatel. Nejjednodušší cesta je nastavit Every One u všech práv.
Toto nastavení lze provést aplikací 'dcomcnfg.exe', která je součástí systému.
Kromě obecných musí být nastavena i práva u aplikace, která obsahuje
samotný server.
Popis OPC
rozhraní
Na straně serveru musí být implementovány 3 základní objekty, obsahující
příslušná rozhraní. Jsou to:
OPCServer
IOPCServer — práce se skupinami.
- HRESULT AddGroup( szName, bActive, dwRequestedUpdateRate, hClientGroup,
pTimeBias, pPercentDeadband, dwLCID, phServerGroup, pRevisedUpdateRate, riid,
ppUnk );
- HRESULT GetErrorString( dwError, dwLocale, ppString );
- HRESULT GetGroupByName( szName, riid, ppUnk );
- HRESULT GetStatus( ppServerStatus );
- HRESULT RemoveGroup( hServerGroup, bForce );
- HRESULT CreateGroupEnumerator( dwScope, riid, ppUnk );
IOPCServerPublicGroups (nepovinný) — práce se sdílenými skupinami.
- HRESULT GetPublicGroupByName( szName, riid, ppUnk );
- HRESULT RemovePublicGroup( hServerGroup, bForce );
IOPCBrowseServerAddressSpace (nepovinný) — procházení adresního
prostoru serveru (získání seznamu definovaných položek).
- HRESULT QueryOrganization( pNameSpaceType );
- HRESULT ChangeBrowsePosition( dwBrowseDirection, szString );
- HRESULT BrowseOPCItemIDs( dwBrowseFilterType, szFilterCriteria,
vtDataTypeFilter, dwAccessRightsFilter, ppIEnumString );
- HRESULT GetItemID( szItemDataID, szItemID );
- HRESULT BrowseAccessPaths( szItemID, ppIEnumString );
IPersistFile (nepovinný) — nahrávání a ukládání konfiguračních
souborů.
- HRESULT IsDirty();
- HRESULT Load( pszFileName, dwMode);
- HRESULT Save( pszFileName, fRemember);
- HRESULT SaveCompleted( pszFileName);
- HRESULT GetCurFileName( ppszFileName);
OPCGroup
IOPCGroupStateMgt — získání informací o vlastnostech skupin,
popřípadě jejich změna.
- HRESULT GetState( pUpdateRate, pActive, ppName, pTimeBias,
pPercentDeadband, pLCID, phClientGroup, phServerGroup);
- HRESULT SetState( pRequestedUpdateRate, pRevisedUpdateRate,
pActive,
pTimeBias, pPercentDeadband, pLCID, phClientGroup);
- HRESULT SetName( szName);
- HRESULT CloneGroup( szName, riid, ppUnk);
IOPCPublicGroupStateMgt (nepovinný) — získání informací
o vlastnostech sdílených skupin, popřípadě jejich změna.
- HRESULT GetState( pPublic);
- HRESULT MoveToPublic( void );
IOPCSyncIO — synchronní zápis / čtení dat.
- HRESULT Read( dwSource, dwNumItems, phServer, ppItemValues,
ppErrors);
- HRESULT Write( dwNumItems, phServer, pItemValues, ppErrors);
IOPCAsyncIO — asynchronní zápis / čtení dat.
- HRESULT Read( dwConnection, dwSource, dwNumItems, phServer,
pTransactionID, ppErrors )
- HRESULT Write( dwConnection, dwNumItems, phServer, pItemValues,
pTransactionID, ppErrors );
- HRESULT Cancel( dwTransactionID );
- HRESULT Refresh( dwConnection, dwSource, pTransactionID );
IOPCItemMgt — přidělování položek do skupin.
- HRESULT AddItems( dwNumItems, pItemArray, ppAddResults, ppErrors );
- HRESULT ValidateItems( dwNumItems, pItemArray, bBlobUpdate,
ppValidationResults, ppErrors );
- HRESULT RemoveItems( dwNumItems, phServer, ppErrors );
- HRESULT SetActiveState( dwNumItems, phServer, bActive, ppErrors );
- HRESULT SetClientHandles( dwNumItems, phServer, phClient, ppErrors );
- HRESULT SetDatatypes( dwNumItems, phServer, pRequestedDatatypes, ppErrors
);
- HRESULT CreateEnumerator( riid, ppUnk );
IDataObject — připojení klienta (pro asynchronní komunikaci).
- HRESULT DAdvise( pFmt, adv, pSnk, pConnection );
- HRESULT DUnadvise( Connection );
EnumOPCItemAttributes
IEnumOPCItemAttributes — atributy položek.
- HRESULT Next( celt, ppItemArray, pceltFetched );
- HRESULT Skip( celt );
- HRESULT Reset( void );
- HRESULT Clone( ppEnumItemAttributes );
Na straně klienta musi být implementováno jedno rozhraní sloužící pro
asynchronní komunikaci.
IAdviseSink
- HRESULT OnDataChange(pFE, pSTM);
Poznámka : Metody rozhraní jsou zapsané v jazyce C++.
Potřebná podpora
Aby na vašem počítači mohla probíhat OPC komunikace, musí být
zaregistrovány tyto knihovny 'opccomn_ps.dll' a 'opcproxy.dll'.
Jejich instalace je většinou součástí instalace serveru. Pokud tomu tak není,
jsou k dispozici ke stažení u OPC Foundation na adrese
http://www.opcfoundation.org kde je popsán i postup
jejich instalace.