The Genesis Software

Genesis scripting

How to run a script written in Perl for Genesis?

The Genesis allow three kind of scripts used for automatics of CAM work. Either one can use scripting in the c-shell code, or the TCS scripting code or best the Perl-code. As the Genesis was developed for the Unix-workstations, so the using of the CSH should not surprise. The requirement for my develop work was to use the CSH as the main procedure.

The AOI profile simplifier

A lot of time is wasting by the CAM-staff when preparing the AOI data with a Camtek module. The automatics in the Camtek is working very slow because of the included arcs in the profile. By eliminating of those arcs the automatics can work as expected. My solution simplifies the profile by removing of those arcs and connects the edges (closed profile), which significantly speeds up the AOI preparation process. The preparation time is measured now with just a few seconds instead of 20-30 minutes.

How does the profile simplifier work?

The c-shell script my_aoi_out.csh is called from the Genesis, which includes some calls to the Perl-script.

perl.exe $PKAOI -prepareProfile $JOBNAME
The functions inside of the Perl-script do the right job. When returning back to the csh-script, the csh continues with the AOI preparation. Finally the original profile is restored by the Perl-script:
perl.exe $PKAOI -readOrgProfile $JOBNAME

The inspecta measurements


When building a multilayer PCB all layers must be registered to each other with the highest resolution as possible. Thus the CAM puts fiducial coupons in every corner of the production panel. After press those fiducials are measured on the Røntgen-machine one by one and corner by corner on every production panel and results are saved in a binary MDB-file. Having these informations the CAM-staff can calculate avarage scale factors for the followed production processes (drill, exposing of outer layers, solder mask, silk screen, rout).

My solution grabs these informations from the røntgen inspecting machine and relative to the origin coordinates of the fiducials it calculates the real offsets.

How does it work?

A MDB-file is first decoded to csv tables - the Quadrotti.csv includes coordinates of superimposed pads, while the Layers.csv includes the coordinates of the single pads.

A bit of challenge was to read coordinates of every xray-fiducial mark for the later use when calculating the avarrage value. The function getJobPPMs{} gets an average of the sum particular for every layer in every column and sums the PPMx and PPMy respectivelly. Many check was necessary to avoid calculating mistakes, as the inspecta sometimes skips the fiducial mark as unrecognizable or unmeasureable.

The whole Perl code for the inspecta project is accessible here:

The XAL->Genesis Oracle-adapter

This project fetches same data from the Oracle database, which is particularly used by the ERP XAL software of the company. The fetched data are filled out within the Priform when CAM-staff is preparing a new order for the production. The idea behind this code was to drop the rewriting of informations, which has been typed already. Depending on the amount of documentation the time-saving was between 10-20 minutes for each order.

The code has been written with the Perl and as usual it is called from within the C-shell script (remeber: requirement!) and is accesible here: priform.csh.

First we check if the job is in the database already:

set RESULT = `perl.exe $PKXALPATH -checkVareNummer $JOBNAME`

If it is not present in the DB then we prepare all informations to be used when creating a new CAM-order.
set XAL_RESULT = `perl.exe $PKXALPATH -prepare_GUIResp $JOBNAME`

Finally the csh-script continues to fill out the text boxes with DB-informations.

The functions checkVareNummer{} and prepare_GUIResp{} as a call-parameter are parts of the The is in fact a wrapper function, which forwards the call to the real function respectively, and includes also other implemented functions used by the csh-script. The function for the Oracle-adapter are implemented in this file: