genesis2000脚本GUI界面编写
- 格式:doc
- 大小:36.00 KB
- 文档页数:5
Genesis2000脚本命令大全1.switch的用法,注意每一个case必须要以breaksw结尾否则会继续执行下一个case的命令(1)另外,$<的意思是取得使用者的stand input(2)echo若加上-n的选项,则游标会停留在该行最后echo-n"Input one color:"set STOPLIGHT=$<switch($STOPLIGHT)case red:echo"red"breakswcase orange:echo"orange"breakswcase green:echo"green"breakswdefault:echo"you input$STOPLIGHT"endsw--------------------------------------------------------------------2.利用set来取得变数,set ABC="I am ABC"也可以利用`command`来取得命令且外,case也可以用万用字元*来代替set VER=`uname-r`switch($VER)case5.5:echo"run the setup of$VER"breakswcase5.3:echo"run the setup of$VER"breakswcase5.*:echo"like5.x"breakswcase4.*:echo"like4.x"breakswdefault:echo"no idea"endsw--------------------------------------------------------------------3.if的语法,比较数字set n1=1set n2=2if($n1==$n2)thenecho"$n1Equal$n2"elseecho"$n1Not Equal$n2"endif--------------------------------------------------------------------4.if的语法,比较字串set n1=abcdefset n2=abcdeif($n1==$n2)thenecho"$n1Equal$n2"elseecho"$n1Not Equal$n2"--------------------------------------------------------------------5.if的语法,比较相似的字串set n1=abcdefset n2=abcdeif($n1=~$n2)thenecho"$n1Like$n2"elseecho"$n1Not Like$n2"endif--------------------------------------------------------------------6.if的语法,比较数字的大小set n1=1set n2=2if($n1>$n2)thenecho"$n1>$n2"echo"$n1<$n2"endif--------------------------------------------------------------------7.每分钟执行一次的程式#mm等于当天时间的【分钟】数set mm=`date|cut-d''-f4|cut-d:-f2`if(-r$0.out)thenrm$0.outtouch$0.outelsetouch$0.outendifwhile($mm<=16)set mm=`date|cut-d''-f4|cut-d:-f2`echo"$mm now is`date`"sleep60#echo"$mm now is`date`">>$0.outendecho"Over">>$0.out--------------------------------------------------------------------8.一个回圈的范例,并且利用expr去作加的动作回圈的语法如下:foreach number(123)echo$numberendset counter=0while($counter<=10)echo"sleeping for5seconds"sleep5counter=`expr$counter+1`end--------------------------------------------------------------------9.设定一个用当天月份与日期作为档案名称的程式如今天是10/02,则$prefix会等于该程式+1002date.csh1002set prefix=`basename$0``date'+%m%d'`echo$0echo$prefix--------------------------------------------------------------------10.移除在foreach回圈内指定的档案内的font字串foreach file([b,e,g,h,s]*.html)echo-n"Processing$file,remove the line number`grep-n font $file`"#$log表示这个$file有几个font字串set log=`grep-c font$file`if($log=='0')thenecho",pass$file"else#先找出该档案的第一次出现font的行数,如果3,则$cmd=3dset cmd=`grep-n font$file|cut-d:-f1|head-1`d#利用sed去执行删除的动作,并把结果输出到${file}1sed$cmd$file>${file}1#如果${file}1没有资料,则passingif(-z${file}1)thenecho",${file}1is zero"elsecp${file}1$filerm{$file}1echo",$file remove ok"endifendifend#后来看过sed的更进一步用法,发现先前写的太笨了,试试这个#sed/font/d$file>${file}1#一次OK,我真是大笨蛋--------------------------------------------------------------------11.功能:将指定的档案中,出现第一次【回】的那一行,加上<ti tle>xxxx</title>foreach file(sky*.html)set filetitle=ftitle#主要部份为sed部份s/^*//表示将该行第一个字元前的空白删除echo"<title>`grep回$file|head-1|sed-e's/^*//'`</tit le>">$ftitle#将刚刚那一行,再插回去head-1$file>${file}headsed1d$file>${file}1cat$ftitle>>${file}headcat${file}1>>${file}headcp${file}head$filerm${file}1rm$ftitlerm${file}headecho"$file ok"end--------------------------------------------------------------------12.一个实际建立一个ftp server的程式里面包括许多应用,相当有参考价值(未完成)set path=(/usr/bin/usr/sbin)#set true=`grep-c ftp/etc/passwd`if($true==0)thenecho"no ftp user in your system"echo-n"do you want to create the ftp user?"set answer=$<if($answer=='y'||$answer=='Y')thenset maxid=`sort/etc/passwd|tail-1|cut-d:-f3`echo$maxidset newid=`expr$maxid+1`echo$newidecho"/usr/sbin/useradd-d/home1/ftp-u$newid-s/etc/false ftp"endifelseecho"Good.Your system already has the ftp user."set ftphome=`grep ftp:/etc/passwd|cut-d:-f6`echo$ftphomeendifif(-z$ftphome)thenecho"ftphome must be non-null"exit2endifif($ftphome=="/usr"||$ftphome=="/")then echo"ftphome can't be/or/usr"exit2endif#create the ftp home directoryif(!-d$ftphome)thenecho"mkdir$ftphome"endifecho"Setting up the ftphome for SunOS`uname-r`"if(!-d$ftphome)thenecho"mkdir-p$ftphome/usr/bin"endifcp/bin/ls$ftphome/usr/binchmod111$ftphome/usr/bin/lschown root$ftphome/usr/binchmod555$ftphome/usr/binif(-r$ftphome/bin)thenmv-f$ftphome/bin$ftphome/Obinendifln-s usr/bin$ftphome--------------------------------------------------------------------13.取得该使用者的UIDif($#argv==0)thenecho"$0usage:$1username"exit2endifset uid=`grep$1/etc/passwd|cut-d:-f3`echo$uid--------------------------------------------------------------------14.将指定档案内的html取代成htmforeach file(*.html)echo"Processing$file..."sed s/html/htm/$file>${file}1cp${file}1$filerm${file}1end--------------------------------------------------------------------15.一个简简单单的范例,看看就好#!/bin/csh-f echo.................echo WELCOME to\*TAPE COPY\* echo.................echo Enter your name:#$<can read from stand inputset name=$<echo""echo Hi$name\!set D=`date`echo Today\'s date is$D[1]$D[2]$D[3]if($D[1]==Mon)thenecho-------------------------------------------------------------echo Today is$D[1]day$name,it\'s time to copy your director ys\!echo-------------------------------------------------------------elseecho-------------------------------------------------------------echo Today is$D[1]day$name,no tape copies today\!echo-------------------------------------------------------------endif--------------------------------------------------------------------16.一个finger的程式set FINGER="/usr/ucb/finger"if(-x$FINGER)thenif($#argv==0)thencat<<TAG---------------------------------Hahahah....---------------------------------TAGelse$FINGER"$*"endifelseecho"Cannot find finger on this system."endif--------------------------------------------------------------------17.取得变数的方法set W=`who-r`echo$W[9]--------------------------------------------------------------------18.更改档案名称,将*.html-->*.htm#rename*.html to*.htmecho-n"This will change*.html to*.htm.Can I continue?(y/n): "set input=$<if($input!="y"&&$input!="Y")thenecho"Ok.Quit..."exit2endifforeach file(*.html)echo"Processing$file to`basename$file.html`.htm"mv$file`basename$file.html`.htmend--------------------------------------------------------------------19.更改档案名称,将*.htm-->*.htmlecho-n"This will change*.htm to*.html.Can I continue?(y/n): "set input=$<if($input!="y"&&$input!="Y")thenecho"Ok.Quit..."exit2endif#rename*.htm to*.htmlforeach file(*.htm)echo"Processing$file to`basename$file.htm`.html"mv$file`basename$file.htm`.htmlend--------------------------------------------------------------------20.将大写的档名改成小写的档名tr string1string2会将standard input的字串,所对应到的string1,都以string2取代foreach file(*)mv$file`echo$file|tr'[A-Z]''[a-z]'`end--------------------------------------------------------------------21.将小写的档名改成大写的档名foreach file(*)mv$file`echo$file|tr'[a-z]''[A-Z]'`end。
genesisGUI界面本章内容主要介绍genesis2000软件自带的GUI 界面:首先介绍如何编写出我们需要的GUI 界面;而后介绍我们如何利用GUI 实现人机交互;最后用实例进行详细讲解。
2.1 GUI 界面编写:2.1.1:GUI 简介:GUI 为Graphic User interface 单词缩写,意思为用户图形界面,大多数编程工具都会提供实现人机交互的界面,以使程序更智能,操作更简单,genesis2000提供的GUI 界面编写很简单,只需要很简短的语句就可以写出你所需要的界面,并同样可以实现数据的输入输出。
2.1.2:GUI 的主程序:编写GUI 界面首先我们必须了解gui.exe 的位置,在程序中我们必须指明其位置,gui.exe 是提供我们实现gui 界面的主程序,一般在genesis2000软件安装好后gui.exe 会存在于$GENESIS_DIR/e$GENESIS_VER/all/gui 的目录下面(其中$GENESIS_DIR 为软件的安装目录,$GENESIS_VER 为genesis 版本),如果你编写的程序无法弹出界面,有可能你的gui.exe 所指目录不对,你可以用搜索的方法找到它,然后改变程序中指明gui.exe 路径的语句。
请大家按如下步骤做一个简单的GUI 界面程序,以确定我们的GUI 是否能够运行。
(1):在linux 下打开gedit 编辑器或者vi 编辑器(如果为unix 系统用V 编辑器,windows 用写字板程序)(2):输入以下内容:1):set gui_out = /tmp/gui_out.$$2):set gui_in = /tmp/gui_in.$$3):echo "WIN 200 200" > $gui_in4):echo “LABEL GUI_OK ” >> $gui_in5):/genesis/e90/all/gui $gui_in > $gui_out6):source $gui_out(3):进入genesis ,运行我们刚保存的程序,如果出现2.1所示界面则表示我们的gui 程序正确,我们写的程序也没有错误;如果出现2.2所示界面则同样表示我们的gui..exe 路径正确,但我们的程序其它部分有错误;但如果什么都没出现则可能是我们的gui.exe 路径有问题或者GUI 程序有问题,遇到这样的情况需要查看gui.exe 路径设定是否有问题或者gui.exe 程序有问题。
GENESIS2000入门教程Padup 谷大pad lin edow n 缩线out外面Other layer 另一层top 顶层power电源导(负片) solder 焊锡component元器件Reste 重新设置snap 捕捉resize (编辑)放大缩小measuer 测量VIA hole导通孔Attribute 属性Select选择Resha pe改变形状Actio ns操作流程Identify 识别Misc辅助层orig in 零点reference layer 参考层paddn 缩小padlin e/sig nal 线Same layer 同一层positive 正bot底层Vcc电源层(负片)singnal线路信号层Close关闭corner直角board 板analysis 分析PTH hole沉铜孔smd pad贴片PADround 圆in clude 包含profile 轮廓analyis 分析tran slate 转换dutum point相对原点center中心reroute 扰线路Layer 层spacing 间隙negative 负Soldermask 绿油层ground地层(负片) soldnmask绿油层zoom放大缩小step PCB 文档Route锣带Sin de边、面NPTH hole非沉铜孔rep lace替换square正方形exclude 不包含drill钻带DFM 自动修改编辑job matrix 工作室corner 直角global全部Shave 肖U padin 里面铜皮临时字符层apply应用input导入create创建Center中心rep air修理、编辑Adva need 高级out put 导出fill填充rectangle 矩形ste p工作单元rout锣带circuit 线性rep air修补、改正optimization 优化check检查reverseselect ion 反选feature 半径dimensions标准尺寸cuTempsilksnap对齐invert 正负调换symbol兀素histogram元素exist 存在an gle 角度pan elizati on拼图fill parameters 填充参数redundancy 沉余、清除层央文简与层属性顶层文字Top silk scree n CM1( gtl ) silk-scre n顶层阻焊Top solder mask SM1 ( gts ) solder-mask顶层线路Top layer L1 ( gtl ) sig nal内层第一层po wer ground (gnd) PG2 ( 12-pw ) power-ground(负片) 内层第二层sig nal layer L3 signal (正片)内层第三层sig nal layer L4 signal (正片)内层第四层po wer ground (vcc) L5 ( 15-vcc) power-ground(负片) 外层底层bottom layer L6 ( gbl ) sig nal底层阻焊bottom solder mask SM6 solder-mask底层文字bottom silk screen CM6 silk-scre nreference selection 参考选择层菜单Dis play ----------------- Features histogramCopy --------------------- Merge -------------------- Unm erge ----------------- Op timize lerels --------- Fill p rofile ------------当前层显示的颜色—--当前层的图像统计复制合并层反合并层(将复合层分成正负两层层优化(当正负层太多时,要优化成最大3层)填充Profile(轮廓)Register matrix copp er/ex posed areaattribates ------------------no tes ------------------clip area ---------------drill tools man ager drill filter ------------ hole sizes ------------- 层自动对位层属性表(新建、改名、删除) -计算铜面积(自动算出百分几)层属性(较少用) 记事本(较少用) 删除区域(可自定义,或定义 P rofile ) 钻孔管理(改孔的属性,大小等) 钻孔过滤 钻孔尺寸(在分孔图转钻孔经常用到 ) create drill map ----------------- 利用钻孔做分孔图(如有槽孔,转出来有变) up date verificati on coupons ---- 更新首尾孑 L 的列表 re-read ---------------------- 重读文件(当文件误删时无法恢复时,可重读 ) 删除整层数据(无法用ctrl+z 恢复) 层对比 (很有用,可以查看层与层之间改动过的地方) 翻转 (只有在拼版里面才会出现) ---文字参考 ------产生形状列表 -----删除形状列表trun cate compare -----------flate n --- text reference create sha pelist delete sha pelist EDIT 菜单 undo -------- delete -------------- move copy ----------- resize --------- transform--- conn ecti ons 撤消上一次操作 删除 移动* 复制*修改图形大小形状*----旋转、镜像、缩放buffer resha pepo larity--- cerate-一 cha nge--- attributes 更改层的极性* 建立*更改* --属性 edit 之resize 修改图形大小形状* global ------------------- 所有图形元素 surfaces ------------------- 沿着表面 resizc therr nals and donuts contourize&resize ------------------ ----- 散热盘及同圆 表面化及修改尺寸 P oly line ------------------- 多边形 by factor ------------------- 按照比例 edit 之 move -移动* same layer other layer- -------------- streteh p arallel li nes orthog onal strrtch----move tripl ets (fixed an gele)同层移动 移动到另一层 ----- 平行线伸缩 -------平角线伸缩 角度不变地移线(ALT + D )move trip lets (fixed length ) --------------------- 长度不变地移线( ALT + J ) move&to panel ------------------------ 把STEP 中的图形移动到其它的 STEP 中edit 之 copy-复制* same layer 同层移动 other layer- -------------------- 移动至U 另一层 step&repeatsame layer -------------------------- 同层移动 other layer- -------------------- 同层排版 edit 之 reshape cha nge symbolsame break ------------------- 打散 break to Islands/holes----------------------------------------------- 打散特殊图形 arc to lines -------------------- 弧转线 line to pad --------------------- 线转 padcontourize ---------------------- 仓U 建铜面部件(不常用) drawn to surface ----------------------- 线变 surface clean holes --------------------- 清理空洞 clean surface ------------------------ 清理 surfacefill ---------------- 填充 (可以将surface 以线填充)design to rout ----------------------- 设计到rout (做锣带常用,最佳值 4 3 2) substitue ----------------------- 替代(常用,分孔图转钻孔) cutting data -------------------- 填充成surface (常用来填充 CAD 数据) olarityrc direction -------------------- 封闭区域 edit 之Polarity (图像性质) positive 图像为正negative ------------------- 图像为负 invert ------------------ 正负转换 edit 之 ceate(建立)step -------------------- 新建一个 steP symbol --------------------- 新建一个 symbol Profile ----------------- 新建一个 Profileedit 之 change (更改) change text 更改字符串 Pads to slots ------------------- p ad 变成 slots (槽)space tracks evenly ------------------------ 自动平均线隙(很重要)检查清单 重读erf 文件 网络分析-----网络优化 取消选择或高亮 -参考选择(很重要,有 TOUCH (接触)COVERED (完全接触)) 设置脚本名称选择线(一般用来选大铜皮) 转化网络到层更改图形ACTIONS 菜单check lists ---------------------- re-read ERFS ----------------------n etlist analyzer ----------------- n etlist optimization ------------- output ------------------- 输出clear selete&highlight ------------ reverse seleteion ----------------- script action ----------------- selete drawn ------------------ convert n etlist to layersnotes ------------------- 文本 con tour operations ----------------------- bom view ---------------------- s urface 操作 OPTION 菜单 seletion ----------- attributes 选择 属性 ——显示图形控制 grap hic con trol snap --------------------抓取 -测量工具 ——填充参数 线参数 显示颜色设置 ------零件 measuer -------------fill p arameters-- line p arameters colors --------------components ANAL YSIS 菜单 surface an alyzer-- drill checks ----------- board-drill checks ---------- sig nal layer checks--- po wer/gro und checks solder mask check —— silk scree n checks —— p rofile checks --------------- drill summary ----------------- quote analysis ---------------- smd summary ------------------- orbotech AOI checks ----查找铜面部件中的问题钻孔检查------查找钻孔层与补偿削铳层中潜在的工艺性缺陷——线路层检查 ------ 内层检查 ——阻焊检查 ---- 字符层检查-p rofile检查生成Padstack 中的孔的统计数字,查找padtack 中的最小焊环对外层铜箔层执行操作,生成有关被检验层中的SMD 定位和封装的统计报告microvia checks 提供HDI 设计的高效钻孔分析rout layer checks p ads for drill ------------- 列出每种类型钻孔的焊盘尺寸以及焊盘的数量DFM 菜单 cleanup ------------------- redundancy clea unp repair ------------------------- sliver ------------------ optimization ------------ yield imp roveme nt advaneed ---------------- custom legacy dft------ DFM 之 Cleanup legnddetection ——文本检测DFM 之 optimization sig nal layer opt ------------------- line width opt -------------- po wer/gro und opt ---------- solder mask opt ------------- silk scree n opt ------------ solder p aste opt ----------- po sitive plane opt ——线路层优化 通过削线来达到最小值 一内层优化 -阻焊优化 字符优化 -锡膏优化DFM 之 yield improvementetch compansate ------------------------- 对蚀刻进行补偿、但保持 CAD 规范 advaneed teatdrops creation --------------------------- 力口泪滴copper balancing ------------------------ 用于平衡铜箔分布来实现信号层上的镀覆均匀configuure 参数iol_274x_ill_polygon= (Yes;No) ---------------------------- 是否检查 /修正 polygon他的意思是忽略检查多边形覆铜--选择no 如果多边形有错误,会被检查出来和修正 注意:只有设定iol_enable_ill_polygon=Yes 时才有作用iol_274x_ko_polarity=(1;2) -------------- 判断数据极性的时候用的,默认的即可输入Rs274x 组合参数极性的方式 1-绝对,依据写在KO 参数的值来判断极性(忽略IP 和LP) 2-相对,依据IP 及LP 后的值来判断极性. 注意:IP 影象极性;LP 层次极性 iol_274x_limit_dcode=(Yes;No)是否限制料号输入 decode 数的限制 否:不做限制 是:限制在10~999之间iol_274x_set_octagon_rotation=(Yes;No)--设置 8 角形的 pad 的角度con struct p ads (auto) ---------------------- 自动转 pad con struct p ads (auto,all angles) ------------------------ 自动转 pad (无论角度大小)建议不用 con struct p ads (ref) --------------------- 手动转 pad (参照 erf ) DFM 之 redundancy cleanupaa redundant line removal ------------------------------ nfp removal ---------- draw n to outl ine -----删除重线 -- 删重孔、删独立 PAD 以线或轮廓来代替线绘区域减少层中的部件数量 DFM 之 rep air pad snapping ---------------- pin hole elim in ati on n eck dow n rep air--整体PAD 对齐 -----除残铜补沙眼 ---修补未完全被其它线或焊盘覆盖的圆端或方端产生的颈锁断开 (即修补未连接上的线)DFM 之 sliver sliver´ angles ------------- sliver&peelable repair lege nd sliver fill --------------------- tangency elimination -------------修补潜在加工缺陷的锐角----- 查找修补信号层、地电层和阻焊层中的 sliver 用于填充具有.nomenclature 属性集的组件之间的 sliver针对RS-274的输入数据 定义RX-274的八角形有一些问题,因为没有明确定义0度八角形位置.是:开始的角度是0度否:开始的角度是22.5度iol_274X_set_ polygon_rotatio n(Yes;No)RS-274X 输入数据时polygon 设定角度或是角落的问题 是:开启设定开始角度0度否:开始角度为预设角度iol_274x_sr_ij_scaled(Yes;No)RS-274X 输出和输入I code 和J code 是否带有排版涨缩指令 否:排版IJ 值没有带涨缩是排版IJ 值有带涨缩ol_274X_sr_merge_pcb(Yes;No)--默认的是 yes输入RS274X 的数据 是:输入时会试着配合 PCB 输入Rs274x ,强破打散排版.否:输入274X 毎一层会是不同的,允许排版数据input.iol_accept_raw_data(Yes;No)---默认参数为 no控制输入多边形自我相交点的问题 否:不用外框线取代 SIP surface.是:SIP < illegal surface>部份用外框线来代替.假如设成是会使iol_fix_ill_polygon 或iol_274x_ill_polygon 无效.请用yes, no input 到不同层别,同时显 示两层比对.推断出正确的图形.iol_clea n_surface_ min _brush(0-5)控制输入surface 时是否减少不规则的边.假如在输入不规则形有许多边缘.可以由此参数来使边缘平滑.范围:正 的数值.默认值为0.0不简化 注意:值愈大会失真,只支持DPF 输入 iol_co mp ress_meas(Yes;No)在跑完CHECKLIST 的结果,如果档案太大是否要压缩iol_diag_rect_li ne(1;2)输入矩形的线性如何处理 1.线就是线 iol_dp f_out put_con t_as_com(Yes;No) Define con tours as comp lex in DPF out put. iol_dp f_out pu t_zero_a per(Yes;No) 是否允许输出DPF 有尺寸是零. iol_d pf_p att_borde(1;2;3)输出时使用者可以自定如何处理不规则形 形会被加入边缘iol_d pf_se parate_letters(Yes;No)输入DPF 时文字是否要分割否:文字为单一对象 是:文字分割,每一文字为分割的对象iol_dp f_text_width_factor(0.1-50)DFP 输入文字时只有定义高度.以这一个为乘数计算宽度. dpf--他是ucam 默认的一种光绘格式,和gerber 类似的一种格式,ucam 那个公司出品的光绘机和测试机,他们直接支持dpf 格式iol_drl_def_drill(0;1;2;3)当输入钻孔时如因数据不足.预设的格式.0:Eexellon1:Trudrill 2:Posalux 3:SMiol_dxf_circle_to_ pad(Yes;No)控制DXF 输入的圆圏是:转为PAD 否:转为外框圆圏iol_dxf_default_width(1-5)当输入DXF 时有些对象的尺寸是零.这一个参数是在控制零尺寸的默认值.iol_dxf_ro un d_ca p( Yes;No) DXF 输入时的收边形是:边角为矩形 否:边角为圆形iol_dxf_rou nd_li ne(0=No;仁Yes)是否方形的边为圆形 0:预设为不转为圆形 1:方形转为圆形 iol_dxf_se parate_froze n_layers(Yes;No)输入DXF 时被冻结的层次是否在Ge nesis 分开层别.否:不分开 是:输入是分开 当输入参数 iol_dxf_single_layer = "yes"时.假如被冻结的层次存在加入记录而且警告加入报告.2.线是不规则形(contour)定义输出DPF 的con tour 是否为复杂的对象1.线会有圆角,PAD 接触边缘会被忽略2.对象接触边缘会被削3.外ap ertures larger tha n r can be take n only from the values in the follow ing set: r, r*2, r*4, r*8, r*16, and the n in creas ing in r*16 steps.填线apertures 中于r 仅可以从以下的集合中取得数据:r, r*2, r*4, r*8, r*16然后以r*16增加。
本章内容主要介绍genesis自动化程序编写运行环境:首先对genesis2000软件进行简单的介绍;而后介绍genesis2000自动化程序的开发方式和开发语言;最后介绍自动化程序在软件中的接口。
1.1、 genesis2000软件简介:Genesis2000软件是由Orbotech与Valor的合资公司—Frontline公司开发的CAM系统,其目的是为实工程现制前自动化,为CAM处理提供最佳解决方案,由于该软件拥有很强大的功能,很多PCB生产公司都已使用它为CAM 制前服务,笔者认为该软件有以下几方面的优点:1)令人喜欢的操作界面genesis2000软件界面设计人性化,操作简单,易学。
2)用ODB++格式,使用ODB++格式有以下三个优点:(1):使设计和制造之间数据交换最优化。
(2):目前唯一性的可扩充的结构。
(3):更精确的数据描述。
3)强大的操作辅助指令genesis2000软件的操作辅助指令可以简化很多复杂的工作,很简单的操作就可以达到我们想要的目的。
4)大的分析和优化功能genesis2000软件的Analysis和DFM功能在精密度要求越来越高的PCB行业显得极为重要,它自动进行精密的分析和优化,而用手动操作根本不可能实现。
5)自动化程序开发genesis2000软件的自动化程序可以让我们任何有规律的操作,有迹可寻的设定变成自动化,大大节省制作时间和减少人为误操作。
6)不断的围绕用户升级genesis2000软件不断围绕用户的需求进行开发新的实用的功能,笔者在使用的几年间,genesis2000开发了很多新的功能。
1.2:genesis2000软件自动化程序开发方式和语言:1.2.1genesis2000软件自动化程序的编写方式可分为以下三种:1)scripts2)hooks3)forms and flows1.2.2genesis2000软件自动化程序编写语言genesis2000软件自动化程序编写语言可以用多种语言进行实现:如SH、CSH、BSH、KSH、TCL/TK、PERL/TK,等等,本书主要介绍CSH,和PERL/TK两种比较常用的编写语言。
genesis2000脚本GUI界面编写下面就是Genesis的GUI的demo程序,从里面可以学到几乎全部的GUI的功能了.前面的变量设定的部份省略不讲,大家可以参考Shell编程#!/bin/csh# This script is for GUI demo.############################################################## ####################alias gui '${GENESIS_DIR}/e${GENESIS_VER}/all/gui'alias gui_out 'echo !:* >> $GuiDefFile'alias gui_lst 'cat !:* >> $GuiDefFile'alias dogui 'gui < $GuiDefFile > $GuiDatFile; source $GuiDatFile; rm -f $GuiDefFile $GuiDatFile'if ($?GENESIS_TMP) thenset TMP = $GENESIS_TMPelse if ($?GENESIS_DIR) thenset TMP = $GENESIS_DIR/tmpelseset TMP = /genesis/tmpendif# Set gui parametersset GuiDefFile = $TMP/GuiDefFile.$$set GuiDatFile = $TMP/GuiDatFile.$$# Set fonts for gui #设定字体前三码表示字体格式,后两码数字表示大小#格式三码h 表字型(可选t) b表字宽粗体(bold)(可选m,细体) r表字正(可选i 表斜体)set TitleFont = hbr18set NormFont = hbr14set HintFont = hbi14# Set colors for gui #颜色是用RGB的型式表示,可以用Genesis中OPTION下COLOR功能来选自己喜欢的,#然后设定到GUI中去每一种颜色用两位数字表示99表示最深00表示最浅依次为R-red G-Green B-Blueset RedColor = 990000set WhiteColor = 999999set TitleColor = 772288set NormColor = 222299############################################################## #set job_list = `dbutil list jobs | awk '{print $1}'`gui_out WIN 200 200 #确定GUI窗口左上角在屏幕中的位置gui_out BG $WhiteColor #BG background背景颜色gui_out LABEL @/tmp/orblogo.xbm #添加标签(可以是一串字符,也可以是一个XPM格式图片我们在#后面会讨论如果制作这种图片,在6.如何加入中文里有说明)gui_out BG $TitleColorgui_out FG $WhiteColor #FG font ground字体颜色gui_out LABEL GUI Demogui_out BG $NormColorgui_out TEXT user_name User name : #TEXT文字输入窗口,并将值传给user_name变量, 显示”User name”gui_out DTEXT user_name Beyond Li #设定文字窗口的初始值Default TEXT=>DTEXT, 初始为Beyond Ligui_out BW 3 #BW 区隔线宽BOLD Width 设为3gui_out FORM #表格开始gui_out LABEL 'Select Job -->'gui_out LIST StepJob 5 S 1 #LIST列表选择功能StepJob为变量5表示显示5行S表示单选#多选为M, 1表示显示时从第1个项目开始显示foreach JobName ($job_list) #这里将除了genesislib以外的所有料号名都显示于LIST列表中if ($JobName != "genesislib") thengui_out $JobName #列表的内容endifendgui_out END #LIST功能结束(LIST传回的值为具体的列表中的值)gui_out ENDFORM #表格结束gui_out BW 1gui_out OPTION pnl_size Panel size: #OPTION下拉选项功能pnl_size 为变量显示”Panel size”gui_out 16x18 #选项的内容gui_out 18x24gui_out 20x24gui_out END #选项功能结束(OPTION传回的值为项目内容具体的值如16x18等)gui_out RADIO sel_pnl 'Panel name method:' H 1 $RedColor #RADIO点选功能变量为sel_p nl “’ . ’”为显示内容#H表示水平显示1表示一栏来显示最后是颜色gui_out Default #供点选的内容gui_out Keyingui_out END #点选功能结束gui_out FORM sel_pnl 2 #表格开始注意到后面有变量sel_pnl 2表示当sel_pnl选2时表格#才显现出来否则将以阴影不可编辑或选择的方式来显示gui_out TEXT pnl_name Panel name:gui_out ENDFORMgui_out CLABEL OK #按钮功能显示”OK”gui_out END #功能结束dogui #将这些传到GUI的程序中,它就会生成我们要的GUI界面.笔者通常在GUI最后,dogui之前加入一个RADIO让人员可以选择是否退出如下gui_out RADIO Exit_Chk 'Exit:' H 1 $RedColor #RADIO点选功能变量为sel_pnl “’ . ’”为显示内容#H表示水平显示1表示一栏来显示最后是颜色gui_out No #供点选的内容gui_out Yesgui_out END #点选功能结束在dogui后紧接着就设置检查if ( $Exit_Chk == 2 ) thenexit 0endif这样就可随时推出目前的GUI画面.其它的应用大家就要思考自己的工作要求,然后将这些功能灵活使用了.。
1. switch 的用法,注意每一个case 必须要以breaksw 结尾 否则会继续执行下一个case 的命令(1) 另外,$< 的意思是取得使用者的stand input(2) echo 若加上-n 的选项,则游标会停留在该行最后echo -n "Input one color: "set STOPLIGHT = $<switch ($STOPLIGHT)case red:echo "red"breakswcase orange:echo "orange"breakswcase green:echo "green"breakswdefault:echo "you input $STOPLIGHT"endsw--------------------------------------------------------------------2. 利用set 来取得变数,set ABC = "I am ABC"也可以利用`command` 来取得命令且外,case 也可以用万用字元* 来代替set VER = `uname -r`switch ($VER)case 5.5:echo "run the setup of $VER"breakswcase 5.3:echo "run the setup of $VER"breakswcase 5.*:echo "like 5.x"breakswcase 4.*:echo "like 4.x"breakswdefault:echo "no idea"endsw--------------------------------------------------------------------3. if 的语法,比较数字set n1 = 1set n2 = 2if ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif--------------------------------------------------------------------4. if 的语法,比较字串set n1 = abcdefset n2 = abcdeif ($n1 == $n2) thenecho "$n1 Equal $n2"elseecho "$n1 Not Equal $n2"endif--------------------------------------------------------------------5. if 的语法,比较相似的字串set n1 = abcdefset n2 = abcdeif ($n1 =~ $n2) thenecho "$n1 Like $n2"elseecho "$n1 Not Like $n2"endif--------------------------------------------------------------------6. if 的语法,比较数字的大小set n1 = 1set n2 = 2if ($n1 > $n2) thenecho "$n1 > $n2"elseendif--------------------------------------------------------------------7. 每分钟执行一次的程式# mm 等于当天时间的【分钟】数set mm = `date | cut -d' ' -f4 | cut -d: -f2`if ( -r $0.out ) thenrm $0.outtouch $0.outelsetouch $0.outendifwhile ( $mm <= 16 )set mm = `date | cut -d' ' -f4 | cut -d: -f2`echo "$mm now is `date`"sleep 60#echo "$mm now is `date`" >> $0.outendecho "Over" >> $0.out--------------------------------------------------------------------8. 一个回圈的范例,并且利用expr 去作加的动作回圈的语法如下:foreach number (1 2 3)echo $numberendset counter = 0while ($counter <= 10)echo "sleeping for 5 seconds"sleep 5counter = `expr $counter + 1 `end--------------------------------------------------------------------9. 设定一个用当天月份与日期作为档案名称的程式如今天是10/02 , 则$prefix 会等于该程式+ 1002set prefix = `basename $0``date '+ %m%d'`echo $0echo $prefix--------------------------------------------------------------------10. 移除在foreach 回圈内指定的档案内的font 字串foreach file ([b,e,g,h,s]*.html)echo -n "Processing $file, remove the line number `grep -n font $file`"# $log 表示这个$file 有几个font 字串set log = `grep -c font $file`if ( $log == '0' ) thenecho ", pass $file"else# 先找出该档案的第一次出现font 的行数,如果3,则$cmd = 3dset cmd = `grep -n font $file | cut -d: -f1 | head -1`d# 利用sed 去执行删除的动作,并把结果输出到${file}1sed $cmd $file > ${file}1# 如果${file}1 没有资料,则passingif ( -z ${file}1 ) thenecho " , ${file}1 is zero"elsecp ${file}1 $filerm {$file}1echo " , $file remove ok"endifendifend# 后来看过sed 的更进一步用法,发现先前写的太笨了,试试这个# sed /font/d $file > ${file}1# 一次OK, 我真是大笨蛋--------------------------------------------------------------------11. 功能:将指定的档案中,出现第一次【回】的那一行,加上<title> xxxx </title>foreach file (sky*.html)set filetitle = ftitle# 主要部份为sed 部份 s/^ *// 表示将该行第一个字元前的空白删除echo "<title>`grep 回$file | head -1 | sed -e 's/^ *//'`</title>" > $ftitle# 将刚刚那一行,再插回去head -1 $file > ${file}headsed 1d $file > ${file}1cat $ftitle >> ${file}headcat ${file}1 >> ${file}headcp ${file}head $filerm ${file}1rm $ftitlerm ${file}headecho "$file ok"end--------------------------------------------------------------------12. 一个实际建立一个ftp server 的程式 里面包括许多应用,相当有参考价值( 未完成)set path = ( /usr/bin /usr/sbin )#set true = `grep -c ftp /etc/passwd`if ( $true == 0 ) thenecho "no ftp user in your system"echo -n "do you want to create the ftp user? "set answer = $<if ($answer == 'y' || $answer == 'Y') thenset maxid = `sort /etc/passwd | tail -1 | cut -d: -f3`echo $maxidset newid = `expr $maxid + 1`echo $newidecho "/usr/sbin/useradd -d /home1/ftp -u $newid -s /etc/false ftp"endifelseecho "Good. Your system already has the ftp user. "set ftphome = `grep ftp: /etc/passwd | cut -d: -f6`echo $ftphomeendifif ( -z $ftphome ) thenecho "ftphome must be non-null"exit 2endifif ( $ftphome == "/usr" || $ftphome == "/" ) thenecho "ftphome can't be / or /usr"exit 2endif# create the ftp home directoryif ( ! -d $ftphome ) thenecho "mkdir $ftphome"endifecho "Setting up the ftphome for SunOS `uname -r`"if ( ! -d $ftphome ) thenecho "mkdir -p $ftphome/usr/bin"endifcp /bin/ls $ftphome/usr/binchmod 111 $ftphome/usr/bin/lschown root $ftphome/usr/binchmod 555 $ftphome/usr/binif ( -r $ftphome/bin ) thenmv -f $ftphome/bin $ftphome/Obinendifln -s usr/bin $ftphome--------------------------------------------------------------------13. 取得该使用者的UIDif ( $#argv == 0 ) thenecho "$0 usage: $1 username"exit 2endifset uid = `grep $1 /etc/passwd | cut -d: -f3`echo $uid--------------------------------------------------------------------14. 将指定档案内的html 取代成htmforeach file ( *.html )echo "Processing $file ..."sed s/html/htm/ $file > ${file}1cp ${file}1 $filerm ${file}1end--------------------------------------------------------------------15. 一个简简单单的范例,看看就好#!/bin/csh -fecho .................echo WELCOME to \* TAPE COPY \*echo .................echo Enter your name:# $< can read from stand inputset name = $<echo " "echo Hi $name \!set D = `date`echo Today\'s date is $D[1] $D[2] $D[3]if ($D[1] == Mon) thenecho -------------------------------------------------------------echo Today is $D[1]day $name, it\'s time to copy your directorys\! echo -------------------------------------------------------------elseecho -------------------------------------------------------------echo Today is $D[1]day $name, no tape copies today\!echo -------------------------------------------------------------endif--------------------------------------------------------------------16. 一个finger 的程式set FINGER = "/usr/ucb/finger"if ( -x $FINGER ) thenif ( $#argv == 0 ) thencat << TAG---------------------------------Hahahah ....---------------------------------TAGelse$FINGER "$*"endifelseecho "Cannot find finger on this system."endif--------------------------------------------------------------------17. 取得变数的方法set W = `who -r`echo $W[9]--------------------------------------------------------------------18. 更改档案名称,将*.html --> *.htm# rename *.html to *.htmecho -n "This will change *.html to *.htm. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endifforeach file ( *.html )echo "Processing $file to `basename $file .html`.htm "mv $file `basename $file .html`.htmend--------------------------------------------------------------------19. 更改档案名称,将*.htm --> *.htmlecho -n "This will change *.htm to *.html. Can I continue ? (y/n) : " set input = $<if ( $input != "y" && $input != "Y" ) thenecho "Ok. Quit..."exit 2endif# rename *.htm to *.htmlforeach file ( *.htm )echo "Processing $file to `basename $file .htm`.html " mv $file `basename $file .htm`.htmlend--------------------------------------------------------------------20. 将大写的档名改成小写的档名tr string1 string2 会将standard input 的字串,所对应到的string1, 都以string2 取代foreach file ( * )mv $file `echo $file | tr '[A-Z]' '[a-z]'`end--------------------------------------------------------------------21. 将小写的档名改成大写的档名foreach file (*)mv $file `echo $file | tr '[a-z]' '[A-Z]'`end</P< p>。
本章内容主要介绍genesis2000软件自带的GUI 界面:首先介绍如何编写出我们需要的GUI 界面;而后介绍我们如何利用GUI 实现人机交互;最后用实例进行详细讲解。
2.1 GUI 界面编写:2.1.1:GUI 简介:GUI 为Graphic User interface 单词缩写,意思为用户图形界面,大多数编程工具都会提供实现人机交互的界面,以使程序更智能,操作更简单,genesis2000提供的GUI 界面编写很简单,只需要很简短的语句就可以写出你所需要的界面,并同样可以实现数据的输入输出。
2.1.2:GUI 的主程序:编写GUI 界面首先我们必须了解gui.exe 的位置,在程序中我们必须指明其位置,gui.exe 是提供我们实现gui 界面的主程序,一般在genesis2000软件安装好后gui.exe 会存在于$GENESIS_DIR/e$GENESIS_VER/all/gui 的目录下面(其中$GENESIS_DIR 为软件的安装目录,$GENESIS_VER 为genesis 版本),如果你编写的程序无法弹出界面,有可能你的gui.exe 所指目录不对,你可以用搜索的方法找到它,然后改变程序中指明gui.exe 路径的语句。
请大家按如下步骤做一个简单的GUI 界面程序,以确定我们的GUI 是否能够运行。
(1):在linux 下打开gedit 编辑器或者vi 编辑器(如果为unix 系统用V 编辑器,windows 用写字板程序)(2):输入以下内容:1):set gui_out = /tmp/gui_out.$$2):set gui_in = /tmp/gui_in.$$3):echo "WIN 200 200" > $gui_in4):echo “LABEL GUI_OK ” >> $gui_in5):/genesis/e90/all/gui $gui_in > $gui_out6):source $gui_out(3): 进入genesis ,运行我们刚保存的程序,如果出现2.1所示界面则表示我们的gui 程序正确,我们写的程序也没有错误;如果出现2.2所示界面则同样表示我们的gui..exe 路径正确,但我们的程序其它部分有错误;但如果什么都没出现则可能是我们的gui.exe 路径有问题或者GUI 程序有问题,遇到这样的情况需要查看gui.exe 路径设定是否有问题或者gui.exe 程序有问题。
genesis2000脚本GUI界面编写
下面就是Genesis的GUI的demo程序,从里面可以学到几乎全部的GUI的功能了.前面的变量设定的部份省略不讲,大家可以参考Shell编程
#!/bin/csh
# This script is for GUI demo.
############################################################## ####################
alias gui '${GENESIS_DIR}/e${GENESIS_VER}/all/gui'
alias gui_out 'echo !:* >> $GuiDefFile'
alias gui_lst 'cat !:* >> $GuiDefFile'
alias dogui 'gui < $GuiDefFile > $GuiDatFile; source $GuiDatFile; rm -f $GuiDefFile $GuiDatFile'
if ($?GENESIS_TMP) then
set TMP = $GENESIS_TMP
else if ($?GENESIS_DIR) then
set TMP = $GENESIS_DIR/tmp
else
set TMP = /genesis/tmp
endif
# Set gui parameters
set GuiDefFile = $TMP/GuiDefFile.$$
set GuiDatFile = $TMP/GuiDatFile.$$
# Set fonts for gui #设定字体前三码表示字体格式,后两码数字表示大小
#格式三码h 表字型(可选t) b表字宽粗体(bold)(可选m,细体) r
表字正(可选i 表斜体)
set TitleFont = hbr18
set NormFont = hbr14
set HintFont = hbi14
# Set colors for gui #颜色是用RGB的型式表示,可以用Genesis中OPTION下COLOR功能来选自己喜欢的,
#然后设定到GUI中去每一种颜色用两位数字表示99表示最深00表示最浅依次为R-red G-Green B-Blue
set RedColor = 990000
set WhiteColor = 999999
set TitleColor = 772288
set NormColor = 222299
############################################################## #
set job_list = `dbutil list jobs | awk '{print $1}'`
gui_out WIN 200 200 #确定GUI窗口左上角在屏幕中的位置
gui_out BG $WhiteColor #BG background背景颜色
gui_out LABEL @/tmp/orblogo.xbm #添加标签(可以是一串字符,也可以是一个XPM格式图片我们在
#后面会讨论如果制作这种图片,在6.如何加入中文里有说明)
gui_out BG $TitleColor
gui_out FG $WhiteColor #FG font ground字体颜色
gui_out LABEL GUI Demo
gui_out BG $NormColor
gui_out TEXT user_name User name : #TEXT文字输入窗口,并将值传给user_name变量, 显示”User name”
gui_out DTEXT user_name Beyond Li #设定文字窗口的初始值Default TEXT=>DTEXT, 初始为Beyond Li
gui_out BW 3 #BW 区隔线宽BOLD Width 设为3
gui_out FORM #表格开始
gui_out LABEL 'Select Job -->'
gui_out LIST StepJob 5 S 1 #LIST列表选择功能StepJob为变量5表示显示5行S表示单选
#多选为M, 1表示显示时从第1个项目开始显示foreach JobName ($job_list) #这里将除了genesislib以外的所有料号名都显示于LIST列表中
if ($JobName != "genesislib") then
gui_out $JobName #列表的内容
endif
end
gui_out END #LIST功能结束(LIST传回的值为具体的列表中的值)
gui_out ENDFORM #表格结束
gui_out BW 1
gui_out OPTION pnl_size Panel size: #OPTION下拉选项功能pnl_size 为变量显示”Panel size”
gui_out 16x18 #选项的内容
gui_out 18x24
gui_out 20x24
gui_out END #选项功能结束(OPTION传回的值为项目内容具体的值如16x18等)
gui_out RADIO sel_pnl 'Panel name method:' H 1 $RedColor #RADIO点选功能变量为sel_p nl “’ . ’”为显示内容
#H表示水平显示1表示一栏来显示最后是颜色
gui_out Default #供点选的内容
gui_out Keyin
gui_out END #点选功能结束
gui_out FORM sel_pnl 2 #表格开始注意到后面有变量sel_pnl 2表示当sel_pnl选2时表格
#才显现出来否则将以阴影不可编辑或选择的方式来显示
gui_out TEXT pnl_name Panel name:
gui_out ENDFORM
gui_out CLABEL OK #按钮功能显示”OK”
gui_out END #功能结束
dogui #将这些传到GUI的程序中,它就会生成我们要的GUI界面.
笔者通常在GUI最后,dogui之前加入一个RADIO让人员可以选择是否退出如下gui_out RADIO Exit_Chk 'Exit:' H 1 $RedColor #RADIO点选功能变量为sel_pnl “’ . ’”为显示内容
#H表示水平显示1表示一栏来显示最后是颜色gui_out No #供点选的内容
gui_out Yes
gui_out END #点选功能结束
在dogui后紧接着就设置检查
if ( $Exit_Chk == 2 ) then
exit 0
endif
这样就可随时推出目前的GUI画面.
其它的应用大家就要思考自己的工作要求,然后将这些功能灵活使用了.。