LightOPC Architecture

General architecture


.......................................
:            OPC Server               :
:                                     :
:  ______                 _________   :             ___________
: /      \               /         \  :            /           \
 / CUSTOM \             / Light-OPC \   OLE-COM   /             \
<  DRIVER  >  lo-API   <   LIBRARY   >   OPC-DA  < An OPC-Client >
 \        /  interface  \           /  interface  \    (SCADA)  /
: \______/               \_________/  :            \___________/
:                                     :
:.....................................:

Data path


 _________                                ........................
|         |                               :   _________________  :
| Process |---------\  loCacheUpdate() ----->|                 | :
|         |  DRIVER  >                    :  |    Secondary    | :
|  Data   |-----^---/  loCacheLock() ------->|      Cache      | :
|_________|     |                         :  |_________________| :
                |     ______________      :    |             |   :
                +----| ldReadTags() |     :    |             |   :
                     | ldWriteTags()|     :   \|loUpdatePipe |/  :
                     |______________|     :    \   thread    /   :
                           |              :     \           /    :
                           |              :   ___\_________/___  :
                      _____^____          :  |                 | :
   /=============  __|          | /----------|     Primary     | :
  /             __|  | loClient |<           |      Cache      | :
 <  OPC DA     |  |  |__________| \----------|_________________| :
  \            |  |__________|            :                      :
   \========== |___________|              :...... loService .....:

Async. model


... 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 <========================================+            :     :
                :...............................................:.....: