# Programmazione SJ50


<abstract>
Appunti sulla programmazione di nuova scheda sul controllo ottico Agilent SJ50 ACME e relativo PC
</abstract>

Il file da preparare per il controllo ottico di una nuova scheda PCB 
su Agilent SJ50 deve avere un suffisso .plx e deve essere messo nella 
directory "C:\cpi\cad" della SJ50.<br>Sul PC Windows collegato in rete alla SJ50, 
il disco della SJ50 viene visto come "\\\\BERL4T06" e la directory dove copiare 
il file di programmazione è semplicemente "cad"<br>
Questo file deve contenere le posizioni dei componenti e le indicazioni di larghezza 
carrello, fiducial, posizione delle figure sul quadrotto etc.<br>
Di seguito un esempio (AcquaTop.pls) e una preliminare descrizione dei vari campi necessari da inserire nel file:

<pre class="terminal">
P 1                        // deve essere presente all'inizio del file (da indagare sul significato)
w 116500                   // larghezza del carrello di trasporto in micron (116500 = 116.5mm)
f  -49373   3610           // primo fiducial di pannello/figura? secondo il sistema di coordinate della SJ (da descrivere)
f   -3347  49641           // secondo fiducial di pannello/figura?
f   -3347   49641          // secondo fiducial ripetuto (capire perchè serve e se serve)
f  -49373    3610          // primo fiducial di pannello ripetuto (capire perchè serve e se serve)
o       0   55000          // offset figura su quadrotto
o       0  110000          // offset figura su quadrotto
o       0  165000          // offset figura su quadrotto
o       0  220000          // offset figura su quadrotto
o   55000       0          // offset figura su quadrotto
o   55000   55000          // offset figura su quadrotto
o   55000  110000          // offset figura su quadrotto
o   55000  165000          // offset figura su quadrotto
o   55000  220000          // offset figura su quadrotto
B  -49373    3610 bd1      // fiducial di figura 1 per controllo (se scuro salta la scheda)
B  -49373   58610 bd2      // fiducial di figura 2 per controllo (se scuro salta la scheda)
B  -49373  113610 bd3      // fiducial di figura 3 per controllo (se scuro salta la scheda)
B  -49373  168610 bd4      // fiducial di figura 4 per controllo (se scuro salta la scheda)
B  -49373  223610 bd5      // fiducial di figura 5 per controllo (se scuro salta la scheda)
B    5627    3610 bd6      // fiducial di figura 6 per controllo (se scuro salta la scheda)
B    5627   58610 bd7      // fiducial di figura 7 per controllo (se scuro salta la scheda)
B    5627  113610 bd8      // fiducial di figura 8 per controllo (se scuro salta la scheda)
B    5627  168610 bd9      // fiducial di figura 9 per controllo (se scuro salta la scheda)
B    5627  223610 bd10     // fiducial di figura 10 per controllo (se scuro salta la scheda)
d  -49373    3610 fid3     n0000        180 FID            mc-1    fid3 FID          // primo fiducial di scheda
d  -40911    4255 c28      b_c0402_brown   0 CC_100NF_0402_10V   mc-1     c28 C0402  // componente (vedi descrizione componente)
d  -43304    4535 c79      b_c0603        0 CC_4UF7_0603   mc-1     c79 C0603        // componente
d  -11540    4760 r51      b_r0402_3    270 RR_4K7_0402_5   mc-1     r51 R0402       // componente
d  -10555    5793 r63      b_r0402_3    270 RR_1K_0402_5   mc-1     r63 R0402        // componente
....
d   -3347   49641 fid4     n0000        180 FID            mc-1    fid4 FID          // componente
d  -36180   22030 u13-sh   b_cm1624       0 RP_CM1624_UDFN16SH   mc-1  u13-sh RPUDFN16SH  // secondo fiducial di scheda

</pre>

Il sistema di coordinate della SJ50 ha l'origine all'angolo inferiore sinistro della prima figura in alto a sinistra
come indicato in figura:<br>

