In distributed applications using the Current Value Table (CVT) there is a fundamental need to pass CVT data between targets. This tool demonstrates one method of communication between CVT instances on different targets using a TCP/IP client/server protocol.
The current CCC (VIPM 3.0.3.9) doesn't handle multiple server instances (On unique ports) cleanly nor can clients reconnect to the server with differing tag lists configurations.
A very small change can enable this capability simply by recognizing the CVT attempts to optimize read/write groups by caching their configuration based on group names. If the group name changes, CVT will create new groups with new configurations. This, the server needs to provide a means to delete read/write groups on disconnect so that the next connection will create new groups entirely.
Additionally, the client name (IP address + port number) needs a 'session ID' so that the server (STM) properly handles re-connections as entirely new connections.
These changes enable the following capabilities:
Multiple servers being queried at differing rates with different read/write tag lists (EX: High speed and low speed).
Asynchronous synchronization (Client connect, configure, modify, disconnect). In-efficient, but useful for one-shot transfer of large tags (EX: Flattened structures) that change very infrequently.
Adaptable client that uses the asynchronous capability to configure itself to any server (EX: Client first reads an ALL_TAGS structure provided by the server which defines all available tags, their direction, and types. The client can then reconnect using the discovered tags. This is useful for a remote CVT debugger).