Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://www.naic.edu/~phil/hardware/vertex/sharemegsvertex/lcu/pcr/cp581/CP581.LST
Äàòà èçìåíåíèÿ: Tue Mar 6 22:06:27 2001
Äàòà èíäåêñèðîâàíèÿ: Thu Jan 15 10:34:59 2009
Êîäèðîâêà:

Ïîèñêîâûå ñëîâà: ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï ï


ACU 1.2 PAGE 1
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1 #include /* HEADER-DATEI aus MICROSOFT C */
2 #include /* HEADER-DATEI aus MICROSOFT C */
3 #include /* HEADER-DATEI aus MICROSOFT C */
4 #include /* HEADER-DATEI aus MICROSOFT C */
5 #include /* HEADER-DATEI aus MICROSOFT C */
6 #include /* HEADER-DATEI aus MICROSOFT C */
7 #include /* HEADER-DATEI aus MICROSOFT C */
8
9 /* SPEICHERDEFINITIONEN */
10
11 # define pi 3.141592654
12 # define sqr(a) (a*a)
13
14 double phix,phiy,phiz;
15 double dv[3],bl[6];
16 long jackx,jacky1,jacky2,jackz1,jackz2,jackz3;
17 long jackxs,jacky1s,jacky2s,jackz1s,jackz2s,jackz3s;
18 long tx,ty,tz,rx,ry,rz,a,time_s1;
19 int data_ready,data_readys,watchdog,time_s2;
20 int axis_x,axis_y,axis_z,hin;
21 double bein[6];
22 double rio[6][3], v0[3];
23 double sriu1[3],sriu2[3],sriu3[3];
24 double sriu4[3],sriu5[3],sriu6[3];
25
26 FILE *datei1,*datei2,*fopen(); /* binaere Dateien DB230.S5B / DB011.S
5B */
27
28 /* VERWENDETE UNTERPROGRAMME IN ALPHABETISCHER REIHENFOLGE */
29
30 extern void achsge (long,int,double[3]);
31 extern void beinl (double[3],double[6][3],double[3],double[3],
32 double[3],double[3],double[3],double[3],
33 double[3],double[3],double[3],double[3],
34 double[3],double[3]);
35 extern void lesen (void);
36 extern void lubksb (double[6][6],int,int[6],double[6]);
37 extern void ludcmp (double[6][6],int,int[6],double);
38 extern void matinv (double[6][6],double[6][6],int);
39 extern void schreiben (void);
40 extern void tdelta (double[3],double[3],double[3],double[3],
41 double[3],double[3],double[3],double[3],
42 double[3],double[3],double[3],double[3],
43 double[6][6]);
44 extern void thilf (double[3],double[3][6]);
45 extern void thin (void);
46 extern void topo (void);
47 extern void trtmat (double[3][3]);
48 extern int trueck (void);
49
50
51 /* ASSEMBLER-PROGRAMME */
52
53 extern long dreh4 (char *); /* drehen von long-Zahlen */
54 extern int dreh2 (char *); /* drehen von int- Zahlen */
55


ACU 1.2 PAGE 2
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

56
57
58 /* ********************************************************************

59 * *

60 * PROGRAMM ZUR BERECHNUNG DER POSITION DES 70 - M POSITIONERS JPL *

61 * =============================================================== *

62 * *

63 * Dieses Hauptprogramm berechnet aus der neu gegebenen Position *

64 * des Positioners (3 Winkel und 3 Verschiebungen) die 6 Spindel- *

65 * laengen (Unterprogramm thin). Ausserdem wird aus den gegebenen *

66 * 6 alten Spindellaengen die entprechende Position (3 Winkel *

67 * und 3 Verschiebungen) berechnet (Unterprogramm trueck). *

68 * *

69 * *

70 * erstellt : 27.06.1994 *

71 * letzte Aenderung : 29.11.1994 *

72 * *

73 * Autor : Dipl.-Ing. D. Libuschewski *

74 ********************************************************************
*/
75
76
77
78 /* PROBLEMSTELLUNG :
79
80
81 Hintransformation Ruecktransform
ation
82 ----------------- --------------
-----
83
84 Vorgabe : gewuenschte Position aktuelle Beinl
aengenaenderung
85 | |
86 dieses Programm : gewuenschte Beinlaengenaenderung aktuelle Posit
ion
87
88
89 Es soll gelten : Die Ruecktransformation (Berechnung der Position au
s den Beinlaengen)


ACU 1.2 PAGE 3
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

90 wird immer durchgefuehrt, wogegen die Hintransforma
tion (Berechnung
91 der Spindellaengen aus der Position) nur auf Wunsch
berechnet wird.
92
93
94 ERKLAERUNG DER VARIABELN :
95
96 jackx,jacky1,jacky2, -4
97 jackz1,jackz2,jackz3 : 6 Spindellaengenaenderungen in 10 inch
(lesen)
98
99 jackxs,jacky1s,jacky2s, -4
100 jackz1s,jackz2s,jackz3s : 6 Spindellaengenaenderungen in 10 inch
(schreiben)
101 -4
102 tx,ty,tz : Translationsverformung in 10 inch

103 -4
104 rx,ry,rz : Rotationsverformung in 10 inch

105
106 phixold,phiyold,phizold
107 dvold[3] : letzte gespeicherte Position
108 t_s1,t_s2 : letzte gespeicherte Zeit
109
110 maxbl, minbl : maximale/minimale Spindellaenge
111
112 data_ready : lesender Speicher
113 00000001 00000001 (=257) Daten lesen u
nd bearbeiten
114 Hin- und Ruec
ktransformation
115 00000000 00000001 (= 1) Daten lesen u
nd bearbeiten
116 Ruecktransfor
mation
117 sonst nicht lesen
118
119 data_readys : schreibender Speicher
120 00000000 00000001 (= 1) Daten ueberge
ben aber fehlerhafte Berechnung
121 00000000 00000010 (= 2) Daten bearbei
ten und nicht mehr lesen
122 (Schreibschut
z)
123 00000001 00000001 (=257) erfolgreiche
Bearbeitung der Ruecktrans-
124 formation
125 00000011 00000001 (=769) erfolgreiche
Bearbeitung der Hin- und Rueck-
126 transformatio
n
127
128
129 watchdog : Datenspeicher = 7


ACU 1.2 PAGE 4
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

130
131 */
132
133 void main(void)
134
135 {
136
137 int izaehl,t_s2,i,j=11;
138 long a,t_s1;
139 double faktor,phixold,phiyold,phizold,dvold[3];
140 /* FILE *datei3,*fopen(); */
141
142 topo();
143 /* ******* LESEN DER TOPOLOGIEDATEN rio[6][3],v0[3],
144 sriu1[3],sriu2[3],sriu3[3],sriu4[3],sriu5[3],sriu6[3]
145 Spindel 1 = z1, Spindel 2 = z2, Spindel 3 = z3,
146 Spindel 4 = y1, Spindel 5 = y2, Spindel 6 = x */
147
148
149 faktor = pi/180.E+3;
150
151 /* OEFFNEN VON VORHANDENEN BINAEREN DATEIEN ZUM
152 LESEN+SCHREIBEN BZW. ZUM LESEN */
153
154 datei1=fopen("e:\\cpu1\\db230.s5b","rb+");
155 datei2=fopen("e:\\cpu1\\db011.s5b","rb");
156
157 /* DEFINITION DER ERSTEN POSITION */
158
159 phixold = 0.;
160 phiyold = 0.;
161 phizold = 0.;
162 dvold[0] = 0.;
163 dvold[1] = 0.;
164 dvold[2] = 0.;
165
166 /* DEFINITION DER ERSTEN ZEITNAHME */
167
168 t_s1 = 0;
169 t_s2 = 0;
170
171 /* ***************************************************************
172 datei3=fopen("CP581.OUT","w");
173 rewind (datei3);
174 fprintf(datei3,"SPINDEL 1 : %10.4lf %10.4lf %10.4lf",
175 rio[0][0],rio[0][1],rio[0][2]);
176 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
177 sriu1[0],sriu1[1],sriu1[2]);
178 fprintf(datei3,"SPINDEL 2 : %10.4lf %10.4lf %10.4lf",
179 rio[1][0],rio[1][1],rio[1][2]);
180 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
181 sriu2[0],sriu2[1],sriu2[2]);
182 fprintf(datei3,"SPINDEL 3 : %10.4lf %10.4lf %10.4lf",
183 rio[2][0],rio[2][1],rio[2][2]);
184 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
185 sriu3[0],sriu3[1],sriu3[2]);


ACU 1.2 PAGE 5
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

186 fprintf(datei3,"SPINDEL 4 : %10.4lf %10.4lf %10.4lf",
187 rio[3][0],rio[3][1],rio[3][2]);
188 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
189 sriu4[0],sriu4[1],sriu4[2]);
190 fprintf(datei3,"SPINDEL 5 : %10.4lf %10.4lf %10.4lf",
191 rio[4][0],rio[4][1],rio[4][2]);
192 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
193 sriu5[0],sriu5[1],sriu5[2]);
194 fprintf(datei3,"SPINDEL 6 : %10.4lf %10.4lf %10.4lf",
195 rio[5][0],rio[5][1],rio[5][2]);
196 fprintf(datei3," %10.4lf %10.4lf %10.4lf\n",
197 sriu6[0],sriu6[1],sriu6[2]);
198 fprintf(datei3,"DREHPKT. : %10.4lf %10.4lf %10.4lf\n\n\n",
199 v0[0],v0[1],v0[2]);
200 *************************************************************** */
201
202
203 /* for (i=0;i 204 i = 1;
205 while (i > 0)
206 {
207
208 marke1:
209
210 /* EINLESEN UNTERSCHIEDLICHER SPINDELDATEN VON DEN DATENBAUSTEIN
EN
211 DATENBAUSTEINEN DB230.S5B UND DB011.S5B */
212
213 lesen();
214 /* ******** */
215
216 /* ****************************************************************
******************************
217 printf(" data_ready gelesen = %8d gelesen\n",data_ready);
218 fprintf(datei3,"LESEN %10ld %8ld %8ld %8ld %8ld %8ld %8ld %8
ld %8ld %8ld %8ld %8ld %4d \n",
219 jackx,jacky1,jacky2,jackz1,jackz2,jackz3,tx,ty,tz,rx,ry,rz,data_
ready);
220 fprintf(datei3," %10ld %8d (ZEIT)\n",time_s1,time_s2)
;
221 ****************************************************************
*************************** */
222
223
224 if (data_ready == 1 || data_ready == 257) goto marke4;
225 goto marke1;
226
227 marke4:
228
229 /* BERECHNUNG DER SPINDELLAENGE IN MM AUS DEN SPINDELLAENGENAEND
ERUNGEN */
230
231 bl[0] = jackz1 * 0.00254 + bein[0];
232 bl[1] = jackz2 * 0.00254 + bein[1];
233 bl[2] = jackz3 * 0.00254 + bein[2];
234 bl[3] = -jacky1 * 0.00254 + bein[3];


ACU 1.2 PAGE 6
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

235 bl[4] = -jacky2 * 0.00254 + bein[4];
236 bl[5] = jackx * 0.00251 + bein[5];
237
238
239 /* VORGABE EINES STARTVEKTORS FUER DIE RUECKTRANSFORMATION */
240
241 phix = phixold;
242 phiy = phiyold;
243 phiz = phizold;
244 dv[0] = dvold[0];
245 dv[1] = dvold[1];
246 dv[2] = dvold[2];
247
248 /* ****************************************************************
**************
249 fprintf(datei3,"ITERATIONSSTARTWERTE : %8.3f %8.3f %8.3f %8.3f %
8.3f %8.3f\n",
250 dv[0],dv[1],dv[2],phix,phiy,phiz);
251 ****************************************************************
*********** */
252
253 izaehl = trueck(); /* RUECKTRANSFORMATION : BERECHNUNG DER PO
SITION
254 ********* phix,phiy,phiz,dv[0] - dv[2] AUS DEN W
ERTEN
255 bl[0] - bl[5], phixold,phiyold,phizold,

256 dvold[0],dvold[1],dvold[2]
*/
257
258 achsge(t_s1,t_s2,dvold); /* BERECHNUNG DER ACHSGESCHWINDIGKEITEN

259 ************************
*/
260
261 if (izaehl == 20 ) /* MAXIMALE ITERATIONSGRENZE
*/
262 {
263 data_readys = 1; /* DAS PROBLEM KONVERGIERT NICHT, ALTE WER
TE
264 phixold,phiyold,phizold,dvold[0]-dvold[
2]
265 bleiben erhalten
*/
266 }
267 else
268 {
269 data_readys = 257; /* DAS PROBLEM KONVERGIERT
*/
270
271 phixold = phix;
272 phiyold = phiy;
273 phizold = phiz;
274 dvold[0] = dv[0];
275 dvold[1] = dv[1];
276 dvold[2] = dv[2];


ACU 1.2 PAGE 7
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

277 t_s1 = time_s1;
278 t_s2 = time_s2;
279
280 }
281
282
283 /* UMWANDLUNG IN DAS AMERIKANISCHE ZAHLENSYSTEM UND VORBEREITUNG FU
ER DIE
284 HINTRANSFORMATION
285 1 : POSITION FUER HINTRANSFORMATION
286 2 : POSITION AUS RUECKTRANSFORMATION
287 3 : UMWANDLUNG IN METRISCHES ZAHLENSYST
EM */
288
289
290 a = rx; /* 1 */
291 rx = (long) (phix/faktor); /* 2 */
292 phix = a*faktor; /* 3 */
293
294 a = ry; /* 1 */
295 ry = (long) (phiy/faktor); /* 2 */
296 phiy = a*faktor; /* 3 */
297
298 a = rz; /* 1 */
299 rz = (long) (phiz/faktor); /* 2 */
300 phiz = a*faktor; /* 3 */
301
302 a = tx; /* 1 */
303 tx = (long) (dv[0]/0.00254); /* 2 */
304 dv[0] = a * 0.00254; /* 3 */
305
306 a = ty; /* 1 */
307 ty = (long) (dv[1]/0.00254); /* 2 */
308 dv[1] = a * 0.00254; /* 3 */
309
310 a = tz; /* 1 */
311 tz = (long) (dv[2]/0.00254); /* 2 */
312 dv[2] = a * 0.00254; /* 3 */
313
314 if (data_ready == 1) goto marke2;
315
316 thin(); /* HINTRANSFORMATION : BERECHNUNG DER BEINLAENGEN bl
[0] - bl[5] AUS
317 ******* DEN WERTEN phix,phiy,phiz,dv[
0],dv[1],dv[2] */
318
319 /* ****************************************************************
**************************************
320 fprintf(datei3,"BEINLAENGEN AUS POSITION : %f %f %f %f %f %f \n"
,bl[0],bl[1],bl[2],bl[3],bl[4],bl[5]);
321 ****************************************************************
*********************************** */
322
323
324
325 /* UMWANDLUNG DER SPINDELLAENGENAENDERUNGEN IN DAS AMERIKANISCHE ZA


ACU 1.2 PAGE 8
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

HLENSYSTEM */
326
327 jackz1s = (long) ((bl[0]-bein[0])/0.00254);
328 jackz2s = (long) ((bl[1]-bein[1])/0.00254);
329 jackz3s = (long) ((bl[2]-bein[2])/0.00254);
330 jacky1s = (long) ((bl[3]-bein[3])/0.00254)*(-1);
331 jacky2s = (long) ((bl[4]-bein[4])/0.00254)*(-1);
332 jackxs = (long) ((bl[5]-bein[5])/0.00254);
333
334 if (data_readys == 257) data_readys = 769; /* HIN- UND RUECKTRAN
SFORMATION */
335
336 marke2 :
337
338 watchdog=7;
339
340 /* SCHREIBEN UNTERSCHIEDLICHER SPINDELDATEN IN
341 DATENBAUSTEIN DB230.S5B */
342
343 /* ****************************************************************
********************************
344 fprintf(datei3,"SCHREIBEN %8ld %8ld %8ld %8ld %8ld %8ld %8ld %8l
d %8ld %8ld %8ld %8ld %4d %4d\n",
345 jackxs,jacky1s,jacky2s,jackz1s,jackz2s,jackz3s,tx,ty,tz,rx,ry,rz
,data_readys,watchdog);
346 fprintf(datei3," %8d %8d %8d (GESCHWINDIGKEIT)\n",axis_
x,axis_y,axis_z);
347 ****************************************************************
***************************** */
348
349 schreiben ();
350 /* ************* CP928 KANN DATEN LESEN */
351
352
353 }
354
355 fclose (datei1);
356 fclose (datei2);
357 /* fclose (datei3); */
358
359 return;
360 }


