㈠ 如何編寫一個簡單的linux內核模塊和設備驅動程序
如何編寫Linux設備驅動程序
回想學習Linux操作系統已經有近一年的時間了,前前後後,零零碎碎的一路學習過來,也該試著寫的東西了。也算是給自己能留下一點記憶和回憶吧!由於完全是自學的,以下內容若有不當之處,還請大家多指教。
Linux是Unix操作系統的一種變種,在Linux下編寫驅動程序的原理和思想完全類似於其他的Unix系統,但它dos或window環境下的驅動程序有很大的區別。在Linux環境下設計驅動程序,思想簡潔,操作方便,功能也很強大,但是支持函數少,只能依賴kernel中的函數,有些常用的操作要自己來編寫,而且調試也不方便。
以下的一些文字主要來源於khg,johnsonm的Write linux device driver,Brennan's Guide to Inline Assembly,The Linux a-z,還有清華bbs上的有關device driver的一些資料。
一、Linux device driver 的概念
系統調用是操作系統內核和應用程序之間的介面,設備驅動程序是操作系統內核和機器硬體之間的介面。設備驅動程序為應用程序屏蔽了硬體的細節,這樣在應用程序看來,硬體設備只是一個設備文件,應用程序可以象操作普通文件一樣對硬體設備進行操作。設備驅動程序是內核的一部分,它完成以下的功能:
1、對設備初始化和釋放。
2、把數據從內核傳送到硬體和從硬體讀取數據。
3、讀取應用程序傳送給設備文件的數據和回送應用程序請求的數據。
4、檢測和處理設備出現的錯誤。
在Linux操作系統下有三類主要的設備文件類型,一是字元設備,二是塊設備,三是網路設備。字元設備和塊設備的主要區別是:在對字元設備發出讀/寫請求時,實際的硬體I/O一般就緊接著發生了,塊設備則不然,它利用一塊系統內存作緩沖區,當用戶進程對設備請求能滿足用戶的要求,就返回請求的數據,如果不能,就調用請求函數來進行實際的I/O操作。塊設備是主要針對磁碟等慢速設備設計的,以免耗費過多的CPU時間來等待。
已經提到,用戶進程是通過設備文件來與實際的硬體打交道。每個設備文件都都有其文件屬性(c/b),表示是字元設備還是塊設備?另外每個文件都有兩個設備號,第一個是主設備號,標識驅動程序,第二個是從設備號,標識使用同一個設備驅動程序的不同的硬體設備,比如有兩個軟盤,就可以用從設備號來區分他們。設備文件的的主設備號必須與設備驅動程序在登記時申請的主設備號一致,否則用戶進程將無法訪問到驅動程序。
最後必須提到的是,在用戶進程調用驅動程序時,系統進入核心態,這時不再是搶先式調度。也就是說,系統必須在你的驅動程序的子函數返回後才能進行其他的工作。如果你的驅動程序陷入死循環,不幸的是你只有重新啟動機器了,然後就是漫長的fsck。
讀/寫時,它首先察看緩沖區的內容,如果緩沖區的數據未被處理,則先處理其中的內容。
如何編寫Linux操作系統下的設備驅動程序
二、實例剖析
我們來寫一個最簡單的字元設備驅動程序。雖然它什麼也不做,但是通過它可以了解Linux的設備驅動程序的工作原理。把下面的C代碼輸入機器,你就會獲得一個真正的設備驅動程序。
#define __NO_VERSION__
#include <linux/moles.h>
#include <linux/version.h>
char kernel_version [] = UTS_RELEASE;
這一段定義了一些版本信息,雖然用處不是很大,但也必不可少。Johnsonm說所有的驅動程序的開頭都要包含<linux/config.h>,一般來講最好使用。
由於用戶進程是通過設備文件同硬體打交道,對設備文件的操作方式不外乎就是一些系統調用,如 open,read,write,close…, 注意,不是fopen, fread,但是如何把系統調用和驅動程序關聯起來呢?這需要了解一個非常關鍵的數據結構:
struct file_operations
{
int (*seek) (struct inode * ,struct file *, off_t ,int);
int (*read) (struct inode * ,struct file *, char ,int);
int (*write) (struct inode * ,struct file *, off_t ,int);
int (*readdir) (struct inode * ,struct file *, struct dirent * ,int);
int (*select) (struct inode * ,struct file *, int ,select_table *);
int (*ioctl) (struct inode * ,struct file *, unsined int ,unsigned long);
int (*mmap) (struct inode * ,struct file *, struct vm_area_struct *);
int (*open) (struct inode * ,struct file *);
int (*release) (struct inode * ,struct file *);
int (*fsync) (struct inode * ,struct file *);
int (*fasync) (struct inode * ,struct file *,int);
int (*check_media_change) (struct inode * ,struct file *);
int (*revalidate) (dev_t dev);
}
這個結構的每一個成員的名字都對應著一個系統調用。用戶進程利用系統調用在對設備文件進行諸如read/write操作時,系統調用通過設備文件的主設備號找到相應的設備驅動程序,然後讀取這個數據結構相應的函數指針,接著把控制權交給該函數。這是linux的設備驅動程序工作的基本原理。既然是這樣,則編寫設備驅動程序的主要工作就是編寫子函數,並填充file_operations的各個域。
下面就開始寫子程序。
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include<linux/config.h>
#include <linux/errno.h>
#include <asm/segment.h>
unsigned int test_major = 0;
static int read_test(struct inode *node,struct file *file,char *buf,int count)
{
int left;
if (verify_area(VERIFY_WRITE,buf,count) == -EFAULT )
return -EFAULT;
for(left = count ; left > 0 ; left--)
{
__put_user(1,buf,1);
buf++;
}
return count;
}
這個函數是為read調用准備的。當調用read時,read_test()被調用,它把用戶的緩沖區全部寫1。buf 是read調用的一個參數。它是用戶進程空間的一個地址。但是在read_test被調用時,系統進入核心態。所以不能使用buf這個地址,必須用__put_user(),這是kernel提供的一個函數,用於向用戶傳送數據。另外還有很多類似功能的函數。請參考robert著的《Linux內核設計與實現》(第二版)。然而,在向用戶空間拷貝數據之前,必須驗證buf是否可用。這就用到函數verify_area。
static int write_tibet(struct inode *inode,struct file *file,const char *buf,int count)
{
return count;
}
static int open_tibet(struct inode *inode,struct file *file )
{
MOD_INC_USE_COUNT;
return 0;
}
static void release_tibet(struct inode *inode,struct file *file )
{
MOD_DEC_USE_COUNT;
}
這幾個函數都是空操作。實際調用發生時什麼也不做,他們僅僅為下面的結構提供函數指針。
struct file_operations test_fops = {
NULL,
read_test,
write_test,
NULL, /* test_readdir */
NULL,
NULL, /* test_ioctl */
NULL, /* test_mmap */
open_test,
release_test,
NULL, /* test_fsync */
NULL, /* test_fasync */
/* nothing more, fill with NULLs */
};
這樣,設備驅動程序的主體可以說是寫好了。現在要把驅動程序嵌入內核。驅動程序可以按照兩種方式編譯。一種是編譯進kernel,另一種是編譯成模塊(moles),如果編譯進內核的話,會增加內核的大小,還要改動內核的源文件,而且不能動態的卸載,不利於調試,所以推薦使用模塊方式。
int init_mole(void)
{
int result;
result = register_chrdev(0, "test", &test_fops);
if (result < 0) {
printk(KERN_INFO "test: can't get major number\n");
return result;
}
if (test_major == 0) test_major = result; /* dynamic */
return 0;
}
在用insmod命令將編譯好的模塊調入內存時,init_mole 函數被調用。在這里,init_mole只做了一件事,就是向系統的字元設備表登記了一個字元設備。register_chrdev需要三個參數,參數一是希望獲得的設備號,如果是零的話,系統將選擇一個沒有被佔用的設備號返回。參數二是設備文件名,參數三用來登記驅動程序實際執行操作的函數的指針。
如果登記成功,返回設備的主設備號,不成功,返回一個負值。
void cleanup_mole(void)
{
unregister_chrdev(test_major,"test");
}
在用rmmod卸載模塊時,cleanup_mole函數被調用,它釋放字元設備test在系統字元設備表中佔有的表項。
一個極其簡單的字元設備可以說寫好了,文件名就叫test.c吧。
下面編譯 :
$ gcc -O2 -DMODULE -D__KERNEL__ -c test.c
得到文件test.o就是一個設備驅動程序。
如果設備驅動程序有多個文件,把每個文件按上面的命令行編譯,然後
ld -r file1.o file2.o -o molename。
驅動程序已經編譯好了,現在把它安裝到系統中去。
$ insmod –f test.o
如果安裝成功,在/proc/devices文件中就可以看到設備test,並可以看到它的主設備號。要卸載的話,運行 :
$ rmmod test
下一步要創建設備文件。
mknod /dev/test c major minor
c 是指字元設備,major是主設備號,就是在/proc/devices里看到的。
用shell命令
$ cat /proc/devices
就可以獲得主設備號,可以把上面的命令行加入你的shell script中去。
minor是從設備號,設置成0就可以了。
我們現在可以通過設備文件來訪問我們的驅動程序。寫一個小小的測試程序。
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
main()
{
int testdev;
int i;
char buf[10];
testdev = open("/dev/test",O_RDWR);
if ( testdev == -1 )
{
printf("Cann't open file \n");
exit(0);
}
read(testdev,buf,10);
for (i = 0; i < 10;i++)
printf("%d\n",buf[i]);
close(testdev);
}
編譯運行,看看是不是列印出全1 ?
以上只是一個簡單的演示。真正實用的驅動程序要復雜的多,要處理如中斷,dma,I/O port等問題。這些才是真正的難點。請看下節,實際情況的處理。
如何編寫Linux操作系統下的設備驅動程序
三、設備驅動程序中的一些具體問題
1。 I/O Port。
和硬體打交道離不開I/O Port,老的isa設備經常是佔用實際的I/O埠,在linux下,操作系統沒有對I/O口屏蔽,也就是說,任何驅動程序都可對任意的I/O口操作,這樣就很容易引起混亂。每個驅動程序應該自己避免誤用埠。
有兩個重要的kernel函數可以保證驅動程序做到這一點。
1)check_region(int io_port, int off_set)
這個函數察看系統的I/O表,看是否有別的驅動程序佔用某一段I/O口。
參數1:I/O埠的基地址,
參數2:I/O埠佔用的范圍。
返回值:0 沒有佔用, 非0,已經被佔用。
2)request_region(int io_port, int off_set,char *devname)
如果這段I/O埠沒有被佔用,在我們的驅動程序中就可以使用它。在使用之前,必須向系統登記,以防止被其他程序佔用。登記後,在/proc/ioports文件中可以看到你登記的I/O口。
參數1:io埠的基地址。
參數2:io埠佔用的范圍。
參數3:使用這段io地址的設備名。
在對I/O口登記後,就可以放心地用inb(), outb()之類的函來訪問了。
在一些pci設備中,I/O埠被映射到一段內存中去,要訪問這些埠就相當於訪問一段內存。經常性的,我們要獲得一塊內存的物理地址。
2。內存操作
在設備驅動程序中動態開辟內存,不是用malloc,而是kmalloc,或者用get_free_pages直接申請頁。釋放內存用的是kfree,或free_pages。 請注意,kmalloc等函數返回的是物理地址!
注意,kmalloc最大隻能開辟128k-16,16個位元組是被頁描述符結構佔用了。
內存映射的I/O口,寄存器或者是硬體設備的ram(如顯存)一般佔用F0000000以上的地址空間。在驅動程序中不能直接訪問,要通過kernel函數vremap獲得重新映射以後的地址。
另外,很多硬體需要一塊比較大的連續內存用作dma傳送。這塊程序需要一直駐留在內存,不能被交換到文件中去。但是kmalloc最多隻能開辟128k的內存。
這可以通過犧牲一些系統內存的方法來解決。
3。中斷處理
同處理I/O埠一樣,要使用一個中斷,必須先向系統登記。
int request_irq(unsigned int irq ,void(*handle)(int,void *,struct pt_regs *),
unsigned int long flags, const char *device);
irq: 是要申請的中斷。
handle:中斷處理函數指針。
flags:SA_INTERRUPT 請求一個快速中斷,0 正常中斷。
device:設備名。
如果登記成功,返回0,這時在/proc/interrupts文件中可以看你請求的中斷。
4。一些常見的問題。
對硬體操作,有時時序很重要(關於時序的具體問題就要參考具體的設備晶元手冊啦!比如網卡晶元RTL8139)。但是如果用C語言寫一些低級的硬體操作的話,gcc往往會對你的程序進行優化,這樣時序會發生錯誤。如果用匯編寫呢,gcc同樣會對匯編代碼進行優化,除非用volatile關鍵字修飾。最保險的辦法是禁止優化。這當然只能對一部分你自己編寫的代碼。如果對所有的代碼都不優化,你會發現驅動程序根本無法裝載。這是因為在編譯驅動程序時要用到gcc的一些擴展特性,而這些擴展特性必須在加了優化選項之後才能體現出來。
寫在後面:學習Linux確實不是一件容易的事情,因為要付出很多精力,也必須具備很好的C語言基礎;但是,學習Linux也是一件非常有趣的事情,它裡麵包含了許多高手的智慧和「幽默」,這些都需要自己親自動手才能體會到,O(∩_∩)O~哈哈!
㈡ sop標准作業流程模板
sop標准作業流程模板:(1)物料名稱及數量(2)工裝夾具(3)設備名稱及參數(4)作業步驟(5)人員配置(6)安全因素
SOP 標准作業程序:
SOP的精髓,就是將細節進行量化,用更通俗的話來說,SOP就是對某一程序中的關鍵控制點進行細化和量化。從對SOP的上述基本界定來看,SOP具有以下一些內在的特徵:
SOP是一種程序。SOP是對一個過程的描述,不是一個結果的描述。同時,SOP又不是制度,也不是表單,是流程下面某個程序中關於控制點如何來規范的程序。
SOP不是單個的,是一個體系,雖然我們可以單獨地定義每一個SOP,但真正
從企業管理來看,SOP不可能只是單個的,必然是一個整體和體系,也是企業不可或缺的。
所謂SOP,是 Standard Operation Procere三個單詞中首字母的大寫 ,即標准作業程序。
是以文件的形式描述作業員在生產作業過程中的操作步驟和應遵守的事項;是作業員的作業指導書;是檢驗員用於指導工作的依據。
「製造」就是以規定的成本、規定的工時、生產出品質均勻、符合規格的產品。要達到上述目的,如果製造現場之作業如工序的前後次序隨意變更,或作業方法或作業條件隨人而異有所改變的話,一定無法生產出符合上述目的的產品。
因此,必須對作業流程、作業方法、作業條件加以規定並貫徹執行,使之標准化。這就是SOP的作用。
將企業積累下來的技術、經驗記錄在標准文件中,以免因技術人員的流動而使技術流失;使操作人員經過短期培訓,快速掌握較為先進合 理的操作技術根據作業標准,易於追查不良品產生的原因;立良好的生產形象,取得客戶信賴與滿意;實現生產管理規范化、生產流程條理化、標准化、形象化、簡單化;是企業最基本、最有效的管理工具和技術資料。
一、什麼是SOP
SOP,又叫「標准作業程序」、「標准操作程序」,英文翻譯是Standard Operation Procere,取三個單詞中首字母的大寫即為SOP.
定義:指將某一事件的標准操作步驟和要求以統一的格式描述出來,用來指導和規范日常的工作。
SOP的精髓,就是將細節進行量化,用更通俗的話來說,SOP就是對某一程序中的關鍵控制點進行細化和量化。
1、SOP的特徵
(1)SOP是一種程序。SOP是對一個過程的描述,不是一個結果的描述。同時,SOP不是制度,也不是表單,是流程下面某個程序中關控制點如何來規范的程序。
(2)SOP是一種作業程序。SOP是一種操作層面的程序,是具體可操作的,不是理念層次上的東西。如果結合ISO9000體系的標准,SOP是屬於三階文件,即作業性文件。
(3)SOP是一種標準的作業程序。所謂標准,有最優化的概念,即不是隨便寫出來的操作程序都可以稱做SOP,而一定是經過不斷實踐總結出來的,在當前條件下可以實現的最優化的操作程序設計。說得更通俗一些,所謂的標准,就是盡可能地將相關操作步驟進行細化、量化和優化,細化、量化和優化的度就是在正常條件下大家都能理解又不會產生歧義。
(4)SOP不是單個的,是一個體系。雖然我們可以單獨地定義每一個SOP,但真正從企業管理來看,SOP不可能只是單個的,必然是一個整體和體系,也是企業不可或缺的,而且這個標准作業程序一定是要做到細化和量化。
2、SOP的作用
(1)將企業積累下來的技術﹑經驗,記錄在標准文件中,以免因技術人員的流動而使技術流失;
(2)使操作人員經過短期培訓,快速掌握較為先進合理的操作技術;
(3)根據作業標准,易於追查不良品產生之原因;
(4)樹立良好的生產形象,取得客戶信賴與滿意。
(5)是貫徹ISO精神核心(說,寫,做一致)之具體體現,實現生產管理規范化、生產流程條理化、標准化、形象化、簡單化。
(6)是企業最基本﹑最有效的管理工具和技術數據。
二、為什麼企業要做SOP
1、為了提高企業的運行效率
由於企業的日常工作有兩個基本的特徵,一是許多崗位的人員經常會發生變動,二是一些日常的工作的基本作業程序相對比較穩定。
不同的人,由於不同的性格、學識和經驗等,可能做事情的方式和步驟各不相同。
即使做事的方式和步驟有相同,但做每件事的標准和度仍會有一些差異。因此,我們就可以通過SOP的方式將微笑進行量化,即將細節進行量化和規范了。
同時,由於SOP本身也是在實踐操作中不斷進行總結、優化和完善、持續改進的產物,在這一過程中積累了許多人的共同智慧,因此相對比較優化,能提高做事效率。
通過每個SOP對相應工作的效率提高,企業通過整體SOP體系必然會提高整體的運行效率。
2、為了提高企業的運行效果
由於SOP是對每個作業程序的控制點操作的優化,這樣每位員工都可以按照SOP的相關規定來做事,就不會出現大的失誤。
即使出現失誤也可以很快地通過SOP加以檢查發現問題,並加以改進。
同時,有了SOP,保證了我們日常工作的連續性和相關知識的積累,也無形中為企業節約了一些管理投入成本。
從每一個企業的經營效果來看,關鍵的競爭優勢在於成本最低或差異化。對於同等條件的競爭企業來看,差異化往往不是在硬體,而是在軟體。
軟體的差異化又往往不是在大的戰略方面,而是在具體的細節。細節的差異化不體現在理解上,而體現在能否將這些細節進行量化,也即細節決定成敗。
因此,從這個意義上來看,SOP對於提高企業的運行效果也是有非常好的促進作用。
三、如何做SOP
(1)先做SOP編寫流程。明確SOP的編號、工序名稱、編寫人、初稿完成時間、小組討論時間及最終的定稿時間。
(2)確定每一個需要做SOP工作的執行步驟。編寫小組要有團隊精神,可以要求相關部門給予支持:專門的時間、提供相關資料等。
(3)套用公司模板,制定SOP。
(4)SOP的討論修訂。統一認識,達成共識。
(5)SOP的試運行。通過實踐來檢驗SOP的合理性和可操作性
(6)SOP的定稿、批准和執行。建立與SOP相應的查核表(工段長、工藝工程師兩級查核)
(7)適時更新。當工藝要求、設備狀況等發生改變,一些操作方法的改進時,要對SOP進行
四、做好SOP六要素
1)物料名稱及數量
2)工裝夾具
3)設備名稱及參數
4)作業步驟
5)人員配置
6)安全因素
1.物料
在生產前須確認好本工位所需的物料和准備的物料是否一致、數量是否正確,物料是否經過IQC檢驗。當全部確認無誤後方能上線生產。
生產過程中絕不接受不良品,絕不生產不良品,絕不傳遞不良品。
2.工裝夾具
每天上班前對夾具進行校準檢查,確認工裝夾具是否能夠正常使用。
3.設備
設備操作工必須經培訓合格後方能上崗操作機器,在設備開啟前先仔細閱讀設備使用說明書及設備各參數的設定值,
然後按照使用說明書對機器進行操作,且確定設定的各參數值與要求的參數值相同。
4.作業步驟
操作步驟是SOP內容中的重點,必須簡潔、明了,讓人一看就懂,一看就知道怎麼操作。
SOP需要達到的效果是一個新人一來就可以獨立操作且產品質量合格,這也是SOP的最高境界。
5.人員配置
SOP中各工位須確定人員,這樣可以避免每天上班還得需要班組長對人員進行分配。
這樣每天上線前員工知道自己要做什麼准備,並且可以讓他們更熟練本工位工作。工位定員的話既可以節約時間,又可以保證質量。
6.安全因素
任何操作都有可能導致產品的質量問題,所以我們在SOP中必須包含操作的注意事項、檢查項目和一些人員安全須知。
㈢ 數控如何編程
問題一:數控車床怎麼編程? O1程序命名,大寫字母O開頭
N1;實際操作裡面,使用N了表示一段工序哪敏
T0101;選擇1號刀具,後面一個01是摩耗仔山
M03 S500;主軸正轉,轉速為500轉
G00 Z1.0;快速靠近工件
X52.;
G71 U1.R0.3;外圓粗加工循環,單邊進給量為0.3
G71 P10Q20U0.1W0.05F0.15;定義粗加工的其他參數
N10 G00 X16.;其實程序段N10,注意第一行一定要走X軸!
G01 Z0 F0.05;F為精加工的進給速度,粗加工不受影響。
X20.Z-2.; 20外圓右邊倒角
Z-20.;20的外圓面
X30.Z-35.; 圓錐面
X40.;40外圓的右端面
Z-45.;40外圓面
X46.;50外圓右端面
X50.W-2.;50外圓右邊倒角
Z-60.;50外圓面
N20 X52.;循環結束段N20
G00 X100.;刀具離開工件
Z100.;
M05;主軸停止,
M00;程序暫停,然後手動測量..
N2精加工程序段
T0202;選擇2號刀具
M03 S1000;主軸正傳1000
G00 Z1.;刀具快速靠近工件
X52.;
G70 P10 Q20;進行精加工
G00 X100.;刀具離開工件
Z100.;
M05;主軸停止
M30;程序停止 就是這樣編程的明白不!
問題二:如何學習數控編程 首先我要強調一下,如果能數控編程各種語言,那麼你在社會人才競爭中就非常有優勢。
目前在國內製造業對數控加工高速增長的需求形勢下,數控編程技術人才出現了嚴重短缺,數控編程技術已成為就業市場上的需求熱點。
一、學好數控編程技術需要具備以下幾個基本條件:
(1)具有基本的學習資質,即學員具備一定的學習能力和預備知識。
(2)有條件接受良好的培訓,包括選擇好的培訓機構和培訓教材。
(3)在實踐中積累經驗。
二、學習數控編程技術,要求學員首先掌握一定的預備知識和技能,包括:
(1)基本的幾何知識(高中以上即可)和機械制圖基礎。
(2)基礎英語(高中以上即可)。
(3)機械加工常識。
(4)基本的三維造型技能。
三、選擇培訓教材應考慮的因素包括:
(1)教材的內容應適合於實際編程應用的要求,以目前廣泛採用的基於CAD/CAM軟體的互動式圖形編程技術為主要內容。在講授軟體操作、編程方法等實用技術的同時也應包含一定的基礎知識,使讀者知其然更知其所以然。
(2)教材的結構。數控編程技術的學習是一個分階段不斷提高的過程,因此教材的內容應按不同的學習階段進行合理的分配。同時,從應用角度對內容進行系統的歸納和分類,便於讀者從整體上理解和記憶。
四、數控編程的學習內容和學習過程基本可以歸納為3個階段:
第1階段:基礎知識的學習,包括數控加工原理、數控程序、數控加工工藝等方面的基礎知識。
第2階段:數控編程技術的學習李戚枝,在初步了解手工編程的基礎上,重點學習基於CAD/CAM軟體的互動式圖形編程技術。
第3階段:數控編程與加工練習,包括一定數量的實際產品的數控編程練習和實際加工練習。
五、學習方法與技巧
同其他知識和技能的學習一樣,掌握正確的學習方法對提高數控編程技術的學習效率和質量起著十分重要的作用。下面是幾點建議:
(1)集中精力打殲滅戰,在一個較短的時間內集中完成一個學習目標,並及時加以應用,避免進行馬拉松式的學習。
(2)對軟體功能進行合理的分類,這樣不僅可提高記憶效率,而且有助於從整體上把握軟體功能的應用。
(3)從一開始就注重培養規范的操作習慣,培養嚴謹、細致的工作作風,這一點往往比單純學習技術更為重要。
(4)將平時所遇到的問題、失誤和學習要點記錄下來,這種積累的過程就是水平不斷提高的過程。
六、如何學習CAM
互動式圖形編程技術的學習(也就是我們常說的CAM編程的要點)可分三個方面:
1、是學習CAD/CAM軟體應重點把握核心功能的學習,因為CAD/CAM軟體的應用也符合所謂的「20/80原則」,即80%的應用僅需要使用其20%的功能。
2、是培養標准化、規范化的工作習慣。對於常用的加工工藝過程應進行標准化的參數設置,並形成標準的參數模板,在各種產品的數控編程中盡可能直接使用這些標準的參數模板,以減少操作復雜度,提高可靠性。
3、是重視加工工藝的經驗積累,熟悉所使用的數控機床、刀具、加工材料的特性,以便使工藝參數設置更為合理。
需要特別指出的是,實踐經驗是數控編程技術的重要組成部分,只能通過實際加工獲得,這是任何一本數控加工培訓教材都不可能替代的。雖然本書充分強調與實踐相結合,但應該說在不同的加工環境下所產生的工藝因素變化是很難用書面形式來表述完整的。
最後,如同學習其他技術一樣,要做到「在戰略上藐視敵人,在戰術上重視敵人」,既要對完成學習目標樹立堅定的信心,同時又腳踏實地地對待每一個學習環節。
所以,只要你對數控編程感興趣,本人嚴重支持你去學它,前途無量啊。
本文參考地址:
...>>
問題三:數控編程怎樣做 20分 教你如何成為數控機床編程高手,建議初學者認真閱讀。要想成為一個數控高手(金屬切削類),從大學畢業進工廠起,最起碼需要6年以上的時間。他既要有工程師的理論水平,又要有高級技師的實際經驗及動手能力。第一步:必須是一個優秀的工藝員。數控機床集鑽、銑、鏜、鉸、攻絲等工序於一體。對工藝人員的技術素養要求很高。數控程序是用計算機語言來體現加工工藝的過程。工藝是編程的基礎。不懂工藝,絕不能稱會編程。其實,當我們選擇了機械切削加工這一職業,也就意味著從業早期是艱辛的,枯糙的。大學里學的一點基礎知識面對工廠里的需要是少得可憐的。機械加工的工程師,從某種程度上說是經驗師。因此,很多時間必須是和工人們在一起,干車床、銑床、磨床,加工中心等;隨後在辦公室里編工藝、估材耗、算定額。你必須熟悉各類機床的性能、車間師傅們的技能水平。這樣經過2-3年的修煉,你基本可成為一個合格的工藝人員。從我個人的經歷來看,我建議剛工作的年輕大學生們,一定要虛心向工人師傅們學習,一旦他們能把數十年的經驗傳授與你,你可少走很多彎路。因為這些經驗書本上是學不到的,工藝的選擇是綜合考慮設備能力和人員技術能力的選擇。沒有員工的支持和信任,想成為優秀的工藝員是不可能的。通過這么長時間的學習與積累,你應達到下列技術水準和要求:1、 熟悉鑽、銑、鏜、磨、刨床的結構、工藝特點,2、 熟悉加工材料的性能。3、 扎實的刀具理論基礎知識,掌握刀具的常規切削用量等。4、 熟悉本企業的工藝規范、准則及各種工藝加工能達到的一般要求,常規零件的工藝路線。合理的材料消耗及工時定額等。5、 收集一定量的刀具、機床、機械標準的資料。特別要熟悉數控機床用的刀具系統。6、 熟悉冷卻液的選用及維護。7、 對相關工種要有常識性的了解。比如:鑄造、電加工、熱處理等。8、 有較好的夾具基礎。9、 了解被加工零件的裝配要求、使用要求。10、有較好的測量技術基礎。第二步:精通數控編程和計算機軟體的應用。這一點,我覺得比較容易,編程指令也就幾十個,各種系統大同小異。一般花1-2個月就能非常熟悉。自動編程軟體稍復雜些,需學造型。但對於cad基礎好的人來說,不是難事。另外,如果是手工編程,解析幾何基礎也要好!讀書人對這些知識的學習是最適應的。在實踐中,一個好程序的標準是:1、 易懂,有條理,操作者人人都能看懂。2、 一個程序段中指令越少越好,以簡單、實用、可靠為目的。從編程角度對指令的理解,我以為指令也就G00和G01,其他都為輔助指令,是方便編程才設置的。3、 方便調整。零件加工精度需做微調時最好不用改程序。比如,刀具磨損了,要調整,只要改刀具偏置表中的長度、半徑即可。4、 方便操作。程序編制要根據機床的操作特點來編,有利於觀察、檢查、測量、安全等。例如,同一種零件,同樣的加工內容,在立式加工中心和卧式加工中心分別加工,程序肯定不一樣。在機械加工中,最簡單的方法就是最好的方法。只要有實踐經驗的同行,想必都會同意這句話吧!第三步:能熟練操作數控機床。這需要1-2年的學習,操作是講究手感的,初學者、特別是大學生們,心裡明白要怎麼干,可手就是不聽使喚。在這過程中要學:系統的操作方式、夾具的安裝、零件基準的找正、對刀、設置零點偏置、設置刀具長度補償、半徑補償,刀具與刀柄的裝、卸,刀具的刃磨、零件的測量(能熟練使用游標卡尺、千分卡、百分表、千分表、內徑杠桿表)等。最能體現操作水平的是:卧式加工中心和大型龍門(動粱、頂梁)加工中心。操作的練習需要悟性!有時真有一種「悠然心會,妙處難與君說」的意境!在數控車間你就靜下心來好好練吧!一般來說,從首件零件的加工到加工......>>
問題四:數控編程的步驟是? 數控機床程序編制的內容主要包括以下步驟:
一.工藝方案分析
?確定加工對象是否適合於數控加工(形狀較復雜,精度一致要求高)
?毛坯的選擇(對同一批量的毛坯餘量和質量應有一定的要求)。
?工序的劃分(盡可能採用一次裝夾、集中工序的加工方法)。
二.工序詳細設計
?工件的定位與夾緊。
?工序劃分(先大刀後小刀,先粗後精,先主後次,盡量「少換刀」)。
?刀具選擇。
?切削參數。
?工藝文件編制工序卡(即程序單),走刀路線示意圖。程序單包括:程序名稱,刀具型號,加工部位與尺寸,裝夾示意圖
三.編寫數控加工程序
?用UG設置編出數控機床規定的指令代碼(G,S,M)與程序格式。
?後處理程序,填寫程序單。
問題五:數控機床怎麼編程序 首先,要樹立一個觀念:想學好數控,必須對數控感興趣。
其次,再談如何學數控:
針對性的學習,學哪個系統,就去記哪個系統的G、M代碼,這很重要。
記熟了這些代碼,並知道什麼時候採用什麼代碼,就可以試著編寫些簡單的零件程序,增加熟練程度。
方便的東西懂得了多了,可以試著加工一些簡單的零件,這樣一來,理論實際相結合,很輕松的就學好數控了。
可以參考下面的模式:
G代碼 組別 解釋 ; G00 01 定位 (快速移動) ; G01 直線切削 ; . G02 順時針切圓弧 (CW,順時鍾) ; G03 逆時針切圓弧 (CCW,逆時鍾) ; G04 00 暫停 (Dwell) ; G09 停於精確的位置 ; G20 06 英制輸入 ; G21 公制輸入 ; G22 04 內部行程限位 有效 ; G23 內部行程限位 無效 ; G27 00 檢查參考點返回 ; G28 參考點返回 ; G29 從參考點返回 ; G30 回到第二參考點 ;G32 01 切螺紋 G40 07 取消刀尖半徑偏置 ;G41 刀尖半徑偏置 (左側) ;G42 刀尖半徑偏置 (右側) ;G50 00 修改工件坐標;設置主軸最大的 RPM ;G52 設置局部坐標系 ;G53 選擇機床坐標系 ;G70 00 精加工循環 ;G71 內外徑粗切循環 ;G72 台階粗切循環 ;G73 成形重復循環 ;G74 Z 向步進鑽削 ;G75 X 向切槽;G76 切螺紋循環 ;G80 10 取消固定循環 ;G83 鑽孔循環 ;G84 攻絲循環 ;G85 正面鏜孔循環 ;G87 側面鑽孔循環 ;G88 側面攻絲循環 ;G89 側面鏜孔循環 ;G90 01 (內外直徑)切削循環 ;G92 切螺紋循環 ;G94 (台階) 切削循環 ;G96 12 恆線速度控制 ;G97 恆線速度控製取消 ;G98 05 每分鍾進給率;G99 每轉進給率 代碼解釋G00 定位1. 格式 G00 X_ Z_ 這個命令把刀具從當前位置移動到命令指定的位置 (在絕對坐標方式下), 或者移動到某個距離處 (在增量坐標方式下)。 2. 非直線切削形式的定位 我們的定義是:採用獨立的快速移動速率來決定每一個軸的位置。刀具路徑不是直線,根據到達的順序,機器軸依次停止在命令指定的位置。 3. 直線定位 刀具路徑類似直線切削(G01) 那樣,以最短的時間(不超過每一個軸快速移動速率)定位於要求的位置。 4. 舉例 N10 G0 X100 Z65G01 直線插補1. 格式 G01 X(U)_ Z(W)_ F_ ;直線插補以直線方式和命令給定的移動速率從當前位置移動到命令位置。X, Z: 要求移動到的位置的絕對坐標值。U,W: 要求移動到的位置的增量坐標值。 2. 舉例① 絕對坐標程序 G01 X50. Z75. F0.2 ;X100.; ② 增量坐標程序G01 U0.0 W-75. F0.2 ;U50. 圓弧插補 (G02, G03)1. 格式 G02(G03) X(U)__Z(W)__I__K__F__ ;G02(G03) X(U)__Z(W)__R__F__ ;G02 C 順時鍾 (CW)G03 C 逆時鍾 (CCW)X, Z C在坐標系裡的終點U, W C 起點與終點之間的距離I, K C 從起點到中心點的矢量 (半徑值)R C 圓弧范圍 (最大180 度)。2. 舉例① 絕對坐標系程序G02 X100. Z90. I50. K0. F0.2或G02 X......>>
問題六:數控機床怎樣進行編程序 數控編程方法
數控機床程序編制(又稱數控機床編程)是指編程者(程序員或數控機床操作者)根據零件圖樣和工藝文件的要求,編制出可在數控機床上運行以完成規定加工任務的一系列指令的過程。具體來說,數控機床編程是由分析零件圖樣和工藝要求開始到程序檢驗合格為止的全部過程。
數控機床編程步驟
1.分析零件圖樣和工藝要求
分析零件圖樣和工藝要求的目的,是為了確定加工方法、制定加工計劃,以及確認與生產組織有關的問題,此步驟的內容包括:
確定該零件應安排在哪類或哪台機床上進行加工。 採用何種裝夾具或何種裝卡位方法。 確定採用何種刀具或採用多少把刀進行加工。 確定加工路線,即選擇對刀點、程序起點(又稱加工起點,加工起點常與對刀點重合)、走刀路線 、程序終點(程序終點常與程序起點重合)。 確定切削深度和寬度、進給速度、主軸轉速等切削參數。 確定加工過程中是否需要提供冷卻液、是否需要換刀、何時換刀等。 2.數值計算
根據零件圖樣幾何尺寸,計算零件輪廓數據,或根據零件圖樣和走刀路線,計算刀具中心(或刀尖)運行軌跡數據。數值計算的最終目的是為了獲得數控機床編程所需要的所有相關位置坐標數據。
3.編寫加工程序單
常用數控機床編程指令
一組有規定次序的代碼符號,可以作為一個信息單元存貯、傳遞和操作。
坐標字:用來設定機床各坐標的位移量由坐標地址符及數字組成,一般以X、Y、Z、U、V、W等字母開頭,後面緊跟「-」或「-」及一串數字。
准備功能字(簡稱G功能):
指定機床的運動方式,為數控系統的插補運算作準備由准備功能地址符「G」和兩位數字所組成,G功能的代號已標准化,見表2-3;一些多功能機床,已有數字大於100的指令,見表2-4。常用G指令:坐標定位與插補;坐標平面選擇;固定循環加工;刀具補償;絕對坐標及增量坐標等。
輔助功能字:用於機床加工操作時的工藝性指令,以地址符M為首,其後跟二位數字,常用M指令:主軸的轉向與啟停;冷卻液的開與停;程序停止等。
進給功能字:指定刀具相對工件的運動速度進給功能字以地址符「F」為首,後跟一串字代碼,單位:mm/min(對數控車床還可為mm/r)三位數代碼法:F後跟三位數字,第一位為進給速度的整數位數加「3」,後二位是進給速度的前二位有效數字。如1728mm/min指定為F717。二位數代碼法:F後跟二位數字,規定了與00~99相對應的速度表,除00與99外,數字代碼由01向98遞增時,速度按等比關繫上升,公比為1.12。一位數代碼法:對速度檔較少的機床F後跟一位數字,即0 ~9來對應十種預定的速度。直接指定法:在F後按照預定的單位直接寫上要求的進給速度。
主軸速度功能字:指定主軸旋轉速度以地址符S為首,後跟一串數字。單位:r/min,它與進給功能字的指定方法一樣。
刀具功能字:用以選擇替換的刀具以地址符T為首,其後一般跟二位數字,該數代表刀具的編號。
模態指令和非模態指令 G指令和M指令均有模態和非模態指令之分模態指令:也稱續效指令,一經程序段中指定,便一直有效,直到出現同組另一指令或被其他指令取消時才失效。見表2-3、表2-6 N001 G91 G01 X10 Y10 Z-2 F150 M03 S1500; N002 X15; N003 G02 X20 Y20 I20 J0; N004 G90 G00 X0 Y0 Z100 M02; 非模態指令:非續效指令,僅在出現的程序段中有效,下一段程序需要時必須重寫(如G04)。
在完成上述兩個步驟之後,即可根據已確定的加工方案(......>>
問題七:數控編程怎麼編整圓 G02\G03 X Y I J
編整圓的時候用I J
問題八:數控車床的編程方法是什麼啊??? 手工編程是指從零件圖紙分析、工藝處理、數值計算、編寫程序單、直到程序校核等各步驟的數控編程工作均由人工完成的全過程。手工編程適合於編寫進行點位加工或幾何形狀不太復雜的零件的加工程序,以及程序坐標計算較為簡單、程序段不多、程序編制易於實現的場合。這種方法比較簡單,容易掌握,適應性較強。手工編程方法是編制加工程序的基礎,也是機床現場加工調試的主要方法,對機床操作人員來講是必須掌握的基本功,其重要性是不容忽視的。自動編程是指在計算機及相應的軟體系統的支持下,自動生成數控加工程序的過程。它充分發揮了計算機快速運算和存儲的功能。其特點是採用簡單、習慣的語言對加工對象的幾何形狀、加工工藝、切削參數及輔助信息等內容按規則進行描述,再由計算機自動地進行數值計算、刀具中心運動軌跡計算、後置處理,產生出零件加工程序單,並且對加工過程進行模擬。對於形狀復雜,具有非圓曲線輪廓、三維曲面等零件編寫加工程序,採用自動編程方法效率高,可靠性好。在編程過程中,程序編制人可及時檢查程序是否正確,需要時可及時修改。由於使用計算機代替編程人員完成了繁瑣的數值計算工作,並省去了書寫程序單等工作量,因而可提高編程效率幾十倍乃至上百倍,解決了手工編程無法解決的許多復雜零件的編程難題。
問題九:數控編程的步驟,具體的步驟是怎樣的? 1、分析零件圖 首先要分析零件的材料、形狀、尺寸、精度、批量、毛坯形狀和熱處理要求等,以便確定該零件是否適合在數控機床上加工,或適合在哪種數控機床上加工,同時要明確澆灌能夠的內容和要求。
2、工藝處理 在分析零件圖的基礎上進行工藝分析,確定零件的加工方法(如採用的工夾具、裝夾定位方法等)、加工線路(如對刀點、進給路線)及切削用量(如主軸轉速、進給速度和背吃刀量等)等工藝參數。
3、數值計算 耕根據零件圖的幾何尺寸、確定的工藝路線及設定的坐標系,計算零件粗、精加工運動的軌跡,得到刀琺數據。對於形狀比較簡單的零件(如由直線和圓弧組成的零件)的輪廓加工,要計算幾何元素的起點、終點、圓弧的圓心、兩幾何元素的交點或切點的坐標值,如果數控裝置無刀具補償功能,還要計算刀具中心的運動軌跡坐標。對於形狀比較復雜的零件(如由非圓曲線、曲面組成的零件),需要用直線段或圓弧段逼近,根據加工精度的要求計算出節點坐標值,這種數值計算要用計算機來完成。
4、編寫加工程序單 根據加工路線、切削用量、刀具號碼、刀具補償量、機床輔助動作及刀具運動軌跡,按照數控系統使用的指令代碼和程序段的格式編寫零件加工的程序單,並校核上述兩個步驟的內容,糾正其中的錯誤。
5、製作控制介質 把編制好的程序單上的內容記錄在控制介質上,作為數控裝置的輸入信息。通過程序的手工輸入或通信傳輸送入數控系統。
6、程序校驗與首件試切 編寫的程序和制備好的控制介質,必須經過校驗和試刀才能正式使用。效驗的方法是直接將控制介質上的內容輸入到數控系統中讓機床空轉,一檢驗機床的運動軌跡是否正確。在有CRT圖形顯示的數控機床上,用模擬刀具與工件切削過程的方法進行檢驗更為方便,但這些方法只能檢驗運動是否正確,不能檢驗被加工零件的加工精度。因此,還需要進行零件的首件試切。當發現有加工誤差時,分析誤差產生的原因,找出問題所在,加以修正,直至達到零件圖紙的要求。
問題十:數控車床怎樣編程? 其實不管是什麼系統,它們的編程都是差不多的。下面有格式,只要學會他編程就會了。 G代碼 組別 解釋 ; G00 01 定位 (快速移動) ; G01 直線切削 ; . G02 順時針切圓弧 (CW,順時鍾) ; G03 逆時針切圓弧 (CCW,逆時鍾) ; G04 00 暫停 (Dwell) ; G09 停於精確的位置 ; G20 06 英制輸入 ; G21 公制輸入 ; G22 04 內部行程限位 有效 ; G23 內部行程限位 無效 ; G27 00 檢查參考點返回 ; G28 參考點返回 ; G29 從參考點返回 ; G30 回到第二參考點 ;G32 01 切螺紋 G40 07 取消刀尖半徑偏置 ;G41 刀尖半徑偏置 (左側) ;G42 刀尖半徑偏置 (右側) ;G50 00 修改工件坐標;設置主軸最大的 RPM ;G52 設置局部坐標系 ;G53 選擇機床坐標系 ;G70 00 精加工循環 ;G71 內外徑粗切循環 ;G72 台階粗切循環 ;G73 成形重復循環 ;G74 Z 向步進鑽削 ;G75 X 向切槽;G76 切螺紋循環 ;G80 10 取消固定循環 ;G83 鑽孔循環 ;G84 攻絲循環 ;G85 正面鏜孔循環 ;G87 側面鑽孔循環 ;G88 側面攻絲循環 ;G89 側面鏜孔循環 ;G90 01 (內外直徑)切削循環 ;G92 切螺紋循環 ;G94 (台階) 切削循環 ;G96 12 恆線速度控制 ;
G97 恆線速度控製取消 ;G98 05 每分鍾進給率;G99 每轉進給率
代碼解釋
G00 定位
1. 格式 G00 X_ Z_ 這個命令把刀具從當前位置移動到命令指定的位置 (在絕對坐標方式下), 或者移動到某個距離處 (在增量坐標方式下)。 2. 非直線切削形式的定位 我們的定義是:採用獨立的快速移動速率來決定每一個軸的位置。刀具路徑不是直線,根據到達的順序,機器軸依次停止在命令指定的位置。 3. 直線定位 刀具路徑類似直線切削(G01) 那樣,以最短的時間(不超過每一個軸快速移動速率)定位於要求的位置。 4. 舉例 N10 G0 X100 Z65
G01 直線插補
1. 格式 G01 X(U)_ Z(W)_ F_ ;直線插補以直線方式和命令給定的移動速率從當前位置移動到命令位置。X, Z: 要求移動到的位置的絕對坐標值。U,W: 要求移動到的位置的增量坐標值。
2. 舉例① 絕對坐標程序 G01 X50. Z75. F0.2 ;X100.; ② 增量坐標程序G01 U0.0 W-75. F0.2 ;U50.
圓弧插補 (G02, G03)
1. 格式 G02(G03) X(U)__Z(W)__I__K__F__ ;G02(G03) X(U)__Z(W)__R__F__ ;
G02 C 順時鍾 (CW)G03 C 逆時鍾 (CCW)X, Z C在坐標系裡的終點U, W C 起點與終點之間的距離I, K C 從起點到中心點的矢量 (半徑值)R C 圓弧范圍 (最大180 度)。2. 舉例① 絕對坐標系程序G02 X100. Z90. I50. K0. F0.2或G02 X100. Z90. R50. F02;② 增量坐標系程序G02 U20. W-30. I50. K0. F0.2;或G02 U20. W-30. R50. F0.2;
......>>