Custom liquid class with tunable zOffset

Hi everyone! I am looking for some help with a hurdle I’ve encountered while designing a custom liquid class for a reagent that needs to be dispensed at a very specific height above the bottom of the well. I have a script/subroutine built called “dispense” which takes a few inputs (trough labware, plate labware, tip type, volume, deck site offsets, etc.) that I can use any time I need to dispense liquid with the FCA from a trough to a plate. I also give as input “liquid class” for the dispense. In my lab a colleague has built a similar script for stamping with the MCA head, and has a point in the liquid class microscript where the “zOffset” value can be imported from a file (which in turn would be exported to that file from earlier in the script). However, I’m not able to use this same logic with the FCA, as I get an error when the microscript hits the import variables line and I get this error (where x is each tip number, kept condensed for clarity):

Application: FluentControl Application, Module: Runtime Controller
Description: Exception occurred during preparation of pipetting:
tip x line 34: Value cannot be null.
Parameter name: methodName

This doesn’t occur with the MCA, it imports the zOffset just fine and uses it for each stamp. I suspect an issue with how the FCA calls this per arm rather than the way the MCA does for the entire block, but I’ve done a bunch of troubleshooting to rule things out (hardcoding a different zOffset works, I can’t import and then set a different variable as zOffset from the main script, confirmed the right file type …). My current suspicion is that there is an issue occurring when it tries to pull this variable 8 times simultaneously (one for each tip) but I can’t think of a way around that.

Would love to know if anyone else has encountered hurdles importing variables in FCA microscripts, and how you resolved them. Also open to other suggestions on how to handle this case, where I want to avoid hard-coding variables as much as possible to make the dispense subroutine as flexible as it can be. Thanks in advance!

An Import Variable command in a microscript would be executed for each pipetting channel individually. Also each separate Import Variable command generates a copy of the import file into the AuditTrail folder. Hence over time you could possibly accumulate a lot of data in the AuditTrail if each FCA pipetting script command would result with 8x copies of the import file. I could also imagine potential file access issues in case 8 parallel running microscripts would try to access the same file at approximately the same time when all 8 tips pipette in parallel.

A better way to store the z-offset value if we assume the z-offset is specific to a labware definition, is to create a labware attribute for it and write the value into a labware attribute at the script - use SetAttribute() function - and later read that z-offset value from the microscript into the liquid class - use GetAttribute() - function. Please check out the two posts linked below.

1 Like