Hello,
Background: I'm trying to build a punch press with a "head clear"
sensor. Whenever the "tip" of the press passes a certain height, a
sensor is triggered and the metal sheet should be moved to the position
of the next punch (before the tip reaches the bottom of the movement -
the punching motor is not stopped between punches).
Punching speed is at most 300 ppm. I have about 100-150 milliseconds of
clear time to move the sheet. Currently, the "head clear" signal is
implemented as a motion.digital-in-XX pin, and I can use a standard
Gcode for a given job:
G91
...
M66 P0 L1 Q999
M64 P0
G0 X1
M65 P0
M66 P0 L1 Q999
M64 P0
G0 X1
M65 P0
...
I'm using the digital output as a debugging aid, and checking through
halscope that movement only happens while that output signal is low.
I have a machine already working like this for over a year, without any
problems, but I'm trying to improve punching speed (identifying all
places where there is a delay).
The critical delay is the EMC task cycle time. When comparing the input
and output signals, there are two situations:
1- [TASK]CYCLE_TIME = -0.001: The times between an M66 and M64 commands
are in the range of 2-25 milliseconds. Average seems to be about 7 ms,
but there's a lot of jitter.
2- [TASK]CYCLE_TIME = 0.001: The range is in 15-20 ms. Much less jitter,
but (in my mind) a very height delay (which should have been 1 millisecond).
When running negative CYCLE_TIME and debug mode, min and max cycle time
is 0.0003 to 0.180 seconds (output after program exit) so, a lot of jitter.
Internally, the task cycle is controlled by an RCS_TIMER. Waiting
(AFAIK) is done by the followin line in libnml/os_intf/_timer.c
(function esleep()):
...
if (select(0, NULL, NULL, NULL, &tval) < 0) {
...
Now, these are all my findings so far. I'm guessing the "select* call
isn't really waiting on the appropriate timeout. I assume the task cycle
thread will have some jitter due to the different types of commands it
executes, however 15ms jitter seems an awfull lot. If I could reduce it
to 5ms (at least on the EMC_TASK_EXEC_WAITING_FOR_IO case) I'd already
be pretty happy.
Any tips on how I can proceed next?
Thanks.
--
Matheus Degiovani
Gigatron Software e Treinamentos Ltda.
(18) 3649-4045
MSN: [email protected]
--
CrĂticas ou Sugestões? Ligue para Ouvidoria Gigatron: (18) 3649-4048
------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb
_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers