summaryrefslogtreecommitdiff
path: root/docs/src/install/Latency_Test_es.txt
blob: fb423335fda1b654630c85fd90cef97997f08bdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
= Latency Test

[[cha:latency-test]] (((Latency Test)))

////
ATTENTION TRANSLATORS before translating this document copy the base document
into this copy to get the latest version. Untranslated documents are not kept
up to date with the English documents. 

Do not translate anchors or links, translate only the text of a link after the
comma.
Anchor [[anchor-name]]
Link <<anchor-name,text after the comma can be translated>>

Make sure the documents build after translating.
////

This test is the first test that should be performed on a PC 
to see if it is able to drive a CNC machine.

Latency is how long it takes the PC to stop what it is doing and 
respond to an external request. For LinuxCNC the request is 
BASE_THREAD that makes the periodic 'heartbeat' that serves as a 
timing reference for the step pulses. The lower the latency, the 
faster you can run the heartbeat, and the faster and smoother the 
step pulses will be.

Latency is far more important than CPU speed. 
A lowly Pentium II that responds to interrupts within 10 microseconds 
each and every time can give better results 
than the latest and fastest P4 Hyperthreading beast.

The CPU isn't the only factor in determining latency. 
Motherboards, video cards, USB ports, and 
a number of other things can hurt the latency. 
The best way to find out what you are dealing with is 
to run the RTAI latency test. 

Generating step pulses in software 
has one very big advantage - it's free. 
Just about every PC has a parallel port that is 
capable of outputting step pulses that are generated by the software. 
However, software step pulses 
also have some disadvantages:

 - limited maximum step rate 
 - jitter in the generated pulses
 - loads the CPU

The best way to find out how well your PC will lrun LinuxCNC 
is to run the HAL latency test. 
To run the test, open a terminal window 
(In Ubuntu, from Applications → Accessories → Terminal) 
and run the following command: 

----
latency-test
----

You should see something like this:

.HAL Latency Test

image::../config/images/latency.png[align="center"]

While the test is running, you should 'abuse' the computer. 
Move windows around on the screen. Surf the web. Copy some large files 
around on the disk. Play some music. 
Run an OpenGL program such as glxgears. 
The idea is to put the PC through its paces while 
the latency test checks to see what the worst case numbers are. 

[NOTE]
Do not run LinuxCNC or Stepconf while the latency test is running.

The important numbers are the 'max jitter'. 
In the example above, that is 9075 nanoseconds, or 9.075 microseconds. 
Record this number, and enter it in Stepconf when it is requested.

In the example above, latency-test only ran for a few seconds. 
You should run the test for at least several minutes; sometimes 
the worst case latency doesn't happen very often, or only happens 
when you do some particular action. For instance, one Intel 
motherboard worked pretty well most of the time, but every 64 
seconds it had a very bad 300 us latency. Fortunately that was 
fixable, see http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?FixingSMIIssues

So, what do the results mean? If your Max Jitter number is less 
than about 15-20 microseconds (15000-20000 nanoseconds), the 
computer should give very nice results with software stepping. If 
the max latency is more like 30-50 microseconds, you can still 
get good results, but your maximum step rate might be a little 
disappointing, especially if you use microstepping or have very 
fine pitch leadscrews. If the numbers are 100 us or more (100,000 
nanoseconds), then the PC is not a good candidate for software 
stepping. Numbers over 1 millisecond (1,000,000 nanoseconds) mean 
the PC is not a good candidate for LinuxCNC, regardless of whether you 
use software stepping or not.

Note that if you get high numbers, there may be ways to improve 
them. Another PC had very bad latency (several milliseconds) when 
using the onboard video. But a $5 used video card solved the 
problem.

[NOTE]
LinuxCNC does not require bleeding edge hardware.

For more information on stepper tuning see the 
<<cha:Stepper-Tuning,Stepper Tuning>> Chapter.

== Port Address

For those who build their own hardware, one safeguard against 
shorting out an on-board parallel port - or even the whole 
motherboard - is to use an add-on parallel port card. Even if you 
don't need the extra layer of safety, a parport card is a good 
way to add extra I/O lines with LinuxCNC.

One good PCI parport card is made with the Netmos 9815 chipset. 
It has good +5V signals, and can come in a single or dual ports. 

To find the I/O addresses for these cards open a terminal window 
and use the list pci command:

----
lspci -v
----

Look for the entry with "Netmos" in it. Example of a 2-port card:

----
0000:01:0a.0 Communication controller: \
      Netmos Technology PCI 9815 Multi-I/O Controller (rev 01)
Subsystem: LSI Logic / Symbios Logic 2POS (2 port parallel adapter) 
Flags: medium devsel, IRQ 5
I/O ports at b800 [size=8]
I/O ports at bc00 [size=8] 
I/O ports at c000 [size=8] 
I/O ports at c400 [size=8] 
I/O ports at c800 [size=8] 
I/O ports at cc00 [size=16]
----

From experimentation, I've found the first port (the on-card 
port) uses the third address listed (c000), and the second port 
(the one that attaches with a ribbon cable) uses the first 
address listed (b800).

You can then open an editor and put the addresses into the 
appropriate place in your .hal file.

----
loadrt hal_parport cfg="0x378 0xc000"
----

You must also direct LinuxCNC to run the 'read' and 'write' functions 
for the second card. For example,

----
addf parport.1.read base-thread 1
addf parport.1.write base-thread -1
----

Please note that your values will differ. The Netmos cards are 
Plug-N-Play, and might change their settings depending on which 
slot you put them into, so if you like to \'get under the hood' 
and re-arrange things, be sure to check these values before you 
start LinuxCNC. 


// vim: set syntax=asciidoc: