Factory Wide Multi Barcode Scanner Setup - Discussion/Feedback

Our factory is looking to move to using barcode scanners to be able to pre-fill tracking/part number data onto machines as we move pallets around. After a bit of research and thought, I came up with the following possible setup to allow us to use barcodes/scanners everywhere without requiring a vision client instance nearby to capture the data string.

I'd appreciate feedback on the setup as a whole or individual parts, like if I missed any possible pitfalls, 'gotcha's, completely forgot something or possibly better variable/member names/process flow.

Expected Process Flow

  1. Operator scans a machine identifying QR/barcode at the load point of the machine (If a machine has multiple load points then each load point is a unique code)
  2. Operator then scans the QR/Barcode on the pallet or travelers provided with the pallet of parts
  3. Ignition fetches the data associated with the pallet and copies required information into the data entry section of the machine (mainly SN's or lot numbers)
  • Extra Goal:
    • For scanners that are wirelessly connected to a base, be able to take a scanner from one area to another, connect it to a new base, and be able to execute the above process flow with no additional configuration (some zebra scanners can apparently connect to the new base by scanning the barcode on the base)

System Hardware Setup

  • One Ignition gateway.
  • Barcode Scanners, either:
    • Barcode scanner 'Base Station' (I've seen some that claim to be able to connect up 10 bluetooth/wireless scanners to a single base)
      • Connection from these bases to ignition will be made via a serial to ethernet gateway.
      • Bases will be placed strategically around the floor to allow maximum coverage
    • Wifi connected barcode scanner

Machine Configuration Changes

  • Unique ID's on load and unload points, either in QR or barcode format

Scanner Configuration

  • For the wifi connected scanners, no additional configuration is needed other than an DHCP IP reservation
  • For the multiple scanners connected to the base station:
    • Scanners are configured to send their serial number either before or after the scanned data, with a separating delimiter

Ignition Setup

  • UDT containing the following members:

    • Name: String - Human readable name of the device or base station, used to help identify what the device is

    • Location: String - Human readable name of the expected location of the device (used more for the scanner bases)

    • Delimiters: StringArray - allows user to configure what delimiter should be expected at beginning/end of barcode scanner data as well as the delimiter that separates data from the barcode identifier(SN), in the order of 'StartingDelimeter', 'IdDelimiter', 'EndingDelimiter'

    • RawScannerString: String - raw data from the scanner/base station

    • PairedScanners: Dataset - a list of scanner id's that ignition has seen send data through this base, with a column for ID and last seen time

    • ScannersData: Dataset - a dataset with a column for scanner ID and 3 to 5 columns of the data from the last x number of scans. 1 row per scanner ID

  • Each connected device (wifi connected scanner or a base) gets 1 UDT instance created for it. The raw data from the connection is pushed to 'RawScannerString'

  • RawScannerString has an 'onValueChanged' script that performs the following:

    1. Parses the raw string sent from the scanner and extracts the ID and the actual data

    2. Updates PairedScanners with the latest timestamp for the associated ID (or creates a new row if the ID is new)

    3. Updates ScannersData, placing the latest data in the leftmost data column associated with the scanner ID and shifting the existing data to the right (dropping the rightmost column's existing data) or creates a new row if the ID is new.

    4. Sends a gateway message to alert a processing message handler that scanner ID 'x' has passed new data in. Message payload contains the source device UDT name/path and the scanner ID that caused the value change.

  • The gateway has a message handler with a name along the lines of 'ScannerHasNewData' or such, with a process flow of the following:

    1. Grab the row of data associated with the provided scanner ID from the UDT that sent the message
    2. Parse the most recent data the scanner sent to determine if the data is a machine load/unload point ID or a traveler ID
    3. Based on the determination of what the data is the system does 1 of the following:
      • If the data is a machine load point identifier or blank, do nothing
      • If the data is something the system doesn't recognize, log a warning
      • If the data is a traveler ID, check the previous scanner data to see if there was a machine identifier present
        • If a machine identifier is present, grab the associated traveler data from database and transfer the needed traveler data to the machine.

Other Thoughts

  • Machine load point IDs and traveler IDs need to have 2 distinct string patterns (Our factory already does this via a prefix)

  • Setup requires a standard DB format for storing the traveler data for multiple types of parts

  • Some sort of mapping data is required to store what machines need what data and in what order, and what tags they go to.

  • Depending on what data the user is trying to move between DB and machine, either the main processing message handler gets very large to handle all possible processes or multiple smaller message handlers need to be created/called based on what the expected data/process is.

  • Machines will still be configured to allow manual entry in the case the system is not working

Thanks for taking the time to read this, I look forward to your feedback.