<img src="./AcquaTop.JPG" class="img-responsive" width="60%">
<br>
Le direzioni dei due assi della SJ50 sono diverse dalle direzioni degli assi 
nelle coordinate in uscita dal CAD Altium per i componenti.<br>
Il CAD Altium ha l'origine della figura nello stesso punto in basso a sinistra nella figura 
ma ha l'asse X che va verso destra e l'asse Y che va verso l'alto.<br>
Quindi per trasformare le coordinate Altium in coordinate SJ occorre effettuare
la seguente trasformazione:<br>
X SJ50 = -Y Altium;<br>
Y SJ50 =  X Altium.<br>
Nel caso di un circuito BOTTOM le coordinate Altium hanno l'origine nell'angolo in basso a destra. 
La coordinata X va verso sinistra e la coordinata Y va verso l'alto.<br>
Questo perchè le coordinate sono viste sempre dal lato TOP, quindi rovesciando la scheda intorno 
all'asse Y (flipboard di Altium) l'origine 
cambia posizione da sinistra passando a destra e cambia il verso della sola X.<br>
La trasformazione di coordinate per passare da CAD Altium a SJ50 per il <b>BOTTOM</b> é la seguente:<br>
X SJ50 = -Y Altium (da esprimere in micron quindi 10.1 Altium => -10100 SJ50) ;<br>
Y SJ50 =  Larghezza figura - X Altium (da esprimere in micron).<br>
rotazione componente SJ50 = - rotazione componente Altium.<br>
<br>

Ogni riga che inizia per "d" rappresenta un componente (device) da controllare.<br>
I campi di questa riga sono descritti di seguito:<br>
<pre>
d  -11540  4760  r51  b_r0402_3  270  RR_4K7_0402_5  mc-1  r51  R0402

d              // identifica la riga come device da controllare
-11540         // X SJ50 del componente (= -Y coordinata Altium se Top o se Bottom) 
4760           // Y SJ50 del componente (= X coordinata Altium se Top; = larghezza figura -X Altium se Bottom) ) 
r51            // identificativo componente sulla BOM della scheda
b_r0402_3      // modello ottico da usare per il controllo (inserire n0000 che è il default della SJ50. La associazione con 
               // il modello ottico verrà fatta nella interfaccia utente della SJ50)
270            // rotazione in gradi del componente
RR_4K7_0402_5  // part number del componente
mc-1           // dovrebbe essere identificativo del rail numero 1 sulla SJ50 (infatti la SJ50 può avere doppio rail)
r51            // identificativo componente sulla BOM della scheda
R0402          // footprint
</pre>
Attenzione a non lasciare spazi nei descrittori dei vari campi:<br> 
<b>RR_4k7_0402</b> va bene; <b>RR_4k7 0402</b> NON va bene e la SJ50 non 
capisce la riga e scombina il funzionamento rifiutandosi di inserire il componente.<br>
<br>

<h2>Procedura di caricamento di una nuova scheda</h2>
Mettere il file .plx appena preparato nella directory "cad" della SJ50 lavorando 
sul pc controlloOttico dove questa directory è vista in rete.<br>
Sulla SJ50, entrare come "Train" (non come operatore).<br>
Sul pannello di sinistra cercare il nuovo file e cliccarlo due volte.<br>
SJ50 crea tutti i relativi nuovi file di lavorazione e a un certo punto chiede di associare 
un database di modelli. Per ora indicare "point to existing database" e indicare "AcquaTop"
come database.<br>
Save + Exit.<br><br>
Ora il progetto è caricato e occorre associare ai componenti i relativi modelli ottici di visione.<br><br>
Nel pannello di sinistra in alto cliccare su View e selezionare Board Tree.<br>
Localizzare la sezione "untrained components" e cliccare con il tasto destro su 
Untrained -> Train Shape -> Choose shape -> Assign Device per tutti gli shape che la SJ50 
ha trovato nel file .plx.<br>
Ad ogni nuova associazione o modifica del file .pls occorre SEMPRE cliccare il tasto "Remake" 
per permettere alla SJ50 di assorbire le modifiche.<br> 
Se i modelli sono tutti presenti basta associarli alle forme relative (R0402 o C0805 ..).<br> 
In caso di componenti nuovi è possibile associare un modello ottico dalle librerie SJ50 o 
crearne uno completamente nuovo o crearlo copiando da un modello il più simile possibile
per poi modificarlo.<br>