main Local Symbols

Name Class Type Size Offset Register

izaehl. . . . . . . . . . auto -0048
j . . . . . . . . . . . . auto -0046
phizold . . . . . . . . . auto -0044
i . . . . . . . . . . . . auto -003c
phiyold . . . . . . . . . auto -003a
dvold . . . . . . . . . . auto -0032
t_s2. . . . . . . . . . . auto -001a
phixold . . . . . . . . . auto -0018


ACU 1.2 PAGE 9
cp581 01-26-95
22:53:26

Microsoft C Compiler Version 6.00A


main Local Symbols

Name Class Type Size Offset Register

t_s1. . . . . . . . . . . auto -0010
faktor. . . . . . . . . . auto -000c
a . . . . . . . . . . . . auto -0004

361
362
363
364
365 void achsge (long t_s1, int t_s2, double dvold[3])
366 /*
367 *******************************************************
368 * *
369 * Dieses Programm berechnet die Achsgeschwindigkeit *
370 * axis_x, axis_y, axis_z in inch/s aus den durch *
371 * die "Hintransformation (thin)" im letzten Ite- *
372 * rationsschritt berechneten Achswege tx,ty,tz in *
373 * inch und aus den Zeitdifferenzen zwischen zwei *
374 * Zeitnahmen. *
375 * *
376 * *
377 * erstellt: 10.11.1994 *
378 * letzte Aenderung: 25.11.1994 *
379 * *
380 * Autor: Dipl.-Ing. D. Libuschewski *
381 * *
382 *******************************************************
383
384 Speichererklaerungen :
385
386 Im i+1-ten Iterationsschritt gilt :
387 t_s1 : i-te Zeitnahme in Sekunden
388 t_s2 : i-te Zeitnahme in 10er Millisekunden (Zahl zwischen 0
und 99)
389 time_s1 : i+1-te Zeitnahme in Sekunden
390 time_s2 : i+1-te Zeitnahme in 10er Millisekunden (Zahl zwischen 0
und 99)
391 dvold[0] : Achsweg im i-ten Iterationsschritt in x-Richtung [mm]

392 dvold[1] : Achsweg im i-ten Iterationsschritt in y-Richtung [mm]

393 dvold[2] : Achsweg im i-ten Iterationsschritt in y-Richtung [mm]

394 dv[0] : Achsweg im i+1-ten Iterationsschritt in x-Richtung [mm]

395 dv[1] : Achsweg im i+1-ten Iterationsschritt in y-Richtung [mm]

396 dv[2] : Achsweg im i+1-ten Iterationsschritt in y-Richtung [mm]

397 axis_x : Achsgeschwindigkeit im i+1-ten Iterationschritt in x-Ri
chtung
398 [1E-04 inch/s]


ACU 1.2 PAGE 10
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

399 axis_y : Achsgeschwindigkeit im i+1-ten Iterationschritt in y-Ri
chtung
400 [1E-04 inch/s]
401 axis_z : Achsgeschwindigkeit im i+1-ten Iterationschritt in z-Ri
chtung
402 [1E-04 inch/s]
403 */
404 {
405 double dt,dt1,dt2;
406
407 dt1 = (double) (time_s1 - t_s1);
408 dt2 = (double) (time_s2 - t_s2);
409 dt = dt1 + dt2 / 1000.0;
410
411 if (dt < 1.E-8)
412 {
413 dt = 1; /* Abfangen einer 0-Division */
414 }
415 else
416 {
417 dt=dt*0.00254; /* Einheiten umrechnen */
418 }
419
420 axis_x = (int) ( (dvold[0]-dv[0]) / dt);
421 axis_y = (int) ( (dvold[1]-dv[1]) / dt);
422 axis_z = (int) ( (dvold[2]-dv[2]) / dt);
423
424 return;
425 }


achsge Local Symbols

Name Class Type Size Offset Register

