線程的編程實(shí)現(xiàn)(操作系統(tǒng))_第1頁
線程的編程實(shí)現(xiàn)(操作系統(tǒng))_第2頁
線程的編程實(shí)現(xiàn)(操作系統(tǒng))_第3頁
線程的編程實(shí)現(xiàn)(操作系統(tǒng))_第4頁
線程的編程實(shí)現(xiàn)(操作系統(tǒng))_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第9章多線程

返回目錄內(nèi)容摘要:創(chuàng)建線程實(shí)現(xiàn)線程間通信利用線程同步技術(shù)保障數(shù)據(jù)安全9.1創(chuàng)建線程

學(xué)習(xí)目標(biāo)調(diào)用AfxBeginThread()來啟動(dòng)線程。9.1返回第9章程序的實(shí)現(xiàn)步驟利用AppWizard生成程序框架(ThreadTest)編輯資源添加菜單響應(yīng)函數(shù)編寫線程函數(shù)在視中輸出信息9.1步驟1生成程序框架(MenuTest)項(xiàng)目名稱:ThreadTest選擇單文檔界面應(yīng)用程序(Singledocument)9.1步驟2編輯資源1.編輯菜單資源線程Pop-up選中CaptionID啟動(dòng)線程ID_THREAD_START其他任務(wù)ID_TREEAD_OTHER2.編輯對(duì)話框資源9.1IDD_DIALOG_THRAEDCDlgThread步驟3添加菜單響應(yīng)函數(shù)ClassName ObjectsIDs MessagesCThreadTestView ID_THREAD_START COMMANDCThreadTestView ID_TREEAD_OTHER COMMAND9.1voidCThreadTestView::OnThreadStart(){ HWNDhWnd=GetSafeHwnd(); AfxBeginThread(TreadProc,hWnd,THREAD_PRIORITY_NORMAL);}voidCThreadTestView::OnThraedOther(){ CDlgThreaddlg; dlg.DoModal();}步驟4編寫線程函數(shù)

1.在視類中添加兩個(gè)成員變量。并在構(gòu)造函數(shù)中初始化

9.1classCThreadTestView:publicCView{……public: CStringm_strMessage; intm_iTime;……}CThreadTestView::CThreadTestView(){ m_strMessage="沒有線程啟動(dòng)"; m_iTime=0;}步驟5在視中輸出信息9.1voidCThreadTestView::OnDraw(CDC*pDC){ CThreadTestDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere

charchNumber[6]; itoa(m_iTime,chNumber,10); pDC->TextOut(30,30,m_strMessage); pDC->TextOut(30,50,chNumber);}2.

線程函數(shù)9.1UINTTreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); pView->m_strMessage="啟動(dòng)了一個(gè)線程!"; while(pView->m_iTime<20) { ::Sleep(1000); pView->m_iTime++; pView->Invalidate(); } pView->m_iTime=0; pView->m_strMessage="線程結(jié)束!"; return0;}基本知識(shí)CWnd類的GetSafeHwnd();返回窗口句柄AfxBeginThread();線程函數(shù)(返回UINT)CMainFrame::GetActiveView();::Sleep(1000);9.19.2線程間通信學(xué)習(xí)目標(biāo)1.使用全局變量實(shí)現(xiàn)線程間通信2.使用消息實(shí)現(xiàn)線程間通信3.使用CEvent類實(shí)現(xiàn)線程間通信9.2返回第9章1.使用全局變量實(shí)現(xiàn)線程間通信在上一節(jié)程序的基礎(chǔ)上,進(jìn)行以下操作:(1)在“線程”菜單中添加菜單項(xiàng):“終止線程”,ID_THREAD_STOP。(2)在ThreadTestView.cpp文件中添加一個(gè)全局變量threadController,用來控制線程是否繼續(xù)。添加方法是在ThreadTestView.cpp的最上面,在endif下面添加下面的語句:

