用MFC實現串口編程86953_第1頁
用MFC實現串口編程86953_第2頁
用MFC實現串口編程86953_第3頁
用MFC實現串口編程86953_第4頁
用MFC實現串口編程86953_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、用MFC實現串口編程(作者:付杰2000年08月04日11:28)本文詳細介紹了串行通信的基本原理,以及在 Windows NT、Win98環境下用 MFC實現串口 (COM)通信的方法:使用ActiveX控件或 Win API.并給出用 Visual C+6.0編寫的相應 MFC32 位應用程序。關鍵詞:串行通信、VC+6O ActiveX控件、Win API、MFC32位應用程序、事件驅動、非阻塞通信、多線程 .在Windows應用程序的開發中,我們常常需要面臨與外圍數據源設備通信的問題。計 算機和單片機(如 MCS-51)都具有串行通信口,可以設計相應的串口通信程序,完成二者 之間的數據

2、通信任務。實際工作中利用串口完成通信任務的時候非常之多。已有一些文章介紹串口編程的文章在計算機雜志上發表。但總的感覺說來不太全面,特別是介紹32位下編程的更少,且很不詳細。筆者在實際工作中積累了較多經驗,結合硬件、軟件,重點提及比較新的技術,及需要注意的要點作一番探討。希望對各位需要編寫串口通信程序的朋友有一些幫助。一.串行通信的基本原理串行端口的本質功能是作為 CPU和串行設備間的編碼轉換器。當數據從CPU經過串行端口發送出去時,字節數據轉換為串行的位。在接收數據時,串行的位被轉換為字節數據。在 Windows 環境(Windows NT、Win98、Windows2000 )下,串口是系統

3、資源的一部分。應用程序要使用串口進行通信,必須在使用之前向操作系統提出資源申請要求(打開串口),通信完成后必須釋放資源(關閉串口)。串口通信程序的流程如下圖:申請資涯配字數串口信號線的接法一個完整的RS-232C接口有22根線,采用標準的 25芯插頭座(或者9芯插頭座)。25芯和9芯的主要信號線相同。以下的介紹是以25芯的RS-232C為例。主要信號線定義:2腳:發送數據TXR 3腳:接收數據 RXD, 4腳:請求發送 RTS 5腳:清除發送CTS6腳:數據設備就緒 DSR 20腳:數據終端就緒 DTR; 8腳:數據載波檢測 DCD;1腳:保護地;7腳:信號地。電氣特性:數據傳輸速率最大可到

4、20K bps最大距離僅15m.注:看了微軟的 MSDN 6.0,其Windows API中關于串行通訊設備(不一定都是串口RS-232C或RS-422或RS-449)速率的設置,最大可支持到 RS_256000,即256K bps!也不知道到底是 什么串行通訊設備?但不管怎樣,一般主機和單片機的串口通訊大多都在9600 bps,可以滿足通訊需求。接口的典型應用:大多數計算機應用系統與智能單元之間只需使用3到5根信號線即可工作。這時,除了 TXHRXD以外,還需使用 RTS CTS DCD DTR DSR等信號線。(當然,在程序中也需要對相應 的信號線進行設置。)圖最簡單的RS232-C信號線

5、接法以上接法,在設計程序時,直接進行數據的接收和發送就可以了,不需要 對信號線的狀態進行判斷或設置。(如果應用的場合需要使用握手信號等,需要對相應的信號線的 狀態進行監測或設置。)三.16位串口應用程序的簡單回顧16位串口應用程序中,使用的16位的Windows API通信函數:OpenComm()打開串口資源,并指定輸入、輸出緩沖區的大小(以字節計) ;CloseComm() 關閉串口例: int idComDev;idComDev = OpenComm("COM1", 1024, 128);CloseComm(idComDev);BuildCommDCB()、setCo

6、mmState()填寫設備控制塊 DCB,然后對已打開的串口進行參數 配置 ;例: DCB dcb;BuildCommDCB("COM1:2400,n,8,1", &dcb);SetCommState(&dcb); ReadComm 、 WriteComm() 對串口進行讀寫操作,即數據的接收和發送.例: char *m_pRecieve; int count;ReadComm(idComDev,m_pRecieve,count);Char wr30; int count2;WriteComm(idComDev,wr,count2);16 位下的串口通信程序