<h2>Note sul file .plx da preparare e da caricare sulla SJ50</h2>
Ad ogni riga il file deve avere come caratteri di fine riga "CR" e "LF".<br>
In colonna 1 il carattere "!" fa interpretare la riga come commento.<br>
Per ora i componenti da non montare (indicati comunque dal file in uscita da 
Altium) basta toglierli dal file .plx. 
In seguito si potrebbe realizzare un modello "negativo" per ogni shape in modo che 
la SJ50 segnali la presenza indebita di componenti su spazi che dovrebbero essere lasciati liberi.
Per brevità adesso vengono semplicemente ignorati.<br>
Se il file .plx viene generato a partire da Excel o LibreOffice si può salvare direttamente in 
formato csv utilizzando uno spazio come carattere separatore tra i campi e il " 
come separatore dei testi con spazi integrati.<br>
Per passare da .csv a file di testo si può utilizzare Notepad++ che permette facilmente di 
aggiungere il CR+LF al posto del solo LF come carattere di fine riga se fosse necessario.<br>
In caso di necessarie modifiche successive, dopo aver generato i file di programmazione sulla SJ50, 
non bisogna più toccare il file .plx ma bisogna cambiare il file .pls relativo.<br>
La SJ50 si occuperà di aggiornare il file .plx di conseguenza.<br>
<br>
Di seguito un file plx completo relativo al quadrotto Aria:<br>
<pre>
P 1        
w  86500        
f  -3958    5435       
f -35440   34780       
o      0   40000       
o      0   80000       
o      0  120000       
o      0  160000       
o  40000      0       
o  40000  40000       
o  40000  80000       
o  40000 120000       
o  40000 160000       
B  -3958   5435 bd1      
B  -3958  45435 bd2      
B  -3958  85435 bd3      
B  -3958 125435 bd4      
B  -3958 165435 bd5      
B  36042   5435 bd6      
B  36042  45435 bd7      
B  36042  85435 bd8      
B  36042 125435 bd9      
B  36042 165435 bd10      
d -36971  14894 R41 n0000 315 27R              mc-1 R41 RR_0402_(1005_metric)_SMALL
d -36991  13627 R40 n0000 315 27R              mc-1 R40 RR_0402_(1005_metric)_SMALL
d -36701  12224 R39 n0000 315 27R              mc-1 R39 RR_0402_(1005_metric)
d -36731  10932 R38 n0000 315 27R              mc-1 R38 RR_0402_(1005_metric)_SMALL
d -36891   9418 R37 n0000 315 27R              mc-1 R37 RR_0402_(1005_metric)_SMALL
d -36861   8014 R36 n0000 315 27R              mc-1 R36 RR_0402_(1005_metric)_SMALL
d -35473  14993 R35 n0000 315 10k              mc-1 R35 RR_0402_(1005_metric)_SMALL
d -35256  13912 R33 n0000 315 10k              mc-1 R33 RR_0402_(1005_metric)_SMALL
d -35217  12284 R32 n0000 315 10k              mc-1 R32 RR_0402_(1005_metric)_SMALL
d -35177  10635 R31 n0000 315 10k              mc-1 R31 RR_0402_(1005_metric)_SMALL
d -35033   9226 R29 n0000 315 10k              mc-1 R29 RR_0402_(1005_metric)_SMALL
d -25484  34465 L8  n0000 225 120@100Mhz       mc-1 L8  LL_0603_(1608_metric)
d -15057  36367 L6  n0000 90  220@100Mhz       mc-1 L6  LL_0603_(1608_metric)
d -16779  35492 C51 n0000 45  100nF            mc-1 C51 CC_0402_(1005_metric)_SMALL
d -25964   3295 C46 n0000 90  4uF7             mc-1 C46 CC_0603_(1608_metric)
d -30066   3978 C49 n0000 180 100nF            mc-1 C49 CC_0402_(1005_metric)_SMALL
d -27089  29687 C50 n0000 135 100nF            mc-1 C50 CC_0402_(1005_metric)_SMALL
d -34530  27680 Y3  n0000 45  "25 MHz"         mc-1 Y3  XT_DFN-LCC_3.2x2.5
d -33038   6883 Y2  n0000 45  "12 MHz"         mc-1 Y2  XT_DFN-LCC_3.2x2.5
d -29333  36980 R27 n0000 90  49R9             mc-1 R27 RR_0402_(1005_metric)_SMALL
d -31634  35907 R26 n0000 270 49R9             mc-1 R26 RR_0402_(1005_metric)_SMALL
d -32130  37090 R25 n0000 90  49R9             mc-1 R25 RR_0402_(1005_metric)_SMALL
d -31863  10632 C44 n0000 315 10nF             mc-1 C44 CC_0402_(1005_metric)_SMALL
d -18704   3539 C43 n0000 180 100nF            mc-1 C43 CC_0402_(1005_metric)_SMALL
d -17355   6211 C39 n0000 180 4uF7             mc-1 C39 CC_0603_(1608_metric)
d -21400  35105 D2  n0000 45  "100mA 30V"      mc-1 D2  DD_0603
d -27855  36562 C6  n0000 315 100nF            mc-1 C6  CC_0402_(1005_metric)_SMALL
d -35612  32088 C33 n0000 90  10uF             mc-1 C33 CC_0805_(2012_metric)
d -14366   3329 L7  n0000 270 "10uH 0805"      mc-1 L7  LL_0805_(2012_metric)
d -21489  26785 C41 n0000 315 100nF            mc-1 C41 CC_0402_(1005_metric)_SMALL
d  -7350   3330 C40 n0000 90  4uF7             mc-1 C40 CC_0603_(1608_metric)
d -24689   4883 R21 n0000 360 "6K8 1%"         mc-1 R21 RR_0402_(1005_metric)_SMALL
d -33380  11460 R20 n0000 135 10K              mc-1 R20 RR_0402_(1005_metric)_SMALL
d -34020  12035 R19 n0000 135 100K             mc-1 R19 RR_0402_(1005_metric)_SMALL
d -20463   7725 R13 n0000 360 27R              mc-1 R13 RR_0402_(1005_metric)_SMALL
d -19480   7725 R12 n0000 360 27R              mc-1 R12 RR_0402_(1005_metric)_SMALL
d -29460   9295 R6  n0000 315 0R               mc-1 R6  RR_0402_(1005_metric)_SMALL
d -10085   5210 L4  n0000 360 "10uH 0805"      mc-1 L4  LL_0805_(2012_metric)
d -19325  34995 L3  n0000 45  220@100Mhz       mc-1 L3  LL_0603_(1608_metric)
d -25813   5150 C32 n0000 360 10pF             mc-1 C32 CC_0402_(1005_metric)_SMALL
d -13890  22805 C31 n0000 315 100nF            mc-1 C31 CC_0402_(1005_metric)_SMALL
d  -6090  32090 C30 n0000 135 100nF            mc-1 C30 CC_0402_(1005_metric)_SMALL
d  -7845  34070 C29 n0000 135 100nF            mc-1 C29 CC_0402_(1005_metric)_SMALL
d -17805  27015 C28 n0000 315 100nF            mc-1 C28 CC_0402_(1005_metric)_SMALL
d -14695  23855 C27 n0000 315 100nF            mc-1 C27 CC_0402_(1005_metric)_SMALL
d -11195  20315 C26 n0000 315 100nF            mc-1 C26 CC_0402_(1005_metric)_SMALL
d -16120  34230 C25 n0000 135 100nF            mc-1 C25 CC_0402_(1005_metric)_SMALL
d  -9900  35765 C24 n0000 135 100nF            mc-1 C24 CC_0402_(1005_metric)_SMALL
d -18135  32250 C23 n0000 135 100nF            mc-1 C23 CC_0402_(1005_metric)_SMALL
d -16165  10955 C22 n0000 45  100nF            mc-1 C22 CC_0402_(1005_metric)_SMALL
d -17625  13205 C21 n0000 315 100nF            mc-1 C21 CC_0402_(1005_metric)_SMALL
d -37145  17617 C20 n0000 180 100nF            mc-1 C20 CC_0402_(1005_metric)_SMALL
d -17865  22820 C19 n0000 45  100nF            mc-1 C19 CC_0402_(1005_metric)_SMALL
d -15107  15742 C18 n0000 135 100nF            mc-1 C18 CC_0402_(1005_metric)_SMALL
d -32567  24789 C17 n0000 270 100nF            mc-1 C17 CC_0402_(1005_metric)_SMALL
d -19273  25458 C16 n0000 135 100nF            mc-1 C16 CC_0402_(1005_metric)_SMALL
d -17273  25102 C7  n0000 225 4uF7             mc-1 C7  CC_0603_(1608_metric)
d -11599   4720 C5  n0000 180 100nF            mc-1 C5  CC_0402_(1005_metric)_SMALL
d -28775   8545 R8  n0000 315 "39 1%"          mc-1 R8  RR_0402_(1005_metric)_SMALL
d -27290   7035 R9  n0000 315 "39 1%"          mc-1 R9  RR_0402_(1005_metric)_SMALL
d -23569   7521 R10 n0000 45  "39 1%"          mc-1 R10 RR_0402_(1005_metric)_SMALL
d -22239   8821 R11 n0000 45  "39 1%"          mc-1 R11 RR_0402_(1005_metric)_SMALL
d  -9140  15045 U4  n0000 90  "NCP1529 SMALL"  mc-1 U4  IC_UDFN6
d  -6695  14190 R1  n0000 270 "200k 1%"        mc-1 R1  RR_0402_(1005_metric)_SMALL
d  -8700  13080 R2  n0000 270 "100k 1%"        mc-1 R2  RR_0402_(1005_metric)_SMALL
d -11540  16378 L1  n0000 180 2uH2             mc-1 L1  LL_0805_(2012_metric)
d  -8770  17585 C8  n0000 90  10uF             mc-1 C8  CC_0805_(2012_metric)
d  -6030  16675 C10 n0000 180 10uF             mc-1 C10 CC_0805_(2012_metric)
d  -6730  13190 C9  n0000 270 15pF             mc-1 C9  CC_0402_(1005_metric)_SMALL
d  -5908   6060 C12 n0000 90  15pF             mc-1 C12 CC_0402_(1005_metric)_SMALL
d -29120  32815 U2  n0000 315 LAN8720A         mc-1 U2  QFN24_-_4x4
d  -5220   9585 C13 n0000 180 10uF             mc-1 C13 CC_0805_(2012_metric)
d  -7805  10270 C11 n0000 90  10uF             mc-1 C11 CC_0805_(2012_metric)
d -10460   9195 L2  n0000 180 2uH2             mc-1 L2  LL_0805_(2012_metric)
d  -5118   3795 R5  n0000 360 "200k 1%"        mc-1 R5  RR_0402_(1005_metric)_SMALL
d  -5898   4995 R3  n0000 90  "147k 1%"        mc-1 R3  RR_0402_(1005_metric)_SMALL
d  -8155   6060 C14 n0000 90  100nF            mc-1 C14 CC_0402_(1005_metric)_SMALL
d  -7690   7985 U5  n0000 90  "NCP1529 SMALL"  mc-1 U5  IC_UDFN6
d -10980  28665 U6  n0000 315 "IC DDR2 64Mx16" mc-1 U6  BGA84_DDR2_128M
d -21937  31553 C34 n0000 45  15pF             mc-1 C34 CC_0402_(1005_metric)_SMALL
d -20667  30255 C35 n0000 225 10pF             mc-1 C35 CC_0402_(1005_metric)_SMALL
d -30800  27046 C37 n0000 315 1uF              mc-1 C37 CC_0603_(1608_metric)
d -28587  28170 C38 n0000 315 470pF            mc-1 C38 CC_0402_(1005_metric)_SMALL
d -36415  22090 L5  n0000 180 220@100Mhz       mc-1 L5  LL_0603_(1608_metric)
d -22920  29240 Y1  n0000 45  32kHz768         mc-1 Y1  Quartz_ABS07
d -25581  30780 R14 n0000 225 1k5              mc-1 R14 RR_0402_(1005_metric)_SMALL
d -36419  30717 R17 n0000 90  10k              mc-1 R17 RR_0402_(1005_metric)_SMALL
d -33219  33904 R18 n0000 270 "12k1 1%"        mc-1 R18 RR_0402_(1005_metric)_SMALL
d -22375  34125 D1  n0000 45  "100mA 30V"      mc-1 D1  DD_0603
d -30460   8370 C1  n0000 45  27pF             mc-1 C1  CC_0402_(1005_metric)_SMALL
d -31195   9940 C2  n0000 315 27pF             mc-1 C2  CC_0402_(1005_metric)_SMALL
d -31920  28519 C3  n0000 45  33pF             mc-1 C3  CC_0402_(1005_metric)_SMALL
d -33170  30120 C4  n0000 225 33pF             mc-1 C4  CC_0402_(1005_metric)_SMALL
d -25660  18013 U1  n0000 225 AT91SAM9G25      mc-1 U1  BGA217_9G25
d -27990   7715 R22 n0000 315 0R               mc-1 R22 RR_0402_(1005_metric)_SMALL
d -22924   8161 R23 n0000 45  0R               mc-1 R23 RR_0402_(1005_metric)_SMALL
d -21584   9486 R24 n0000 45  0R               mc-1 R24 RR_0402_(1005_metric)_SMALL
d -20557  26272 R15 n0000 315 100K             mc-1 R15 RR_0402_(1005_metric)_SMALL
d -35217   4893 C36 n0000 225 10uF             mc-1 C36 CC_0805_(2012_metric)
d  -5486  34949 C42 n0000 360 10uF             mc-1 C42 CC_0805_(2012_metric)
d -26925   5124 C45 n0000 360 100nF            mc-1 C45 CC_0402_(1005_metric)_SMALL
d -24916   6386 C47 n0000 90  100nF            mc-1 C47 CC_0402_(1005_metric)_SMALL
d -18003   9174 C48 n0000 360 4uF7             mc-1 C48 CC_0603_(1608_metric)
d -34142  36181 R16 n0000 270 49R9             mc-1 R16 RR_0402_(1005_metric)_SMALL
d  -9945   3015 R28 n0000 90  1R               mc-1 R28 RR_0402_(1005_metric)_SMALL
d -16952   3939 R30 n0000 225 1R               mc-1 R30 RR_0402_(1005_metric)_SMALL
d  -8160   5150 R4  n0000 270 10k              mc-1 R4  RR_0402_(1005_metric)_SMALL
d -18306  24455 R34 n0000 45  1R               mc-1 R34 RR_0402_(1005_metric)_SMALL
d -24923  32038 LC2 n0000 45  "LC 470 0603"    mc-1 LC2 LC_0603_(1608_METRIC)
d -13855  19779 D3  n0000 45  GREEN            mc-1 D3  DL_0603_(1608_metric)_GREEN
d -15835  21470 R42 n0000 90  1k               mc-1 R42 RR_0402_(1005_metric)_SMALL
d -20579   5024 R43 n0000 180 100k             mc-1 R43 RR_0402_(1005_metric)_SMALL
d -22530   4956 R44 n0000 180 100k             mc-1 R44 RR_0402_(1005_metric)_SMALL
d -21542   5189 R45 n0000 180 100k             mc-1 R45 RR_0402_(1005_metric)_SMALL
d  -7022  12027 R46 n0000 90  1k               mc-1 R46 RR_0402_(1005_metric)_SMALL
d -12516   9088 D4  n0000 180 "100mA 30V"      mc-1 D4  DD_0603
d -35719  24925 C53 n0000 45  10uF             mc-1 C53 CC_0805_(2012_metric)
d -25162  36337 R47 n0000 180 "RR 1k 0402"     mc-1 R47 RR_0402_(1005_metric)_SMALL
d -30429  28908 R48 n0000 90  "RR 1k 0402"     mc-1 R48 RR_0402_(1005_metric)_SMALL
d -33119  32978 C15 n0000 270 100nF            mc-1 C15 CC_0402_(1005_metric)_SMALL
d -33408  10211 C54 n0000 135 100nF            mc-1 C54 CC_0402_(1005_metric)_SMALL
d -12570  21461 C55 n0000 315 100nF            mc-1 C55 CC_0402_(1005_metric)_SMALL
d -11947  20823 R49 n0000 315 "1k5 1%"         mc-1 R49 RR_0402_(1005_metric)_SMALL
d -13261  22162 R50 n0000 315 "1k5 1%"         mc-1 R50 RR_0402_(1005_metric)_SMALL
</pre>