volatileintthreadController;(3)在視類中為“停止線程”添加消息處理函數(shù)OnThreadStop()。9.2voidCThreadTestView::OnThreadStop(){

threadController=0;}1.使用全局變量實(shí)現(xiàn)線程間通信4.修改OnThreadStart()函數(shù),代碼如下所示:9.2voidCThreadView::OnStartthread(){ threadController=1; HWNDhWnd=GetSafeHwnd(); AfxBeginThread(TreadProc,hWnd,THREAD_PRIORITY_NORMAL);}5.修改ThreadProc()函數(shù)的代碼,代碼如下:9.2UINTTreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); pView->m_strMessage="啟動(dòng)了一個(gè)線程!"; while(threadController) { ::Sleep(1000); pView->m_iTime++; pView->Invalidate(); } pView->m_iTime=0; pView->m_strMessage="線程結(jié)束!"; return0;}2.使用消息實(shí)現(xiàn)線程間通信(1)在ThreadTestView.h文件中定義消息:

constWM_THREAD_SENDMESS=WM_USER+20;(2)在ThreadTestView.h文件中添加消息函數(shù)聲明: afx_msgintOnThreadSendmess();(3)在ThreadTestView.cpp文件中添加消息映射:

ON_MESSAGE(WM_THREAD_SENDMESS,OnThreadSendmess)(4)OnThreadSendmess()代碼如下:9.2intCThreadTestView::OnThreadSendmess(){ m_iTime++; Invalidate(); return0;}2.使用消息實(shí)現(xiàn)線程間通信(5)修改ThreadProc()函數(shù)如下:9.2UINTTreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); pView->m_strMessage="啟動(dòng)了一個(gè)線程!"; while(threadController) { ::Sleep(1000); ::PostMessage((HWND)param,WM_THREAD_SENDMESS,0,0); } pView->m_iTime=0; pView->m_strMessage="線程結(jié)束!"; return0;}基本知識(shí)PostMessage((HWND)param,WM_THREAD_SENDMESS,0,0);4.53.使用CEvent類實(shí)現(xiàn)線程間通信

(1)Event對(duì)象:有兩種狀態(tài):通信狀態(tài)和非通信狀態(tài)(2)創(chuàng)建一個(gè)CEvent類的對(duì)象很:CEventthreadStart; 他自動(dòng)的處在未通信狀態(tài)(3)threadStart.SetEvent();使其處于通信狀態(tài)(4)調(diào)用WaitForSingleObject()來監(jiān)視CEvent對(duì)象的:

::WaitForSingleObject(threadStart.m_hObject,INFINITE);

9.23.使用CEvent類實(shí)現(xiàn)線程間通信

在上一節(jié)程序的基礎(chǔ)上,進(jìn)行以下操作:

(1)在ThreadTestView.cpp中:#include"afxmt.h"(2)在ThreadTestView.cpp中加上下列兩個(gè)全局變量:CEventthreadStart;CEventthreadEnd;(3)修改ThreadProc()函數(shù)(4)修改OnThreadStart()函數(shù)中的內(nèi)容。

(5)修改OnThreadStop()函數(shù)中的內(nèi)容。(6)CThreadTestView添加WM_CREATE消息處理函數(shù)OnCreate()。9.2voidCThreadTestView::OnThreadStart(){ threadStart.SetEvent(); }voidCThreadTestView::OnThreadStop(){ threadEnd.SetEvent();}3.使用CEvent類實(shí)現(xiàn)線程間通信

9.2UINTTreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView();

::WaitForSingleObject(threadStart.m_hObject,INFINITE); pView->m_strMessage="啟動(dòng)了一個(gè)線程!"; BOOLkeepRunning=TRUE; while(keepRunning) { ::Sleep(1000); intresult=::WaitForSingleObject(threadEnd.m_hObject,0); if(result==WAIT_OBJECT_0) keepRunning=FALSE; ::PostMessage((HWND)param,WM_THREAD_SENDMESS,0,0); } pView->m_iTime=0; pView->m_strMessage="線程結(jié)束!"; return0;}3.使用CEvent類實(shí)現(xiàn)線程間通信