7、最大的特點就在于:串口等外部設備的操作有自己特有的API 函數;而 32 位程序則把串口操作(以及并口等)和文件操作統一起來了,使用類似的操作。四.在MFC下的32位串口應用程序32位下串口通信程序可以用兩種方法實現:利用ActiveX控件;使用API通信函數。使用ActiveX控件,程序實現非常簡單,結構清晰,缺點是欠靈活;使用 API通信函數的優 缺點則基本上相反。以下介紹的都是在單文檔(SDI)應用程序中加入串口通信能力的程序。 使用 ActiveX控件:VC+ 6.0 提供的 MSComm 控件通過串行端口發送和接收數據,為應用程序提供串行通信功能。使用非常方便,但可惜的是,很少有介紹

8、MSComm 控件的資料。.在當前的 Workspace中插入 MSComm控件。Project 菜單 >Add to Project>Components and Controls>RegisteredActiveX Controls->選擇Components: Microsoft Communications Control,version 6.0 插入到當前的Workspace 中。結果添加了類 CMSComm(及相應文件:mscomm.h和mscomm.cpp )。.在 MainFrm.h中加入 MSComm控件。protected:CMSComm m_Com

9、Port;在 Mainfrm.cpp:OnCreare() 中:DWORD style=WS_VISIBLE|WS_CHILD;if (!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)TRACE0("Failed to create OLE Communications Controln");return -1;/ fail to create .初始化串口m_ComPort.SetCommPort(1);/選擇COM?m_ComPort. SetInBufferSize(1024); / 設置輸入緩

10、沖區的大小,Bytesm_ComPort. SetOutBufferSize(512); / 設置輸入緩沖區的大小,Bytes/if(!m_ComPort.GetPortOpen() / 打開串口m_ComPort.SetPortOpen(TRUE);m_ComPort.SetInputMode(1); / 設置輸入方式為二進制方式m_ComPort.SetSettings("9600,n,8,1"); / 設置波特率等參數m_ComPort.SetRThreshold(1); / 為 1 表示有一個字符引發一個事件m_ComPort.SetInputLen(0);.捕捉串

11、口事項。MSComm控件可以采用輪詢或事件驅動的方法從端口獲取數據。我們介紹比較使用的事件驅動方法:有事件(如接收到數據)時通知程序。在程序中需要捕獲并處理這些通訊事件。在 MainFrm.h 中:protected:afx_msg void OnCommMscomm();DECLARE_EVENTSINK_MAP()在 MainFrm.cpp 中:BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE)/映射ActiveX控件事件END_EVENTSIN

12、K_MAP().串口讀寫.完成讀寫的函數的確很簡單,GetInput()和SetOutput()就可。兩個函數的原型是:VARIANT GetInput();及 void SetOutput(const VARIANT& newValue);者B要使用 VARIANT類型(所 有Idispatch:Invoke的參數和返回值在內部都是作為VARIANT對象處理的)。無論是在PC機讀取上傳數據時還是在PC機發送下行命令時,我們都習慣于使用字符串的形式(也可以說是數組形式)。查閱VARIANT文檔知道,可以用BSTR表示字符串,但遺憾的是所有的BSTRIB是包含寬字符,即使我們沒有定義_U