dt2 . . . . . . . . . . . auto -0018
dt1 . . . . . . . . . . . auto -0010
dt. . . . . . . . . . . . auto -0008
t_s1. . . . . . . . . . . param 0006
t_s2. . . . . . . . . . . param 000a
dvold . . . . . . . . . . param 000c

426
427
428 void beinl (double v0[3],double rio[6][3],double sriu1[3],
429 double sriu2[3],double sriu3[3],double sriu4[3],
430 double sriu5[3],double sriu6[3],double l1[3],
431 double l2[3],double l3[3],double l4[3],
432 double l5[3],double l6[3])
433 /*
434 *******************************************************
435 * *
436 * Dieses Programm bestimmt bei Vorgabe der Winkel *
437 * phix, phiy und phiz sowie der Verschiebungen *
438 * x,y,z des Subreflektors die zugehoerigen Spindel- *
439 * laengen. *


ACU 1.2 PAGE 11
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

440 * Das Programm wurde entwickelt fuer die Topologie *
441 * des Subreflektors von JPL, der mit sechs Spindeln *
442 * verstellt werden kann. *
443 * *
444 * Benoetigte Unterprogramme: *
445 * ========================== *
446 * - TRTMAT *
447 * *
448 * *
449 * erstellt: 21.04.1994 *
450 * letzte Aenderung: 18.05.1994 *
451 * *
452 * Autor: Dipl.-Ing. U. Mutzberg *
453 * *
454 *******************************************************
455
456 Erlaeuterung der Parameter:
457 ===========================
458
459 rio: Ortsvektor der strukturfesten Spindelanlenkpunkte
460 im x,y,z-System
461 riu: Ortsvektor der Spindelanlenkpunkte am Tragring
462 im x,y,z-System
463 driu1...driu6: Ortsvektor der Spindelanlenkpunkte am Tragring
464 im x',y',z'-System (translatorisch verschobenes
465 Koordinatensystem im Drehpunkt)
466 sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
467 im ksi,eta,rho-System (um den Drehpunkt gedrehtes
468 Koordinatensystem)
469
470 */
471 {
472 double tt[3][3];
473 double v[3];
474 double driu1[3],driu2[3],driu3[3];
475 double driu4[3],driu5[3],driu6[3];
476 int i,j;
477
478 trtmat(tt);
479
480 /* Multiplikation des Vektors sriu mit der Matrix tt
481 (entspricht: Uebergang in das Koordinatensystem
482 x',y',z')
483 Die Multiplikation erfolgt fuer jede Spindel einzeln */
484
485 /* Multiplikation tt * sriu(i) = driu(i) ,i=1..6) */
486
487 for (i = 0;i < 3;i++)
488 {
489 driu1[i] = 0.0;
490 driu2[i] = 0.0;
491 driu3[i] = 0.0;
492 driu4[i] = 0.0;
493 driu5[i] = 0.0;
494 driu6[i] = 0.0;
495 for (j = 0;j < 3;j++)


ACU 1.2 PAGE 12
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

496 {
497 driu1[i] = driu1[i] + tt[i][j] * sriu1[j];
498 driu2[i] = driu2[i] + tt[i][j] * sriu2[j];
499 driu3[i] = driu3[i] + tt[i][j] * sriu3[j];
500 driu4[i] = driu4[i] + tt[i][j] * sriu4[j];
501 driu5[i] = driu5[i] + tt[i][j] * sriu5[j];
502 driu6[i] = driu6[i] + tt[i][j] * sriu6[j];
503 }
504 }
505
506 /* Bestimmung des Verschiebungsvektors V */
507
508 for (i = 0;i< 3;i++)
509 {
510 v[i] = v0[i] + dv[i];
511 }
512 /* Bestimmung der Laengenvektoren der Spindeln lj */
513
514 for (i = 0;i< 3;i++)
515 {
516 l1[i] = driu1[i] + v[i] - rio[0][i];
517 l2[i] = driu2[i] + v[i] - rio[1][i];
518 l3[i] = driu3[i] + v[i] - rio[2][i];
519 l4[i] = driu4[i] + v[i] - rio[3][i];
520 l5[i] = driu5[i] + v[i] - rio[4][i];
521 l6[i] = driu6[i] + v[i] - rio[5][i];
522 }
523
524 /* Bestimmung der Beinlaengen bl[i] */
525
526 bl[0] = sqrt(sqr(l1[0])+sqr(l1[1])+sqr(l1[2]));
527 bl[1] = sqrt(sqr(l2[0])+sqr(l2[1])+sqr(l2[2]));
528 bl[2] = sqrt(sqr(l3[0])+sqr(l3[1])+sqr(l3[2]));
529 bl[3] = sqrt(sqr(l4[0])+sqr(l4[1])+sqr(l4[2]));
530 bl[4] = sqrt(sqr(l5[0])+sqr(l5[1])+sqr(l5[2]));
531 bl[5] = sqrt(sqr(l6[0])+sqr(l6[1])+sqr(l6[2]));
532 return;
533 }


beinl Local Symbols

Name Class Type Size Offset Register

driu6 . . . . . . . . . . auto -00f4
j . . . . . . . . . . . . auto -00dc
driu5 . . . . . . . . . . auto -00da
i . . . . . . . . . . . . auto -00c2
tt. . . . . . . . . . . . auto -00c0
driu4 . . . . . . . . . . auto -0078
driu3 . . . . . . . . . . auto -0060
v . . . . . . . . . . . . auto -0048
driu2 . . . . . . . . . . auto -0030
driu1 . . . . . . . . . . auto -0018
v0. . . . . . . . . . . . param 0006
rio . . . . . . . . . . . param 000a


ACU 1.2 PAGE 13
cp581 01-26-95
22:53:26

Microsoft C Compiler Version 6.00A


beinl Local Symbols

Name Class Type Size Offset Register

sriu1 . . . . . . . . . . param 000e
sriu2 . . . . . . . . . . param 0012
sriu3 . . . . . . . . . . param 0016
sriu4 . . . . . . . . . . param 001a
sriu5 . . . . . . . . . . param 001e
sriu6 . . . . . . . . . . param 0022
l1. . . . . . . . . . . . param 0026
l2. . . . . . . . . . . . param 002a
l3. . . . . . . . . . . . param 002e
l4. . . . . . . . . . . . param 0032
l5. . . . . . . . . . . . param 0036
l6. . . . . . . . . . . . param 003a

534
535
536 void lesen()
537 /*
538 *******************************************************
539 * *
540 * UNTERPROGRAMM LESEN *
541 * *
542 * Dieses Programm liest aus der binaere Datei *
543 * (Datenbaustein E:/CPU1/DB230.S5B) die Spindel - *
544 * laengenaenderungen (long) jackx,jacky1,jacky2, *
545 * jackz1,jackz2,jackz3 in 1.E-04 inch und die *
546 * Spindelposition (long) tx,ty,tz in 1.E-04 inch *
547 * bzw. rx,ry,rz in 1.E-03 grd. Zudem wird ein *
548 * Speicher (int) data_ready gelesen (high und low *
549 * Byte Unterteilung). *
550 * Aus der binaeren Datei (Datenbaustein *
551 * E:/CPU1/DB011.S5B) wird die Zeit in Sekunden nach *
552 * dem Jahr 1970 in dem Speicher (long) time_s1 und *
553 * die entsprechenden Zahlen (0-99) in 10er *
554 * Millisekunden in dem Speicher (int) time_s2 *
555 * gelesen. *
556 * *
557 * *
558 * Positionen der Daten im Datenbaustein DB230 : *
559 * *
560 * 21-24 Byte jackx (long) *
561 * 25-28 Byte jacky1 (long) *
562 * 29-32 Byte jacky2 (long) *
563 * 33-36 Byte jackz1 (long) *
564 * 37-40 Byte jackz2 (long) *
565 * 41-44 Byte jackz3 (long) *
566 * 45-48 Byte tx (long) *
567 * 49-52 Byte ty (long) *
568 * 53-56 Byte tz (long) *
569 * 57-60 Byte rx (long) *
570 * 61-64 Byte ry (long) *
571 * 65-68 Byte rz (long) *


ACU 1.2 PAGE 14
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

572 * 69-71 Byte data_ready (int ) *
573 * *
574 * *
575 * Positionen der Daten im Datenbaustein DB230 : *
576 * *
577 * 7-10 Byte time_s1 (long) *
578 * 11-12 Byte time_s2 (int ) *
579 * *
580 * *
581 * *
582 * Da die zu lesenden Daten binaer vertauscht sind, *
583 * muessen diese mit den Assembler-Unterprogrammen *
584 * dreh2 (drehen von int-Zahlen) und dreh4 (drehen *
585 * von long-Zahlen) zur weiteren Bearbeitung *
586 * gedreht werden. *
587 * *
588 * *
589 * Benoetigte Unterprogramme : *
590 * - dreh2 (Assembler) *
591 * - dreh4 (Assembler) *
592 * *
593 * erstellt: 06.10.1994 *
594 * letzte Aenderung : 09.11.1994 *
595 * Autor: Dipl.-Ing. D. Libuschewski *
596 * *
597 ******************************************************* */
598
599 {
600 /* oeffnen einer vorhandenen binaeren Datei zum
601 lesen+schreiben
602
603 datei1=fopen("e:\\cpu1\\db230.s5b","rb+");
604 datei2=fopen("e:\\cpu1\\db011.s5b","rb"); */
605
606
607 /* Dateizeiger 20 Bytes nach Dateianfang setzen */
608
609 fseek(datei1,20L,0);
610
611 /* Lesen der Spindeldaten und der Position */
612
613 fread(&jackx,sizeof(jackx),1,datei1);
614 fread(&jacky1,sizeof(jacky1),1,datei1);
615 fread(&jacky2,sizeof(jacky2),1,datei1);
616 fread(&jackz1,sizeof(jackz1),1,datei1);
617 fread(&jackz2,sizeof(jackz2),1,datei1);
618 fread(&jackz3,sizeof(jackz3),1,datei1);
619 fread(&tx,sizeof(tx),1,datei1);
620 fread(&ty,sizeof(ty),1,datei1);
621 fread(&tz,sizeof(tz),1,datei1);
622 fread(&rx,sizeof(rx),1,datei1);
623 fread(&ry,sizeof(ry),1,datei1);
624 fread(&rz,sizeof(rz),1,datei1);
625 fread(&data_ready,sizeof(data_ready),1,datei1);
626
627 /* Dateizeiger 6 Bytes nach Dateianfang setzen */


ACU 1.2 PAGE 15
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

628
629 fseek(datei2,6L,0);
630
631 /* Lesen der Sekunden */
632
633 fread(&time_s1,sizeof(time_s1),1,datei2);
634 fread(&time_s2,sizeof(time_s2),1,datei2);
635
636
637 /* Drehen der Bytes
638
639 Hexadezimal-System :
640
641 Altes Format : 16**1,16**0, 16**3,16**2, 16**5,16**4, 16**7,16
**6
642 Neues Format : 16**7,16**6, 16**5,16**4, 16**3,16**2, 16**1,16
**0
643 */
644
645 dreh4((char *)&jackx);
646 dreh4((char *)&jacky1);
647 dreh4((char *)&jacky2);
648 dreh4((char *)&jackz1);
649 dreh4((char *)&jackz2);
650 dreh4((char *)&jackz3);
651 dreh4((char *)&tx);
652 dreh4((char *)&ty);
653 dreh4((char *)&tz);
654 dreh4((char *)&rx);
655 dreh4((char *)&ry);
656 dreh4((char *)&rz);
657 dreh2((char *)&data_ready);
658
659 dreh4((char *)&time_s1);
660 dreh2((char *)&time_s2);
661
662 /* Anpassung des Koordinatensystems
663
664 Die Daten aus dem linksh„ndigen JPL-System werden in ein
665 rechtsh„ndiges System transformiert. Hierzu wird die
666 z-Achse umgekehrt. */
667
668 jackz1 = -jackz1;
669 jackz2 = -jackz2;
670 jackz3 = -jackz3;
671 tz = -tz;
672 rz = -rz;
673
674 return;
675 }
676
677
678
679 void lubksb(double a[6][6],int n,int indx[6],double b[6])
680
681 {


ACU 1.2 PAGE 16
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

682 double sum;
683 int ii,i,ll,j;
684
685 ii = -1;
686 for (i = 0;i < n;++ i)
687 {
688 ll = indx[i];
689 sum = b[ll];
690 b[ll] = b[i];
691
692 if (ii != -1)
693 {
694 for (j = ii;j <= i-1;++ j)
695 {
696 sum = sum - a[i][j]*b[j];
697 }
698 }
699 if ((ii == -1) && (sum != 0.0))
700 {
701 ii = i;
702 }
703 b[i] = sum;
704 }
705 for (i = n-1;i >= 0;i--)
706 {
707 sum = b[i];
708 if (i < n-1)
709 {
710 for (j = i+1;j < n;++ j)
711 {
712 sum = sum - a[i][j]*b[j];
713 }
714 }
715 b[i] = sum/a[i][i];
716 }
717 return;
718 }


