>
>
>
> On Fri, 03 Feb 2012 13:05:02 -0600
> sam sokolik <[email protected]> wrote:
> > All this talk of lowering the servo thread had me thinking back to when
> > I was setting up the K&T. I wanted to try to lower the servo thread for
> > testing. I could not go much slower the the 1ms default or I would get
> > real time delays. After some consultation on irc - it was decided that
> > the ladder was the issue. I gave up and left my servo thread at 1ms.
> >
> > My ladder does tool chain logic, tool changing, pallet transfer and a
> > few other odds and ends. It has probably over 16 sections and quite a
> > few rungs. when the section display is open - the upper right hand
> > corner has the scan time - it is 135us. vs the classic ladder sample
> > in the sample configs (pretty much just estop logic and oiling) which
> > runs in 17us.
> >
> > I have a older atom330 board here that I am playing with. On a side
> > note - here is the latency test without isolcups=1
> > http://www.electronicsam.com/images/KandT/testing/atomnonisolcups.png
> >
> > with isolcups=1
> > http://www.electronicsam.com/images/KandT/testing/atomisolcpus.png
> >
> > I put the classic ladder parts into the emc stepper_inch config from the
> > sample configs (emc version 2.4.6) fresh install from the livecd then
> > updated. I removed the base thread and stepgen functions from the threads.
> >
> > here is the config.
> > http://www.electronicsam.com/images/KandT/testing/stepper/
> > that has my ladder in it (just running - none of the pins are
> > connected) This is ladder from sometime in the distant past - I am sure
> > it isn't the latest ladder.
> >
> > Now - on this atom - it will not run at 1ms. It seems to run at
> > .909khz. (servo period 1100000) The K&T is using a asus motherboard
> > and amd processor. (don't remember exactly but it is quite a bit more
> > powerful than the atom) The atom board will run the sample ladder logic
> > down to about 5khz.
> >
> > So - the ladder isn't that intense - does classic ladder just take that
> > much time? Is there another issue? am I making any sense? :) It seems
> > to me if I made a much larger ladder - it might stop running on the K&T
> > computer...
> >
> > sam
> >
from the source file module_hal.c:
void HalWriteFloatOutputs(void) {
int i;
for( i=0; i<InfosGene->GeneralParams.SizesInfos.nbr_phys_float_outputs;
i++) {
*(hal_float_outputs[i]) = ReadVar(VAR_PHYS_FLOAT_OUTPUT, i);
}
}
// This actually does the magic of periodic refresh of pins and
// calculations. This function runs at the period rate of the thread
// that you added it to.
// period, leftover, t0,and t1 are in nanoseconds.
// This function first checks to see if at least 1 millisecond has gone by
// if the period is under 1 MS then if will not refresh rungs yet but
// will keep track of how many NS were left over. Does this each period
// till at least 1 MS has occured, if more then 1 MS then keeps track of
// leftover NS for accuracy. Bottom line is you can run classiclader in
// a thread faster than 1 millisecond but it will not refresh the rungs
// any faster (it can be slower though). If your refresh is too slow and
// your timer are using multiples of 100 microseconds they might not be
accurate.
// t0 and t1 are for keeping track of how long the refresh of sections,
// and HAL pins take (it is displayed in the 'section display' GUI (in
microseconds).
static void hal_task(void *arg, long period) {
unsigned long t0, t1,milliseconds;
static unsigned long leftover=0;
leftover += period;
milliseconds= leftover / 1000000;
leftover %= 1000000;
if (milliseconds >= 1) {
InfosGene->GeneralParams.PeriodicRefreshMilliSecs=milliseconds;
*hal_state = InfosGene->LadderState;
t0 = rtapi_get_time();
if (InfosGene->LadderState==STATE_RUN)
{
HalReadPhysicalInputs();
HalReads32Inputs();
HalReadFloatInputs();
ClassicLadder_RefreshAllSections();
HalWritePhysicalOutputs();
HalWrites32Outputs();
HalWriteFloatOutputs();
}
t1 = rtapi_get_time();
InfosGene->DurationOfLastScan = t1 - t0;
}
}
later the duration of scan (in nano seconds) is divide by 1000 to display micro
seconds
which fit better in the display.
I believe the idea of limiting the minimum refresh to 1 millisecond is so it is
difficult
to set a refresh rate that is shorter then the duration rate.
Maybe there is a better idea?
Chris M
------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Emc-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-users