9.2intCThreadTestView::OnCreate(LPCREATESTRUCTlpCreateStruct){ if(CView::OnCreate(lpCreateStruct)==-1) return-1; //TODO:Addyourspecializedcreationcodehere HWNDhWnd=GetSafeHwnd(); AfxBeginThread(TreadProc,hWnd,THREAD_PRIORITY_NORMAL); return0;}9.3線程同步學(xué)習(xí)目標(biāo)1.使用CriticalSection實(shí)現(xiàn)線程同步2.使用互斥對(duì)象(mutex)實(shí)現(xiàn)線程同步3.使用信號(hào)量(semaphore實(shí)現(xiàn)線程同步9.3返回第9章9.3.1使用CriticalSection1.CCriticalSectioncriticalSection;2.criticalSection.Lock();//訪問前3.criticalSection.Unlock();//訪問后9.39.3.1使用CriticalSection一個(gè)使用CriticalSection的線程安全類。

9.3#include"afxmt.h"classCIntArray{private: intarray[10]; CCriticalSectioncriticalSection;public: CIntArray(); ~CIntArray(); voidSetArray(intvalue); voidGetArray(intdstArray[10]);};9.3.1使用CriticalSection一個(gè)使用CriticalSection的線程安全類。

9.3#include"stdafx.h"#include"IntArray.h"CIntArray::CIntArray(){

}

CIntArray::~CIntArray(){

}voidCIntArray::SetArray(intvalue){ criticalSection.Lock(); for(intx=0;x<10;++x) array[x]=value; criticalSection.Unlock();}

voidCIntArray::GetArray(intdstArray[10]){ criticalSection.Lock(); for(intx=0;x<10;++x) dstArray[x]=array[x]; criticalSection.Unlock();}9.3.1使用CriticalSection一個(gè)使用CIntArray的例子。

9.3(1)使用應(yīng)用向?qū)?chuàng)建一個(gè)單文檔應(yīng)用程序(ThreadTest)。(2)將CIntArray類的頭文件和實(shí)現(xiàn)文件中添加到項(xiàng)目中。(3)編輯菜單資源 “線程”菜單 ID_THREAD_START:“啟動(dòng)線程”。(4)在視類中添加該菜單項(xiàng)的響應(yīng)函數(shù) OnThreadStart()。9.3.1使用CriticalSection9.3(5)在ThreadTestView.cpp文件中,加入下面6行語句。 #include"MainFrm.h" #include"afxmt.h" #include"IntArray.h" CIntArrayintArray; intiArray1[10]; ntintSetNumber;(6)添加下面兩個(gè)全程函數(shù)。

UINTWriteThreadProc(LPVOIDparam) UINTReadThreadProc(LPVOIDparam)(7)在OnDraw()中添加代碼9.3.1使用CriticalSection9.3UINTWriteThreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); for(inti=1;i<=10;i++) { intArray.SetArray(i); intSetNumber=i; pView->Invalidate(); ::Sleep(2000); } return0;}9.3.1使用CriticalSection9.3UINTReadThreadProc(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); while(1) { intArray.GetArray(iArray1); pView->Invalidate(); } return0;}9.3.1使用CriticalSection9.3voidCThreadView::OnStartthread(){ //TODO:Addyourcommandhandlercodehere HWNDhWnd=GetSafeHwnd(); AfxBeginThread(WriteThreadProc,hWnd); AfxBeginThread(ReadThreadProc,hWnd);}9.3.1使用CriticalSection9.3voidCThreadTestView::OnDraw(CDC*pDC){ charstr[70]; strcpy(str,"線程1為數(shù)組設(shè)置的值是:"); intlen=strlen(str); wsprintf(&str[len],"%d",intSetNumber); pDC->TextOut(30,30,str); strcpy(str,"線程2讀到的值是:"); for(inti=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray1[i]); } pDC->TextOut(30,50,str);}9.3.2使用使用Mutex(互斥對(duì)象)

將上例中的criticalsection替換成Mutex

9.3#include"afxmt.h"classCIntArray{private:intarray[10];CMutexmutex;public:CIntArray();~CIntArray();voidSetArray(intvalue);voidGetArray(intdstArray[10]);};9.3.2使用使用Mutex(互斥對(duì)象)

9.3#include"stdafx.h"#include"CIntArray.h"CIntArray::CIntArray(){

}

CIntArray::~CIntArray(){

}

voidCIntArray::SetArray(intvalue){CSingleLocksingleLock(&mutex);singleLock.Lock();for(intx=0;x<10;++x)array[x]=value;}

voidCIntArray::GetArray(intdstArray[10]){CSingleLocksingleLock(&mutex);singleLock.Lock();for(intx=0;x<10;++x)dstArray[x]=array[x];}9.3.3使用信號(hào)量(Semaphore)

(1)創(chuàng)建信號(hào)量

CSemaphoreSemaphore(2,2);(2)創(chuàng)建一個(gè)CSingleLock對(duì)象 CSingleLocksingleLock(semaphore);(3)減小信號(hào)量計(jì)數(shù)器