lubksb Local Symbols

Name Class Type Size Offset Register

j . . . . . . . . . . . . auto -0010
i . . . . . . . . . . . . auto -000e
ll. . . . . . . . . . . . auto -000c
sum . . . . . . . . . . . auto -000a
ii. . . . . . . . . . . . auto -0002
a . . . . . . . . . . . . param 0006
n . . . . . . . . . . . . param 000a
indx. . . . . . . . . . . param 000c
b . . . . . . . . . . . . param 0010

719
720
721


ACU 1.2 PAGE 17
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

722
723 void ludcmp(double a[6][6],int n,int indx[6],double d)
724 {
725 double vv[6];
726 double aamax,tiny,dum,sum;
727 int i,j,k,imax;
728
729 tiny = 1.0e-20;
730 d = 1.0;
731 for (i = 0;i < n;++ i)
732 {
733 aamax = 0.0;
734 for (j = 0;j < n;++ j)
735 {
736 if ( fabs(a[i][j]) > aamax)
737 {
738 aamax = fabs(a[i][j]);
739 }
740 }
741 if (aamax == 0.0)
742 {
743 printf("Matrix ist singulaer !");
744 }
745 vv[i] = 1.0/aamax;
746 }
747 for (j = 0;j < n;++ j)
748 {
749 if (j > 0)
750 {
751 for (i = 0;i <= j-1;++ i)
752 {
753 sum = a[i][j];
754 if (i > 0)
755 {
756 for (k = 0;k <= i-1;++ k)
757 {
758 sum = sum - a[i][k]*a[k][j];
759 }
760 a[i][j] = sum;
761 }
762 }
763 }
764 aamax = 0.0;
765 for (i = j;i < n;++ i)
766 {
767 sum = a[i][j];
768 if (j > 0)
769 {
770 for (k = 0;k <= j-1;++ k)
771 {
772 sum = sum - a[i][k]*a[k][j];
773 }
774 a[i][j] = sum;
775 }
776 dum = vv[i]* fabs(sum);
777 if (dum >= aamax)


ACU 1.2 PAGE 18
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

778 {
779 imax = i;
780 aamax = dum;
781 }
782 }
783 if (j != imax)
784 {
785 for (k = 0;k < n;++ k)
786 {
787 dum = a[imax][k];
788 a[imax][k] = a[j][k];
789 a[j][k] = dum;
790 }
791 d = -d;
792 vv[imax] = vv[j];
793 }
794 indx[j] = imax;
795 if (j != n-1)
796 {
797 if (a[j][j] == 0.0)
798 {
799 a[j][j] = tiny;
800 }
801 dum = 1.0/a[j][j];
802 for (i = j+1;i < n;++ i)
803 {
804 a[i][j] = a[i][j]*dum;
805 }
806 }
807 }
808 if (a[n-1][n-1] == 0.0)
809 {
810 a[n-1][n-1] = tiny;
811 }
812 return;
813 }


ludcmp Local Symbols

Name Class Type Size Offset Register

imax. . . . . . . . . . . auto -0058
vv. . . . . . . . . . . . auto -0056
k . . . . . . . . . . . . auto -0026
j . . . . . . . . . . . . auto -0024
i . . . . . . . . . . . . auto -0022
aamax . . . . . . . . . . auto -0020
dum . . . . . . . . . . . auto -0018
sum . . . . . . . . . . . auto -0010
tiny. . . . . . . . . . . auto -0008
a . . . . . . . . . . . . param 0006
n . . . . . . . . . . . . param 000a
indx. . . . . . . . . . . param 000c
d . . . . . . . . . . . . param 0010



ACU 1.2 PAGE 19
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

814
815
816 void matinv (double a[6][6],double ai[6][6],int n)
817 {
818 double d;
819 double b[6];
820 int indx[6];
821 int i,j,k,l;
822
823 for ( i = 0;i < n;++ i)
824 {
825 for ( j = 0;j < n;++ j)
826 {
827 ai[i][j] = 0.0;
828 }
829 ai[i][i] = 1.0;
830 }
831 ludcmp(a,n,indx,d);
832 for (k = 0;k < n;++ k)
833 {
834 for (l = 0;l < n;++ l)
835 {
836 b[l] = ai[l][k];
837 }
838 lubksb(a,n,indx,b);
839 for (l = 0;l < n;++ l)
840 {
841 ai[l][k] = b[l];
842 }
843 }
844 return;
845 }


matinv Local Symbols

Name Class Type Size Offset Register

l . . . . . . . . . . . . auto -004c
k . . . . . . . . . . . . auto -004a
j . . . . . . . . . . . . auto -0048
i . . . . . . . . . . . . auto -0046
d . . . . . . . . . . . . auto -0044
indx. . . . . . . . . . . auto -003c
b . . . . . . . . . . . . auto -0030
a . . . . . . . . . . . . param 0006
ai. . . . . . . . . . . . param 000a
n . . . . . . . . . . . . param 000e

