第一篇:網絡編程實驗報告
實驗一 TCP Socket API程序設計
一、預備知識
1.網絡編程基本概念
網絡上的計算機間的通訊,實質上是網絡中不同主機上的程序之間的通訊。在互聯網中使用IP地址來標識不同的主機,在網絡協議中使用端口號來標識主機上不同進程,即使用(IP地址,端口號)二元組。
套接字(Socket)用于描述IP地址和端口,是一個通信鏈的句柄,通信時一個網絡程序將要傳輸的一段信息寫入它所在主機的Socket中,該Socket通過與網絡接口卡相連的傳輸介質將這段信息發送到另一臺主機的Socket中,以供其他程序使用。
圖1-1 TCP通信流程 2.TCP通信流程
TCP程序是面向連接的,程序運行后,服務器一直處于監聽狀態,客戶端與服務器通信之前必須首先發起連接請求,由服務器接收請求并在雙方之間建立連接后才可以互相通信。
二、實驗目的
1.了解Winsock API編程原理; 2.掌握TCP Socket程序的編寫; 3.了解C/S模式的特點; 4.學會解決實驗中遇到的問題。
三、實驗任務
使用Winsock API相關類實現TCP Socket通信程序,并能成功運行。
四、實驗環境及工具
1.Windows2000/XP/7 2.Visual C++開發平臺 3.Visual Studio2010
五、實驗內容和步驟
參照《Visual C++網絡編程教程》書中81頁,TCP Socket API程序設計。連接:
void CChatClientDlg::OnConnect(){
WSADATA wsd;
//WSADATA結構
WSAStartup(MAKEWORD(2,2),&wsd);
//加載協議,使用Winsock 2.2版
m_client = socket(AF_INET,SOCK_STREAM,0);//創建流式套接字
//服務器地址
sockaddr_in serveraddr;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“請指定服務器IP!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“請指定端口!”);
return;
}
//獲取服務器進程的IP和端口
BYTE nFild[4];
CString sIP;
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//設置服務器地址結構的內容
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//發起連接須指明要訪問的服務器進程地址,這個地址存儲在serveraddr中
if(connect(m_client,(sockaddr*)&serveraddr,sizeof(serveraddr))!= 0)
{
MessageBox(“連接失敗”);
return;
}
else
{
m_ListWords.AddString(“連接服務器成功!”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();}
“發送”按鈕事件過程代碼如下:
void CChatClientDlg::OnSend(){
//向服務器發送信息
UpdateData();
if(m_sWords.IsEmpty())
{
AfxMessageBox(“發送的消息不能為空!”);
return;
}
//開始發送數據
int i = send(m_client,m_sWords.GetBuffer(0),m_sWords.GetLength(),0);
m_ListWords.AddString(“發送:” + m_sWords);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);
ServerIP.EnableWindow();
ServerPort.EnableWindow();
m_ButtonConnect.EnableWindow();
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);
m_ButtonExit.EnableWindow();} “清空”按鈕的事件過程: m_ListWords.ResetContent();“關于”按鈕的事件過程: CAboutDlg dlgAbout;dlgAbout.DoModal();
服務器端: 開始監聽代碼:
void CChatServerDlg::OnListen(){
WSADATA wsd;
//WSADATA結構
WSAStartup(MAKEWORD(2,2),&wsd);
//加載協議棧,使用Winsock 2.2版
m_server = socket(AF_INET,SOCK_STREAM,0);//創建流式套接字
//將網絡中的事件關聯到窗口的消息函數中,定義消息號為20000,偵測客戶端的連接請求
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);
m_client = 0;
BYTE nFild[4];
CString sIP;
UpdateData();
if(ServerIP.IsBlank())
{
AfxMessageBox(“請設置IP地址!”);
return;
}
if(sPort.IsEmpty())
{
AfxMessageBox(“請設置監聽端口!”);
return;
}
ServerIP.GetAddress(nFild[0],nFild[1],nFild[2],nFild[3]);
sIP.Format(“%d.%d.%d.%d”,nFild[0],nFild[1],nFild[2],nFild[3]);
//服務器地址
sockaddr_in serveraddr;
serveraddr.sin_family = AF_INET;
serveraddr.sin_addr.S_un.S_addr = inet_addr(sIP);
serveraddr.sin_port = htons(atoi(sPort));
//綁定地址
if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))
{
MessageBox(“綁定地址失敗.”);
return;
}
//監聽開始,服務器等待連接請求的到來
listen(m_server,5);
m_ListWords.AddString(“監聽開始:”);
m_ListWords.AddString(“地址” + sIP + “ 端口” + sPort);
m_ListWords.AddString(“等待客戶端連接??”);
//界面完善
m_ListWords.SetTopIndex(m_ListWords.GetCount()-1);
ServerIP.EnableWindow(false);
ServerPort.EnableWindow(false);
m_ButtonListen.EnableWindow(false);
m_ButtonStopListen.EnableWindow();
m_ButtonClear.EnableWindow();
m_ButtonExit.EnableWindow(false);} “停止監聽”按鈕事件過程代碼如下: void CChatServerDlg::OnStopListen(){
//停止監聽
closesocket(m_server);
m_ListWords.AddString(“停止監聽”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);} “斷開”按鈕事件過程代碼如下: void CChatServerDlg::OnDisconnect(){
closesocket(m_client);
m_ListWords.AddString(“與客戶端斷開”);
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
//界面完善
m_ButtonDisconnect.EnableWindow();
m_EditWords.EnableWindow();
m_ButtonSend.EnableWindow();} ReceiveData()函數代碼如下:
void CChatServerDlg::ReceiveData(){
//接收客戶端的數據
char buffer[1024];
int num = recv(m_client,buffer,1024,0);
buffer[num] = 0;
CString sTemp;
sTemp.Format(“收到:%s”,buffer);
m_ListWords.AddString(sTemp);//顯示信息
m_ListWords.SetTopIndex(m_ListWords.GetCount()1);
closesocket(m_client);//關閉與客戶端通信的Socket
WSAAsyncSelect(m_server,m_hWnd,20000,FD_ACCEPT);//準備接收新的客戶端連接
//界面完善
m_ButtonDisconnect.EnableWindow(false);
m_EditWords.EnableWindow(false);
m_ButtonSend.EnableWindow(false);} 服務器的初始化代碼如下: //界面初始化
m_ButtonStopListen.EnableWindow(false);m_ButtonDisconnect.EnableWindow(false);m_ButtonClear.EnableWindow(false);m_EditWords.EnableWindow(false);m_ButtonSend.EnableWindow(false);
運行結果:
六、思考題
1.用Winsock API編程時,主要進行哪些通行的操作步驟? 2.闡述C/S模式的通信過程。答:
1.通行的操作
1.Winsock的打開(WSAStartup())。2.建立套接字(socket()或WSASocket())。3.地址綁定(bind())。
4.服務器監聽連接(listen())。
5.客戶端提出連接申請(connect()或WSAConnect())。6.服務器接收客戶端的連接請求(accept()或WSAAccept())。7.數據的發送(send()或WSASend(),sendto()或WSASendTo())。8.數據的接收(recv()或WSARecv(),recvfrom()或WSARecvfrom())。9.關閉套接字(closesocket())。10.關閉Winsock(WSACleanup())。
2通信過程
第二篇:嵌入式串口和網絡編程實驗報告
嵌入式實驗報告
題目:linux
串口和網絡編程
一、實驗目的:
1、強化本學期所學的相關的內容。
2、掌握串口相關設置。
3、強化基于TCP網絡傳輸的三次握手。
4、自學Linux線程的使用。
二、實驗內容:
本試驗基于server和client的透明傳輸來實現類似于QQ的聊天功能。
三、實驗過程:
1、linux開發環境的建立
2、嵌入式linux系統的搭建
1>BootLoader的移植
2>linux系統的裁剪與移植 Linux內核裁剪
./make_image生成自己的uImage2638
上電驗證:
3>根文件系統的移植 修改hostname為:whmtt
./mkcramfsdisk_new 生成rootfs_new.cramfs
大小從老師給的40000到37b00(因為有的沒有用到,大小變小了):
上電驗證:
3、客服端編程client.c 相關代碼: #include
#define SERVER_PORT 20000 //設置服務端口
#define CLIENT_PORT((20001+rand())%65536)//設置客戶端端口(隨機)#define BUFFER_SIZE 256 #define LENGTH_OF_LISTEN_QUEUE 10 //可竊聽隊列長為10 #define WELCOME_MESSAGE “welcome to connect the server.”
void usage(char* name){ printf(“usage: %s IpAddrn ” ,name);}
struct sockaddr_in servaddr,cliaddr;int servfd,clifd,length=0;struct sockaddr_in servaddr,cliaddr;socklen_t socklen=sizeof(servaddr);char buf[BUFFER_SIZE],buf2[BUFFER_SIZE];pthread_t tidp,tidp2;int pth;int runflag=0;
void *Thread1(void *arg)/*等待runflag為1,當為1時清空buf,同時接收來自server的數據并輸出。
但當沒有清空,則break.*/ { while(runflag){
memset(buf,0,BUFFER_SIZE);
length=recv(clifd,buf,BUFFER_SIZE,0);
if(strstr(buf,“$”)>0){runflag=0;printf(“stop!n”);break;}
if(length>0)printf(“from server:%s”,buf);
} }
void *Thread2(void *arg)/*等待發送數據給Server*/ { printf(“Please input your words to Server:--$ to stopn”);while(runflag){
memset(buf2,0,BUFFER_SIZE);
scanf(“%s”,buf2);
send(clifd,buf2,strlen(buf2),0);
if(strstr(buf2,“$”)>0){runflag=0;printf(“stop!n”);break;}
} }
int main(int argc, char** argv){ if(argc < 2){
usage(argv[0]);
exit(1);} if((clifd = socket(AF_INET,SOCK_STREAM,0))< 0)//用tcp定義socket {
printf(“ create socket error!n ”);
exit(1);}
srand(time(NULL));// initialize random generator
bzero(& cliaddr, sizeof(cliaddr));cliaddr.sin_family = AF_INET;cliaddr.sin_port = htons(CLIENT_PORT);cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
if(bind(clifd,(struct sockaddr*)&cliaddr,sizeof(cliaddr))< 0){
printf(“bind to port %d failure!n ” ,CLIENT_PORT);
exit(1);}//綁定的目的是讓其端口是隨機的,否則端口是自增1 //一般情況下client端不用綁定
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;inet_aton(argv[1], &servaddr.sin_addr);servaddr.sin_port = htons(SERVER_PORT);
if(connect(clifd,(struct sockaddr *)&servaddr, socklen)< 0){
printf(“can't connect to %s!n”, argv[1]);
exit(1);}
runflag=1;
pth=pthread_create(&tidp,NULL,Thread1,NULL);
if(pth!=0){printf(“error!”);return-1;}
pth=pthread_create(&tidp2,NULL,Thread2,NULL);
if(pth!=0){printf(“error!”);return-1;}
pthread_detach(tidp);
pthread_detach(tidp2);
while(runflag){;}
close(clifd);
return 0;}
4、服務端server.c編寫
相關代碼: #include #define COM0 0 #define BLOCK_MODE 1 #define NONBLK_MODE 0 #define SERVER_PORT 20000 #define LENGTH_OF_LISTEN_QUEUE 10 #define QUEUE 20 #define BUFFER_SIZE 256 #define WELCOME_MESSAGE “welcome to connect the server.” static struct termios g_newtio,g_oldtio; static int speed_arr[] = { B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300, B115200, B57600, B38400, B19200, B9600, B4800, B2400, B1200, B300, }; static int name_arr[] = { 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, 115200, 57600, 38400, 19200, 9600, 4800, 2400, 1200, 300, }; int Init_COM(int Comm,int Baudrate,int Parity,int Stopbit,int Flagblock){ int ret,i;char dev_buf[16]; if(Comm > 3){ printf(“Com%d not existn”,Comm); return-1;} memset(dev_buf,0x00,sizeof(dev_buf));sprintf(dev_buf,“/dev/ttyS%d”,Comm); if(Flagblock){ ret = open(dev_buf, O_RDWR | O_NOCTTY);//以默認阻塞方式打開 } else { ret = open(dev_buf, O_RDWR | O_NOCTTY | O_NONBLOCK);//以非阻塞方式打開 } if(ret < 0){ printf(“Open ttyS%d failedn”,Comm); return-1; } if(tcgetattr(ret, &g_oldtio)< 0)//保存原先的端口 { printf(“Get Com Parameter Error.n”); return-1;} for(i= 0;i < sizeof(speed_arr)/ sizeof(int);i++){ if(Baudrate == name_arr[i]) { cfsetispeed(&g_newtio,speed_arr[i]);/*設置輸入輸出波特率*/ cfsetospeed(&g_newtio,speed_arr[i]); break; } } if(i>=sizeof(speed_arr)/ sizeof(int)){ printf(“Unsupported Speed!n”); return-1;} switch(Parity){ case 'n': case 'N': g_newtio.c_cflag &= ~PARODD; g_newtio.c_cflag &= ~PARENB; break; case 'o': case 'O': g_newtio.c_cflag |= PARENB; g_newtio.c_cflag |= PARODD;//奇校驗 break; case 'e': case 'E': g_newtio.c_cflag |= PARENB;//偶校驗 g_newtio.c_cflag &= ~PARODD; break; default: printf(“Unsupported Parityn”); return-1;} switch(Stopbit)//設置停止校驗位是為2,否為1.{ case 1: g_newtio.c_cflag &= ~CSTOPB; break; case 2: g_newtio.c_cflag |= CSTOPB; break; default: printf(“Unsupported Stopbit!n”); return-1;} g_newtio.c_iflag = 0;g_newtio.c_oflag = 0;g_newtio.c_lflag = 0; g_newtio.c_cc[VTIME] = 1;//最大等待時間為1*100ms g_newtio.c_cc[VMIN] = 1;//最小讀數為1 g_newtio.c_iflag &= ~INPCK;g_newtio.c_cflag &= ~CRTSCTS;g_newtio.c_cflag &= ~CSIZE;//設置數據位 g_newtio.c_cflag |= CS8;// g_newtio.c_cflag |= CLOCAL;g_newtio.c_cflag |= CREAD; if(tcsetattr(ret, TCSANOW, &g_newtio)!= 0)//激活設置 { printf(“Set Com Parameter Error!n”); return-1;} tcflush(ret, TCIOFLUSH);//刷新輸入輸出緩存 return ret;} //以上為套接字的相關定義 //一下類似與client一樣設置數據接收和發送。 void RestoreComConfiguration(int fd,struct termios *ptios){ if(tcsetattr(fd, TCSANOW, ptios)!= 0){ printf(“Restore Com Parameter Error!n”);} } int fd;char buf[1024],buf2[1024];int servfd,clifd; struct sockaddr_in servaddr,cliaddr;int runflag=0; void *Thread1(void *arg){ printf(“Please input your words to Server:--$ to stopn”);while(runflag){ memset(buf,0,BUFFER_SIZE); read(fd,buf,1024); send(clifd,buf,strlen(buf),0); if(strstr(buf,“$”)>0){runflag=0;printf(“stop!n”);break;} } } void *Thread2(void *arg){ int length=0;while(runflag){char stdstr[1024]=“from client:”; memset(buf2,0,BUFFER_SIZE); length=recv(clifd,buf2,1024,0);if(length>0){ strcat(stdstr,buf2);strcat(stdstr,“n”); if(strstr(buf2,“$”)>0) {runflag=0;printf(“stop!n”);break;} write(fd,stdstr,strlen(stdstr)); } } } void socket_init(void){ if((servfd=socket(AF_INET,SOCK_STREAM,0))<0){printf(“create socket error!n”);exit(1);} bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_port=htons(SERVER_PORT);servaddr.sin_addr.s_addr=htons(INADDR_ANY);if(bind(servfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0){printf(“bind to port %d failure!n”,SERVER_PORT);exit(1);} if(listen(servfd,QUEUE)<0){printf(“call listen failure!n”);exit(1);} socklen_t length=sizeof(cliaddr);clifd=accept(servfd,(struct sockaddr*)&cliaddr,&length);if(clifd<0){ printf(“error comes when call accept!n”);exit(1);} } int main(int argc,char *argv[]){ fd = Init_COM(COM0,115200,'N',1,BLOCK_MODE);socket_init();pthread_t tidp,tidp2;int pth;if(fd >= 0)RestoreComConfiguration(fd,&g_oldtio); runflag=1; pth=pthread_create(&tidp,NULL,Thread1,NULL); if(pth!=0){printf(“error!”);return-1;} pth=pthread_create(&tidp2,NULL,Thread2,NULL); if(pth!=0){printf(“error!”);return-1;} pthread_detach(tidp); pthread_detach(tidp2); while(runflag){;} close(clifd);close(fd);close(servfd);//全部關閉 return 0;} 編譯結果: 5、nfs掛載 四、實驗結果: 五、心得體會: 一、實驗報告為紙質報告,手寫,不少于8頁紙。 二、報告首頁為標準實驗報告封面,有課程名稱、實驗名稱、姓名、時間 三、報告內容為:1、2、3、4、實驗目的 實驗題目 實驗過程步驟,詳細說明實驗編程的過程 實驗程序的主要代碼和注釋說明(不需要完整的程 序!)。 5、6、實驗中遇到的問題,怎么解決的。實驗心得 四、報告的得分主要根據3、4、5五、三份實驗報告裝訂在一起 六、班長將報告收齊,按照班級序號排好,交給實驗老師。 目錄 一、實驗目的-----------3 二、實驗要求-----------3 三、數控車床實驗一-----3(1)、實驗內容(2)、實驗零件圖樣(3)、車削加工程序 (4)、FANUC 0i系統仿真軟件面板操作過程 四、數控車床實驗二-----6(1)、實驗內容(2)、實驗零件圖樣(3)、車削加工程序 (4)、FANUC 0i系統仿真軟件面板操作過程 五、數控銑床實驗一-----10(1)、實驗內容(2)、實驗零件圖樣(3)、銑削加工程序 (4)、FANUC 0i系統仿真軟件面板操作過程 六、數控銑床實驗二-----14(1)、實驗內容(2)、實驗零件圖樣(3)、銑削加工程序 (4)、FANUC 0i系統仿真軟件面板操作過程 一、實驗目的 “數控機床加工程序編制”(簡稱數控編程)課程,是機械和機電等各類專業本、專科教學計劃中開設的一門應用性和實踐性很強的專業課程。學好本課程,不僅要掌握數控編程的基本理論知識和編程方法,更重要的是要通過一定的實踐教學,在實踐教學中運用所掌握的機械加工工藝知識、數控編程的理論知識、數控編程的方法編制零件加工程序,并完成對零件的數控加工。采用仿真軟件在計算機上進行模擬加工,是完成這一實踐教學的有效手段。因此,在各專業本、專科“數控編程”課程的教學計劃中均設有“仿真實驗”這一實踐教學環節。其實驗的目的是: 1.熟悉并學會運用計算機仿真技術,模擬數控車床、數控銑床完成零件加工的全過程; 2.為后續的“數控編程實訓”,實地操作數控機床進行數控加工,積累和打下操作技能訓練的基礎。 二、實驗要求 1.熟悉并掌握FANUC 0i系統仿真軟件面板操作過程; 2.按給定車削零件圖樣,編制加工程序,在計算機上運用仿真軟件,進行模擬加工; 3.按給定銑削零件圖樣,編制加工程序,在計算機上運用仿真軟件,進行模擬加工; 4.按實驗內容,編寫實驗報告。 三、數控車床實驗一(1)、實驗內容 如圖A所示,毛坯直徑為φ45mm,起刀點在圖示編程坐標系的P點,試運用G71,G70指令編制圖示軸類零件車削加工程序。 給定切削條件是:粗車時切深為2mm,退刀量為1mm,精車余量X方向為0.6mm(直徑值),Z方向為0.3mm,主軸轉速為S 600 r /min,進給速度為F 0.15 mm/ r; 精車時主軸轉速為S800 r /min ,進給速度為F 0.1 mm / r。[注:φ45外圓不加工](2)、實驗零件圖樣 圖A (3)、車削加工程序 O1;N10 G50 X100.Z100.T0101; N20 G90 G97 S600 M03;N30 G00 X51.Z3.M08;N40 G71 U2.R1.;N50 G71 P60 Q120 U0.6 W0.3 F0.15;N60 G00 X22.;N70 G01 Z-12.F0.1 S800;N80 G02 X38.Z-20.I8.; N90 G01 Z-30.;N100 X44.Z-40.;N110 Z-55.;N120 X51.;N130 G70 P60 Q120;N140 G00 X100.Z100.T0100 M09;N150 M05; N160 M30; (4)、FANUC 0i系統仿真軟件面板操作過程 1.進入宇龍數控加工仿真系統3.7版,首先啟動加密鎖管理程序,然后啟動數控加工仿真系統。 2.打開菜單“機床/選擇機床?”,或單擊選擇機床圖標,系統彈出“選擇機床”對話框。選擇數控系統FANUC0i的車床,選擇標準(平床身前置刀架),按“確定”按鈕,系統即可切換到車床仿真加工界面。 3.打開菜單“零件/定義毛坯”,或單擊定義毛坯圖標,系統彈出“定義毛坯”對話框,點擊尺寸輸入框,改變毛坯尺寸為φ45×150 mm,按“確定”按鈕,保存定義的毛坯并且退出本操作。4.打開菜單“零件/放置零件”,或單擊放置零件圖標,系統彈出“選擇零件”對話框,在列表中點擊所需的零件,選中的零件信息加亮顯示,按下“安裝零件”按鈕,系統自動關閉對話框,零件將被放到機床上。 5.毛坯在放置到工作臺(三爪卡盤)后,系統將自動彈出一個小鍵盤,通過按動小鍵盤上的方向按鈕,實現零件的平移和旋轉或車床零件調頭。再按小鍵盤上的“退出”按鈕,關閉小鍵盤。6.打開菜單“機床/選擇刀具”,或單擊選擇刀具圖標,系統彈出“車刀選擇”對話框。選擇外圓加工,刀片D55°,刀柄93°,修改刀尖半徑為0,按“確認退出”按鈕,完成選刀。7.點擊機床操作面板中“緊急停止”,“啟動”操作按鈕,加載驅動,當“機床電機”和“伺服控制”指示燈亮,表示機床已被激活。在回零指示狀態下(回零模式),選擇機床操作面板上的“X軸”、“Z軸”,點擊“+”按鈕,此時X軸、Z軸將回零,當回到機床參考點時,相應操作面板上“X原點燈”、“Z原點燈”的指示燈亮。 8.點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值,將刀具移近零件毛坯,準備對刀。(1).點擊“主軸正轉”按鈕,使主軸轉動,點擊“Z軸”,“-”負向移動按鈕,用刀具試切工件外圓。然后,點擊“+”正向移動按鈕,Z向退刀,將刀具退離零件毛坯。記下LCD界面上顯示的X絕對坐標 為X1=255.733mm。點擊“主軸停止”按鈕,使主軸停止轉動,點擊菜單“測量/剖面圖測量?”,點擊試切外圓時所切線段,記下測量對話框中對應線段的X值(試切外圓的直徑)為X2=44.367mm。此時,工件中心軸線X的坐標值即為X1-X2,記為X=211.366mm。 (2).同理,刀具移動在切右端面的位置,試切端面,切完后,Z向不動,沿X退刀,同時記下此時的Z坐標值,記為Z=147.483mm。(3).點擊MDI鍵盤的“OFFSET SETING”按鈕,進入參數設置畫面,點擊“坐標系”軟鍵,進入坐標系設定畫面,將通過對刀得到的坐標值(X、Z)輸入G54坐標系。 9.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕,輸入O2;G01 X100.Z100.;再點擊機床操作面板中“自動運行”,“循環啟動”操作按鈕,將刀具移動到刀具起點。 10.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕。打開菜單“機床/DNC傳送?”,在打開文件對話框中選取文件。在文件名列表框中選中文件O1,按“打開”確認。按LCD畫面軟鍵“[(操作)]”,再點擊畫面軟鍵向右,再按畫面“[READ]”對應軟鍵。在MDI鍵盤在輸入文件名O1。點擊畫面“[EXEC]”對應軟鍵,即輸入預先編輯好的車削加工程序,并在LCD顯示。 11.點擊機床操作面板中“自動運行” 操作按鈕,點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,程序執行轉入檢查運行軌跡模式;再點擊機床操作面板中“循環啟動”操作按鈕,即可觀察數控程序的運行軌跡。 12.點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,再點擊機床操作面板中“循環啟動”操作按鈕,即可加工零件。13.打開菜單“文件/另存項目”,系統彈出“選擇保存類型”對話框,按“確定”按鈕。系統彈出“另存為”對話框,輸入O1.mac文件名,保存在桌面,按“保存”按鈕。 四、數控車床實驗二(1)、實驗內容 如圖B所示,毛坯直徑為φ45mm,起刀點在圖示編程坐標系的P點,試運用G71,G70指令編制圖示軸類零件車削加工程序。 給定切削條件是:粗車時切深為2mm,退刀量為1mm,精車余量X 方向為0.6mm(直徑值),Z方向為0.3mm,主軸轉速為S 600 r /min,進給速度為F 0.15 mm/ r; 精車時主軸轉速為S800 r /min ,進給速度為F 0.1 mm / r。[注:φ45外圓不加工] (2)、實驗零件圖樣 圖B (3)、車削加工程序 O2;N10 G50 X100.Z100.T0101;N20 G90 G97 S600 M03;N30 G00 X51.Z3.M08;N40 G71 U2.R1.;N50 G71 P60 Q140 U0.6 W0.3 F0.15;N60 G00 X20.;N70 G01 Z-15.F0.1 S800;N80 G03 X30.Z-20.k-5.;N90 G01 Z-35.;N100 X34.Z-47.;N110 Z-57.;N120 G02 X44.Z-62.I5.;N130 G01 Z-78.;N140 X51.;N150 G70 P60 Q140;N160 G00 X100.Z100.T0100 M09;N170 M05;N180 M30; (4)、FANUC 0i系統仿真軟件面板操作過程 1.進入宇龍數控加工仿真系統3.7版,首先啟動加密鎖管理程序,然后啟動數控加工仿真系統。 2.打開菜單“機床/選擇機床?”,或單擊選擇機床圖標,系統彈出“選擇機床”對話框。選擇數控系統FANUC0i的車床,選擇標準(平床身前置刀架),按“確定”按鈕,系統即可切換到車床仿真加工界面。 3.打開菜單“零件/定義毛坯”,或單擊定義毛坯圖標,系統彈出“定義毛坯”對話框,點擊尺寸輸入框,改變毛坯尺寸為φ45×150 mm,按“確定”按鈕,保存定義的毛坯并且退出本操作。4.打開菜單“零件/放置零件”,或單擊放置零件圖標,系統彈出“選擇零件”對話框,在列表中點擊所需的零件,選中的零件信息加亮顯示,按下“安裝零件”按鈕,系統自動關閉對話框,零件將被放到機床上。 5.毛坯在放置到工作臺(三爪卡盤)后,系統將自動彈出一個小鍵盤,通過按動小鍵盤上的方向按鈕,實現零件的平移和旋轉或車床零件調頭。再按小鍵盤上的“退出”按鈕,關閉小鍵盤。6.打開菜單“機床/選擇刀具”,或單擊選擇刀具圖標,系統彈出“車刀選擇”對話框。選擇外圓加工,刀片D55°,刀柄93°,修改刀尖半徑為0,按“確認退出”按鈕,完成選刀。7.點擊機床操作面板中“緊急停止”,“啟動”操作按鈕,加載驅動,當“機床電機”和“伺服控制”指示燈亮,表示機床已被激活。在回零指示狀態下(回零模式),選擇機床操作面板上的“X軸”、“Z軸”,點擊“+”按鈕,此時X軸、Z軸將回零,當回到機床參考點時,相應操作面板上“X原點燈”、“Z原點燈”的指示燈亮。 8.點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值,將刀具移近零件毛坯,準備對刀。(1).點擊“主軸正轉”按鈕,使主軸轉動,點擊“Z軸”,“-”負向移動按鈕,用刀具試切工件外圓。然后,點擊“+”正向移動按鈕,Z向退刀,將刀具退離零件毛坯。記下LCD界面上顯示的X絕對坐標為X1=256.333mm。點擊“主軸停止”按鈕,使主軸停止轉動,點擊菜單“測量/剖面圖測量?”,點擊試切外圓時所切線段,記下測量對話框中對應線段的X值(試切外圓的直徑)為X2=44.967mm。此時,工件中心軸線X的坐標值即為X1-X2,記為X=211.366mm。 (2).同理,刀具移動在切右端面的位置,試切端面,切完后,Z向不動,沿X退刀,同時記下此時的Z坐標值,記為Z=147.500mm。(3).點擊MDI鍵盤的“OFFSET SETING”按鈕,進入參數設置畫面,點擊“坐標系”軟鍵,進入坐標系設定畫面,將通過對刀得到的坐標值(X、Z)輸入G54坐標系。 9.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕,輸入O3;G01 X100.Z100.;再點擊機床操作面板中“自動運行”,“循環啟動”操作按鈕,將刀具移動到刀具起點。 10.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕。打開菜單“機床/DNC傳送?”,在打開文件對話框中選取文件。在文件名列表框中選中文件O2,按“打開”確認。按LCD畫面軟鍵“[(操作)]”,再點擊畫面軟鍵向右,再按畫面“[READ]”對應軟鍵。在MDI鍵盤在輸入文件名O2。點擊畫面“[EXEC]”對應軟鍵,即輸入預先編輯好的車削加工程序,并在LCD顯示。 11.點擊機床操作面板中“自動運行” 操作按鈕,點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,程序執行轉入檢查運行軌跡模式;再點擊機床操作面板中“循環啟動”操作按鈕,即可觀察數控程序的運行軌跡。 12.點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,再點擊機床操作面板中“循環啟動”操作按鈕,即可加工零件。13.打開菜單“文件/另存項目”,系統彈出“選擇保存類型”對話 框,按“確定”按鈕。系統彈出“另存為”對話框,輸入O2.mac文件名,保存在桌面,按“保存”按鈕。 五、數控銑床實驗一(1)、實驗內容 如圖A所示,毛坯尺寸為140×100×50,起刀點位置在編程坐標系的(0,0,20)處,按圖示的走刀路線ABCDEFGA編制銑削加工程序。選用φ20 mm的鍵槽銑刀,F 60mm/min, S 750r/min。 (2)、實驗零件圖樣 圖A (3)、銑削加工程序 O3;N10 G92 X0 Y0 Z20.;N20 M03 S750;N30 G90 G00 X-50.Y-50.Z0 M08;N40 G41 G01 X0 Y0 Z-3.F60 D01;N50 G01 X20.Y10.;N60 Y62.; N70 G02 X44.Y86.I24.;N80 G01 X96.;N90 G03 X120.Y62.I24.;N100 G01 Y40.;N110 X100.Y14.;N120 X16.;N130 X0 Y0;N140 G40 Z20.M09;N150 M05;N160 M30; D01=10.(4)、FANUC 0i系統仿真軟件面板操作過程 1.進入宇龍數控加工仿真系統3.7版,首先啟動加密鎖管理程序,然后啟動數控加工仿真系統。 2.打開菜單“機床/選擇機床?”,或單擊選擇機床圖標,系統彈出“選擇機床”對話框。選擇數控系統FANUC0i的銑床,選擇標準,按“確定”按鈕,系統即可切換到銑床仿真加工界面。3.打開菜單“零件/定義毛坯”,或單擊定義毛坯圖標,系統彈出“定義毛坯”對話框,點擊尺寸輸入框,改變毛坯尺寸為140×100×100 mm,按“確定”按鈕,保存定義的毛坯并且退出本操作。 打開菜單“零件/安裝夾具”,或單擊夾具圖標,系統彈出“選擇夾具”對話框。在“選擇零件”列表框中選擇已定義毛坯。在“選擇夾具”列表框中選擇平口鉗,按“確定”按鈕。4.打開菜單“零件/放置零件”,或單擊放置零件圖標,系統彈出“選擇零件”對話框,在列表中點擊所需的零件,選中的零件信息加亮顯示,按下“安裝零件”按鈕,系統自動關閉對話框,零件將被放到機床上。5.毛坯在放置到工作臺(三爪卡盤)后,系統將自動彈出一個小鍵盤,通過按動小鍵盤上的方向按鈕,實現零件的平移和旋轉。再按小鍵盤上的“退出”按鈕,關閉小鍵盤。6.打開菜單“機床/基準工具?”,或單擊基準工具圖標,系統彈出“基準工具”對話框。選擇φ14×75 mm的剛性芯棒基準工具,按“確定”按鈕,剛性芯棒基準工具被放到機床上。7.點擊機床操作面板中“緊急停止”,“啟動”操作按鈕,加載驅動,當“機床電機”和“伺服控制”指示燈亮,表示機床已被激活。在回零指示狀態下(回零模式),選擇機床操作面板上的“X軸”、“Y軸”、“Z軸”,點擊“+”按鈕,此時X軸、Y軸、Z軸將回零,當回到機床參考點時,相應操作面板上“X原點燈”、“Y原點燈”、“Z原點燈”的指示燈亮。 8.點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值,將零件毛坯移近基準工具,準備剛性芯棒采用檢查塞尺松緊的方式對刀。 (1).利用機床操作面板上的選擇軸按鈕,單擊選擇“X軸”,再通過軸移動鍵“+”,“-”,采用點動方式移動機床,將裝有基準工具的機床主軸在X方向上移動到工件左側,借助“視圖”菜單中的動態旋轉、動態放縮、動態平移等工具,調整工作區大小到工件左側的大致位置。取正向視圖,點擊菜單“塞尺檢查/1mm”,安裝塞尺。 (2).點擊機床操作面板上“手動脈沖”按鈕,切換到手輪方式,點擊操作面板右下角的“H”拉出手輪,選中X軸,調整手輪倍率。按鼠標右鍵為主軸向X軸“-”方向運動,按鼠標左鍵為主軸向X軸“+”方向運動,如此移動芯棒,使得提示信息對話框顯示“塞尺檢查的結果:合適”。 (3).記下塞尺檢查結果為“合適”時LCD界面中顯示的X坐標值,此為基準工具中心的X坐標,記為X1=-578.000 mm;將基準工件直徑記為X2=14.000 mm,將塞尺厚度記為X3=1.000 mm,則:工件上表面左下角的X向坐標為:基準工具中心的X坐標+基準工具半徑+塞尺厚度,即:X=X1+X2/2+X3=-578+7+1=-570 mm。 (4).在不改變Z向坐標的情況下,將剛性芯棒在JOG手動方式下移動到零件的前側,同理可得到工件上表面左下角的Y坐標:Y=Y1+Y2/2+Y3=-473+7+1=-465 mm。9.打開菜單“機床/選擇刀具”,或單擊選擇刀具圖標,選擇φ20 mm的鍵槽銑刀,按“確定”按鈕。點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,為主軸裝上實際加工刀具,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值。 利用機床操作面板上的選擇軸按鈕,單擊選擇“Z軸”,再通過軸移動鍵“+”,“-”,采用點動方式移動機床,將裝有刀具的機床主軸在Z方向上移動到工件上表面的大致位置。類似在X,Y方向對刀的方法進行塞尺檢查,得到“塞尺檢查:合適”時Z的坐標值,記為Z1=-247.000 mm。則相應刀具在工件上表面中心的Z坐標值為:Z=Z1-塞尺厚度=-247-1=-248 mm。 點擊MDI鍵盤的“OFFSET SETING”按鈕,進入參數設置畫面,輸入刀具半徑補償D01=10.000 mm ,再點擊“坐標系”軟鍵,進入坐標系設定畫面,將通過對刀得到的坐標值(X、Y、Z)輸入G54坐標系。10.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕,輸入O4;G01 X0 Y0 Z20.;再點擊機床操作面板中“自動運行”,“循環啟動”操作按鈕,將刀具移動到刀具起點。 11.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕。打開菜單“機床/DNC傳送?”,在打開文件對話框中選取文件。在文件名列表框中選中文件O3,按“打開”確認。按LCD畫面軟鍵“[(操作)]”,再點擊畫面軟鍵向右,再按畫面“[READ]”對應軟鍵。在MDI鍵盤在輸入文件名O3。點擊畫面“[EXEC]”對應軟鍵,即輸入預先編輯好的銑削加工程序,并在LCD顯示。 12.點擊機床操作面板中“自動運行” 操作按鈕,點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,程序執行轉入檢查運行軌跡模式;再點擊機床操作面板中“循環啟動”操作按鈕,即可觀察數控程序的運行軌跡。 13.點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,再點擊機床操作面板中“循環啟動”操作按鈕,即可加工零件。14.打開菜單“文件/另存項目”,系統彈出“選擇保存類型”對話框,按“確定”按鈕。系統彈出“另存為”對話框,輸入O3.mac文件名,保存在桌面,按“保存”按鈕。 六、數控銑床實驗二(1)、實驗內容 如圖B所示,毛坯尺寸為150×80×30,起刀點位置在編程坐標系的(0,0,20)處,按圖示的工件尺寸編制銑削加工程序并仿真。突臺高5 mm,孔深10 mm,選用φ8 mm的鍵槽銑刀,φ20mm鉆頭,F 60 mm/min, S 750r/min。 (2)、實驗零件圖樣 圖B (3)、銑削加工程序 O4;N10 G92 X0 Y0 Z20.;N20 M03 S750 T0101;N30 G90 G00 X-50.Y-50.Z0 M08;N40 G41 G01 X0 Y-10.Z-5.F60 D01;N50 G01 Y20.;N60 X27.017 Y64.988;N70 G02 X35.521 Y70.R10.;N80 G01 X80.;N90 G02 X90.Y60.J-10.;N100 G03 X120.I15.;N110 G01 Y75.;N120 X130.;N130 G02 X140.Y65.J-10.;N140 G01 Y0;N150 X-10.;N160 G00 G40 X-50.Y-50.Z200.T0100 M09;N170 M05;N180 M00;N190 M06 T0202;N200 M03 S750;N210 G43 G00 Z5.H02;N220 G99 G81 X50.Y28.Z-10.R2.F60;N230 G98 X100.Y20.;N240 G80; N250 G00 X-50.Y-50.;N260 G49 Z200.T0200;N270 M05;N280 M30; D01=4.;H02=100.; (4)、FANUC 0i系統仿真軟件面板操作過程 1.進入宇龍數控加工仿真系統3.7版,首先啟動加密鎖管理程序,然后啟動數控加工仿真系統。 2.打開菜單“機床/選擇機床?”,或單擊選擇機床圖標,系統彈出“選擇機床”對話框。選擇數控系統FANUC0i的銑床,選擇標準,按“確定”按鈕,系統即可切換到銑床仿真加工界面。3.打開菜單“零件/定義毛坯”,或單擊定義毛坯圖標,系統彈出 “定義毛坯”對話框,點擊尺寸輸入框,改變毛坯尺寸為150×80×100 mm,按“確定”按鈕,保存定義的毛坯并且退出本操作。 打開菜單“零件/安裝夾具”,或單擊夾具圖標,系統彈出“選擇夾具”對話框。在“選擇零件”列表框中選擇已定義毛坯。在“選擇夾具”列表框中選擇平口鉗,按“確定”按鈕。4.打開菜單“零件/放置零件”,或單擊放置零件圖標,系統彈出“選擇零件”對話框,在列表中點擊所需的零件,選中的零件信息加亮顯示,按下“安裝零件”按鈕,系統自動關閉對話框,零件將被放到機床上。 5.毛坯在放置到工作臺(三爪卡盤)后,系統將自動彈出一個小鍵盤,通過按動小鍵盤上的方向按鈕,實現零件的平移和旋轉。再按小鍵盤上的“退出”按鈕,關閉小鍵盤。6.打開菜單“機床/基準工具?”,或單擊基準工具圖標,系統彈出“基準工具”對話框。選擇φ14×75 mm的剛性芯棒基準工具,按“確定”按鈕,剛性芯棒基準工具被放到機床上。7.點擊機床操作面板中“緊急停止”,“啟動”操作按鈕,加載驅動,當“機床電機”和“伺服控制”指示燈亮,表示機床已被激活。在回零指示狀態下(回零模式),選擇機床操作面板上的“X軸”、“Y軸”、“Z軸”,點擊“+”按鈕,此時X軸、Y軸、Z軸將回零,當回到機床參考點時,相應操作面板上“X原點燈”、“Y原點燈”、“Z原點燈”的指示燈亮。 8.點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值,將零件毛坯移近基準工具,準備剛性芯棒采用檢查塞尺松緊的方式對刀。 (1).利用機床操作面板上的選擇軸按鈕,單擊選擇“X軸”,再通過軸移動鍵“+”,“-”,采用點動方式移動機床,將裝有基準工具的機床主軸在X方向上移動到工件左側,借助“視圖”菜單中的動態旋轉、動態放縮、動態平移等工具,調整工作區大小到工件左側的大致位置。取正向視圖,點擊菜單“塞尺檢查/1mm”,安裝塞尺。 (2).點擊機床操作面板上“手動脈沖”按鈕,切換到手輪方式,點擊操作面板右下角的“H”拉出手輪,選中X軸,調整手輪倍率。按鼠標右鍵為主軸向X軸“-”方向運動,按鼠標左鍵為主軸向X軸“+”方向運動,如此移動芯棒,使得提示信息對話框顯示“塞尺檢 查的結果:合適”。 (3).記下塞尺檢查結果為“合適”時LCD界面中顯示的X坐標值,此為基準工具中心的X坐標,記為X1=-583.000 mm;將基準工件直徑記為X2=14.000 mm,將塞尺厚度記為X3=1.000 mm,則:工件上表面左下角的X向坐標為:基準工具中心的X坐標+基準工具半徑+塞尺厚度,即:X=X1+X2/2+X3=-583+7+1=-575 mm。 (4).在不改變Z向坐標的情況下,將剛性芯棒在JOG手動方式下移動到零件的前側,同理可得到工件上表面左下角的Y坐標:Y=Y1+Y2/2+Y3=-463+7+1=-455 mm。9.打開菜單“機床/選擇刀具”,或單擊選擇刀具圖標,選擇φ8 mm的鍵槽銑刀,按“確定”按鈕。點擊機床操作面板中“手動”操作按鈕,將機床切換到JOG狀態,進入“手動”方式,為主軸裝上實際加工刀具,點擊MDI鍵盤的“POS”按鈕,LCD顯示刀架在機床坐標系中的坐標值。 利用機床操作面板上的選擇軸按鈕,單擊選擇“Z軸”,再通過軸移動鍵“+”,“-”,采用點動方式移動機床,將裝有刀具的機床主軸在Z方向上移動到工件上表面的大致位置。類似在X,Y方向對刀的方法進行塞尺檢查,得到“塞尺檢查:合適”時Z的坐標值,記為Z1=-317.000 mm。則相應刀具在工件上表面中心的Z坐標值為:Z=Z1-塞尺厚度=-317-1=-318 mm。 點擊MDI鍵盤的“OFFSET SETING”按鈕,進入參數設置畫面,輸入刀具半徑補償D01=4.000 mm ,刀具長度補償H02=100.000 mm,再點擊“坐標系”軟鍵,進入坐標系設定畫面,將通過對刀得到的坐標值(X、Y、Z)輸入G54坐標系。 10.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕,輸入O5;G01 X0 Y0 Z20.;再點擊機床操作面板中“自動運行”,“循環啟動”操作按鈕,將刀具移動到刀具起點。 11.點擊機床操作面板中“編輯”操作按鈕,再點擊MDI鍵盤的“PROG”按鈕。打開菜單“機床/DNC傳送?”,在打開文件對話框中選取文件。在文件名列表框中選中文件O4,按“打開”確認。按LCD畫面軟鍵“[(操作)]”,再點擊畫面軟鍵向右,再按畫面“[READ]”對應軟鍵。在MDI鍵盤在輸入文件名O4。點擊畫面“[EXEC]”對應軟鍵,即輸入預先編輯好的銑削加工程序,并在LCD顯示。 12.點擊機床操作面板中“自動運行” 操作按鈕,點擊MDI鍵盤 的“CUSFOM GRAPH”按鈕,程序執行轉入檢查運行軌跡模式;再點擊機床操作面板中“循環啟動”操作按鈕,即可觀察數控程序的運行軌跡。 13.點擊MDI鍵盤的“CUSFOM GRAPH”按鈕,再點擊機床操作面板中“循環啟動”操作按鈕,即可加工零件。再打開菜單“機床/選擇刀具”,或單擊選擇刀具圖標,選擇φ20 mm的鉆頭,按“確定”按鈕。點擊機床操作面板中“自動運行”、“循環啟動” 操作按鈕,繼續加工零件。 14.打開菜單“文件/另存項目”,系統彈出“選擇保存類型”對話框,按“確定”按鈕。系統彈出“另存為”對話框,輸入O4.mac文件名,保存在桌面,按“保存”按鈕。 JSP編程實驗報告 學生姓名:學生班級:學生學號:指導教師:實驗n(n-實驗順序號):實驗名稱 一、實驗目的二、實驗內容及步驟 三、源代碼 四、運行界面 五、收獲和體會第三篇:《網絡高級編程》實驗報告要求
第四篇:數控編程仿真實驗報告
第五篇:JSP編程實驗報告