initial draft of sample transfer completed

This commit is contained in:
Holler Mirko
2024-07-16 11:48:21 +02:00
committed by wakonig_k
parent 3a06ca484b
commit 90449d22ee
2 changed files with 147 additions and 247 deletions
@@ -954,7 +954,7 @@ class OMNYSampleTransferMixin:
# }'
def _otransfer_check_sample_available_at_position(self, _osampleposition, _picked_it):
def _otransfer_check_sample_available_at_position(self, _osampleposition:int, _picked_it:bool) -> bool:
#called with _picked_it == 0 prior transfer. This checks that the gripper is empty and that there
#is a sample to get from that position
#called with _picked_it == 1 after the gripper action. then the storage is modified accordingly to the action
@@ -973,18 +973,18 @@ class OMNYSampleTransferMixin:
if installedshuttle == "A" or installedshuttle == "B" or installedshuttle == "C":
#is there a sample available?
if dev.omny_samples.is_sample_slot_used(installedshuttle,_osampleposition):
if(_picked_it==1):
if _picked_it==1:
samplename = dev.omny_samples.get_sample_name(installedshuttle, _osampleposition)
#remove sample from slot and put to gripper
dev.omny_samples.unset_sample_slot(installedshuttle, _osampleposition)
dev.omny_samples.set_sample_in_gripper(samplename)
return(1)
return True
else:
print("There is no sample availabe at that position.")
return(0)
return False
else:
print("There is no sample shuttle installed at the current parkz position.")
return(0)
return False
# # _osampleposition 7 for FZPs
# if (_osampleposition==7) {
@@ -1059,7 +1059,7 @@ class OMNYSampleTransferMixin:
# _osampleposition for fixed positions
elif (_osampleposition>9 and _osampleposition<15) or (_osampleposition>31 and _osampleposition<35) or _osampleposition==100 or _osampleposition==101:
if dev.omny_samples.is_sample_slot_used('O',_osampleposition):
if(_picked_it==1):
if _picked_it:
samplename = dev.omny_samples.get_sample_name('O', _osampleposition)
dev.omny_samples.unset_sample_slot('O', _osampleposition)
dev.omny_samples.set_sample_in_gripper(samplename)
@@ -1073,14 +1073,14 @@ class OMNYSampleTransferMixin:
#if (_osampleposition == 0 || _osampleposition == 12 || _osampleposition == 13 || _osampleposition == 14 || \\
# _osampleposition == 32 || _osampleposition == 33 || _osampleposition == 34)
# _otransfer_modify_sample("omny",110,1,samplename)
return(1)
return True
else:
printf("There is nothing to get from this position.")
return(0)
print("There is nothing to get from this position.")
return False
#sample stage
elif _osampleposition==0:
if dev.omny_samples.is_sample_in_samplestage():
if(_picked_it==1):
if _picked_it:
samplename = dev.omny_samples.get_sample_name_in_samplestage()
dev.omny_samples.unset_sample_in_samplestage()
dev.omny_samples.set_sample_in_gripper(samplename)
@@ -1094,16 +1094,16 @@ class OMNYSampleTransferMixin:
#if (_osampleposition == 0 || _osampleposition == 12 || _osampleposition == 13 || _osampleposition == 14 || \\
# _osampleposition == 32 || _osampleposition == 33 || _osampleposition == 34)
# _otransfer_modify_sample("omny",110,1,samplename)
return(1)
return True
else:
printf("There is no sample in the sample stage.")
return(0)
print("There is no sample in the sample stage.")
return False
return(0)
def _otransfer_check_free_slot_available_at_position(self, _osampleposition, _put_it):
def _otransfer_check_free_slot_available_at_position(self, _osampleposition:int, _put_it:bool) -> bool:
#called with _put_it == 0 prior transfer. This checks that the gripper has a sample and that there
#is a free sample position available that position
#called with _put_it == 1 after the gripper action. then the storage is modified accordingly to the action
@@ -1112,15 +1112,19 @@ class OMNYSampleTransferMixin:
if not dev.omny_samples.is_sample_in_gripper():
raise OMNYTransferError("There is no sample in the gripper.")
#sample pin
if (epics_get("XOMNY-SAMPLE_DB_omny:110.VAL")==1)
if ((_osampleposition>-1 && _osampleposition<7) || (_osampleposition>11 && _osampleposition<15) || (_osampleposition>31 && _osampleposition<35))
{ }
else
{
printf("There is a sample pin in the gripper, which is not compatible with position %d\n", _osampleposition)
exit
}
# this was from early omny when automatic changing of samples, fzps and osas was expected
# the idea was that it is distinguished wich kind of holder is currently in the gripper. turns out not to be needed.
# special transfer is always very manual with a lot of attention.
#
# #sample pin
# if (epics_get("XOMNY-SAMPLE_DB_omny:110.VAL")==1)
# if ((_osampleposition>-1 && _osampleposition<7) || (_osampleposition>11 && _osampleposition<15) || (_osampleposition>31 && _osampleposition<35))
# { }
# else
# {
# printf("There is a sample pin in the gripper, which is not compatible with position %d\n", _osampleposition)
# exit
# }
# #FZP holder
# if (epics_get("XOMNY-SAMPLE_DB_omny:110.VAL")==2)
# if (_osampleposition == 7 || _osampleposition == 10 || _osampleposition == 11 || _osampleposition == 100)
@@ -1141,234 +1145,129 @@ class OMNYSampleTransferMixin:
# }
# _osampleposition 1 to 6 are in shuttles
if ((_osampleposition>0 && _osampleposition<7)) {
local activeparkingposition
local installedshuttle
activeparkingposition = _oparkz_slot_check()
if(activeparkingposition==10)
exit
installedshuttle = epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", activeparkingposition))
#is there a samle shuttle at this position?
if(installedshuttle == "A" || installedshuttle == "B" || installedshuttle == "C")
{
#is there free position available?
if (epics_get(sprintf("XOMNY-SAMPLE_DB_shuttle_%s:%d.VAL",installedshuttle,_osampleposition))==0)
{
if(_put_it==1)
{
samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
_otransfer_modify_sample(installedshuttle, _osampleposition, 1, samplename)
_otransfer_modify_sample("omny",110,0,"-")
}
return(1)
}
else
{
printf("There is no free sample slot availabe at that position.\n")
return(0)
}
}
else
{
printf("There is no sample shuttle installed at the current parkz position.\n")
return(0)
}
}
# _osampleposition 1 to 6 are in shuttles
if _osampleposition>0 and _osampleposition<7:
activeparkingposition = self._oparkz_slot_check()
if(activeparkingposition==10):
raise OMNYTransferError("Parking stage is not at an active parking position.")
installedshuttle = dev.omny_samples.get_shuttle_name_slot(activeparkingposition)
#is there a samle shuttle at this position?
if installedshuttle == "A" or installedshuttle == "B" or installedshuttle == "C":
#is there free position available?
if not dev.omny_samples.is_sample_slot_used(installedshuttle,_osampleposition):
if _put_it:
samplename = dev.omny_samples.get_sample_in_gripper()
dev.omny_samples.unset_sample_in_gripper()
dev.omny_samples.set_sample_slot(installedshuttle, _osampleposition, samplename)
return True
else:
print("There is no free sample slot availabe at that position.")
return False
else:
print("There is no sample shuttle installed at the current parkz position.")
return False
# _osampleposition 7 for FZPs
if (_osampleposition==7) {
local activeparkingposition
local installedshuttle
activeparkingposition = _oparkz_slot_check()
if(activeparkingposition==10)
exit
installedshuttle = epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", activeparkingposition))
#is there a samle shuttle at this position?
if(installedshuttle == "FZP")
{
#is there a free FZP slot available?
if (epics_get("XOMNY-SAMPLE_DB_shuttle_FZP:0.VAL")==0)
{
if(_put_it==1)
{
samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
_otransfer_modify_sample(installedshuttle, 0, 1, samplename)
_otransfer_modify_sample("omny",110,0,"-")
}
return(1)
}
else
{
printf("There is no free FZP position available.\n")
return(0)
}
}
else
{
printf("There is no FZP shuttle installed at the current parkz position.\n")
return(0)
}
}
# OSA and FZP section, needs commissioning, was never
# _osampleposition 7 for FZPs
# if _osampleposition==7:
# activeparkingposition = _oparkz_slot_check()
# if(activeparkingposition==10)
# exit
# installedshuttle = epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", activeparkingposition))
# #is there a samle shuttle at this position?
# if(installedshuttle == "FZP")
# {
# #is there a free FZP slot available?
# if (epics_get("XOMNY-SAMPLE_DB_shuttle_FZP:0.VAL")==0)
# {
# if(_put_it==1)
# {
# samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
# _otransfer_modify_sample(installedshuttle, 0, 1, samplename)
# _otransfer_modify_sample("omny",110,0,"-")
# }
# return(1)
# }
# else
# {
# printf("There is no free FZP position available.\n")
# return(0)
# }
# }
# else
# {
# printf("There is no FZP shuttle installed at the current parkz position.\n")
# return(0)
# }
# }
# _osampleposition 8, 9 for OSAs
if (_osampleposition==8||_osampleposition==9) {
local activeparkingposition
local installedshuttle
activeparkingposition = _oparkz_slot_check()
if(activeparkingposition==10)
exit
installedshuttle = epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", activeparkingposition))
#is there a samle shuttle at this position?
if(installedshuttle == "OSA")
{
#is there a free OSA slot available?
if (epics_get(sprintf("XOMNY-SAMPLE_DB_shuttle_OSA:%d.VAL",(_osampleposition-8)))==0)
{
if(_put_it==1)
{
samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
_otransfer_modify_sample(installedshuttle, (_osampleposition-8), 1, samplename)
_otransfer_modify_sample("omny",110,0,"-")
}
return(1)
}
else
{
printf("There is no free OSA position available.\n")
return(0)
}
}
else
{
printf("There is no OSA shuttle installed at the current parkz position.\n")
return(0)
}
}
# # _osampleposition 8, 9 for OSAs
# if (_osampleposition==8||_osampleposition==9) {
# local activeparkingposition
# local installedshuttle
# activeparkingposition = _oparkz_slot_check()
# if(activeparkingposition==10)
# exit
# installedshuttle = epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", activeparkingposition))
# #is there a samle shuttle at this position?
# if(installedshuttle == "OSA")
# {
# #is there a free OSA slot available?
# if (epics_get(sprintf("XOMNY-SAMPLE_DB_shuttle_OSA:%d.VAL",(_osampleposition-8)))==0)
# {
# if(_put_it==1)
# {
# samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
# _otransfer_modify_sample(installedshuttle, (_osampleposition-8), 1, samplename)
# _otransfer_modify_sample("omny",110,0,"-")
# }
# return(1)
# }
# else
# {
# printf("There is no free OSA position available.\n")
# return(0)
# }
# }
# else
# {
# printf("There is no OSA shuttle installed at the current parkz position.\n")
# return(0)
# }
# }
# _osampleposition for fixed positions
if ((_osampleposition==0)||(_osampleposition>9&&_osampleposition<15)||(_osampleposition>31&&_osampleposition<35)||_osampleposition == 100||_osampleposition == 101) {
#is there a free slot available?
if (epics_get(sprintf("XOMNY-SAMPLE_DB_omny:%d.VAL", _osampleposition))==0)
{
if(_put_it==1)
{
samplename = epics_get(sprintf("XOMNY-SAMPLE_DB_omny:110.DESC"))
_otransfer_modify_sample("omny",110,0,"-")
_otransfer_modify_sample("omny",_osampleposition,1,samplename)
}
return(1)
}
else
{
printf("There is no free space at this position.\n")
return(0)
}
# _osampleposition for fixed positions
if (_osampleposition>9 and _osampleposition<15) or (_osampleposition>31 and _osampleposition<35) or _osampleposition == 100 or _osampleposition == 101:
#is there a free slot available?
if not dev.omny_samples.is_sample_slot_used('O',_osampleposition):
if _put_it:
samplename = dev.omny_samples.get_sample_name_in_gripper()
dev.omny_samples.set_sample_slot('O', _osampleposition, samplename)
dev.omny_samples.unset_sample_in_gripper()
return True
else:
print("There is no free space at this position.\n")
return False
#sample stage
elif _osampleposition==0:
if not dev.omny_samples.is_sample_in_samplestage():
if _put_it:
samplename = dev.omny_samples.get_sample_name_in_gripper()
dev.omny_samples.set_sample_in_samplestage(samplename)
dev.omny_samples.unset_sample_in_gripper()
return True
else:
print("There is no sample in the sample stage.")
return False
}
return(0)
}'
return False
def _otransfer_check_parking(_ocontainer) '{
#_ocontainer is A, B, C for the pin containers
#it can also be FZP, and OSA
for (k=1;k<7;k++) {
if( epics_get(sprintf("XOMNY-SAMPLE_DB_parking:%d.DESC", k)) == _ocontainer) {
printf("Shuttle %s is already installed at parking position %d.", _ocontainer, k)
exit
}
}
}'
def otransfer_help(self):
printf("omny.transfer.otransfer_park_slot(slot) drive the parking station to transfer from <slot> with the gripper\n")
printf("omny.transfer.otransfer_park_loadlock_slot(slot) drive the parking station to transfer from <slot> with the loadlock\n")
printf("omny.transfer.otransfer_get_sample(position) pick with the gripper from <position>")
printf("omny.transfer.otransfer_put_sample(position) put with the gripper to <position>")
printf("To modify the storage information see dev.omny_samples.help()")
def otransfer_modify_parking '{
if ($# != 2 ) { #change singe position status
printf("Wrong number of arguments. otransfer_modify_parking <pos> <shuttle>\n")
printf("<pos> ranges from 1 to 6.\n")
printf("<shuttle> can be 0=empty, 1=A, 2=B, 3=C, 4=OSA, 5=FZP\n")
exit
}
local _shuttle
#this is done because the argument cannot be the capital A
if ($2==1)
_shuttle = "A"
if ($2==2)
_shuttle = "B"
if ($2==3)
_shuttle = "C"
if ($2==4)
_shuttle = "OSA"
if ($2==5)
_shuttle = "FZP"
if ((_shuttle=="A" || _shuttle=="B" || _shuttle=="C" || _shuttle=="FZP" || _shuttle=="OSA" || _shuttle==0 ) && ($1>0 && $1<7))
_otransfer_modify_parking($1, _shuttle)
else
printf("Error. Position number not available.\n")
otransfer_storage
}'
def otransfer_modify_samples '{
if ($# != 3 ) { #change singe position status
printf("Wrong number of arguments. otransfer_modify_samples <shuttle> <pos> <0 for free, 1 for used>\n")
printf("<shuttle> can be 0=OMNY, 1=A, 2=B, 3=C, 4=OSA, 5=FZP\n")
exit
}
local _storage
#this is done because the argument cannot be the capital A
if ($1==0)
_storage = "omny"
if ($1==1)
_storage = "A"
if ($1==2)
_storage = "B"
if ($1==3)
_storage = "C"
if ($1==4)
_storage = "OSA"
if ($1==5)
_storage = "FZP"
local _oname
#new position is used. so ask for sample name
if ($3 == 1)
_oname = getsval("What is the name of this sample?","noname")
if ((_storage=="A" && $2>0 && $2<7) || (_storage=="B" && $2>0 && $2<7) || (_storage=="C" && $2>0 && $2<7) || (_storage=="FZP" && $2==0) || (_storage=="OSA" && $2>=0 && $2<2) || (_storage=="omny"))
_otransfer_modify_sample(_storage, $2, $3, _oname)
else
printf("Error. Position number not available.\n")
otransfer_storage
}'
def otransfer_help '{
text_bf
printf("otransfer is not in a -to be used by users- state\n")
text_non_bf
printf("otransfer_park_slot <slot> drive the parking station to transfer from <slot> with the gripper\n")
printf("otransfer_park_loadlock_slot <slot> drive the parking station to transfer from <slot> with the loadlock\n")
printf("otransfer_get_sample <position> pick with the gripper from <position>\n")
printf("otransfer_put_sample <position> put with the gripper to <position>\n")
printf("otransfer_storage print the status of the sample storage\n")
printf("otransfer_modify_parking modify the shuttle status in the parking station\n")
printf("otransfer_modify_samples modify the sample status\n")
}'
@@ -22,6 +22,7 @@ class OMNYSampleStorage(Device):
"set_sample_in_samplestage",
"unset_sample_in_samplestage",
"get_sample_name_in_samplestage",
"get_sample_name_in_gripper",
"get_sample_name",
"is_sample_in_samplestage",
"set_shuttle_slot",