singleLock.Lock();(4)增加信號(hào)量計(jì)數(shù)器

singleLock.Unlock();9.3使用信號(hào)量的一個(gè)例子

1.修改CIntArray類9.3#include"afxmt.h"classCIntArray{private: intarray[10]; CMutexmutex; CSemaphore*semaphore;public: CIntArray(); ~CIntArray(); voidSetArray(intvalue); voidGetArray(intdstArray[10]);};使用信號(hào)量的一個(gè)例子

1.修改CIntArray類9.3CIntArray::CIntArray(){semaphore=newCSemaphore(2,2);}

CIntArray::~CIntArray(){deletesemaphore;}

voidCIntArray::SetArray(intvalue){ CSingleLocksingleLock(&mutex); singleLock.Lock(); for(intx=0;x<10;++x) array[x]=value;}

voidCIntArray::GetArray(intdstArray[10]){ CSingleLocksingleLock(semaphore); singleLock.Lock(); for(intx=0;x<10;++x) dstArray[x]=array[x]; Sleep(2000);}使用信號(hào)量的一個(gè)例子

2.修改CthreadTestView.cpp文件的開始部分9.3#include"MainFrm.h"#include"afxmt.h"#include"IntArray.h"CIntArrayintArray;intiArray1[10];intiArray2[10];intiArray3[10];intiArray4[10];intiArray5[10];intiArray6[10];intiArray7[10];intintSetNumber;

使用信號(hào)量的一個(gè)例子

3.改寫視類中的OnThreadStart()函數(shù)

9.3voidCThreadTestView::OnThreadStart(){ //TODO:Addyourcommandhandlercodehere HWNDhWnd=GetSafeHwnd(); AfxBeginThread(WriteThreadProc,hWnd); AfxBeginThread(ReadThreadProc1,hWnd); AfxBeginThread(ReadThreadProc2,hWnd); AfxBeginThread(ReadThreadProc3,hWnd); AfxBeginThread(ReadThreadProc4,hWnd); AfxBeginThread(ReadThreadProc5,hWnd); AfxBeginThread(ReadThreadProc6,hWnd); AfxBeginThread(ReadThreadProc7,hWnd);}使用信號(hào)量的一個(gè)例子

4.添加另外6個(gè)線程函數(shù)

9.3UINTReadThreadProc2(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); while(1) { intArray.GetArray(iArray2); pView->Invalidate(); } return0;}使用信號(hào)量的一個(gè)例子

9.3UINTReadThreadProc3(LPVOIDparam){ CThreadTestApp*pApp=(CThreadTestApp*)AfxGetApp(); CMainFrame*pMainFrame=(CMainFrame*)pApp->GetMainWnd(); CThreadTestView*pView=(CThreadTestView*)pMainFrame->GetActiveView(); while(1) { intArray.GetArray(iArray3); pView->Invalidate(); } return0;}…………..…………..5.改寫視類的OnDraw()函數(shù)

使用信號(hào)量的一個(gè)例子

9.3voidCThreadTestView::OnDraw(CDC*pDC){ CThreadTestDoc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere charstr[70]; strcpy(str,"寫線程為數(shù)組設(shè)置的值是:"); intlen=strlen(str); wsprintf(&str[len],"%d",intSetNumber); pDC->TextOut(30,30,str);

strcpy(str,"讀線程1讀到的值是:"); for(inti=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray1[i]); } pDC->TextOut(30,50,str);