846
847
848
849 void schreiben()
850 /*
851 *******************************************************
852 * *


ACU 1.2 PAGE 20
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

853 * UNTERPROGRAMM SCHREIBEN *
854 * *
855 * Dieses Programm schreibt in die binaere Datei *
856 * (Datenbaustein E:/CPU1/DB230.S5B) die Spindel- *
857 * laengenaenderungen (long) jackx,jacky1,jacky2, *
858 * jackz1,jackz2,jackz3 in 1.E-04 inch und die *
859 * Spindelposition (long) tx,ty,tz in 1.E-04 inch *
860 * bzw. rx,ry,rz in 1.E-03 grd. Ausserdem werden die *
861 * Achsengeschwindigkeiten in den Speichern (int) *
862 * axis_x,axis_y,axis_z in 1.E-04 inch/s und die *
863 * Speicher (int) data_ready (high und low Byte *
864 * Unterteilung) und (int) watchdog geschrieben. *
865 * *
866 * Positionen der Daten im Datenbaustein : *
867 * *
868 * 101-104 Byte tx (long) *
869 * 105-108 Byte ty (long) *
870 * 109-112 Byte tz (long) *
871 * 113-116 Byte rx (long) *
872 * 117-120 Byte ry (long) *
873 * 121-124 Byte rz (long) *
874 * 125-128 Byte jackxs (long) *
875 * 129-132 Byte jacky1s (long) *
876 * 133-136 Byte jacky2s (long) *
877 * 137-140 Byte jackz1s (long) *
878 * 141-144 Byte jackz2s (long) *
879 * 145-148 Byte jackz3s (long) *
880 * 149-150 Byte data_readys (int ) *
881 * 151-152 Byte axis_x (int ) *
882 * 153-154 Byte axis_y (int ) *
883 * 155-156 Byte axis_z (int ) *
884 * 157-158 Byte watchdog (int ) *
885 * *
886 * *
887 * Damit die zu schreibenden Daten richtig in dem *
888 * Datenbaustein positioniert werden, muessen die *
889 * Bytes entsprechen vertauscht werden. Dies erfolgt *
890 * mit den Assembler-Unterprogrammen dreh2 (drehen *
891 * von int-Zahlen) und dreh4 (drehen von long-Zahlen).*
892 * *
893 * Benoetigte Unterprogramme : *
894 * - dreh2 (Assembler) *
895 * - dreh4 (Assembler) *
896 * *
897 * erstellt: 06.10.1994 *
898 * letzte Aenderung: 29.11.1994 *
899 * Autor: Dipl.-Ing. D. Libuschewski *
900 * *
901 ******************************************************* */
902
903 {
904 /* oeffnen einer vorhandenen binaeren Datei zum
905 lesen+schreiben
906
907 datei1=fopen("e:\\cpu1\\db230.s5b","rb+"); */
908


ACU 1.2 PAGE 21
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

909 /* Drehen der Bytes
910
911 Hexadezimal-System :
912
913 Altes Format : 16**7,16**6, 16**5,16**4, 16**3,16**2, 16**1,1
6**0
914 Neues Format : 16**1,16**0, 16**3,16**2, 16**5,16**4, 16**7,1
6**6
915 */
916
917 /* SPERREN DER CP928 */
918
919 data_readys = data_readys + 1;
920 dreh2((char *)&data_readys);
921 fseek(datei1,148L,0); /* Dateizeiger 148 Bytes nach Dateianfang se
tzen */
922 fwrite(&data_readys,sizeof(data_readys),1,datei1);
923 dreh2((char *)&data_readys);
924 data_readys = data_readys - 1;
925
926 /* FREIGEBEN DER CP928 */
927
928 /* Anpassung des Koordinatensystems
929
930 Die Daten aus dem linksh„ndigen JPL-System werden in ein
931 rechtsh„ndiges System transformiert. Hierzu wird die
932 z-Achse umgekehrt. */
933
934 jackz1s = -jackz1s;
935 jackz2s = -jackz2s;
936 jackz3s = -jackz3s;
937 tz = -tz;
938 rz = -rz;
939
940 dreh4((char *)&tx);
941 dreh4((char *)&ty);
942 dreh4((char *)&tz);
943 dreh4((char *)&rx);
944 dreh4((char *)&ry);
945 dreh4((char *)&rz);
946 dreh4((char *)&jackxs);
947 dreh4((char *)&jacky1s);
948 dreh4((char *)&jacky2s);
949 dreh4((char *)&jackz1s);
950 dreh4((char *)&jackz2s);
951 dreh4((char *)&jackz3s);
952 dreh2((char *)&data_readys);
953 dreh2((char *)&axis_x);
954 dreh2((char *)&axis_y);
955 dreh2((char *)&axis_z);
956 dreh2((char *)&watchdog);
957
958 fseek(datei1,100L,0); /* Dateizeiger 100 Bytes
959 nach Dateianfang setzen */
960
961 fwrite(&tx,sizeof(tx),1,datei1);


ACU 1.2 PAGE 22
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

962 fwrite(&ty,sizeof(ty),1,datei1);
963 fwrite(&tz,sizeof(tz),1,datei1);
964 fwrite(&rx,sizeof(rx),1,datei1);
965 fwrite(&ry,sizeof(ry),1,datei1);
966 fwrite(&rz,sizeof(rz),1,datei1);
967
968 fwrite(&jackxs,sizeof(jackxs),1,datei1);
969 fwrite(&jacky1s,sizeof(jacky1s),1,datei1);
970 fwrite(&jacky2s,sizeof(jacky2s),1,datei1);
971 fwrite(&jackz1s,sizeof(jackz1s),1,datei1);
972 fwrite(&jackz2s,sizeof(jackz2s),1,datei1);
973 fwrite(&jackz3s,sizeof(jackz3s),1,datei1);
974
975 fwrite(&data_readys,sizeof(data_readys),1,datei1);
976 fwrite(&axis_x,sizeof(axis_x),1,datei1);
977 fwrite(&axis_y,sizeof(axis_y),1,datei1);
978 fwrite(&axis_z,sizeof(axis_z),1,datei1);
979 fwrite(&watchdog,sizeof(watchdog),1,datei1);
980
981 /* NACHFOLGENDE DATEN NOCHMALS DREHEN, DA UNTER UMSTAENDEN DIE
982 GLEICHEN DATEN NOCHMALS IN DEN DATENBAUSTEIN GESCHRIEBEN WERDEN
*/
983
984 dreh4((char *)&jackxs);
985 dreh4((char *)&jacky1s);
986 dreh4((char *)&jacky2s);
987 dreh4((char *)&jackz1s);
988 dreh4((char *)&jackz2s);
989 dreh4((char *)&jackz3s);
990
991 /* Anpassung des Koordinatensystems
992
993 Die Daten aus dem linksh„ndigen JPL-System werden in ein
994 rechtsh„ndiges System transformiert. Hierzu wird die
995 z-Achse umgekehrt. */
996
997 jackz1s = -jackz1s;
998 jackz2s = -jackz2s;
999 jackz3s = -jackz3s;
1000
1001
1002 return;
1003 }
1004
1005
1006 void tdelta (double sriu1[3],double sriu2[3],double sriu3[3],
1007 double sriu4[3],double sriu5[3],double sriu6[3],
1008 double l1[3],double l2[3],double l3[3],
1009 double l4[3],double l5[3],double l6[3],
1010 double td[6][6])
1011 /*
1012 *******************************************************
1013 * *
1014 * Dieses Programm bestimmt bei Vorgabe der Winkel *
1015 * phix, phiy und phiz sowie der Vektoren der Spin- *
1016 * delanlenkpunkte am Subreflektor im koerperfesten *


ACU 1.2 PAGE 23
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1017 * Koordinatensystem ksi,eta,rho und der Beinlaengen- *
1018 * vektoren sowie der entsprechenden Beinlaengen die *
1019 * Matrix T,delta (td). *
1020 * Das Programm wurde entwickelt fuer die Topologie *
1021 * des Subreflektors von JPL, der mit sechs Spindeln *
1022 * verstellt werden kann. *
1023 * *
1024 * Benoetigte Unterprogramme: *
1025 * ========================== *
1026 * - THILF *
1027 * *
1028 * erstellt: 21.04.1994 *
1029 * letzte Aenderung: 18.05.1994 *
1030 * *
1031 * Autor: Dipl.-Ing. U. Mutzberg *
1032 * *
1033 *******************************************************
1034
1035 Erlaeuterung der Parameter:
1036 ===========================
1037
1038 sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1039 im ksi,eta,rho-System (um den Drehpunkt gedrehtes
1040 Koordinatensystem)
1041 */
1042 {
1043 double th[3][6];
1044 double td1[6],td2[6],td3[6];
1045 double td4[6],td5[6],td6[6];
1046 int i,j;
1047
1048 /* Die berechnung der Matrix TD erfolgt zeilenweise
1049 (entsprechend der einzelnen Beine)
1050
1051 Bein 1: */
1052
1053 thilf(sriu1,th);
1054 for (i = 0;i < 3;i++) l1[i] = l1[i]/bl[0];
1055 for (i = 0;i < 6;i++)
1056 {
1057 td1[i] = 0.0;
1058 for (j = 0;j < 3;j++)
1059 {
1060 td1[i] = td1[i] + l1[j] * th[j][i];
1061 }
1062 }
1063
1064 /* Bein 2: */
1065
1066 thilf(sriu2,th);
1067 for (i = 0;i < 3;i++) l2[i] = l2[i]/bl[1];
1068 for (i = 0;i < 6;i++)
1069 {
1070 td2[i] = 0.0;
1071 for (j = 0;j < 3;j++)
1072 {


ACU 1.2 PAGE 24
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1073 td2[i] = td2[i] + l2[j] * th[j][i];
1074 }
1075 }
1076
1077 /* Bein 3: */
1078
1079 thilf(sriu3,th);
1080 for (i = 0;i < 3;i++) l3[i] = l3[i]/bl[2];
1081 for (i = 0;i < 6;i++)
1082 {
1083 td3[i] = 0.0;
1084 for (j = 0;j < 3;j++)
1085 {
1086 td3[i] = td3[i] + l3[j] * th[j][i];
1087 }
1088 }
1089
1090 /* Bein 4: */
1091
1092 thilf(sriu4,th);
1093 for (i = 0;i < 3;i++) l4[i] = l4[i]/bl[3];
1094 for (i = 0;i < 6;i++)
1095 {
1096 td4[i] = 0.0;
1097 for (j = 0;j < 3;j++)
1098 {
1099 td4[i] = td4[i] + l4[j] * th[j][i];
1100 }
1101 }
1102
1103 /* Bein 5: */
1104
1105 thilf(sriu5,th);
1106 for (i = 0;i < 3;i++) l5[i] = l5[i]/bl[4];
1107 for (i = 0;i < 6;i++)
1108 {
1109 td5[i] = 0.0;
1110 for (j = 0;j < 3;j++)
1111 {
1112 td5[i] = td5[i] + l5[j] * th[j][i];
1113 }
1114 }
1115
1116 /* Bein 6: */
1117
1118 thilf(sriu6,th);
1119 for (i = 0;i < 3;i++) l6[i] = l6[i]/bl[5];
1120 for (i = 0;i < 6;i++)
1121 {
1122 td6[i] = 0.0;
1123 for (j = 0;j < 3;j++)
1124 {
1125 td6[i] = td6[i] + l6[j] * th[j][i];
1126 }
1127 }
1128


ACU 1.2 PAGE 25
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1129 /* Bestimmung der Matrix td aus den Vektoren td1...td6 */
1130
1131 for (i = 0;i < 6;i++)
1132 { td[0][i] = td1[i];
1133 td[1][i] = td2[i];
1134 td[2][i] = td3[i];
1135 td[3][i] = td4[i];
1136 td[4][i] = td5[i];
1137 td[5][i] = td6[i];
1138 }
1139 return;
1140 }


tdelta Local Symbols

Name Class Type Size Offset Register

td6 . . . . . . . . . . . auto -01b4
td5 . . . . . . . . . . . auto -0184
th. . . . . . . . . . . . auto -0154
td4 . . . . . . . . . . . auto -00c4
td3 . . . . . . . . . . . auto -0094
td2 . . . . . . . . . . . auto -0064
j . . . . . . . . . . . . auto -0034
td1 . . . . . . . . . . . auto -0032
i . . . . . . . . . . . . auto -0002
sriu1 . . . . . . . . . . param 0006
sriu2 . . . . . . . . . . param 000a
sriu3 . . . . . . . . . . param 000e
sriu4 . . . . . . . . . . param 0012
sriu5 . . . . . . . . . . param 0016
sriu6 . . . . . . . . . . param 001a
l1. . . . . . . . . . . . param 001e
l2. . . . . . . . . . . . param 0022
l3. . . . . . . . . . . . param 0026
l4. . . . . . . . . . . . param 002a
l5. . . . . . . . . . . . param 002e
l6. . . . . . . . . . . . param 0032
td. . . . . . . . . . . . param 0036

