微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > PCB设计问答 > Genesis学习交流 > 能否开辟一个GENESIS script 的讨论区?

能否开辟一个GENESIS script 的讨论区?

时间:10-02 整理:3721RD 点击:
GENESIS SCRIPTS 编写中遇到的问题有哪些?
我希望大家与我交流,可以在这里发贴,现场解决问题,还有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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top