Hi everyone,
I need to set up a conveyor tracking application in which I cannot directly wire a sensor to the switch input of CMT, as my trigger is actually a logic condition, and its expression may change at runtime.
Is there any way to provide a soft trigger switch via RAPID? I am aware that I will introduce time uncertainty but my conveyor moves slowly and I need no extreme positioning accuracy.
Or, even better, is there a way to issue a Rapid instruction which cause a WObj to be continuously offset in a defined direction based on encoder measured distance? This is actually they way this application was made in the past with Kawasaki robots.
Any smarter idea than wiring a general purpose digital output to the trigger input of CMT?
Many thanks,
Gabriel
Hi gea_gfantechi,
Yes there is a signal to simulate the Trigger.
You can type:
PulseDO\High\PLength:=0.2,c1SoftSync;
If you want to manage a sequential trigger and you need to measure the distance between a trigger and other, you can use this code i’ve developed. (You need Multitasking)
EXAMPLE: Trig Foto and syncTrigger every 250mm
CONST dnum k_Maxc1Counts:=4294967295; !Max counts of encoder, youi can find in config data
CONST dnum k_CountsPerMeter:=48579; !Same of Process parameter
CONST num k_PhotoRatio:=250; !Distance between a trig and next
PERS num act_c1Counts_Vis;
PERS num memo_c1Counts_Vis;
PROC TrigCmd()
IF ((getDistance_Vis()>NumToDnum(k_PhotoRatio) AND c1NullSpeed=0 ) THEN
! Cmd Trigger to CTM
PulseDO\High\PLength:=0.2,c1SoftSync;
ENDIF
ENDPROC
FUNC dnum getDistance_Vis()
VAR dnum l_n;
act_c1Counts_Vis:=GInputDnum(c1Counts);
memo_c1Counts_Vis:=GInputDnum(c1CntFromEnc);
!Recalculate position if pass over 0 axis CNV1
IF act_c1Counts_Vis<memo_c1Counts_Vis THEN
memo_c1Counts_Vis:=(-1)*(k_Maxc1Counts-memo_c1Counts_Vis);
ENDIF
l_n:=((act_c1Counts_Vis-memo_c1Counts_Vis)*1000)/k_CountsPerMeter;
RETURN l_n;
ENDFUNC
IF you want to store pulsencoder and take an ID of the trigger to use conveyor advanced tracking you can use GInputDnum(c1CntFromEnc).