PROTEL是Altium公司在80年代末推出的EDA軟件,在電子行業的CAD軟件中,它當之無愧地排在眾多EDA軟件的前面,是電子設計者的首選軟件,它較早就在國內開始使用,在國內的普及率也最高,有些高校的電子專業還專門開設了課程來學習它,幾乎, 以下是為大家整理的關于protel實習報告4篇 , 供大家參考選擇。
protel實習報告4篇
【篇一】protel實習報告
電子信息工程學院
電子設計應用軟件訓練任務
【訓練任務】
(一)PROTEL部分
1、熟練掌握PROTEL軟件的使用;
2、按要求繪制電路原理圖;
3、能夠按要求建立元件庫和封裝庫;
4、按要求根據電路原理圖繪制PCB版圖(能夠用自動布線和手動布線相結合)。
(二)軟件設計部分
按照給定的軟件設計任務完成相應的軟件設計
【基本要求及說明】
(一)PROTEL部分
1、電路原理圖圖紙尺寸設置為A4;
2、電路原理圖見附圖;
3、按指定電路圖在PROTEL 99中繪制原理圖;
4、根據原理圖繪制印制板圖;
5、根據要求創建原理圖器件和該器件的相應的封裝。
(二)軟件設計部分
按軟件設計要求實現相應的功能
【按照要求撰寫總結報告】
指導教師 年 月 日
負責教師 年 月 日
學生簽字 年 月 日
成績評定表
PROTEL 訓 練 任 務
PROTEL部分
一、 主要任務
1.熟練掌握PROTEL軟件的使用;
2.按要求繪制電路原理圖;
3.能夠按要求建立元件庫和封裝庫;
4.按要求根據電路原理圖繪制PCB版圖
二、 原理圖繪制說明
1.(1)運行protel軟件,點擊File進入編輯環境,點擊新建,確定存儲途徑,進。
入新界面,新建原理圖文檔,如圖1所示。
圖1新建文件窗口示意圖
(2)設置紙張大小,進入設計界面,選擇A4,如圖2所示。
圖2紙張設置窗口示意圖
(3)元件放置,先把需要的元件導入到元件庫,選擇需要的元件放置在設置的紙張上,并進行連線。
(4)進行布局和布線,完成原理圖后,先對電路進行檢測,看是否有元件重名﹑是否編號以及封裝等問題,并創建網絡表。
(5)對元器件以及布線進行調整,點擊設計項中的網絡表選項,導入生成的網絡表,對器件的封裝進行檢查。
2.建立元件庫
首先打開元件庫編輯器,為所要創建的元件命名,在繪圖工具欄中選出所需原件的形狀,并根據所需器件的特點進行加工﹑改造,并將其保存起來,放置到原理圖的指定位置。
3.電器規則檢查
點擊工具欄中的電器規則檢查窗口,結果如圖3所示。
圖3電器規則檢查結果
三、印制板圖繪制說明
1.根據網絡表文件生成PCB圖
在原理圖窗口下,選擇建立網絡表,點擊即可生成網絡表文件,并進行檢查,若檢查無誤,就可以新建一個PCB文件,點擊設計中的裝入網絡,在彈出窗口中點擊執行,即可生成PCB圖。如圖4所示。
圖4網絡表的載入
2.根據PCB圖繪制印制板圖
調整好PCB圖,選擇keepout layer選項,將PCB圖框上,再進行自動布線,完 成布線后,印制電路板的繪制工作就完成了。
3.元件封裝的創建
啟動元件封裝編輯器,新建一個PCB庫文檔,進入元件封裝編輯界面。新建的元件封裝如圖5所示。
圖5元件封裝編輯
四、繪制電路簡要分析
在繪制過程中,要準確選擇元器件以及相應的封裝,連線時,注意各個節點的相接,在生成的PCB圖中有未連上的節點,此時我們可以進行手動布線。在完成每個步驟時都應該仔細檢查并進行完善。
五、體會及合理化建議
在這次實習中,我收獲很大,接觸了新的一種工具—Protel,并進一步熟悉了它,剛開始接觸時,對其一無所知,不了解Protel是用來干什么的,有什么用途,能使笑什么功能,但經過翻閱資料、觀看網上的教學視頻、與同學之間的討論之后,終于對其基本功能熟練掌握了,并運用它完成了老師給我們布置的設計。在這次實習過程中,我覺得學生與老師的交流太少了,希望老師能給我們更多交流的機會。
附錄I 電路原理圖
附錄II 印制板圖
軟件設計任務
銀行業務模擬
課程設計的內容及要求:
一、問題描述
客戶業務分為兩種。第一種是申請從銀行得到一筆資金,即取款或借款。第二種是向銀行投入一筆資金,即存款或還款。銀行有兩個服務窗口,相應地有兩個隊列。客戶到達銀行后先排第一個隊。處理每個客戶業務時,如果屬于第一種,且申請額超出銀行現存資金總額而得不到滿足,則立刻排入第二個隊等候,直至滿足時才離開銀行;否則業務處理完后立刻離開銀行。每接待完一個第二種業務的客戶,則順序檢查和處理(如果可能)第二個隊列中的客戶,對能滿足的申請者予以滿足,不能滿足者重新排到第二個隊列的隊尾。注意,在此檢查過程中,一旦銀行資金總額少于或等于剛才第一個隊列中最后一個客戶(第二種業務)被接待之前的數額,或者本次已將第二個隊列檢查或處理了一遍,就停止檢查(因為此時已不可能還有能滿足者)轉而繼續接待第一個隊列的客戶。任何時刻都只開一個窗口。假設檢查不需要時間。營業時間結束時所有客戶立即離開銀行。 寫一個上述銀行業務的事件驅動模擬系統,通過模擬方法求出客戶在銀行內逗留的平均時間。 利用動態存儲結構實現模擬。
二、實現提示
事件有兩類:到達銀行和離開銀行。初始資金總額為total。開始營業后的第一個事件是客戶到達,營業時間從0到closetime。到達事件發生時隨機地設置此客戶的交易時間和距下一到達事件之間的時間間隔。每個客戶要辦理的款額也是隨機確定,用負值和正值分別表示第一類和第二類業務。變量total、closetime以及上述兩個隨機量的上下界均交互地從終端讀入,作為模擬參數。 兩個隊列和一個事件表均要用動態存儲結構。注意:事件表是按時間順序有序。時間可用C語言的時間函數。
三、測試數據
一天營業開始時銀行擁有的款額為10000(元),營業時間為600(分鐘)。其他參量自定。
四、按照要求撰寫課程設計報告
軟件設計部分
一、題目分析
客戶業務分為兩種。第一種是申請從銀行得到一筆資金,即取款或借款。第二種是向銀行投入一筆資金,即存款或還款。銀行有兩個服務窗口,相應地有兩個隊列。客戶到達銀行后先排第一個隊。處理每個客戶業務時,如果屬于第一種,且申請額超出銀行現存資金總額而得不到滿足,則立刻排入第二個隊等候,直至滿足時才離開銀行;否則業務處理完后立刻離開銀行。每接待完一個第二種業務的客戶,則順序檢查和處理(如果可能)第二個隊列中的客戶,對能滿足的申請者予以滿足,不能滿足者重新排到第二個隊列的隊尾。注意,在此檢查過程中,一旦銀行資金總額少于或等于剛才第一個隊列中最后一個客戶(第二種業務)被接待之前的數額,或者本次已將第二個隊列檢查或處理了一遍,就停止檢查(因為此時已不可能還有能滿足者)轉而繼續接待第一個隊列的客戶。任何時刻都只開一個窗口。假設檢查不需要時間。營業時間結束時所有客戶立即離開銀行。
經分析得到流程圖如圖1所示:
存款 取款
否
否 是
是
圖1總流程圖
二、設計過程
根據題目要求,有兩種業務,分別為從銀行得到資金和投入資金,并且有兩個窗口,到達客戶先排第一個窗口,若不能滿足其要求,則排第二個窗口,并繼續等待,直至滿足后才離開銀行。因此,主程序如圖2所示。
圖2主程序流程圖
據題意可知,需要創建兩個隊列,其中隊列1的初始化流程圖如圖3所示。
圖3初始化隊列流程圖
在交易完成后,為了節約存儲空間,需要將原來創建的兩個隊列撤銷,其中,隊列1的撤銷流程圖如圖4所示。
圖4銷毀隊列流程圖
當客戶進入銀行后,客戶需進入隊列進行交易,其入隊流程圖如圖5所示。
圖5隊列入隊流程圖
當客戶在銀行完成交易后,須離開銀行,此時,要進行出隊操作,其出隊操作如圖6所示。
圖6隊列出隊流程圖
三、調試過程及實驗結果
1.調試過程
程序在調試過程中并不是十分理想,所編寫的程序還存在一些問題,包括一些符號的遺漏,語法的錯誤等,通過debug的提示,找到根源,對程序進行了仔細的修改,并加以完善,然后在編譯并執行,可是仍然有一些小錯誤,在同學的指導及查閱相關資料,終于將錯誤全部改正,正確執行了該程序。
執行過程如圖7所示。
圖7執行過程窗口
2.實驗中需要自己輸入四個值,前兩個是題目中給定的,后兩個可根據實際情況
任意給出兩個值,實驗結果如圖8所示。
圖8實驗結果窗口
四、結論
本程序基于棧和隊列,實現了銀行業務的模擬,通過模擬的方法求出客戶在銀行的逗留時間。通過本次實驗,提高了自已調試程序的能力。充分體會到了在程序執行時的提示性輸出的重要性。編寫大一點的程序,應用先寫出算法,再寫程序,調試時一段一段調試;對于沒有實現在操作用空操作代替,這樣容易找出錯誤所在。最忌諱將所有代碼寫完后再調試,這樣的話錯誤就比較難找,在編寫過程中遇到了很多難題,通過參考各種資料書、教材和網上資料,把能解決的問題都解決了,在此過程中,我學到了很多新的、原來不熟悉的知識點。
通過與同學的討論,讓我的思維更加開闊,雖然與老師的交流很少,到這也未必不是一件好事,有老師在的話,很多問題我們就不會去多想,直接去詢問老師,而這正好給我提供了自己獨立思考并解決問題的機會,有了這種壓力,思維也就變得活躍了,解決問題的能力也就加強了。
五、程序清單
#include
#include
#define MONEY 100000
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define CK 1
typedef int status;
typedef struct{
int arrivetime;
int OccurTime;
int NType;
int duration;
long int money;
}Event,ElemType1;
typedef struct{
int arrivetime;
int duration;
long int money;
}wait,ElemType2;
typedef struct QNode1{
ElemType1 data;
struct QNode1 *next;
}QNode1,*Queue1;
typedef struct QNode2{
ElemType2 data;
struct QNode2 *next;
}QNode2,*Queue2;
typedef struct{
Queue1 front;
Queue1 rear;
}LinkQueue1;
typedef struct{
Queue2 front;
Queue2 rear;
}LinkQueue2;
long int total_money;
int total_time;
int use_time;
int money;
int closetime;
int INTERTIME;
int DURATION;
int pe_num;
int time1;
LinkQueue1 Q1;
LinkQueue2 Q2;
Event en;
wait en1;
status InitQueue1()
{Q1.front=Q1.rear=(Queue1)malloc(sizeof(QNode1));
if(!Q1.front)exit(OVERFLOW);
Q1.front->next=NULL;
return OK;
}
status InitQueue2()
{Q2.front=Q2.rear=(Queue2)malloc(sizeof(QNode2));
if(!Q2.front)exit(OVERFLOW);
Q2.front->next=NULL;
return OK;
}
status destroyqueue1()
{while(Q1.front)
{Q1.rear=Q1.front->next;
free(Q1.front);
Q1.front=Q1.rear;
}
return OK;
}
status destroyqueue2()
{while(Q2.front)
{Q2.rear=Q2.front->next;
free(Q2.front);
Q2.front=Q2.rear;
}
return OK;
}
status EnQueue1()
{Queue1 p,r,r1;
p=(Queue1)malloc(sizeof(QNode1));
if(!p)exit(OVERFLOW);
p->data.arrivetime=en.arrivetime;
p->data.OccurTime=en.OccurTime;
p->data.NType=en.NType;
p->data.duration=en.duration;
p->data.money=en.money;
r=Q1.front->next;
while(r)
{if(p->data.OccurTime < r->data.OccurTime)
{ if(r==Q1.front->next)
{p->next=r;
Q1.front->next=p;
}
else{r1->next=p;
p->next=r;
}
}
r1=r;r=r->next;
}
if(!r)
{ if(Q1.front->next==NULL)
{Q1.front->next=p;
Q1.rear=p;
Q1.rear->next=NULL;
}
else{
p->next=NULL;
Q1.rear->next=p;
Q1.rear=p;}
}
return OK;
}
status EnQueue2()
{Queue2 p;
p=(Queue2)malloc(sizeof(QNode2));
if(!p)exit(OVERFLOW);
p->data.arrivetime=en1.arrivetime;
p->data.duration=en1.duration;
p->data.money=en1.money;
p->next=NULL;
Q2.rear->next=p;
Q2.rear=p;
return OK;
}
status DeQueue1()
{ Queue1 p;
if(Q1.front==Q1.rear)return ERROR;
p=Q1.front->next;
en.arrivetime=p->data.arrivetime;
en.OccurTime=p->data.OccurTime;
en.NType=p->data.NType;
en.duration=p->data.duration;
en.money=p->data.money;
Q1.front->next=p->next;
if(Q1.rear==p)Q1.rear=Q1.front;
free(p);
return OK;
}
status DeQueue2()
{ Queue2 p;
if(Q2.front==Q2.rear)return ERROR;
p=Q2.front->next;
en1.arrivetime=p->data.arrivetime;
en1.duration=p->data.duration;
en1.money=p->data.money;
Q2.front->next=p->next;
if(Q2.rear==p)
Q2.rear=Q2.front;
free(p);
return OK;
}
void free_system()
{destroyqueue1();
destroyqueue2();
}
status rand_ar(int *intertime,int *money, int *duration,int *NType)
{
*intertime=rand()%INTERTIME+1;
*money=rand()%MONEY+1;
*duration=rand()%DURATION+1;
*NType=rand()%2;
return OK;
}
void OpenForDay()
{
printf(" 請輸入初始額:");
scanf("%d",&total_money);
printf(" 請輸入營業時間:");
scanf("%d",&closetime);
printf(" 請輸入最大到達時間間隔:");
scanf("%d",&INTERTIME);
printf(" 請輸入最大處理時間:");
scanf("%d",&DURATION);
total_time=0;
pe_num=0;
InitQueue1();
InitQueue2();
en.arrivetime=0;
en.OccurTime=0;
en.NType=0;
en.money=0;
en.duration=0;
EnQueue1();
}
int find_dep()
{Queue1 p;
int i=0;
p=Q1.front->next;
while(p!=NULL)
{if(p->data.NType!=0)
i=p->data.OccurTime;
p=p->next;
}
return i;
}
void CustomerArrived()
{
int intertime;
int i;
time1=en.OccurTime;
rand_ar(&intertime,&(en.money), &(en.duration),&(en.NType));
en.NType++;
i=find_dep();
if(i==0)
en.OccurTime=en.arrivetime+en.duration;
else
if(i>=en.arrivetime)
en.OccurTime=i+en.duration;
else
en.OccurTime=en.arrivetime+en.duration;
EnQueue1();
en.arrivetime=en.arrivetime+intertime;
en.OccurTime=en.arrivetime;
en.NType=0;
en.money=0;
en.duration=0;
EnQueue1();
}
int getlong_q2()
{int i=0;
Queue2 p;
p=Q2.front->next;
while(p)
{i++;
p=p->next;
}
return i;
}
status check_q2()
{
int i;
int j,z=0;
int time=0;
i=getlong_q2();
for(j=1;j=closetime)
{use_time=closetime-en1.arrivetime;
pe_num++;
printf("--\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",z,use_time,pe_num,z,en1.arrivetime,z);
}
EnQueue2();
}
}
return OK;
}
status cut_duration(int e)
{Queue1 p;
Queue1 q;
Queue1 r;
ElemType1 en;
p=Q1.front->next;
r=Q1.front;
while(p)
{if(p->data.NType!=0)
{p->data.OccurTime=p->data.OccurTime-e;
q=p->next;
r->next=q;
en.arrivetime=p->data.arrivetime;
en.OccurTime=p->data.OccurTime;
en.NType=p->data.NType;
en.duration=p->data.duration;
en.money=p->data.money;
free(p);
EnQueue1();
}
else
{r=p;
p=p->next;
}
}
return OK;
}
void CustomerDeparture()
{ int i;
i=en.NType;
time1=en.OccurTime-en.duration;
if(i==CK)
{ if(en.OccurTime>closetime)
free_system();
else
{ use_time=en.OccurTime-en.arrivetime;
total_time+=use_time;
total_money=total_money+en.money;
pe_num++;
time1=en.OccurTime;
printf("%ld\t\t%d\t\t%d\t\t%d\t\t%d\t%d\n",total_money,use_time,pe_num,en.OccurTime,en.arrivetime,en.money);
check_q2();
}
}
else {if(en.money>total_money)
{ en1.arrivetime=en.arrivetime;
en1.duration=en.duration;
en1.money=en.money;
EnQueue2();
cut_duration(en.duration);
}
else
{if(en.OccurTime>closetime)
free_system();
else
{use_time=en.OccurTime-en.arrivetime;
total_time+=use_time;
total_money-=en.money;
time1=en.OccurTime;
pe_num++;
printf("%ld\t\t%d\t\t%d\t\t%d\t\t%d\t-%d\n",total_money,use_time,pe_num,en.OccurTime,en.arrivetime,en.money);
}
}
}
}
main()
{
float k=0;
int j=0,z=0,i=0;
while(i==0)
{
printf(" 銀行業務模擬系統\n");
OpenForDay();
printf(" **************************************************************************\n");
printf("銀行余額\t交易耗時\t次序\t 發生時間\t 到達時間\t交易額\n");
{while(Q1.rear)
{DeQueue1();
if(en.NType==0)
CustomerArrived();
else
CustomerDeparture();
}
z=total_time;
j=pe_num;
k=(float)z/j;
printf("交易后銀行余額: %ld\n",total_money) ;
printf("客戶逗留總時間: %d\n",total_time);
printf("交易總人數: %d\n",pe_num);
printf("客戶平均逗留時間: %f\n",k);
printf("按"0"重新進行模擬 \n");
printf("按"1"鍵退出系統");
scanf(" %d",&i);
system("cls");
}
}
}
參考文獻
1.陳曉鴿, 昂軍, 胡仁喜,《Protel 99 SE標準實例教程》,北京:機械工業出社,2010.09
2.趙景波,《Protel 99 SE電路設計與制版》,北京:機械工業出版社,2010.03
3.趙月飛, 郭會平, 胡仁喜,《Protel 99 SE基礎與實例教程》,北京:機械工業出版社,2010.01
4.陳錦玲,《Protel 99SE電路設計與制版快速入門》,北京:人民郵電出版社,2008.08
5.清源科技,《Protel 99 SE電路原理圖與PCB設計及仿真》,北京:機械工業出版社,2007
6.史濟民、李建平,《軟件技術基礎實用教程》,北京:人民郵電出版社,1998.05
7.周大為,《軟件技術基礎》,西安:西安電子科技大學出版社,2008
8.梁宏濤,姚立新,《C語言程序設計與應用》,北京:北京郵電大學出版社,2011.01
9.譚浩強,《C程序設計(第三版)》,北京:清華大學出版社,2005.07
10.劉彥明,《計算機軟件技術基礎教程》,西安:西安電子科技大學出版社,2001.02
【篇二】protel實習報告
將Protel?99?SE的元件庫轉換到Protel?DXP中
在Protel 99 SE中有部分封裝元件是Protel DXP中沒有的,如果一個一個地去創建這些元件,不僅費事,而且可能會產生錯誤,如果將Protel 99 SE中的封裝庫導入Protel DXP中實際是很方便的,而且事半功倍。
方法是:啟動Protel99 SE,新建一個*.DDB工程,在這個工程中導入需要的封裝庫,需要幾個就導入幾個,然后保存工程并關閉Protel 99 SE。
啟動Protel DXP,打開剛保存的*.DDB文件,這時,Protel DXP會自動解析*.DDB文件中的各文件,并將它們保存在 “*/”目錄中,以后就可以十分方便地調用了。其實對Protel 99、Protel2.5等以前的版本的封裝元件庫也可以用導入的方法將封裝元件庫導入Protel DXP中。
【篇三】protel實習報告
Protel 99 SE網絡表錯誤的分析與處理
Protel 99 SE網絡表錯誤的分析與處理
?
?
網絡表是Protel 99 SE中一個非常重要的觀念,因為網絡表是電路原理圖與PCB板之間的“橋梁”,是生成PCB文件的基本依據。網絡表使用類C語言描述了電路中每個元器件等電路要素的標號(Designator)、型號(Type)、封裝(Package)及利用電氣網絡名(Net)確定的引腳連接關系。其描述信息,將被提供給PCB設計子系統,用來確定在PCB板上將用到哪些封裝及其焊盤(Pad)間的連接。
在電路的計算機輔助設計教學與工程設計中,當PCB設計子系統導入網絡表的時候,經常會發生網絡表導入錯誤的提示,而這些錯誤是必須處理的,否則將無法準確完成PCB的設計。
1.網絡表結構分析
Protel 99 SE有多種網絡表格式,比較常用的是Protel格式,其擴展名為.Net,是由元器件描述和網絡描述兩大部分構成的。該文件使用“[”、“]”(或“(”、“)”)來描述一個元器件(或一個網絡)。
(1)元器件描述
例句:
[
C3
RB.2/.4
10uF
]
在方括號中,描述了一個元器件的主要屬性,第一行描述元件標號,第二行描述該元件在PCB板中的封裝形式,第三行描述元件的型號(或參數值)。該例句的含義是:元器件為電解電容,其標號為C3、值為10uF、封裝為RB.2/.4。
(2)網絡描述
例句:
(
Net3
IC1-10
C3-2
)
在圓括號中,第一行描述網絡名稱,第二行開始描述網絡中的節點信息,節點信息包括元器件標號和引腳序號。該例句含義是:網絡Net3,該網絡包括了兩個相連的引腳-集成塊IC1的10號引腳與電容C3的2號引腳。
2. 網絡表常見錯誤類型
在PCB設計子系統導入網絡表時,常見的錯誤類型如下:
元器件的引腳序號與對應封裝的焊盤序號不一致
原理圖中元器件未定義封裝
定義的封裝非法或在當前封裝庫中不存在
封裝庫未加載
封裝在所有的封裝庫中不存在
3. 常見錯誤分析與處理
在導入網絡表時,錯誤信息提示多種多樣,這里以若干例子介紹網絡表常見錯誤及其分析、處理方法。
例1:錯誤信息:Add new Component U2 Error:Footprint SMS not found in Library
該信息表明,在導入元器件U2時,在當前封裝庫中未發現U2的封裝-SMS。
原因:在原理圖中定義的封裝名-SMS,在當前封裝庫中沒有,或該封裝名輸入有誤。
處理方法:檢查封裝名是否輸入錯誤,檢查該封裝是否存在于Protel 99 SE的封裝庫索引中。若是前者,則在原理圖中重新輸入封裝名,重新創建網絡表;若是該封裝在未加載的封裝庫中,則需要加載封裝庫;若是排除了前兩個原因,那么可以肯定該封裝是未定義的,需要設計者自建該封裝。
例2:錯誤信息:Add node D1-1 to Net +5 Error: Node not found
該信息表明,在所定義的封裝中,與網絡Net +5中元器件D1的1號引腳對應的焊盤未找到。
原因:該元器件的封裝是存在的,但封裝的焊盤序號與原理圖中該元器件的電氣圖形的引腳序號不一致,如在電氣圖形中引腳序號使用數碼表示(“1”、“2”),,而在封裝中對應焊盤的序號卻使用字母表示(“A”、“K”)。
處理方法:打開包含該封裝的封裝庫,修改該封裝焊盤的序號為數碼(必須與原理圖中電氣圖形的序號表示一致),或打開原理圖元器件庫,修改元器件電氣圖形的序號為字母,然后單擊“Update Schematic”,重新創建網絡表。
例3:Add new Component C1 Footprint not Found in Library
該信息表明,元器件C1的封裝未定義。
原因:在原理圖中,沒有給出C1的封裝。
處理方法:回到原理圖,為C1定義一個封裝,重新創建網絡表,或在網絡表中,直接為C1輸入封裝名,并保存網絡表文件。
以上錯誤處理完畢后,再重新導入網絡表,則可順利進入PCB設計階段。
4.網絡表比較
在PCB設計完成后,為保證電路設計的準確性,對PCB與原理圖進行比較是必要的技術措施之一。利用Protel 99 SE提供的網絡表比較功能,可以將PCB生成的網絡表與由原理圖生成的網絡表進行比較,從而發現原理圖與PCB之間是否存在不一致。
首先,在PCB設計子系統中,導出網絡表。方法是:單擊菜單Design-Netlist Manager…,進入網絡表管理器,通過其中的Menu-Export Netlist from PCB…命令,導出其網絡表。
其次,利用Menu-Compare Netlists…命令,對原理圖生成的網絡表與PCB導出的網絡表進行比較,系統自動生成比較報告文件。
最后,對比較報告文件進行分析。
下面是網絡表比較后報告文件示例。
Error: Extra Component in File E1 J3
Error: Extra net in File E1 J3-2
Error: Extra net in File E1 J3-1
Total components with Footprints changed = 0
Total components with Comments changed = 0
Total extra components = 1
Total missing components = 0
Total nets with names changed = 0
Total nets with missing/extra pins = 0
Total extra nets in E1 = 2
Total extra nets in E2 = 0
Total nets in E1 = 23
Total nets in E2 = 21
Total components in E1 = 23
Total components in E2 = 22
從網絡表比較報告文件中,可以發現有三處不一致的地方,即PCB板多了一個封裝(標號為J3)、兩個網絡(J3-1、J3-2)。實際上這三個錯誤都是因為在PCB板上多了一個連接器(J3)封裝造成的。在此需要按照實際電路的設計,保留或去掉該封裝。
5.結語
網絡表是一個非常重要的觀念,在PCB設計中具有特殊地位,因此在電路的計算機輔助設計的教學與工程設計中,掌握網絡表錯誤的分析與處理是至關重要的。
【篇四】protel實習報告
原理圖常用庫文件:
MiscellaneousDevices.ddbDallasMicroprocessor.ddbIntelDatabooks.ddb
ProtelDOSSchematicLibraries.ddbPCB元件常用庫:Advpcb.ddbGeneralIC.ddbMiscellaneous.ddb
分立元件庫
部分分立元件庫元件名稱及中英對照
AND與門ANTENNA天線BATTERY直流電源BELL鈴,鐘
BVC同軸電纜接插件BRIDEG1整流橋(二極管BRIDEG2整流橋(集成塊BUFFER緩沖器BUZZER蜂鳴器CAP電容CAPACITOR電容
CAPACITORPOL有極性電容CAPVAR可調電容
CIRCUITBREAKER熔斷絲COAX同軸電纜CON插口
CRYSTAL晶體整蕩器DB并行插口
DIODE二極管
DIODESCHOTTKY穩壓二極管DIODEVARACTOR變容二極管DPY_3-SEG3段LEDDPY_7-SEG7段LED
DPY_7-SEG_DP7段LED(帶小數點ELECTRO電解電容FUSE熔斷器INDUCTOR電感
INDUCTORIRON帶鐵芯電感INDUCTOR3可調電感JFETNN溝道場效應管JFETPP溝道場效應管LAMP燈泡
LAMPNEDN起輝器LED發光二極管METER儀表
MICROPHONE麥克風MOSFETMOS管MOTORAC交流電機MOTORSERVO伺服電機NAND與非門NOR或非門NOT非門NPNNPN三極管NPN-PHOTO感光三極管OPAMP運放or或門
PHOTO感光二極管PNP三極管
NPNDARNPN三極管PNPDARPNP三極管
POT滑線變阻器
PELAY-DPDT雙刀雙擲繼電器RES1.2電阻RES3.4可變電阻
RESISTORBRIDGE?橋式電阻RESPACK?電阻SCR晶閘管PLUG?插頭
PLUGACFEMALE三相交流插頭SOCKET?插座
SOURCECURRENT電流源SOURCEVOLTAGE電壓源SPEAKER揚聲器SW?開關
SW-DPDY?雙刀雙擲開關SW-SPST?單刀單擲開關SW-PB按鈕
THERMISTOR電熱調節器TRANS1變壓器TRANS2可調變壓器TRIAC?三端雙向可控硅TRIODE?三極真空管VARISTOR變阻器ZENER?齊納二極管DPY_7-SEG_DP數碼管SW-PB開關
其他元件庫
ProtelDosSchematic4000Cmos.Lib