1141
1142 void thilf (double sriu[3],double th[3][6])
1143 /*
1144 *******************************************************
1145 * *
1146 * Dieses Programm bestimmt bei Vorgabe der Winkel *
1147 * phix, phiy und phiz sowie der Vektoren der Spin- *
1148 * delanlekpunkte am Subreflektor im koerperfesten *
1149 * Koordinatensystem ksi,eta,rho die Hilfsmatrix TH. *
1150 * Das Programm wurde entwickelt fuer die Topologie *
1151 * des Subreflektors von JPL, der mit sechs Spindeln *
1152 * verstellt werden kann. *
1153 * *
1154 * Benoetigte Unterprogramme: *
1155 * ========================== *


ACU 1.2 PAGE 26
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1156 * - keine *
1157 * *
1158 * erstellt: 21.04.1994 *
1159 * letzte Aenderung: 18.05.1994 *
1160 * *
1161 * Autor: Dipl.-Ing. U. Mutzberg *
1162 * *
1163 *******************************************************
1164
1165 Erlaeuterung der Parameter:
1166 ===========================
1167
1168 sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1169 im ksi,eta,rho-System (um den Drehpunkt gedrehtes
1170 Koordinatensystem) */
1171 {
1172 double sphix,cphix,sphiy,cphiy,sphiz,cphiz;
1173
1174 /* Hilfsgroessen */
1175
1176 sphix = sin(phix);
1177 cphix = cos(phix);
1178 sphiy = sin(phiy);
1179 cphiy = cos(phiy);
1180 sphiz = sin(phiz);
1181 cphiz = cos(phiz);
1182
1183 th[0][0] = (cphix*sphiy*cphiz+sphix*sphiz)*sriu[1]
1184 +(cphix*sphiz-sphix*sphiy*cphiz)*sriu[2];
1185 th[0][1] = -sphiy*cphiz*sriu[0]
1186 +sphix*cphiy*cphiz*sriu[1]
1187 +cphix*cphiy*cphiz*sriu[2];
1188 th[0][2] = -cphiy*sphiz*sriu[0]
1189 -(sphix*sphiy*sphiz+cphix*cphiz)*sriu[1]
1190 +(sphix*cphiz-cphix*sphiy*sphiz)*sriu[2];
1191 th[0][3] = 1.0;
1192 th[0][4] = 0.0;
1193 th[0][5] = 0.0;
1194
1195 th[1][0] = (cphix*sphiy*sphiz-sphix*cphiz)*sriu[1]
1196 -(sphix*sphiy*sphiz+cphix*cphiz)*sriu[2];
1197 th[1][1] = -sphiy*sphiz*sriu[0]
1198 +sphix*cphiy*sphiz*sriu[1]
1199 +cphix*cphiy*sphiz*sriu[2];
1200 th[1][2] = cphiy*cphiz*sriu[0]
1201 +(sphix*sphiy*cphiz-cphix*sphiz)*sriu[1]
1202 +(cphix*sphiy*cphiz+sphix*sphiz)*sriu[2];
1203 th[1][3] = 0.0;
1204 th[1][4] = 1.0;
1205 th[1][5] = 0.0;
1206
1207 th[2][0] = cphix*cphiy*sriu[1]
1208 -sphix*cphiy*sriu[2];
1209 th[2][1] = -cphiy*sriu[0]
1210 -sphix*sphiy*sriu[1]
1211 -cphix*sphiy*sriu[2];


ACU 1.2 PAGE 27
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1212 th[2][2] = 0.0;
1213 th[2][3] = 0.0;
1214 th[2][4] = 0.0;
1215 th[2][5] = 1.0;
1216
1217 return;
1218 }


thilf Local Symbols

Name Class Type Size Offset Register

sphiz . . . . . . . . . . auto -0030
cphiz . . . . . . . . . . auto -0028
sphiy . . . . . . . . . . auto -0020
cphiy . . . . . . . . . . auto -0018
sphix . . . . . . . . . . auto -0010
cphix . . . . . . . . . . auto -0008
sriu. . . . . . . . . . . param 0006
th. . . . . . . . . . . . param 000a

1219
1220
1221
1222
1223 void thin()
1224 /*
1225 *******************************************************
1226 * *
1227 * UNTERPROGRAMM THIN *
1228 * (Hintransformation) *
1229 * *
1230 * Dieses Programm bestimmt bei Vorgabe der Winkel *
1231 * phix,phiy und phiz sowie der Verschiebungen x,y,z *
1232 * des Subreflektors die zugehoerigen Spindellaengen. *
1233 * Das Programm wurde entwickelt fuer die Topologie *
1234 * des Subreflektors von JPL, der mit sechs Spindeln *
1235 * verstellt werden kann. *
1236 * *
1237 * Benoetigte Unterprogramme: *
1238 * (- TOPO) *
1239 * - BEINL *
1240 * - TRTMAT *
1241 * *
1242 * erstellt: 21.04.1994 *
1243 * letzte Aenderung: 09.11.1994 D. Libuschewski *
1244 * *
1245 * Autor: Dipl.-Ing. U. Mutzberg *
1246 * *
1247 *******************************************************
1248
1249 c Erlaeuterung der Parameter:
1250 c ===========================
1251 c
1252 c rio: Ortsvektor der strukturfesten Spindelanlenkpunkte


ACU 1.2 PAGE 28
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1253 c im x,y,z-System
1254 c riu: Ortsvektor der Spindelanlenkpunkte am Tragring
1255 c im x,y,z-System
1256 c driu1...driu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1257 c im x',y',z'-System (translatorisch verschobenes
1258 c Koordinatensystem im Drehpunkt)
1259 c sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1260 c im ksi,eta,rho-System (um den Drehpunkt gedrehtes
1261 c Koordinatensystem)
1262 c */
1263
1264 {
1265 double l1[3],l2[3],l3[3];
1266 double l4[3],l5[3],l6[3];
1267
1268
1269 /*c Bestimmung der Beinlaengen: */
1270
1271 beinl(v0,rio,sriu1,sriu2,sriu3,sriu4,sriu5,sriu6,
1272 l1,l2,l3,l4,l5,l6);
1273 return;
1274 }


thin Local Symbols

Name Class Type Size Offset Register

l3. . . . . . . . . . . . auto -0090
l2. . . . . . . . . . . . auto -0078
l1. . . . . . . . . . . . auto -0060
l6. . . . . . . . . . . . auto -0048
l5. . . . . . . . . . . . auto -0030
l4. . . . . . . . . . . . auto -0018