strcpy(str,"讀線程2讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray2[i]); } pDC->TextOut(30,70,str);

strcpy(str,"讀線程3讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray3[i]); } pDC->TextOut(30,90,str);

strcpy(str,"讀線程4讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray4[i]); } pDC->TextOut(30,110,str);

strcpy(str,"讀線程5讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray5[i]); } pDC->TextOut(30,130,str);

strcpy(str,"讀線程6讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray6[i]); } pDC->TextOut(30,150,str);

strcpy(str,"讀線程7讀到的值是:"); for(i=0;i<10;++i) { intlen=strlen(str); wsprintf(&str[len],"%d",iArray7[i]); } pDC->TextOut(30,170,str);}返回第9章第一節(jié)活塞式空壓機(jī)的工作原理第二節(jié)活塞式空壓機(jī)的結(jié)構(gòu)和自動(dòng)控制第三節(jié)活塞式空壓機(jī)的管理復(fù)習(xí)思考題單擊此處輸入你的副標(biāo)題,文字是您思想的提煉,為了最終演示發(fā)布的良好效果,請(qǐng)盡量言簡意賅的闡述觀點(diǎn)。第六章活塞式空氣壓縮機(jī)

piston-aircompressor壓縮空氣在船舶上的應(yīng)用:

1.主機(jī)的啟動(dòng)、換向;

2.輔機(jī)的啟動(dòng);

3.為氣動(dòng)裝置提供氣源;

4.為氣動(dòng)工具提供氣源;

5.吹洗零部件和濾器。

排氣量:單位時(shí)間內(nèi)所排送的相當(dāng)?shù)谝患?jí)吸氣狀態(tài)的空氣體積。單位:m3/s、m3/min、m3/h第六章活塞式空氣壓縮機(jī)

piston-aircompressor空壓機(jī)分類:按排氣壓力分:低壓0.2~1.0MPa;中壓1~10MPa;高壓10~100MPa。按排氣量分:微型<1m3/min;小型1~10m3/min;中型10~100m3/min;大型>100m3/min。第六章活塞式空氣壓縮機(jī)

piston-aircompressor第一節(jié)活塞式空壓機(jī)的工作原理容積式壓縮機(jī)按結(jié)構(gòu)分為兩大類:往復(fù)式與旋轉(zhuǎn)式兩級(jí)活塞式壓縮機(jī)單級(jí)活塞壓縮機(jī)活塞式壓縮機(jī)膜片式壓縮機(jī)旋轉(zhuǎn)葉片式壓縮機(jī)最長的使用壽命-

----低轉(zhuǎn)速(1460RPM),動(dòng)件少(軸承與滑片),潤滑油在機(jī)件間形成保護(hù)膜,防止磨損及泄漏,使空壓機(jī)能夠安靜有效運(yùn)作;平時(shí)有按規(guī)定做例行保養(yǎng)的JAGUAR滑片式空壓機(jī),至今使用十萬小時(shí)以上,依然完好如初,按十萬小時(shí)相當(dāng)于每日以十小時(shí)運(yùn)作計(jì)算,可長達(dá)33年之久。因此,將滑片式空壓機(jī)比喻為一部終身機(jī)器實(shí)不為過。滑(葉)片式空壓機(jī)可以365天連續(xù)運(yùn)轉(zhuǎn)并保證60000小時(shí)以上安全運(yùn)轉(zhuǎn)的空氣壓縮機(jī)1.進(jìn)氣2.開始?jí)嚎s3.壓縮中4.排氣1.轉(zhuǎn)子及機(jī)殼間成為壓縮空間,當(dāng)轉(zhuǎn)子開始轉(zhuǎn)動(dòng)時(shí),空氣由機(jī)體進(jìn)氣端進(jìn)入。2.轉(zhuǎn)子轉(zhuǎn)動(dòng)使被吸入的空氣轉(zhuǎn)至機(jī)殼與轉(zhuǎn)子間氣密范圍,同時(shí)停止進(jìn)氣。3.轉(zhuǎn)子不斷轉(zhuǎn)動(dòng),氣密范圍變小,空氣被壓縮。4.被壓縮的空氣壓力升高達(dá)到額定的壓力后由排氣端排出進(jìn)入油氣分離器內(nèi)。4.被壓縮的空氣壓力升高達(dá)到額定的壓力后由排氣端排出進(jìn)入油氣分離器內(nèi)。1.進(jìn)氣2.開始?jí)嚎s3.壓縮中4.排氣1.凸凹轉(zhuǎn)子及機(jī)殼間成為壓縮空間,當(dāng)轉(zhuǎn)子開始轉(zhuǎn)動(dòng)時(shí),空氣由機(jī)體進(jìn)氣端進(jìn)入。2.轉(zhuǎn)子轉(zhuǎn)動(dòng)使被吸入的空氣轉(zhuǎn)至機(jī)殼與轉(zhuǎn)子間氣密范圍,同時(shí)停止進(jìn)氣。3.轉(zhuǎn)子不斷轉(zhuǎn)動(dòng),氣密范圍變小,空氣被壓縮。螺桿式氣體壓縮機(jī)是世界上最先進(jìn)、緊湊型、堅(jiān)實(shí)、運(yùn)行平穩(wěn),噪音低,是值得信賴的氣體壓縮機(jī)。螺桿式壓縮機(jī)氣路系統(tǒng):

