....................................... : OPC Server : : : : ______ _________ : ___________ : / \ / \ : / \ / CUSTOM \ / Light-OPC \ OLE-COM / \ < DRIVER > lo-API < LIBRARY > OPC-DA < An OPC-Client > \ / interface \ / interface \ (SCADA) / : \______/ \_________/ : \___________/ : : :.....................................: |
_________ ........................
| | : _________________ :
| Process |---------\ loCacheUpdate() ----->| | :
| | DRIVER > : | Secondary | :
| Data |-----^---/ loCacheLock() ------->| Cache | :
|_________| | : |_________________| :
| ______________ : | | :
+----| ldReadTags() | : | | :
| ldWriteTags()| : \|loUpdatePipe |/ :
|______________| : \ thread / :
| : \ / :
| : ___\_________/___ :
_____^____ : | | :
/============= __| | /----------| Primary | :
/ __| | loClient |< | Cache | :
< OPC DA | | |__________| \----------|_________________| :
\ | |__________| : :
\========== |___________| :...... loService .....:
|
... OPC-DA ..... ...loClient::client_scheduler() thread... .. D ..
: ___________ : : R :
___ : | |/--/ UpdatePipe /= I :
| <--------- Subscription --| Primary |\--\~~ thread ~~\= V :
| <--------- OnDataChange --| Cache |<===+ :......: E :
| : |_____^_____| | : R :
| <-------------------------------|-------------Async--+ : :
| : | | | : :
| +---------------+ CACHE | | : :
AsyncIO ---->| Request Queue | | | _____|__:____ :
| q_req |-- Async--+--DEVICE----->| |:
| | | | ldWriteTags |:
DEVICE -->+---------------+-- Sync-DEVICE --------->| ldReadTags |:
| : | |_____________|:
| +---------------+ | | : :
SyncIO-+ <---| Response Queue| | | : :
| | q_ret |<------------------------Sync--+ : :
| +---------------+ | : :
CACHE <========================================+ : :
:...............................................:.....:
|