1275
1276
1277
1278 void topo(void)
1279
1280 /*
1281 *******************************************************
1282 * *
1283 * In diesem Unterprogramm werden die Ortsvektoren *
1284 * der strukturfesten Spindelanlenkpunkte im x,y,z- *
1285 * System und die Ortsvektoren der Spindelanlenk- *
1286 * punkte am Tragring im mitbewegten ksi,eta,rho- *
1287 * System aus der Datei SPINDEL.DAT gelesen. *
1288 * Weiterhin wird der Vektor V0 der konstanten *
1289 * Koordinatenverschiebung zwischen dem x,y,z- und *
1290 * x',y',z'-System festgelegt. *
1291 * *
1292 * Berechnet werden die Beinlaengen im Ausgangszu- *
1293 * stand, d.h. aus den gelesenen Spindelanlenkpunkten *
1294 * *
1295 * Benoetigte Unterprogramme: *


ACU 1.2 PAGE 29
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1296 * - keine *
1297 * *
1298 * erstellt: 20.04.1994 *
1299 * letzte Aenderung: 10.11.1994 (D. Libuschewski) *
1300 * *
1301 * Autor: Dipl.-Ing. D. Libuschewski *
1302 * Dipl.-Ing. U. Mutzberg *
1303 * *
1304 *******************************************************
1305
1306 Erlaeuterung der Parameter:
1307 ===========================
1308
1309 rio: Ortsvektor der strukturfesten Spindelanlenkpunkte
1310 im x,y,z-System
1311 sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1312 im ksi,eta,rho-System (um den Drehpunkt gedrehtes
1313 Koordinatensystem)
1314 v0: Ortsvektor der konstanten Koordinatenverschiebung
1315 zwischen dem x,y,z- und x',y',z'- System
1316 bein: Beinlaengen im 0-System (Berechnet aus den
1317 festgelegten Spindelanlenkpunkten
1318
1319
1320 Abmessungen in mm !!
1321
1322 Beispiel :
1323
1324 Spindel 1 : rio[0][0] = 1500.0
1325 rio[0][1] = -1030.0
1326 rio[0][2] = 0.0
1327 Spindel 2: rio[1][0] = -1500.0
1328 rio[1][1] = -1030.0
1329 rio[1][2] = 0.0
1330 Spindel 3: rio[2][0] = 0.0
1331 rio[2][1] = 1740.0
1332 rio[2][2] = 0.0
1333 Spindel 4: rio[3][0] = 1400.0
1334 rio[3][1] = 2353.0
1335 rio[3][2] = 1774.8
1336 Spindel 5: rio[4][0] = -1400.0
1337 rio[4][1] = 2353.0
1338 rio[4][2] = 1774.8
1339 Spindel 6: rio[5][0] = -2899.0
1340 rio[5][1] = 0.0
1341 rio[5][2] = 1774.8
1342
1343 Spindel 1: sriu1[0] = 1500.0
1344 sriu1[1] = -1030.0
1345 sriu1[2] = 0.0
1346 Spindel 2: sriu2[0] = -1500.0
1347 sriu2[1] = -1030.0
1348 sriu2[2] = 0.0
1349 Spindel 3: sriu3[0] = 0.0
1350 sriu3[1] = 1740.0
1351 sriu3[2] = 0.0


ACU 1.2 PAGE 30
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1352 Spindel 4: sriu4[0] = 1400.0
1353 sriu4[1] = 918.0
1354 sriu4[2] = 314.8
1355 Spindel 5: sriu5[0] = -1400.0
1356 sriu5[1] = 918.0
1357 sriu5[2] = 314.8
1358 Spindel 6: sriu6[0] = -1439.0
1359 sriu6[1] = 0.0
1360 sriu6[2] = 314.8
1361
1362 v0[0] = 0.0
1363 v0[1] = 0.0
1364 v0[2] = 1460.0
1365
1366 */
1367
1368 {
1369
1370 FILE *datei,*fopen();
1371 char text[100];
1372 int i,j;
1373
1374
1375 datei=fopen("SPINDEL.DAT","r");
1376 rewind (datei);
1377
1378 /* ueberlesen der ersten 15 Zeilen */
1379
1380 for (i=0;i<15;++i)
1381 {
1382 fgets(text,90,datei);
1383 }
1384
1385 /* lesen der Daten rio[j][i] */
1386
1387 for (j=0;j<6;++j)
1388 {
1389 for (i=0;i<3;++i)
1390 {
1391 fgets(text,29,datei);
1392 fscanf(datei,"%lf",&rio[j][i]);
1393 fgets(text,60,datei);
1394 }
1395 }
1396 fgets(text,90,datei);
1397
1398 /* lesen der Daten sriu1[i] - sriu6[i] */
1399
1400 for (j=1;j<7;++j)
1401 {
1402 for (i=0;i<3;++i)
1403 {
1404 fgets(text,29,datei);
1405 if (j == 1) fscanf(datei,"%lf",&sriu1[i]);
1406 if (j == 2) fscanf(datei,"%lf",&sriu2[i]);
1407 if (j == 3) fscanf(datei,"%lf",&sriu3[i]);


ACU 1.2 PAGE 31
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1408 if (j == 4) fscanf(datei,"%lf",&sriu4[i]);
1409 if (j == 5) fscanf(datei,"%lf",&sriu5[i]);
1410 if (j == 6) fscanf(datei,"%lf",&sriu6[i]);
1411 fgets(text,60,datei);
1412 }
1413 }
1414 fgets(text,90,datei);
1415
1416 /* lesen der Daten v0[i] */
1417
1418 for (i=0;i<3;++i)
1419 {
1420 fgets(text,29,datei);
1421 fscanf(datei,"%lf",&v0[i]);
1422 fgets(text,60,datei);
1423 }
1424
1425
1426 /* Berechnung der Beinlaengen im Ursprungszustand */
1427
1428 bein[0] = (rio[0][0] - (sriu1[0]+v0[0])) * (rio[0][0] - (sriu
1[0]+v0[0]));
1429 bein[0] = bein[0] + (rio[0][1] - (sriu1[1]+v0[1])) * (rio[0][1] - (sriu
1[1]+v0[1]));
1430 bein[0] = bein[0] + (rio[0][2] - (sriu1[2]+v0[2])) * (rio[0][2] - (sriu
1[2]+v0[2]));
1431 bein[0] = sqrt(bein[0]);
1432
1433 bein[1] = (rio[1][0] - (sriu2[0]+v0[0])) * (rio[1][0] - (sriu
2[0]+v0[0]));
1434 bein[1] = bein[1] + (rio[1][1] - (sriu2[1]+v0[1])) * (rio[1][1] - (sriu
2[1]+v0[1]));
1435 bein[1] = bein[1] + (rio[1][2] - (sriu2[2]+v0[2])) * (rio[1][2] - (sriu
2[2]+v0[2]));
1436 bein[1] = sqrt(bein[1]);
1437
1438 bein[2] = (rio[2][0] - (sriu3[0]+v0[0])) * (rio[2][0] - (sriu
3[0]+v0[0]));
1439 bein[2] = bein[2] + (rio[2][1] - (sriu3[1]+v0[1])) * (rio[2][1] - (sriu
3[1]+v0[1]));
1440 bein[2] = bein[2] + (rio[2][2] - (sriu3[2]+v0[2])) * (rio[2][2] - (sriu
3[2]+v0[2]));
1441 bein[2] = sqrt(bein[2]);
1442
1443 bein[3] = (rio[3][0] - (sriu4[0]+v0[0])) * (rio[3][0] - (sriu
4[0]+v0[0]));
1444 bein[3] = bein[3] + (rio[3][1] - (sriu4[1]+v0[1])) * (rio[3][1] - (sriu
4[1]+v0[1]));
1445 bein[3] = bein[3] + (rio[3][2] - (sriu4[2]+v0[2])) * (rio[3][2] - (sriu
4[2]+v0[2]));
1446 bein[3] = sqrt(bein[3]);
1447
1448 bein[4] = (rio[4][0] - (sriu5[0]+v0[0])) * (rio[4][0] - (sriu
5[0]+v0[0]));
1449 bein[4] = bein[4] + (rio[4][1] - (sriu5[1]+v0[1])) * (rio[4][1] - (sriu
5[1]+v0[1]));


ACU 1.2 PAGE 32
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1450 bein[4] = bein[4] + (rio[4][2] - (sriu5[2]+v0[2])) * (rio[4][2] - (sriu
5[2]+v0[2]));
1451 bein[4] = sqrt(bein[4]);
1452
1453 bein[5] = (rio[5][0] - (sriu6[0]+v0[0])) * (rio[5][0] - (sriu
6[0]+v0[0]));
1454 bein[5] = bein[5] + (rio[5][1] - (sriu6[1]+v0[1])) * (rio[5][1] - (sriu
6[1]+v0[1]));
1455 bein[5] = bein[5] + (rio[5][2] - (sriu6[2]+v0[2])) * (rio[5][2] - (sriu
6[2]+v0[2]));
1456 bein[5] = sqrt(bein[5]);
1457
1458 fclose(datei);
1459 return;
1460 }


topo Local Symbols

Name Class Type Size Offset Register

j . . . . . . . . . . . . auto -006c
i . . . . . . . . . . . . auto -006a
datei . . . . . . . . . . auto -0068
text. . . . . . . . . . . auto -0064

1461
1462
1463
1464
1465 void trtmat (double tt[3][3])
1466
1467 /*
1468 *******************************************************
1469 * *
1470 * Dieses Programm bestimmt bei Vorgabe der Winkel *
1471 * phix, phiy und phiz die transponierte Transfor- *
1472 * mationsmatrix fuer die Umrechnung der Koordinaten *
1473 * eines gedrehten Koordinatensystems in ein festes *
1474 * System. *
1475 * *
1476 * Benoetigte Unterprogramme: *
1477 * - keine *
1478 * *
1479 * erstellt: 20.04.1994 *
1480 * letzte Aenderung: 18.05.1994 *
1481 * *
1482 * Autor: Dipl.-Ing. U. Mutzberg *
1483 * *
1484 *******************************************************
1485
1486 Erlaeuterung der Parameter:
1487 ===========================
1488
1489 phix: Drehung um die x-Achse [rad]
1490 phiy: Drehung um die y-Achse [rad]


ACU 1.2 PAGE 33
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1491 phiz: Drehung um die z-Achse [rad]
1492 tt: transponierte Transformationsmatrix */
1493 {
1494 double sphix,cphix,sphiy,cphiy,sphiz,cphiz;
1495
1496 /* Hilfsgroessen: */
1497
1498 sphix = sin(phix);
1499 cphix = cos(phix);
1500 sphiy = sin(phiy);
1501 cphiy = cos(phiy);
1502 sphiz = sin(phiz);
1503 cphiz = cos(phiz);
1504
1505 tt[0][0] = cphiy*cphiz;
1506 tt[0][1] = sphix*sphiy*cphiz-cphix*sphiz;
1507 tt[0][2] = cphix*sphiy*cphiz+sphix*sphiz;
1508
1509 tt[1][0] = cphiy*sphiz;
1510 tt[1][1] = sphix*sphiy*sphiz+cphix*cphiz;
1511 tt[1][2] = cphix*sphiy*sphiz-sphix*cphiz;
1512
1513 tt[2][0] =-sphiy;
1514 tt[2][1] = sphix*cphiy;
1515 tt[2][2] = cphix*cphiy;
1516
1517 return;
1518 }


trtmat Local Symbols

Name Class Type Size Offset Register

sphiz . . . . . . . . . . auto -0030
cphiz . . . . . . . . . . auto -0028
sphiy . . . . . . . . . . auto -0020
cphiy . . . . . . . . . . auto -0018
sphix . . . . . . . . . . auto -0010
cphix . . . . . . . . . . auto -0008
tt. . . . . . . . . . . . param 0006