13、NICODE_UNICOD也是這樣! WinNT 支持寬字符,而Win95并不支持。為解決上述問題,我們在實際工作中使用CbyteArray,給出相應的部分程序如下:void CMainFrame:OnCommMscomm()VARIANT vResponse; int k;if(m_commCtrl.GetCommEvent()=2) k=m_commCtrl.GetInBufferCount(); / 接收到的字符數目if(k>0) vResponse=m_commCtrl.GetInput(); /readSaveData(k,(unsigned char*) vResponse.

14、parray->pvData); / 接收到字符,MSComm 控件發送事件。 。 。 。 。/ 處理其他MSComm 控件void CMainFrame:OnCommSend() oooooooo /準備需要發送的命令,放在 TxData口中CByteArray array;array.RemoveAll();array.SetSize(Count);for(i=0;i<Count;i+)array.SetAt(i, TxDatai);m_ComPort.SetOutput(COleVariant(array); / 發送數據請大家認真關注第、中內容,在實際工作中是重點、難點所在

15、。 使用 32 位的 API 通信函數:可能很多朋友會覺得奇怪:用32位API函數編寫串口通信程序,不就是把 16位的API換成32位嗎? 16位的串口通信程序可是多年之前就有很多人研討過了此文主要想介紹一下在API 串口通信中如何結合非阻塞通信、多線程等手段,編寫出高質量的通信程序。特別是在CPU 處理任務比較繁重、與外圍設備中有大量的通信數據時,更有實際意義。.在中MainFrm.cpp定義全局變量HANDLEhCom; / 準備打開的串口的句柄HANDLEhCommWatchThread ;/ 輔助線程的全局函數.打開串口,設置串口hCom =CreateFile( "COM2

16、", GENERIC_READ | GENERIC_WRITE,/允許讀寫/0,/ 此項必須為0NULL,/ no security attrsOPEN_EXISTING,/設置產生方式FILE_FLAG_OVERLAPPED, /我們準備使用異步通信/NULL );請大家注意,我們使用了FILE_FLAG_OVERLAPPED構。這正是使用 API實現非阻塞通信的關鍵所在。ASSERT(hCom!=INVALID_HANDLE_VALUE);楂測打開串口操作是否成功SetCommMask(hCom, EV_RXCHAR|EV_TXEMPTY );/設置事件驅動的類型/SetupCo

17、mm( hCom, 1024,512) ; / 設置輸入、輸出緩沖區的大小PurgeComm( hCom, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR ); /清干凈輸入、輸出緩沖區 /COMMTIMEOUTS CommTimeOuts ; /定義超時結構,并填寫該結構SetCommTimeouts( hCom, &CommTimeOuts ) ;/ 設置讀寫操作所允許的超時DCBdcb ; / 定義數據控制塊結構GetCommState(hCom, &dcb ) ; / 讀串口原來的參數設置dcb.

18、BaudRate =9600; dcb.ByteSize =8; dcb.Parity = NOPARITY;dcb.StopBits = ONESTOPBIT ;dcb.fBinary = TRUE ;dcb.fParity = FALSE;SetCommState(hCom, &dcb ) ; / 串口參數配置上述的COMMTIMEOUTS結構和DCB都很重要,實際工作中需要仔細選擇參數。啟動一個輔助線程,用于串口事件的處理。Windows 提供了兩種線程,輔助線程和用戶界面線程。區別在于:輔助線程沒有窗口,所以它沒有自己的消息循環。但是輔助線程很容易編程,通常也很有用。在次,我們

19、使用輔助線程。主要用它來監視串口狀態,看有無數據到達、通信有無錯誤;而主線程則可專心進行數據處理、提供友好的用戶界面等重要的工作。hCommWatchThread=CreateThread( (LPSECURITY_ATTRIBUTES) NUL全屬性0,/ 初始化線程棧的大小,缺省為與主線程大小相同(LPTHREAD_START_ROUTINE)CommWatchProc,績程的全局函數GetSafeHwnd(), / 此處傳入了主框架的句柄0, &dwThreadID );ASSERT(hCommWatchThread!=NULL);為輔助線程寫一個全局函數,主要完成數據接收的工作

20、。請注意OVERLAPPED吉構的使用, 以及怎樣實現了非阻塞通信。UINT CommWatchProc(HWND hSendWnd)DWORD dwEvtMask=0 ;SetCommMask( hCom, EV_RXCHAR|EV_TXEMPTY );有哪些串口事件需要監視?/WaitCommEvent( hCom, &dwEvtMask, os );/ 等待串口通信事件的發生檢測返回的dwEvtMask,知道發生了什么串口事件:if (dwEvtMask & EV_RXCHAR) = EV_RXCHAR) /緩沖區中有數據到達COMSTAT ComStat ; DWORD

21、 dwLength;ClearCommError(hCom, &dwErrorFlags, &ComStat ) ;dwLength = ComStat.cbInQue ; / 輸入緩沖區有多少數據?if (dwLength > 0) BOOL fReadStat ;fReadStat = ReadFile( hCom, lpBuffer, dwLength, &dwBytesRead,&READ_OS( npTTYInfo ) ); /讀數據注:我們在 CreareFile()時使用了 FILE_FLAG_OVERLAPPED在 ReadFile()也必

22、須使用LPOVERLAPPE結構.否則,函數會不正確地報告讀操作已完成了.使用LPOVERLAPPE綃構,ReadFile()立即返回,不必等待讀操作完成,實現非阻塞通信.此時,ReadFile()M回 FALSE, GetLastError嶇回 ERROR_IO_PENDING.if (!fReadStat)if (GetLastError() = ERROR_IO_PENDING)while(!GetOverlappedResult(hCom,&READ_OS( npTTYInfo ), & dwBytesRead, TRUE )dwError = GetLastError

23、();if(dwError = ERROR_IO_INCOMPLETE) continu;e/ 緩沖區數據沒有讀完,繼續二PostMessage(HWND)hSendWnd,WM_NOTIFYPROCESS,0,0);通知主線程,串口收到數 據所謂的非阻塞通信,也即異步通信。是指在進行需要花費大量時間的數據讀寫操作(不僅僅是指串行通信操作)時,一旦調用ReadFile()、 WriteFile(), 就能立即返回,而讓實際的讀寫操作在后臺運行;相反,如使用阻塞通信,則必須在讀或寫操作全部完成后才能返回。 由于操作可能需要任意長的時間才能完成,于是問題就出現了。非常阻塞操作還允許讀、寫操作能同時

24、進行(即重疊操作?) ,在實際工作中非常有用。要使用非阻塞通信,首先在CreateFile()時必須使用FILE_FLAG_OVERLAPPE濰后在ReadFile() 時©Overlapped參數一定不能為 NULL,接著檢查函數調用的返回值,調用 GetLastError(), 看是否返回 ERROR_IO_PENDING如是,最后調用 GetOverlappedResult()返回重疊操作 (overlapped operation) 的結果 ;WriteFile() 的使用類似。.在主線程中發送下行命令。BOOL fWriteStat ; char szBuffercount

25、;準備好發送的數據,放在szBufer口中fWriteStat = WriteFile(hCom, szBuffer, dwBytesToWrite,&dwBytesWritten, &WRITE_OS( npTTYInfo ) ); / 寫數據注:我們在 CreareFile()時使用了 FILE_FLAG_OVERLAPPE現在 WriteFile()也必須使用 LPOVERLAPPE結構.否則,函數會不正確地報告寫操作已完成了.使用LPOVERLAPPED吉構,WriteFile()立即返回,不必等待寫操作完成,實現非阻塞 通信. 此時,WriteFile()返回 FAL

26、SE, GetLastError軀回 ERROR_IO_PENDING.int err=GetLastError();if (!fWriteStat) if(GetLastError() = ERROR_IO_PENDING)while(!GetOverlappedResult(hCom, &WRITE_OS( npTTYInfo ),&dwBytesWritten, TRUE ) dwError = GetLastError();if(dwError = ERROR_IO_INCOMPLETE)/ normal result if not finisheddwBytesSen

27、t += dwBytesWritten; continue; 綜上, 我們使用了多線程技術,在輔助線程中監視串口,有數據到達時依靠事件驅動,讀入數據并向主線程報告(發送數據在主線程中,相對說來,下行命令的數據總是少得多);并且,WaitCommEvent()、 ReadFile()、 WriteFile() 都使用了非阻塞通信技術,依靠重疊 ( overlapped )讀寫操作,讓串口讀寫操作在后臺運行。依托 vc6.0 豐富的功能,結合我們提及的技術,寫出有強大控制能力的串口通信應用程序。就個人而言,我更偏愛API 技術,因為控制手段要靈活的多,功能也要強大得多。串口編程學習日記(1)200

28、7-09-12 11:08串口編程的要點其實就是如何控制收發數據。它也屬于數據流模型的一種, 我們平常接觸比較多的是文件流操作, 控制臺的流操作( 其實還是文件流),socket 流等等 .接觸過這類編程的程序員應該都知道, 流編程其實就4 個操作 .1. 打開 2. 讀 3. 寫 4. 關閉看起來很簡單, 但真正在程序中用好它們, 還需要注意很多細節. 比如 收發數據的同步大數據量的收發如何處理連接超時的處理等等.2. 打開const CHAR * name = ".com4"HANDLE com_handle = :CreateFile(name,GENERIC_REA

29、D | GENERIC_WRITE,0,NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED,NULL);需要注意的是這里除了 name可以更改以外,其余的參數必須使用上述的值 .name的命名規 則是. + 串口名.如這里是.com4.這樣的命名是為了兼容有些老的 WINDOWS(比如 WIN98)和某些虛擬串口而采用的.如 果 需 要 枚 舉 系 統 中 的 串 口 ,可 以 訪 問 注 冊 表 hkey_local_machinehardwaredevicemapseriaLcOMM即可.打開以后還要做些初始化的操作, 比如設置串口的屬性, 設置串口的讀寫超時

30、( 很重要 ), 清空可能遺留在串口中的數據緩沖等.首先設置串口的屬性,在WIN32中,有個DCB勺結卞體,我們只要填充它就可以了 .因為這個結 構體比較大,我們可以采用 WIN32提供的函數BuildCommDC睞構建它.這里需要提供4項內容 .baud( 波特率 ) parity( 奇偶校驗) data( 數據位 ) stop( 停止位 ). 關于這個函數的其它細節 , 可以查閱MSDN.DCB dcb;if (!BuildCommDCB(L"baud=19200 parity=N data=8 stop=1",&dcb) / 錯誤處理 return FALSE

31、;然后我們通過SetCommState 來設置 DCB.if (!SetCommState(com_handle,&m_dcb)/ 錯誤處理 return FALSE;之后我們再設置 COMH的讀寫超時.我們需要填充 COMMTIMEOUTS吉構.COMMTIMEOUTS time_outs;time_outs.ReadIntervalTimeout = 0x0A;time_outs.ReadTotalTimeoutConstant = 0;time_outs.ReadTotalTimeoutMultiplier = 0;time_outs.WriteTotalTimeoutConst

32、ant = 0;time_outs.WriteTotalTimeoutMultiplier = 5000;這里每項值的含義要看MSDN我是采用 windows串口通訊工具里的默認設置.接下來用SetCommTimeouts 來設置超時.if (!SetCommTimeouts(com_handle,&time_outs)/ 錯誤處理return FALSE;最后我們要清空數據緩沖,以避免遺留的數據干擾我們正常的程序.用PurgeComm來達到目的.if (!:PurgeComm(com_handle, PURGE_TXABORT | PURGE_RXABORT| PURGE_TXCLE

33、AR | PURGE_RXCLEAR )/ 錯誤處理return FALSE;到這一步, 我們的打開操作就算完成(2)2007-09-12 11:403. 讀 , 寫我們知道,我們剛創建COMMO柄是基于overlapped結構的.也就是一種異步機制.overlapped 結構里只有一項我們需要關心, 就是一個event 句柄 .既然我們需要讀寫操作, 那當然得要有2 個 event 句柄才夠.所以我們要先創建兩個event 句柄 .enum READ = 0,WRITE,LAST ;HANDLE eventLAST;for (INT i = 0;i < LAST;+i) eventi

34、= :CreateEvent(NULL,FALSE,FALSE,NULL);因為讀寫都是異步的, 那為了 準備好 接收數據, 我們還需要預先調用一次讀操作, 這里要用ReadFile.CHAR recv_buffer1024;memset(recv_buffer,0,1024);OVERLAPPED ovLAST;memset(&ovREAD,0,sizeof(OVERLAPPED);ovREAD.hEvent = eventREAD;:ReadFile(com_handle,recv_buffer,1024,NULL,&ovREAD);好了,到這里為止,我們就已經準備好接收C

35、OM口來的數據了,但什么時候數據會來到了,這個時候我們就得用到剛才創建的兩個event 了 .while (TRUE) DWORD index = :WaitForMultipleObjects(LAST,event,FALSE,500); if (index = WAIT_TIMEOUT) continue;index = index - WAIT_OBJECT_0;/ 有數據送到串口了if (index = READ) DWORD bytes = 0;:GetOverlappedResult(com_handle,&ovREAD,&bytes,FALSE);if (byte

36、s > 0) / 處理收到的數據吧,bytes 為收到的數據長度./ 繼續等待接收memset(recv_buffer,0,1024);OVERLAPPED ovLAST;memset(&ovREAD,0,sizeof(OVERLAPPED);ovREAD.hEvent = eventREAD;:ReadFile(com_handle,recv_buffer,1024,NULL,&ovREAD);/ 數據已經發送出去了else if (index = WRITE)DWORD bytes = 0;:GetOverlappedResult(com_handle,&ov

37、WRITE, &bytes,FALSE);if (bytes > 0)/ 處理已經發送出去的數據( 這個一般不用處理, 只是為了同步收發才用的到)讀和寫的循環基本就這樣了, 但一般情況下, 我們會把這個循環放到一個獨立的線程中去做,這里簡單點, 就放到主線程了.如果要發數據, 還得再單獨寫一個函數.CHAR send_buffer1024;BOOLEAN SendData(const CHAR * data,INT len)memset(&ovWRITE,0,sizeof(OVERLAPPED);ovWRITE.hEvent = eventWRITE;memcpy(sen

38、d_buffer,data,len);:WriteFile(com_handle,send_buffer,len,NULL,&ovWRITE);這個函數需要注意的是, 當數據還沒有真正的發送出去的時候, 再次調用它會出問題, 所以 ,我們一般還要對發送的數據做一個同步處理, 比較通用的做法是維護一個發送隊列, 如果正在發送時, 那么就把待發的數據放到隊列里, 等真正發送完畢串口編程學習日記(3)2007-09-12 13:394. 關閉把我們創建的資源都釋放掉就OK了.:Close(com_handle);for (INT i = 0;i < LAST;+i)memset(&am

39、p;ovi,0,sizeof(OVERLAPPED);:CloseHandle(eventi);如果還創建了線程的話, 別忘記合理的中斷線程.一名高級軟件工程師的職業規劃2007 年 12 月 30 日 星期日 下午 02:45在我上初中的時候,我接觸到了一種名叫BASIC的程序匯編語言.當我第一眼看到它時, 我就夢想著能有一天成為控制計算機的主人. 而在我進入了大學后更是學會了理性地看待我的目標, 在對自身作出了比較全面而客觀的分析和比較后 , 我選擇了高級軟件工程師作為我大學四年甚至整個人生的奮斗目標.一 . 高級系統工程師的職業定義:高級軟件工程師是IT 行業中的重要崗位. 根據開發進度

40、和任務分配, 完成相應模塊軟件的設計、開發、編程任務; 進行程序單元、功能的測試, 查出軟件存在的缺陷并保證其質量; 進行編制項目文檔和質量記錄的工作; 維護軟件使之保持可用性和穩定性. 軟件開發是一個系統的過程, 需要經過市場需求分析、軟件代碼編寫、軟件測試、軟件維護等程序. 軟件開發工程師在整個過程中扮演著非常重要的角色, 主要從事根據需求開發項目軟件工作.二 . 行業背景和發展前途:軟件和信息服務外包產業已成為各個國家經濟發展的重點. 從增加值角度來看 , 同樣金額的出口, 服務外包對中國經濟的貢獻是來料加工的20 倍以上 ;從能源消耗上看,服務外包單位GDPfg耗僅為制造業的20%.這

41、在中國政府大 力倡導可持續發展戰略以及大力發展高技術第三產業的主旋律下是適應中國經濟發展 , 也是符合中國社會客觀需求的. 可以看到的是, 未來中國軟件和信息服務外包產業發展空間巨大, 其原因有三: 首先是具有成本優勢, 中國低成本的競爭優勢是全世界公認的. 第二 , 具有人力資源優勢, 中國是世界上人力資源極為豐富的國家, 軟件和信息服務外包服務業是勞動密集型產業, 中國未來在軟件和信息服務外包業內將成為全球最具競爭力的轉移承接地. 第三 , 中國有非常龐大的國內市場, 這是中國吸引跨國公司進入很重要的一個原因.但與發展潛力不對稱的是, 現今中國軟件和信息產業人才相當缺乏, 據調查研究顯示

42、, 當前中國軟件和信息服務外包產業人才流動率較高, 而且缺口很大.企業成立時間比較短, 規模大多比較小, 企業人才平均流動率達18.28%, 這和缺乏培訓、業務來源不穩定、報酬機制不夠合理等因素有關. 同時由于產業發展迅速 , 人才供不應求, 尤其是本地化人才和中高級管理人才.市場需求的巨大和專業人才的缺乏令人吃驚, 但這正是商機和盈利的重要突破口 . 可以預見 , 中國軟件和信息服務外包產業將在不久的將來成為引領中國第三產業轉型和發展的龍頭產業, 相關職業包含高級軟件工程師的人才需求將會非常巨大 .三 . 職業所需基本技術及素質:1. 編程開發工具.至少熟練掌握兩到三種開發工具的使用, 這是

43、程序員的立身之本. C/C+ 以其高效率和高度的靈活性成為開發工具中的利器, 很多系統級的軟件還是用C/C+瑞寫.而JAVA的跨平臺和與 WEB艮好的2合是JAVA的優勢所在.其次,如果能掌握一種簡便的可視化開發工具, 如 VB,PowerBuilder,Delphi,C+Builder, 則更好 , 這些開發工具減小了開發難度, 并能夠在無形中強化對象模型的概念. 另外 , 需要掌握基本的腳本語言, 如 shell,perl 等 .2. 數據庫 .數據庫在當今的信息外包產業是很重要的. 很多應用程序都是以數據庫的數據為中心, 而數據庫的產品也有不少, 其中關系型數據庫仍是主流形式, 所以作為

44、高級軟件工程師而言, 至少熟練掌握一兩種數據庫, 對關系型數據庫的關鍵元素非常清楚,熟練掌握SQL的基本語法是非常重要的.3. 網絡協議TCP/IP.在互聯網如此普及的今天,如果還沒有對互聯網的支撐協議 TCP/IP協議棧有很好的掌握就很難在IT 業立足 . 從最早的客戶/服務器結構, 到今天的WEBServices, 這一切都離不開以TCP/IP 協議棧為基礎的網絡協議支持, 所以 ,深入掌握TCP/IP 協議是非常必要的.4. 軟件工程與CMM.現代大型軟件系統的開發中, 工程化的開發控制成為軟件系統成功的保證. 編程只是軟件生命周期中的其中一環, 本人認為優秀的軟件工程師應該掌握軟件開發

45、各個階段的基本技能, 如市場分析, 可行性分析, 需求分析, 結構設計,詳細設計,軟件測試等.否則就永遠只會是一個程序員,而無法成為名副其實 的工程師.5. 計算機技術專業英語.隨著中國的信息外包產業逐步展開,IT業急需與國外相關高新技術接軌來保持 在發展上不落人后.于是IT業相關從業人員現有的英語水平成為限制中國信 息產業與國外交流的瓶頸.一個普遍的共識是:良好的英語交流和閱讀能力成 為衡量一個軟件工程師水平的隱性標準.所以掌握計算機專業英語是很重要的6. 強烈的好奇心和學習精神.對于一個立志成為高級軟件工程師的人,最重要的其實是強烈的好奇心和學習 精神.沒有比強烈的好奇心和學習精神更好的武

46、器了 ,它是成功的工程師乃至 在各行各業的成功者們永攀高峰的源泉和動力所在.界500強英語面試題500強企業面試時,常常用英語來進行問答,當面試官用英語向你提出問題時,你要是能講一口流利的英語,再配合使用眼神、手勢等形體語言,那無疑是為您的面試錦上添花,所有的面試官都會對你刮目相看。宏威管理咨詢有限公司的美籍華人、核心咨詢師Dejun Lee告訴大家:在國內,英語的口語有兩大類:一類是中國式的英語,這種口語是將要回答的問題先用漢語組織好文章或句子,然后再翻譯成英語,這當然是口語不過關的表現,也是不過關的癥結所在;另一類就是完全按外國人的方式和習慣,直接用英語來組織語言,這當然是英語口語已經很順

47、暢或完全過關了。二者之間當然還跨越著一段距離,還需今后繼續努力,目前,你達到哪類就按哪類準備,先解燃眉之急吧,反正那也不是一日之功。500強企業面試時,常用英語提出問題。 宏威職業顧問經過歸納總結,將500強面試的問題基本上是按前面我們所說的能力素質模型,分成3類16條,每一條里有幾個不同的問題,大體如下:一.分析判斷能力:1 .分析能力:1)請給出一個事例,表明你在面對情況非常復雜的局面的時候是如何分析和評估的Tell me about a complex situation which you have had to analyze and assess.2)當你面對一個有矛盾沖突的問題時

48、,你會怎么做?When you have been faced with conflicting information about a pr oblem, what have you done?3) 請列舉一個你在工作中面對一種微妙而又困難的局面時,能夠成功地保持客觀的分析能力的例子。Tell me about an occasion where you successfully maintained youobjectivity in addressing a sensitive and difficult situation at work.2 .市場敏感度:1)請給出一個你滿足消費者或

49、客戶需求變化的例子。Tell me about a timewhen you have addresseda change in consumers' or customers' needs.you have involved?2) 你最近的一次創新活動是什么?What is the most recent initiative3) 是否曾經將一些想法或實踐方法從外部世界中帶入到你的工作或學習中去?What ideas or practices have you brought into your work/ stud y from the external world?3 .

50、創造力:1) 請給出一個你用創造性的方案解決企業問題的例子。Tell me about creative solutions to business problems that you h ave come up with.2)請描述一下你最近創新或新開發的事物。Describe a recent innovation or new development that you have in troduced.3) 是否可以給出一個你提供給其他同事的不同的方式方法或看待問題的角度的例子?Can you give me an example of when you had a different

51、approac h or business perspective to your colleagues?4 .清晰的目的性:tacked complex wor1)請給出一個你成功地解決一件非常復雜的工作的事例,并說明你是如何確定哪些工作需要完成的。Tell me about a time when you successfullyk issue and how you worked outwhat needed to be done.2) 什么時候你處理過一個在最終期限前你無法完成的項目?When have you worked on a projectwhere the deadline

