Data Transfer Layer

The Data Transfer layer is reponsible from moving data in and out of the system. It is the component that contains the networking and hardware interfaces:

  • robot hardware controller (e.g. UR controllers)
  • EtherCAT hardware control
  • Digital I/O devices
  • UR RTDE interface
  • UR Dashboard interface
  • streaming interfaces for othe robot controllers (e.g. Fanuc, Kuka)

Data transfer layers marshal data from protocol buffers (Shared memory, EtherCAT, DDS, another data store, etc) to the target data store. Data transfer elements map to a specific element in the data store and • Copy data from the protocol buffer • Convert data types (buffered type to/from data store element type) • Filter the data – Can include unit conversion, scaling, offsets, etc. • Index mapping – manipulator joint index mapping, etc. • Uses data store element accessor to set or get the value in the data store

Data Transfer Interace

Headers:

include/dataTransferInterface/
include/interProcessCore/

Examples:

examples/dataTransferConfigExample/
examples/fileStreamTransferExample/
examples/sharedMemoryTransferExample/

Data Capture to std::ostream

Data can be captured to any std::ostream in the data store.

EcOutputStreamElementType created new output streams as elements in EcDataStoreConfig.

EcBaseDataElementCapture an interface for data elements that can be captured to a std::ostream and defined in XML. The capture element Includes startTag, endTag, newLine, and Format Flags.

The XML snippet below defines logging of specific data elements. In this case we are logging the error count, task ID and path when errors occur.

        <logMessageTask messageType="TYPE_ERROR" updateCallbackId="LOG_ERROR">
           <captureElements>
              <stringCapture string="Error on control thread invoke: "/>
              <stringKeyU32ValueCapture startTag=" error count = " elementKey="ERROR_COUNT" elementPath="." newLine="0"/>
              <stringKeyStringValueCapture startTag=", Task ID = " elementKey="ERROR_TASK_ID" elementPath="." newLine="0"/>
              <stringKeyStringValueCapture startTag=", Task Path = " elementKey="ERROR_TASK_PATH" elementPath="." newLine="0"/>
           </captureElements>
        </logMessageTask>

See also : EcPrintMessageTask, EcLogMessageTask, EcOutputStreamDataCaptureTask