Use scanned barcode to specify source and destination transfers

Hey everyone,

Working on a Biomek i7, and wondering if anyone has a good technique for using scanned barcodes instead of static plate positions to specify source and destinations on a Transfer from File step. In the Transfer from File step, I can only use position ID’s (e.g. P1, P2, etc.) to specify Source and Destination Position. I’d like to be able to input a worklist with source and destination barcodes, and after scanning everything on the deck, have that be the determinant for where to pipette to and from. I assume I can use some scripting for this, but just want to see how others might be handling this. Thanks!

There may be more traction for something like this on the Automation Power Users Discord for i7s - feel free to join via the link here.

That being said, looks like someone solved this with a VBScript you can likely glean for yourself:


Copy of code here:

“Set step = CreateStep(“Biomek5.CreatePatternStep”)
Set vd = step.Dictionary
vd.File =“C:\Path\to\my\file.csv”
vd.MatchBarcode = true
vd.name = “myTestPattern”
'…
’ copy all other values from the original create pattern step
'…
Enqueue(step)”

If I’m interpreting this correctly that you’re interested in addressing labware via dynamic labware name instead of static labware position, you could probably also achieve this by renaming each plate as the barcode and reference the barcode in your csv, or renaming them something predictable based on barcode value and using that in your runtime steps.

There are also a few ways to modify a csv through script so you could collect barcodes, build the csv, then reference the barcode names instead of pos/dest. Or backwards like the csv being built referencing barcodes, then the instrument collects labware barcodes, and executes worklist using on-deck labware referenced by name/barcode

I’ve tried doing this, but I ran into issues where during validation the Biomek says it isn’t able to find the renamed position during the transfer step (despite it seeming to show the position name as the “scanned” barcode during validation, and it will also show the correct “scanned” barcode as a variable if you assign it to one when viewing datasets it shows the barcode ?)

Weirdly, if I address the original plate name in the validation worklist and then rename the plate to the scanned barcode it seems to think I’ve stacked a plate on top of the labware instead of renaming the existing plate ?

I ended up doing something I don’t love which was scraping the worklist during setup and assigning plates to specific deck positions in the script where each plate is named as the barcode right from the jump. I then prompt the user to load the deck accordingly. Then after scanning the barcodes we validate that all positions were loaded correctly/all plates are on deck/no superfluous plates are on deck etc.

That solution really only works if you have a single deck setup at the beginning (i.e. you’re not pulling plates from a cytomat during runtime) and I also think it’s annoying to ask that of users (like they should be able to load plates wherever and the renaming SHOULD work) so if anyone sees what I’m doing wrong please point me in the right direction :innocent:

Sorry this is the script where I’m renaming the barcode also:

I wonder if the transfer command is expecting “P1” instead of “simulated_barcode_0”. You could try a quick conversion script for decoding plate positions using the find labware script

VBScript
TempLabwarePos_0 = Labware.DeckPosition(simulated_barcode_0)

This would return the deck position where that named labware exists. If there are stacked labware, append .GetLabwareAtDepth(int) where topmost position is index 1 increasing as you move down towards the ALP