For each PLC, the vxWorks driver code arranges the tags in scan lists depending on the requested update rate. One thread per PLC handles all read/write requests.
EPICS device support allows analog, binary and multi bit records to use the driver for input and output. Tags have to refer to a scalar value, a single array element or structure element, not whole arrays or structures. The PLC data types BOOL, SINT, INT, DINT, and REAL are handled.
One can change the record configuration at runtime, without rebooting the IOC, e.g. the tag name that a record refers to can be replaced. In case of a communication error or timeout, the driver disconnects from the PLC and attempts periodic reconnects.
Per default, the driver combines requests for array elements into one array transfer from the first to the highest requested element. This leads to a significant reduction in transfer times, but might have side effects. The IOC will always write the whole array whenever more than one element has been changed by output records. If the same PLC array has been modified by another source since the last transfer, the IOC is unaware of these changes and will over-write them. An array transfer is also size-limited by the aforementioned PLC buffer limit. The record configuration allows separate array element transfer as a workaround for these cases.
For output records, the driver sends a CIP_Write_Data message whenever the record is processed. Otherwise it will periodically read the tag from the PLC and update the output record if the value on the PLC differs from the one in the record.