能否开辟一个GENESIS script 的讨论区?
我希望大家与我交流,可以在这里发贴,现场解决问题,还有C-SHELL 的一些技巧!
这个很好啊,支持一下
支持!
支持一下
同志们,光支持有什么用?把问题拿出来吧!
比如:如何用一段C-SHELL将扳子的层数计算出来?
我也只能支持啊,我正在学习GENESIS
請教: genesis scripts 如何執行變數運算呢?例如: @ X= $R+1. 可是都會警告 badly formed number! 如何解決呢?
请将 R 改为 X 试试!
本人只会一些简单的scripts,
但是遇到变量的参数就会跑的很乱了
请教大侠们
有没有这方面的教材!
是呀是呀,
我刚开始学,都不知道从何入手,要有人从简单的讨论起就更好了
当然可以,学习SCRIPT 先从简单的COMMAND、语句等学起,目前大多数的SCRIPT是用
C-SHELL 编写的,你必须熟悉C-SHELL的命令和语句。
顶
注意!cshell中@只能对整数进行运算!DO_INFO -t matrix -e $JOB/matrix -d ROW set matrix_counter = 0 set L_NUM = 0 set INN_LAYERS = ( ) set INN_LAYERS_POL = ( ) set OUT_LAYERS = ( ) set OUT_LAYERS_POL = ( ) set SM_LAYERS = ( ) set SS_LAYERS = ( ) set DRL_LAYERS = ( ) set outer_layer_no = ( ) while ( $matrix_counter <= $#gROWcontext ) switch ($gROWcontext[$matrix_counter]) case empty: case misc: @ matrix_counter++ continue default: switch ($gROWlayer_type[$matrix_counter]) case signal: case power_ground: case mixed: if ($gROWside[$matrix_counter] == "top" || $gROWside[$matrix_counter] == "bottom") then set OUT_LAYERS = ( $OUT_LAYERS $gROWname[$matrix_counter] ) set OUT_LAYERS_POL = ( $OUT_LAYERS_POL $gROWpolarity[$matrix_counter] ) else set INN_LAYERS = ( $INN_LAYERS $gROWname[$matrix_counter] ) set INN_LAYERS_POL = ( $INN_LAYERS_POL $gROWpolarity[$matrix_counter] ) endif @ L_NUM++ if ($gROWside[$matrix_counter] == "top" || $gROWside[$matrix_counter] == "bottom") then set outer_layer_no = ($outer_layer_no $L_NUM) endif breaksw case solder_mask: set SM_LAYERS = ( $SM_LAYERS $gROWname[$matrix_counter] ) breaksw case silk_screen: set SS_LAYERS = ( $SS_LAYERS $gROWname[$matrix_counter] ) breaksw case drill: if ($gROWname[$matrix_counter] == "indrl") then COM delete_layer,layer=indrl else set DRL_LAYERS = ( $DRL_LAYERS $gROWname[$matrix_counter] ) endif breaksw endsw endsw @ matrix_counter++ end
对,一般的运算是用 `bc`的,可要注意公英制的转换!
我有英文片的cshell教程
我觉得奥宝的优化没达到我的要求
must erf
你能给我一份c-shell的命令和语句的资料吗?
jason997391@msn.com
有这方面的书卖,你可以买啊!
以下是引用copper在2004-6-18 20:06:53的发言:有这方面的书卖,你可以买啊!
大哥记着帮我联系外发做CAM的客户哦!你现在萧洒的很呢?
请问怎样可以在不同的层中加不同的东东?
以下是引用renzuguo在2004-7-16 1:34:24的发言:
请问怎样可以在不同的层中加不同的东东?
想加什麼呢? 說來聽聽..........
以下是本人学习Genesis 2000 scripts 的一部份,如何计算板子的层数? 具体scripts 如下:
DO_INFO -t matrix -e $JOB/matrix -d ROW
@ row = 1
@laycounter = 0
foreach row ($gROWrow)
if ($gROWcontext[$row] == empty ) continne
if ($gROWcontext[$row] == misc ) continue
if ($gROWcontext[$row] == board && $gROWlayer_type[$row] == signal ) then
@laycounter ++
endif
if ($gROWcontext[$row] == board && $gROWlayer_type[$row] == power_ground ) then
@laycounter ++
endif
if ( $gROWcontext[$row] == board && $gROWlayer_type[$row] == mixed ) then
@laycounter ++
endif
end
echo " $laycounter " #### "laycounter " is a variable to calculate the number of layers
cshell中@只能对整数进行运算,请问如果碰到了小数怎么解决,比如我想在二分之一板高处加一个盘,当板高为奇数时就会出错。!?
以下是引用renzuguo在2004-7-19 18:11:29的发言:cshell中@只能对整数进行运算,请问如果碰到了小数怎么解决,比如我想在二分之一板高处加一个盘,当板高为奇数时就会出错。!?
用scale=n ,n表示小數位..........
例如...........
set x=16
set y=21
set helf_x = `echo "scale=6; $x / 2"|bc` #helf_x = 8.000000
set helf_y = `echo "scale=6; $y / 2"|bc` #helf_y = 10.500000
###################################
我在运行时出现以下错误提示:
SET:VARIABLE NAME MUST BEGIN WITH A LETTER
不知道为什么?
请小编帮忙!
以下是引用renzuguo在2004-7-23 10:45:14的发言:
我在运行时出现以下错误提示:
SET:VARIABLE NAME MUST BEGIN WITH A LETTER
不知道为什么?
请小编帮忙!
設定變數時,其變數名稱開頭不能是非字元
例如:
set -a = aaa #因為"-"在程式的作用為數學運算子,所以會得到以下錯誤
SET:VARIABLE NAME MUST BEGIN WITH A LETTER
#################################################
但若改成
set _a = aaa #ok!
set a=aaa #ok!
建議變數名稱開頭為英文字,這樣之後的debug也較方便..........
小编你好!
我的程序头是这样定义的#!/bin/cshCOM units,type=mmset bx = 215set by = 300@ ddsize=1000@ bx1=$bx + 5@ by1=$by + 5@ bx2=$bx - 7@ by2=$by - 7@ bx3=$bx - 6@ by3=$by - 6@ bx31=$bx - 10set half_bx='echo "scale=2;$bx /2 -15" | bc'set bx4=$half_bx - 15set half_by='echo "scale=2;$by /2 -15" | bc'set by4=$half_by - 15set by5=$half_by @ bx6=$bx - 16@ by6=$by - 16仍然会出现提示“SET:VARIABLE NAME MUST BEGIN WITH A LETTER”
请问我哪边弄错了?不好意思又麻烦你了。
以下是引用renzuguo在2004-7-23 13:09:06的发言:
小编你好!
我的程序头是这样定义的#!/bin/cshCOM units,type=mmset bx = 215set by = 300@ ddsize=1000@ bx1=$bx + 5@ by1=$by + 5@ bx2=$bx - 7@ by2=$by - 7@ bx3=$bx - 6@ by3=$by - 6@ bx31=$bx - 10set half_bx='echo "scale=2;$bx /2 -15" | bc'set bx4=$half_bx - 15set half_by='echo "scale=2;$by /2 -15" | bc'set by4=$half_by - 15set by5=$half_by @ bx6=$bx - 16@ by6=$by - 16仍然会出现提示“SET:VARIABLE NAME MUST BEGIN WITH A LETTER”
请问我哪边弄错了?不好意思又麻烦你了。
set half_bx='echo "scale=2;$bx /2 -15" | bc'
錯了!應該是 set half_bx=`echo "scale=2;$bx /2 -15" | bc` 引號要用ESC鍵下面那一個
set bx4=$half_bx - 15錯了!應該是set bx4=`echo "$half_bx - 15"|bc` #不然就是你要用@
set by4=$half_by - 15錯了!應該是set by4=`echo "$half_by - 15"|bc` #不然就是你要用@
建議初學者寫程式時還是統一用set by4=`echo "$half_by - 15"|bc`之類的語法
儘量不要混合兩種以上計算運算子,避免debug困難
下面才是正確的.............
#!/bin/cshCOM units,type=mmset bx = 215set by = 300@ ddsize=1000@ bx1=$bx + 5@ by1=$by + 5@ bx2=$bx - 7@ by2=$by - 7@ bx3=$bx - 6@ by3=$by - 6@ bx31=$bx - 10set half_bx=`echo "scale=2;$bx /2 -15" | bc`set bx4=`echo "$half_bx - 15"|bc`set half_by=`echo "scale=2;$by /2 -15" | bc`set by4=`echo "$half_by - 15"|bc`set by5=$half_by @ bx6=$bx - 16@ by6=$by - 16