52、couldn ' t be met?3)請給出一個你必須在同一時間完成很多項任務的事例。Tell me about a time when you have had to manage a large numb er of activities at the same time.5 .學習能力:1) 請給出一個最近你從別人的錯誤中有所學習的例子。Tell me about the last time you learned from someone else ' s mis take.2)請給出一個最近你從事的項目或任務的例子,在該項目或任務中,(最起碼剛開始)的表現不盡人意。

53、Please describe a recent task or project in which, at least ini tially, your performance was less than satisfactory.3)你認為你最需要的專業發展的方面是什么?What do you believe are the areas in which you require the mos t professional development?6 .結構化的思維能力:1)某快速消費品公司最近遇到了利潤下降的問題,請你分析一下可能的原因。The profit of a FMCG compa

54、ny decreases recently. Please analyze possible reasons of the profit decrease.2) 某美國地鐵公司希望投資中國地鐵,希望五年可收回投資,請你做一個可行性分析。A certainUS basedSubwayCompany planedto investon Subway ofChina, andtheyhopethe investment can bereturnedin five years.Pleaseconducta feasibilityanalysis.二.人際交往能力:1 .領導能力:1)請給出一個你必須展

55、示你的領導能力的例子。Tell me of an occasion where you had to demonstrate business le adership.2)什么情況下,你會不得不出面對職責進行進一步的界定或解決團隊的問題,以保持績效水平?When have you had to intervene to clarify roles or resolve team issues to obtain performance ?3)你怎樣運用目標和目的來驅動團隊達到卓越的績效?How have you used targets or goals to drive outstanding performa nce?2 .溝通影響力:1)請給出一個最近你培訓和指導他人的例子。Tell me of a recent occasion when you contributed to the traini ngoreducation ofanother person.2) 你具備哪些輔導或給予他人反饋的經驗?What experienceincoachingandgivingfeedbackhave you had3)你為下屬創造過什么樣的學習或發展機會?What development or learning opportunities have you created

溫馨提示

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

評論

0/150

提交評論