Hi all,
While this is mostly a review and already highlighted in the VENUS programmer’s manual, I wanted to provide a more detailed overview for correctly utilizing labware properties to scan barcodes.
The following table is a list of the general labware properties that are applicable to all of our larger platforms: STARline with a 1D autoload, STARline with a 2D autoload, and VANTAGE with the IDL. While they are pretty self explanatory there are a few key things to point out which are highlighted after the table. There is also a 3rd table near the end of this post that defines two more labware properties, but I specifically singled them out to give a more detailed explanation on their use.
| Labware Property |
Type and Default Value |
Description |
| MlStarCarrierBarcodePos |
Integer (43) |
The distance in 10ths of mm of the carrier barcode flag from the rear of the carrier |
| MlStarCarrierBarcodeWidth |
Integer (85) |
Width of the carrier barcode flag’s reading window |
| MlStarBarcodeReadSpeed |
Integer (1281) |
The speed that the autoload/IDL loads the carrier |
| MlStarCarCountOfBCPos |
Integer |
The total count of barcodes that will be visible to the autoload/IDL |
| MlStarCarBCOrientation |
Integer |
A value of 0 is used for vertical, 1 for horizontal, and 2 for all directions |
| MlStarCarFirstBCPos |
Integer |
The distance in 10ths of mm of the carrier’s first site barcode from the rear of the carrier |
| MlStarCarRasterWidth |
Integer |
The distance in 10ths of mm between each barcode site |
| MlStarCarBCReadWidth |
Integer |
Width of the carrier site barcode’s reading window |
| MlStarCarIsRecognizable |
Integer |
Whether or not the carrier has a magnet below its barcode flag |
| MlStarCarIsLoadable |
Integer |
Whether or not the carrier is loadable |
| MlStarCarIsAutoLoad |
Integer |
Whether or not the carrier is loadable by the autoload/IDL |
| MlStarCarPosAreRecognizable |
Integer |
A value of 0 means the labware on the carrier cannot be verified by the labware presence sensor and a value of 1 means that the presence sensor will have to detect labware on a given site in order for that labware’s barcode to be read |
| MlStarCarNoReadBarcode |
Integer |
A value of 0 means barcodes can be read and a value of 1 means no barcodes can be read upon loading the carrier |
| MlStarCarLabelName |
String |
The name of the carrier that will be displayed in the event of an error message |
The property MlStarCarCountOfBCPos refers to the number of scannable barcode positions on the carrier. I think there is some confusion in regards to thinking that this property refers to the number of sites/containers that exist on the carrier. But say you have two or more sites that are side-by-side on a carrier (like 20/60mL trough sites or adjacent QCGs) - these technically count as a single barcode position since they will pass by the barcode scanner on the autoload/IDL at the same time when the carrier is loaded.
The property MlStarCarPosAreRecognizable slightly differs between the STAR and VANTAGE platforms. Positions being recognizable refers to the use of the labware presence sensor which exists on both platform lines but as different hardware. The presence sensor on a STAR is directly adjacent to the barcode scanner and scans in one location/height for a reflection of its beam on the labware to verify the presence of sample tubes. The presence sensor on the VANTAGE is located behind the power button on the far left of the loading tray and will adjust vertically to the location that rack or tube labware may be. It too scans for a reflection of its beam off the labware in order to verify labware presence. If this labware property is set to a value of 1, labware presence verification precedes the barcode scanning - a barcode at a specific location will only be reported when that barcode’s labware has been verified to be present.
MlStarCarCountOfBCPos, MlStarCarFirstBCPos, and MlStarCarRasterWidth go hand-in-hand for determining scanning positions. MlStarCarCountOfBCPos determines the total number of times to scan for barcodes on a carrier. MlStarCarFirstBCPos is where the first scan will happen. Each next scan is the distance specified by MlStarCarRasterWidth towards the front of the carrier.
Now if you have a STAR with a 2D autoload, VENUS is capable of handling an additional 6 unique labware properties that can either be applied to individual racks on a carrier or the carrier itself. The following table details those properties:
| Labware Property |
Type and Default Value |
Description |
| MlStar2DBarcodeCarFirstBCPosShift |
Integer (0) |
The horizontal shift in 10ths of mm for correcting the barcode read position |
| MlStar2DReaderRoiYCenterOffset |
Integer (0) |
The horizontal distance in 10ths of mm from the center of the barcode reading window |
| MlStar2DReaderRoiZCenterOffset |
Integer |
The vertical distance in 10ths of mm from the bottom of the labware that has this property to the middle of the barcode |
| MlStar2DReaderRoiYWidth |
Integer |
The width of the barcode reading window |
| MlStar2DReaderRoiZHeight |
Integer |
The height of the barcode reading window |
| MlStar2DReaderIlluminationSettings |
String (“0;0;0;0;1;0;0”) |
The 7 illumination settings for the 2D autoload: |
The labware property MlStar2DBarcodeCarFirstBCPosShift should only ever be used to tweak the location and time that the barcode scanner scans a site. Metal, glossy laminates on barcode stickers, and other things can sometimes produce a glare on the camera of the 2D autoload. This property allows you to shift the position of scanning horizontally as a means of attempting to minimize such glare.
Prior to getting into the four region of interest (ROI) based labware properties, I just wanted to mention that the labware property MlStar2DReaderIlluminationSettings is pretty straightforward - while it is tough to know what to pick for it without seeing how they actually affect the image taken by the Cognex, I don’t think there needs to be much deviation from a setting of “2;1;2;1;1;3;200”. This sets the top two LEDs on the Cognex camera on, the bottom two off, the external blue LED set on, the gain factor of image processing to 3, and exposure time to 200ms. These settings result in image clarity seen in the following image:
The last four labware properties in the table are what’s used to create the ROI for a given barcode position. Note that the center offsets have different origin points in regards to their origins. The horizontal (Y) origin is dead center to the barcode scanning position with an even distance to the left and the right. The vertical (Z) origin is at the bottom of the labware that the property is applied to - so on a carrier the Z center offset origin is the deck while on a rack the Z center offset origin is the bottom of that rack. So note that you could have a 5-position carrier with a set of ROI labware properties specified on it OR you could have a 5-position carrier with 5 racks snapped to it on the deck layout and each of those racks have their own individual sets of ROI labware properties and optional light settings. The labware property from the first table, MlStarCarBCOrientation, can also be applied to individual racks.
Now here is the kicker - if you were to just add ROI labware properties to each rack snapped on a given template, that isn’t enough to have the load command utilize those properties. This brings us to the following table with two more labware properties to consider:
| Labware Property |
Type and Default Value |
Description |
| MlStarReadBarcodeOnPositions |
String |
Determines which site positions will be read during a load command where clauses are joined by a semicolon and each clause is “barcode return position = site name” |
| MlStarCarOpenRasterBarcodePositions |
String |
Defines the barcode read positions for an irregular carrier where barcode reading positions are not computed via MlStarCarCountOfBCPos, MlStarCarFirstBCPos, and MlStarCarRasterWidth |
If the carrier has no ROI labware properties and instead the snapped-to labware on that carrier has ROI properties, then the carrier MUST have the labware property MlStarCarOpenRasterBarcodePositions specified. This property overrides MlStarCarFirstBCPos and MlStarCarRasterWidth by parsing its string value where that string value should be a list of increasing numbers equal to the number of positions specified by MlStarCarCountOfBCPos. The values of those numbers are the integers in 0.1mm of the positions along the carrier to scan. To assist with understanding this, take a default 5 position carrier: the back/first site is 61.5mm from the rear of the carrier and each subsequent site forward is an additional 96mm - so where MlStarCarCountOfBCPos is 5 your value for MlStarCarOpenRasterBarcodePositions will be “615;1575;2535;3495;4455”. Only with this labware property added to the carrier will a load step respect the labware properties from the second table if they are added to individual racks on the carrier.
Now one more labware property: MlStarReadBarcodeOnPositions. There is an issue if you have sites side-by-side with each other in which case this labware property is needed. Take the following carrier as an example:
This carrier has 9 sites but only has 5 scannable positions. Its property MlStarCarCountOfBCPos will be 5. If MlStarReadBarcodeOnPositions is left unspecified a load of this carrier will scan possible barcodes on sites 5 through 9 but attempt to assign those barcodes to site names 1 through 5. So we would utilize a string of “1=5;2=6;3=7;4=8;5=9” for MlStarReadBarcodeOnPositions to show that position 1 of the load command needs to return and assign a found barcode to the labware that is snapped to site 5, position 2 of the barcode scan will assign a found barcode to site 6, and so on.
As we get to the end of this post I wanted to provide a bit more detail in visualizing what your labware properties mean in regards to barcode scanning:
When defining ROIs and light settings as labware properties you have two options: add a single set to the carrier OR add a set to each rack that needs to be scanned. Looking at the image above, the top carrier shows how you’d configure the properties on the carrier level with the bold red box being the final ROI. Notice how the window is taller in order to account for the plates in sites 2 through 5. Also notice how the MlStar2DReaderROIZCenterOffset is the distance from the bottom of the carrier to the middle of the ROI. This differs in comparison to the carrier on the bottom where each of the 5 racks have their own ROIs set. The MlStar2DReaderROIZCenterOffset for each rack on the bottom carrier in the image is the distance from the bottom of the plate to the middle of the ROI. The bottom carrier, not the racks on it, will need the labware property of MlStarCarOpenRasterBarcodePositions also specified. One final thing to note is that the MlStar2DReaderROIYCenterOffset in most cases will be 0, but can be positive or negative to move the horizontal position of the vertical dotted green line left or right, respectively.
And with that, happy barcode scanning.
Matt