1519
1520
1521
1522
1523
1524
1525
1526 int trueck()
1527 /*
1528 *******************************************************
1529 * *
1530 * UNTERPROGRAMM TRUECK *
1531 * (Ruecktransformation) *
1532 * *


ACU 1.2 PAGE 34
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1533 * Dieses Programm bestimmt bei Vorgabe der Spindel- *
1534 * laengen sowie der geschaetzten Winkel phix ,phiy *
1535 * und phiz sowie der Verschiebungen x,y,z des Sub- *
1536 * reflektors im koerperfesten Koordinatensystem ksi, *
1537 * eta, rho die zugehoerigen Winkel phix, phiy, phiz *
1538 * und die Verschiebungen x,y,z. *
1539 * Das Programm wurde entwickelt fuer die Topologie *
1540 * des Subreflektors von JPL, der mit sechs Spindeln *
1541 * verstellt werden kann. *
1542 * *
1543 * Benoetigte Unterprogramme: *
1544 * (- TOPO) *
1545 * - BEINL *
1546 * - TDELTA *
1547 * - MATINV *
1548 * *
1549 * erstellt: 21.04.1994 *
1550 * letzte Aenderung: 26.10.1994 (D. Libuschewski) *
1551 * *
1552 * Autor: Dipl.-Ing. U. Mutzberg *
1553 * *
1554 *******************************************************
1555 c
1556 c Erlaeuterung der Parameter:
1557 c ===========================
1558 c
1559 c rio: Ortsvektor der strukturfesten Spindelanlenkpunkte
1560 c im x,y,z-System
1561 c riu: Ortsvektor der Spindelanlenkpunkte am Tragring
1562 c im x,y,z-System
1563 c driu1...driu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1564 c im x',y',z'-System (translatorisch verschobenes
1565 c Koordinatensystem im Drehpunkt)
1566 c sriu1...sriu6: Ortsvektor der Spindelanlenkpunkte am Tragring
1567 c im ksi,eta,rho-System (um den Drehpunkt gedrehtes
1568 c Koordinatensystem)
1569 c */
1570 {
1571 double l1[3],l2[3],l3[3];
1572 double l4[3],l5[3],l6[3];
1573 double l0[6],delt[6];
1574 double dl[6],ddelt[6];
1575 double td[6][6],tdi[6][6];
1576 double eps,epsl,epsw;
1577 int izaehl,i,j;
1578
1579
1580 /* Vorgabe der Fehlerschranken fuer die Iteration */
1581
1582 eps = 1.0e-5;
1583 epsl = 1.0e-2; /* Genauigkeit x,y,z: 0.01 mm */
1584 epsw = 3.5e-5; /* Winkelgenauigkeit: 0.002 Grad */
1585
1586 izaehl = 0;
1587
1588 /* Zuordnung der Beinlaengen (Endposition) */


ACU 1.2 PAGE 35
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1589
1590 for (i = 0;i < 6;i++ )
1591 {
1592 l0[i] = bl[i];
1593 }
1594
1595 /* Startwerte fuer die Iteration: */
1596
1597 if (fabs(phix) 1598 {delt[0] = epsw;}
1599 else
1600 {delt[0] = phix;}
1601 if (fabs(phiy) 1602 {delt[1] = epsw;}
1603 else
1604 {delt[1] = phiy;}
1605 if (fabs(phiz) 1606 {delt[2] = epsw;}
1607 else
1608 {delt[2] = phiz;}
1609
1610 delt[3] = dv[0];
1611 delt[4] = dv[1];
1612 delt[5] = dv[2] ;
1613
1614 /* Setzten des Iterationsschleifenzaehlers: */
1615
1616 _100: izaehl = izaehl + 1;
1617
1618 /*
1619 printf("%d . Iteration:\n",izaehl);
1620 printf("%8.3e %8.3e %8.3e %8.3e %8.3e %8.3e \n",
1621 delt[0]*180.0/pi,delt[1]*180.0/pi,delt[2]*180.0/pi,
1622 delt[3],delt[4],delt[5]);
1623 */
1624
1625 /* Bestimmung der Beinlaengen */
1626
1627 beinl(v0,rio,sriu1,sriu2,sriu3,sriu4,sriu5,sriu6,
1628 l1,l2,l3,l4,l5,l6);
1629
1630 /* Berechnung der Matrix TD */
1631
1632 tdelta(sriu1,sriu2,sriu3,sriu4,sriu5,
1633 sriu6,l1,l2,l3,l4,l5,l6,td);
1634
1635 /* Bestimmung der Laengendifferenzen zwischen den vorgegebenen
1636 c Beinlaengen und den mit den geschaetzten Startwerten be-
1637 c rechneten Beinlaengen: */
1638
1639 for (i = 0;i < 6;i++)
1640 {
1641 dl[i] = l0[i] - bl[i];
1642 }
1643
1644 /* Bestimmung der inversen Matrix tdi (vgl. Numerical


ACU 1.2 PAGE 36
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1645 c Recipes S. 38) */
1646
1647 matinv(td,tdi,6);
1648
1649 /* Bestimmung der Winkel dphix,dphiy,dphiz und der Ver-
1650 c schiebungen dx,dy,dz, die zu den Beinlaengendifferenzen
1651 c dl(i) gehoeren.
1652 c Index d: delta ddelt[0] = dphix
1653 c ddelt[1] = dphiy
1654 c ddelt[2] = dphiz
1655 c ddelt[3] = dx
1656 c ddelt[4] = dy
1657 c ddelt[5] = dz */
1658
1659 /* Multiplikation tdi*dl = ddelt */
1660
1661 for (i = 0;i < 6;i++)
1662 {
1663 ddelt[i] = 0.0;
1664 for (j = 0;j < 6;j++)
1665 {
1666 ddelt[i] = ddelt[i] + tdi[i][j]*dl[j];
1667 }
1668 }
1669
1670 /* Bestimmung der neuen Winkel und Verschiebungen */
1671
1672 for (i = 0;i < 6;i++)
1673 {
1674 delt[i] = delt[i] + ddelt[i];
1675 }
1676
1677 phix = delt[0];
1678 phiy = delt[1];
1679 phiz = delt[2];
1680 dv[0] = delt[3];
1681 dv[1] = delt[4];
1682 dv[2] = delt[5];
1683
1684 /* Minimale Iterationsanzahl */
1685
1686 if (izaehl < 2) goto _100;
1687
1688 /* Abfrage ob weitere Iteration notwendig ist: */
1689
1690 if (izaehl == 20) return(izaehl); /* Ausstieg, falls keine
1691 Konvergenz erreicht
1692 wird */
1693
1694 for (i = 0;i < 3;i++)
1695 {
1696 if ( fabs(ddelt[i]) >= epsw)
1697 {
1698 goto _100;
1699 }
1700 }


ACU 1.2 PAGE 37
cp581 01-26-95
22:53:26

Line# Source Line Microsoft C Compiler Version 6.00A

1701 for (i = 3;i < 6;i++)
1702 {
1703 if ( fabs(ddelt[i]) >= epsl)
1704 {
1705 goto _100;
1706 }
1707 }
1708 return(izaehl);
1709 }


trueck Local Symbols

Name Class Type Size Offset Register

l3. . . . . . . . . . . . auto -03ae
epsw. . . . . . . . . . . auto -0396
l2. . . . . . . . . . . . auto -038e
l1. . . . . . . . . . . . auto -0376
ddelt . . . . . . . . . . auto -035e
izaehl. . . . . . . . . . auto -032e
l0. . . . . . . . . . . . auto -032c
j . . . . . . . . . . . . auto -02fc
delt. . . . . . . . . . . auto -02fa
i . . . . . . . . . . . . auto -02ca
td. . . . . . . . . . . . auto -02c8
eps . . . . . . . . . . . auto -01a8
epsl. . . . . . . . . . . auto -01a0
l6. . . . . . . . . . . . auto -0198
l5. . . . . . . . . . . . auto -0180
tdi . . . . . . . . . . . auto -0168
l4. . . . . . . . . . . . auto -0048
dl. . . . . . . . . . . . auto -0030

1710
Global Symbols

Name Class Type Size Offset

a . . . . . . . . . . . . common long 4 ***
achsge. . . . . . . . . . global far function *** 0600
axis_x. . . . . . . . . . common int 2 ***
axis_y. . . . . . . . . . common int 2 ***
axis_z. . . . . . . . . . common int 2 ***
bein. . . . . . . . . . . common struct/array 48 ***
beinl . . . . . . . . . . global far function *** 06ea
bl. . . . . . . . . . . . common struct/array 48 ***
data_ready. . . . . . . . common int 2 ***
data_readys . . . . . . . common int 2 ***
datei1. . . . . . . . . . common far pointer 4 ***
datei2. . . . . . . . . . common far pointer 4 ***
dreh2 . . . . . . . . . . extern far function *** ***
dreh4 . . . . . . . . . . extern far function *** ***
dv. . . . . . . . . . . . common struct/array 24 ***
fclose. . . . . . . . . . extern far function *** ***
fgets . . . . . . . . . . extern far function *** ***


ACU 1.2 PAGE 38
cp581 01-26-95
22:53:26

Microsoft C Compiler Version 6.00A


Global Symbols

Name Class Type Size Offset

fopen . . . . . . . . . . extern far function *** ***
fread . . . . . . . . . . extern far function *** ***
fscanf. . . . . . . . . . extern far function *** ***
fseek . . . . . . . . . . extern far function *** ***
fwrite. . . . . . . . . . extern far function *** ***
hin . . . . . . . . . . . common int 2 ***
jackx . . . . . . . . . . common long 4 ***
jackxs. . . . . . . . . . common long 4 ***
jacky1. . . . . . . . . . common long 4 ***
jacky1s . . . . . . . . . common long 4 ***
jacky2. . . . . . . . . . common long 4 ***
jacky2s . . . . . . . . . common long 4 ***
jackz1. . . . . . . . . . common long 4 ***
jackz1s . . . . . . . . . common long 4 ***
jackz2. . . . . . . . . . common long 4 ***
jackz2s . . . . . . . . . common long 4 ***
jackz3. . . . . . . . . . common long 4 ***
jackz3s . . . . . . . . . common long 4 ***
lesen . . . . . . . . . . global far function *** 0bee
lubksb. . . . . . . . . . global far function *** 0f3e
ludcmp. . . . . . . . . . global far function *** 10b6
main. . . . . . . . . . . global far function *** 0000
matinv. . . . . . . . . . global far function *** 14ac
phix. . . . . . . . . . . common double 8 ***
phiy. . . . . . . . . . . common double 8 ***
phiz. . . . . . . . . . . common double 8 ***
printf. . . . . . . . . . extern far function *** ***
rewind. . . . . . . . . . extern far function *** ***
rio . . . . . . . . . . . common struct/array 144 ***
rx. . . . . . . . . . . . common long 4 ***
ry. . . . . . . . . . . . common long 4 ***
rz. . . . . . . . . . . . common long 4 ***
schreiben . . . . . . . . global far function *** 15c2
sriu1 . . . . . . . . . . common struct/array 24 ***
sriu2 . . . . . . . . . . common struct/array 24 ***
sriu3 . . . . . . . . . . common struct/array 24 ***
sriu4 . . . . . . . . . . common struct/array 24 ***
sriu5 . . . . . . . . . . common struct/array 24 ***
sriu6 . . . . . . . . . . common struct/array 24 ***
tdelta. . . . . . . . . . global far function *** 1a4a
thilf . . . . . . . . . . global far function *** 1f04
thin. . . . . . . . . . . global far function *** 2208
time_s1 . . . . . . . . . common long 4 ***
time_s2 . . . . . . . . . common int 2 ***
topo. . . . . . . . . . . global far function *** 2262
trtmat. . . . . . . . . . global far function *** 295c
trueck. . . . . . . . . . global far function *** 2aa6
tx. . . . . . . . . . . . common long 4 ***
ty. . . . . . . . . . . . common long 4 ***
tz. . . . . . . . . . . . common long 4 ***
v0. . . . . . . . . . . . common struct/array 24 ***


ACU 1.2 PAGE 39
cp581 01-26-95
22:53:26

Microsoft C Compiler Version 6.00A


Global Symbols

Name Class Type Size Offset

watchdog. . . . . . . . . common int 2 ***

Code size = 2e78 (11896)
Data size = 0125 (293)
Bss size = 0000 (0)

No errors detected