A

進(jìn)氣過濾器

B

空氣進(jìn)氣閥

C

壓縮機(jī)主機(jī)

D

單向閥

E

空氣/油分離器

F

最小壓力閥

G

后冷卻器

H

帶自動(dòng)疏水器的水分離器油路系統(tǒng):

J

油箱

K

恒溫旁通閥

L

油冷卻器

M

油過濾器

N

回油閥

O

斷油閥冷凍系統(tǒng):

P

冷凍壓縮機(jī)

Q

冷凝器

R

熱交換器

S

旁通系統(tǒng)

T

空氣出口過濾器螺桿式壓縮機(jī)渦旋式壓縮機(jī)

渦旋式壓縮機(jī)是20世紀(jì)90年代末期開發(fā)并問世的高科技?jí)嚎s機(jī),由于結(jié)構(gòu)簡單、零件少、效率高、可靠性好,尤其是其低噪聲、長壽命等諸方面大大優(yōu)于其它型式的壓縮機(jī),已經(jīng)得到壓縮機(jī)行業(yè)的關(guān)注和公認(rèn)。被譽(yù)為“環(huán)保型壓縮機(jī)”。由于渦旋式壓縮機(jī)的獨(dú)特設(shè)計(jì),使其成為當(dāng)今世界最節(jié)能壓縮機(jī)。渦旋式壓縮機(jī)主要運(yùn)動(dòng)件渦卷付,只有磨合沒有磨損,因而壽命更長,被譽(yù)為免維修壓縮機(jī)。

由于渦旋式壓縮機(jī)運(yùn)行平穩(wěn)、振動(dòng)小、工作環(huán)境安靜,又被譽(yù)為“超靜壓縮機(jī)”。

渦旋式壓縮機(jī)零部件少,只有四個(gè)運(yùn)動(dòng)部件,壓縮機(jī)工作腔由相運(yùn)動(dòng)渦卷付形成多個(gè)相互封閉的鐮形工作腔,當(dāng)動(dòng)渦卷作平動(dòng)運(yùn)動(dòng)時(shí),使鐮形工作腔由大變小而達(dá)到壓縮和排出壓縮空氣的目的?;钊娇諝鈮嚎s機(jī)的外形第一節(jié)活塞式空壓機(jī)的工作原理一、理論工作循環(huán)(單級(jí)壓縮)工作循環(huán):4—1—2—34—1吸氣過程

1—2壓縮過程

2—3排氣過程第一節(jié)活塞式空壓機(jī)的工作原理一、理論工作循環(huán)(單級(jí)壓縮)

壓縮分類:絕熱壓縮:1—2耗功最大等溫壓縮:1—2''耗功最小多變壓縮:1—2'耗功居中功=P×V(PV圖上的面積)加強(qiáng)對(duì)氣缸的冷卻,省功、對(duì)氣缸潤滑有益。二、實(shí)際工作循環(huán)(單級(jí)壓縮)1.不存在假設(shè)條件2.與理論循環(huán)不同的原因:1)余隙容積Vc的影響Vc不利的影響—?dú)埓娴臍怏w在活塞回行時(shí),發(fā)生膨脹,使實(shí)際吸氣行程(容積)減小。Vc有利的好處—

(1)形成氣墊,利于活塞回行;(2)避免“液擊”(空氣結(jié)露);(3)避免活塞、連桿熱膨脹,松動(dòng)發(fā)生相撞。第一節(jié)活塞式空壓機(jī)的工作原理表征Vc的參數(shù)—相對(duì)容積C、容積系數(shù)λv合適的C:低壓0.07-0.12

中壓0.09-0.14

高壓0.11-0.16

λv=0.65—0.901)余隙容積Vc的影響C越大或壓力比越高,則λv越小。保證Vc正常的措施:余隙高度見表6-1壓鉛法—保證要求的氣缸墊厚度2.與理論循環(huán)不同的原因:二、實(shí)際工作循環(huán)(單級(jí)壓縮)第一節(jié)活塞式空壓機(jī)的工作原理2)進(jìn)排氣閥及流道阻力的影響吸氣過程壓力損失使排氣量減少程度,用壓力系數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論