Skip to content

Overview

The XPU component serves as a wrapper to functions and classes provided by the Tc3_XTS_Utility library.

The intention for the component is to insulate the application programmer from the 'messy middle' of buffering movers, handling relationships between stations, group motion setup and maintenance, etc.

Consider an assembly machine utilizing XTS as a product transport mechanism. An assembly machine typically consists of multiple stations each performing a discrete operation on a part which is moved serially though the machine. Ideally a team of developers should be able to work on such a machine simultaneously, concerning themselves only with the logic and operations specific to a particular station. The passing of an XTS mover to and from a station should be secondary to the developer's efforts. Additionally, the locations of the stations on the machine base should be flexible and otherwise transparent to the developer.

The existing XTS configuration tools continue to be utilized. Station position(s) and number of movers required are parameterized in the XTS Configuration Tool via the Stations section. The XPU component will collect all of the configured parameters via the Tc3_XTS_Utility library.

At the application layer, a station need only implement a relatively lightweight interface I_XTS_ApplicationStation and make itself known to the XPU component. During initialization, the XPU component will establish the necessary links and assign an instance of I_XTS_InfoStation to the station. I_XTS_InfoStation is the interface through which a station can request mover(s) from the XPU component.

Mover Exchange

The function blocks linked to the NC axes corresponding to XTS movers are contained within FB_Component_XPU. They are each associated via interface pointer with only one InfoStation at a time. The XPU component maintains a list of stations and their associated "neighbors"--one upstream and another downstream. ApplicationStations and their specific logic dictates when they are done with/need another mover. They request a mover from their associated InfoStation, which passes this request to the XPU for processing.

The movement of a mover's interface pointer from one InfoStation's buffer to another takes place in a single PLC scan.

An illustration of this exchange:

sequenceDiagram
    participant DS as Downstream ApplicationStation
    participant DI as Downstream InfoStation
    participant X as XPU
    participant UI as Upstream InfoStation
    participant US as Upstream ApplicationStation

    Note over DS,DI: Downstream Application Station and <br>Downstream InfoStation know about each other

    DS ->> DI: Get a new mover

    DI->>X: Give me a mover
    Note over DI,X: InfoStation passes an interface to itself <br> as an argument to XPU
    Note over X: XPU matches the interface to <br> its neighbor
    X->>UI: Give Downstream InfoStation a mover
    Note over X,UI: XPU passes interface to Downstream InfoStation
    Note over US,UI: Upstream Station and Upstream <br>InfoStation know about each other
    UI->US: Are you done with this thing?
    US-->UI: Yeah go ahead and give it away
    UI-->>DI: I heard you wanted a mover?
    Note over UI, DI: Upstream InfoStation passes interface to its first mover in queue
    DI -> DS: Are you sure you want this thing?

    DS --> DI: Yep!
    Note over DI: Enqueues the mover
    DI -->> UI: Thanks I'll take it
    Note over UI: Dequeues the mover
    UI -->> X: It is done.
    X -->> DI: Upstream gave you a mover
    DI -->> DS: OK check your queue
    Note over DS: Sends new mover to open station position

Class Diagram

For illustration only

classDiagram


    NC --* CAGroup
    NC --* Axis

    Axis --* SoftDrive

    XtsProcessingUnit -- Mover    
    XtsProcessingUnit -- Part
    XtsProcessingUnit -- Track





   FB_Component_XPU -- ApplicationStation



    Part --  FB_Component_XPU
    Track --  FB_Component_XPU
    Mover --  FB_Component_XPU
    CAGroup --  FB_Component_XPU
    InfoStation --  FB_Component_XPU
    XtsInfoServer -- InfoStation
    InfoStation .. ApplicationStation

    Axis -- Mover
    SoftDrive -- Mover


    Mover .. Part
    Mover .. Track
    Mover .. CAGroup



    class FB_Component_XPU{
        Parts[]
        Tracks[]
        Movers[]
        InfoStations[]
    }


    class ApplicationStation{
        InfoStation
        MoverQueue
    }

    class InfoStation{
        ApplicationStation
        MoverQueue
        StopPositions[]
        GetMover()
        GiveMover()
        TakeMover()
    }

    class XtsProcessingUnit{
        <<TcCom>>
        Parts[]
        Tracks[]
        Movers[]
    }

    class XtsInfoServer {
        <<TcCom>>
        InfoStations[]
    }

    class NC{
        <<System Manager>>
    }