mohsin ahmad Posted February 16, 2016 Posted February 16, 2016 i am facing problem while i am trying to make threads on my lathe. actually it goes off track or its path while in threading mode.i have tried g32 and g76. here is my configuration for spindle and z axis. z axis has no backlash , max following error 0.003mm. ixx28=0, 10000 counts/ revolution. for spindle encoder counts 4096/rev max spindle speed 1875rpm i7042=3 i've checked c channel pulse .its fine and updating. but problem is still there. threading goes off track about 0.1mm every round.
steve.milici Posted February 17, 2016 Posted February 17, 2016 Is the lead off by the exact amount (within the specs of the machine) every rev of the spindle?
mohsin ahmad Posted February 17, 2016 Author Posted February 17, 2016 yes. i think so. some times it does not shift or off track. the shift is almost the same. some times shift is +ve and some times shift is in -ve.
mohsin ahmad Posted February 17, 2016 Author Posted February 17, 2016 i have something in my mind to ask you about. its a very basic question. how clipper reads the logic. like i am using opkon rotary encoder. if channel pulse of encoder is high what does clipper reads it ? would it reads low or high? i mean 5volt output pulse
mohsin ahmad Posted February 17, 2016 Author Posted February 17, 2016 Is the lead off by the exact amount (within the specs of the machine) every rev of the spindle?
mohsin ahmad Posted February 18, 2016 Author Posted February 18, 2016 Is the lead off by the exact amount (within the specs of the machine) every rev of the spindle? steave i have checked it by removing the c channel pulse signal wire . still machine goes to threading mode . it means machine does not wait for c channel pulse. if it does not check c channel pulse then how it will make the healthy threads.
steve.milici Posted February 18, 2016 Posted February 18, 2016 Note that I7042 should only ever be 1 or 5. If the trigger is not correct the motion should be locked if triggered timebase is active. Something is not correct in the your code to setup triggered timebase The triggered timebase is automatically setup in the “standard” files described next. Thread mode is set in the G32 code which is also called by G76 (see next). The OVERRIDE.PLC looks at this. LatheA.G: ======================================================================================= OPEN PROG 1000 CLEAR //(at line 43 in text file) . . . // G32 THREAD CUT COORD SYS 1 /////////////////////////////////////////// (at line 1504 in text file) N32000 READ(X,Z,U,W,E,F) LINEAR // Set flag in timebase PLC that indicates we are threading THREAD_MODE = 1 // thread in linear mode and set slew rate to max // set timebase to use threading so move is based on spindle revolutions S_TIMEBASE_M == SEL_TIMEBASE_THREADING TIMEBASE_M == THREAD_TIMEBASE TIME_BASE_SLEW_I = MAX_SLEW CS1_TIMEBASE_UNITS_I = 60000/VS_SPINDLE_MAX_LIM_M VS_GGROUP1_1_M == 32 . . . // arm thread process bits so thread cut starts on the (at line 1528 in text file) // index pulse ( encoder C chanel) of the spindle encoder (the spindle looks for the arming to start the timebase) (see SPINDLE.PLC below) THREAD_PROC_BITS_M=$9 . . . // G76 Multiple Repetitive threading (at line 2129 in text file) //---------------------------------- N76000 READ(X,Z,U,W,I,E,F,R,P,Q,D) ; ALL MUST BE PASSED SO NO NEED TO CHECK // X : Thread dia or radius . . . GOSUB 32000 X(X_POS) Z(Z_POS) U(X_RELIEF) W(Z_RELIEF) F(F_ARG_Q) E(F_ARG_Q) //(line 2267 & 2309) . . . CLOSE (line 3135) //--------------------------------------------------- // This code is generated by Setup Program based on Axis information. //STARTMOTIONPROG Position reporting program The OVERRIDE plc uses the flag “THREAD_MODE” to setup PMAC for timebase also. OVERRIDE.PLC: ======================================================================================= OPEN PLC OVERRIDE CLEAR //(line 14) WHILE (1<2) . . . IF (S_ROVRD_M != SEL_ROVRD_FEED) //(line 39) AND(FPR_MODE_P = 1 OR THREAD_MODE = 1) AND(S_SPND_M!=SEL_SPND_OFF) AND(ABS(VS_SPINDLE_ACT_RPM_M)>5) CS1_TIMEBASE_UNITS_I = MINUTES_MS / VS_SPINDLE_MAX_LIM_M IF (TIMEBASE_M != THREAD_TIMEBASE) AND(THREAD_MODE>0) TIME_BASE_SLEW_I = MAX_SLEW S_TIMEBASE_M = SEL_TIMEBASE_THREADING TIMEBASE_M = THREAD_TIMEBASE . . . CLOSE //(line 86) SPINDLE.PLC: ======================================================================================= OPEN PLC SPINDLE CLEAR //(at line 13) VS_SPINDLE_COUNTS_REV_M = 2000.00000 //(make seure these are correct for your spindle) VS_SPINDLE_MAX_RPM_M = 6000 VS_SPINDLE_MAX_LIM_M = 6000 . . . // ----------------Time Base Monitoring for Threading --------------- (line 40) . IF (THREAD_PROC_BITS_M = $9) THREAD_PROC_BITS_M = $B ENDIF . . . // ----------------Spindle Speed WRT Spindle OVERRIDE --------------- . (line 96)(calculates thread scale) SPINDLE_TEMP = SPINDLE_TEMP * VS_SPINDLE_OVERRIDE_M * 0.01 VS_SPINDLE_CMD_RPM_M = SPINDLE_TEMP IF (VS_SPINDLE_CMD_RPM_M > VS_SPINDLE_MAX_RPM_M) VS_SPINDLE_CMD_RPM_M = VS_SPINDLE_MAX_RPM_M ENDIF RTIF = VS_SPINDLE_COUNTS_REV_M*VS_SPINDLE_MAX_LIM_M/60000 IF (RTIF > 0) IF (S_SPND_M = SEL_SPND_CW) THREAD_SCALE_M = 16384 / RTIF FPR_SCALE_M = 131072 / RTIF ELSE . . . CLOSE //(line 151)
mohsin ahmad Posted February 18, 2016 Author Posted February 18, 2016 Note that I7042 should only ever be 1 or 5. If the trigger is not correct the motion should be locked if triggered timebase is active. Something is not correct in the your code to setup triggered timebase The triggered timebase is automatically setup in the “standard” files described next. Thread mode is set in the G32 code which is also called by G76 (see next). The OVERRIDE.PLC looks at this. LatheA.G: ======================================================================================= OPEN PROG 1000 CLEAR //(at line 43 in text file) . . . // G32 THREAD CUT COORD SYS 1 /////////////////////////////////////////// (at line 1504 in text file) N32000 READ(X,Z,U,W,E,F) LINEAR // Set flag in timebase PLC that indicates we are threading THREAD_MODE = 1 // thread in linear mode and set slew rate to max // set timebase to use threading so move is based on spindle revolutions S_TIMEBASE_M == SEL_TIMEBASE_THREADING TIMEBASE_M == THREAD_TIMEBASE TIME_BASE_SLEW_I = MAX_SLEW CS1_TIMEBASE_UNITS_I = 60000/VS_SPINDLE_MAX_LIM_M VS_GGROUP1_1_M == 32 . . . // arm thread process bits so thread cut starts on the (at line 1528 in text file) // index pulse ( encoder C chanel) of the spindle encoder (the spindle looks for the arming to start the timebase) (see SPINDLE.PLC below) THREAD_PROC_BITS_M=$9 . . . // G76 Multiple Repetitive threading (at line 2129 in text file) //---------------------------------- N76000 READ(X,Z,U,W,I,E,F,R,P,Q,D) ; ALL MUST BE PASSED SO NO NEED TO CHECK // X : Thread dia or radius . . . GOSUB 32000 X(X_POS) Z(Z_POS) U(X_RELIEF) W(Z_RELIEF) F(F_ARG_Q) E(F_ARG_Q) //(line 2267 & 2309) . . . CLOSE (line 3135) //--------------------------------------------------- // This code is generated by Setup Program based on Axis information. //STARTMOTIONPROG Position reporting program The OVERRIDE plc uses the flag “THREAD_MODE” to setup PMAC for timebase also. OVERRIDE.PLC: ======================================================================================= OPEN PLC OVERRIDE CLEAR //(line 14) WHILE (1<2) . . . IF (S_ROVRD_M != SEL_ROVRD_FEED) //(line 39) AND(FPR_MODE_P = 1 OR THREAD_MODE = 1) AND(S_SPND_M!=SEL_SPND_OFF) AND(ABS(VS_SPINDLE_ACT_RPM_M)>5) CS1_TIMEBASE_UNITS_I = MINUTES_MS / VS_SPINDLE_MAX_LIM_M IF (TIMEBASE_M != THREAD_TIMEBASE) AND(THREAD_MODE>0) TIME_BASE_SLEW_I = MAX_SLEW S_TIMEBASE_M = SEL_TIMEBASE_THREADING TIMEBASE_M = THREAD_TIMEBASE . . . CLOSE //(line 86) SPINDLE.PLC: ======================================================================================= OPEN PLC SPINDLE CLEAR //(at line 13) VS_SPINDLE_COUNTS_REV_M = 2000.00000 //(make seure these are correct for your spindle) VS_SPINDLE_MAX_RPM_M = 6000 VS_SPINDLE_MAX_LIM_M = 6000 . . . // ----------------Time Base Monitoring for Threading --------------- (line 40) . IF (THREAD_PROC_BITS_M = $9) THREAD_PROC_BITS_M = $B ENDIF . . . // ----------------Spindle Speed WRT Spindle OVERRIDE --------------- . (line 96)(calculates thread scale) SPINDLE_TEMP = SPINDLE_TEMP * VS_SPINDLE_OVERRIDE_M * 0.01 VS_SPINDLE_CMD_RPM_M = SPINDLE_TEMP IF (VS_SPINDLE_CMD_RPM_M > VS_SPINDLE_MAX_RPM_M) VS_SPINDLE_CMD_RPM_M = VS_SPINDLE_MAX_RPM_M ENDIF RTIF = VS_SPINDLE_COUNTS_REV_M*VS_SPINDLE_MAX_LIM_M/60000 IF (RTIF > 0) IF (S_SPND_M = SEL_SPND_CW) THREAD_SCALE_M = 16384 / RTIF FPR_SCALE_M = 131072 / RTIF ELSE . . . CLOSE //(line 151) if you see this example it is using in ect $AF8018 for motor 4. but in my case it is $A7804. but i am using turbo pmac so it should be $AF8018. Setup On-line Command I8008=$AF8018 ; Triggered time base from PMAC2 channel 4 I8009=64 ; TBSF=16384/256 I7042=1 ; Servo IC 0 Channel 4 trigger on rising index I5193=@I8009 ; C.S.1 use I8009 result for time base M403->X:$07801B,0,24,S ; Channels’ captured position register Motion Program Segment DWELL 0 ; Stop any lookahead I8008=$9F8018 ; Freeze the time base P403=M403 ; Dummy read to ensure capture logic reset X10 ; Calculate first move PLC Program Segment IF (I8008=$9F8018) ; If frozen I8008=$BF8018 ; Then arm ENDIF and in OEM.H there are definitions for ECT #define RAPID_TIMEBASE2 $0010F3 ->#define THREAD_TIMEBASE_ADR Y:$00350B,0,24,S // I8010 11th entry of modified ECT #define THREAD_TIMEBASE $00350C // I8011 12th entry of modified ECT ->#define THREAD_PROC_BITS_ADR Y:$00350B,20,4 // I8010 11th " " " " #define THREAD_SCALE_ADR Y:$00350C,0,24,S // I8011 12th " " " " #define FPR_TIMEBASE $0010F4 // Open Usage Register #define FPR_TIMEBASE_ADR X:$0010F4,0,24,S #define SPND_TIMEBASE_ADR X:$00350A,0,24,S // I8009 10th entry of standard ECT #define FPR_SCALE_ADR Y:$00350A,0,24,S // I8009 10th entry of standard ECT // the above uses ENCODER 4 by default if you follow the arrow key . i think there is a problem in address.
mohsin ahmad Posted February 18, 2016 Author Posted February 18, 2016 turbo SRM page 239. i think it says address starts from X. Triggered Time Base ($9, $A, $B): A triggered time-base entry is like a regular untriggered time-base entry, except that it is easy to freeze the time base, then start it exactly on receipt of a trigger that captures the starting master position or time. In a triggered time-base entry, the first setup line (I-variable) contains a 9 A or B in the method digit (bits 20 – 23), depending on its present state. It contains the address of the source register in bits 0 – 18. The source register for triggered time base must be the starting (X) address for one of the machine interface channels of a Servo IC. The bit 19 mode switch must be set to 0 if a PMAC-style Servo IC (DSPGATE) is addressed; it must be set to 1 if a PMAC2-style Servo or MACRO IC (DSPGATE1 or DSPGATE2) is addressed. Note that setting bit 19 to 1 changes the second hex digit of the I-variable from 7 to F.
steve.milici Posted February 18, 2016 Posted February 18, 2016 The settings are correct. They assume a “standard” ECT setup (created in ENCODER.TAB): (note that I have added the first four standard entries for completeness assuming Turbo PMAC2) // Encoder Conversion Table for Lathe with standard 1/T feedback type. // For any other feedback device user will have to change this file for // Lathe FPR mode to work Correctly. // Typical Lathe Motor 1, 3 and 4. // we will add 4 dummy entries in Encoder table. //--------------------------------------------------------- //I8000=$78000 //$3501 //I8001=$78008 //$3502 //I8002=$78010 //$3503 //I8003=$78018 //$3504 I8004=$78100 //Dummy ECT Entry 4 $3505 I8005=$78108 //Dummy ECT Entry 5 $3506 I8006=$78110 //Dummy ECT Entry 6 $3507 I8007=$78118 //Dummy ECT Entry 7 $3508 I8008=$403504 //$3509 I8009=$64 //$350A I8010=$A78018 //$350B I8011=$F5C //$350C I8012=0 If you have modified the ECT to have a different structure then you will need to edit this file.
mohsin ahmad Posted February 18, 2016 Author Posted February 18, 2016 ok fine.. but this is not understandable ->#define THREAD_TIMEBASE_ADR Y:$00350B,0,24,S // I8010 11th entry of modified ECT ->#define THREAD_PROC_BITS_ADR Y:$00350B,20,4 // I8010 11th " " " " whatever you have sent me i have checked everything is fine and according to standard .so machine should stop stop and wait for trigger pulse while there is no pulse signal wire attached . one more thing according to manual I8010=$AF8018 for turbo. but in encoder.tab file it is $A78018 this is for pmac style .
mohsin ahmad Posted February 18, 2016 Author Posted February 18, 2016 i am using motor 1 2 and 4.. is there any problem with this configuration?
steve.milici Posted February 19, 2016 Posted February 19, 2016 This should not be a problem as long as it was done through the NC Setup program. I will research this - I'm not sure about it: ->#define THREAD_TIMEBASE_ADR Y:$00350B,0,24,S // I8010 11th entry of modified ECT This is correct: ->#define THREAD_PROC_BITS_ADR Y:$00350B,20,4 // I8010 11th " " " "
andreychip Posted February 21, 2016 Posted February 21, 2016 The settings are correct. They assume a “standard” ECT setup (created in ENCODER.TAB): (note that I have added the first four standard entries for completeness assuming Turbo PMAC2) // Encoder Conversion Table for Lathe with standard 1/T feedback type. // For any other feedback device user will have to change this file for // Lathe FPR mode to work Correctly. // Typical Lathe Motor 1, 3 and 4. // we will add 4 dummy entries in Encoder table. //--------------------------------------------------------- //I8000=$78000 //$3501 //I8001=$78008 //$3502 //I8002=$78010 //$3503 //I8003=$78018 //$3504 I8004=$78100 //Dummy ECT Entry 4 $3505 I8005=$78108 //Dummy ECT Entry 5 $3506 I8006=$78110 //Dummy ECT Entry 6 $3507 I8007=$78118 //Dummy ECT Entry 7 $3508 I8008=$403504 //$3509 I8009=$64 //$350A I8010=$A78018 //$350B I8011=$F5C //$350C I8012=0 If you have modified the ECT to have a different structure then you will need to edit this file. I8010=$A78018 //$350B The bit 19 mode switch must be set to 0 if a PMAC-style Servo IC (DSPGATE) is addressed; it must be set to 1 if a PMAC2-style Servo or MACRO IC (DSPGATE1 or DSPGATE2) is addressed. Note that setting bit 19 to 1 changes the second hex digit of the I-variable from 7 to F. TurboSRM page 240. I8010=$AF8018.
Recommended Posts