電信類外文翻譯(英文+譯文)----串行通信_(tái)第1頁(yè)
已閱讀1頁(yè),還剩41頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  附件1:外文資料翻譯譯文</p><p><b>  串行通信</b></p><p>  串行通信的設(shè)備是最古老的溝通機(jī)制之一。從IBM個(gè)人電腦和兼容式電腦的時(shí)代開(kāi)始,幾乎所有的計(jì)算機(jī)都配有一個(gè)或多個(gè)串行端口和一個(gè)并行端口。顧名思義,一個(gè)串行端口發(fā)送和接收串行數(shù)據(jù),一次一位數(shù)據(jù)。相反,一個(gè)并行端口一次發(fā)送和接收8位數(shù)據(jù),使用8個(gè)單獨(dú)的電線。&l

2、t;/p><p>  提示:要使串行通信工作,你只需要一根三根線的電纜——1根發(fā)送,1根用來(lái)接收,1根接地。對(duì)于并行通信,你需要采用8條導(dǎo)線。</p><p>  盡管相對(duì)較慢的傳輸速度遠(yuǎn)低于并行端口,串行端口通信依然因?yàn)樗?jiǎn)單的設(shè)備和高的成本效益而是一個(gè)受歡迎的連接選項(xiàng)。圖2-1顯示了設(shè)備的使用串口連接部分到計(jì)算機(jī)。使用串行端口,你可以連接到調(diào)制解調(diào)器,鼠標(biāo)或設(shè)備等作為一個(gè)橋梁/路由器配置的

3、目的</p><p>  圖1:一些常見(jiàn)的串行設(shè)備,調(diào)制解調(diào)器,鼠標(biāo)和路由器</p><p>  雖然今天的消費(fèi)產(chǎn)品中在串行連接的地方使用USB連接,但還有很多的設(shè)備使用串行端口作為與外部世界的唯一連接。</p><p>  在這一章中,你將學(xué)習(xí)如何使用基于NET Framework2.0和NET Compact Framework2.0的串行通信方式來(lái)與其他的串行

4、設(shè)備進(jìn)行通信。并且,你將建立3個(gè)闡述了如何使用串行通信的項(xiàng)目。第一個(gè)項(xiàng)目是一個(gè)請(qǐng)求允許兩臺(tái)電腦(連接使用一個(gè)串行電纜或藍(lán)牙連接)進(jìn)行通信的通信申請(qǐng)。在此應(yīng)用程序的基礎(chǔ)上,你可以進(jìn)行擴(kuò)展從而與手機(jī)等其他外部串行設(shè)備進(jìn)行通信。你將學(xué)習(xí)如何使用AT命令,以編程的方式控制你的手機(jī)通過(guò)串行藍(lán)牙進(jìn)行連接。第二個(gè)項(xiàng)目是一個(gè)掌上電腦聊天應(yīng)用程序,這個(gè)類似第一個(gè)項(xiàng)目。第三個(gè)應(yīng)用程序顯示了如何接通全球定位系統(tǒng)接收器,然后提取對(duì)于顯示你在地圖上的當(dāng)前位置有用

5、的數(shù)據(jù)。</p><p>  一些串行通信的基礎(chǔ)知識(shí)</p><p>  如前所述,一個(gè)串行設(shè)備一次發(fā)送和接收一個(gè)位數(shù)據(jù)。有些設(shè)備因?yàn)樵谕粫r(shí)間發(fā)送和接收數(shù)據(jù),被稱為全雙工設(shè)備。其他可以在任何時(shí)間發(fā)送或接收被稱為單雙工。</p><p>  開(kāi)始傳輸時(shí),設(shè)備先發(fā)送一個(gè)起始位,其次是數(shù)據(jù)位。該數(shù)據(jù)位可以是五,六,七,或8位,基于商定而定。兩個(gè)發(fā)送方和接收器必須設(shè)置為相

6、同的數(shù)據(jù)通信比特或正確的比特率。數(shù)據(jù)位被發(fā)送完后,就會(huì)發(fā)送一個(gè)停止位。一個(gè)停止位可以是一位,一個(gè)半位,或兩位。波特率是數(shù)據(jù)從一個(gè)設(shè)備到另一個(gè)的傳輸速度。波特率通常以每秒的位數(shù)(bps)來(lái)計(jì)量。</p><p>  注意:大多數(shù)串行設(shè)備傳輸七,八位數(shù)據(jù)。</p><p>  為了檢測(cè)數(shù)據(jù)已被正確發(fā)送,一個(gè)可選的校驗(yàn)位可以同數(shù)據(jù)位在一起。一個(gè)校驗(yàn)位可以是以下內(nèi)容:奇數(shù),偶數(shù),mark,spac

7、e或無(wú)(空的奇偶位標(biāo)志幾乎總是被使用)。使用校驗(yàn)位提供了一個(gè)基本的機(jī)制,以檢測(cè)已發(fā)送數(shù)據(jù)損壞,但不保證檢查數(shù)據(jù)本身的錯(cuò)誤。然而,校驗(yàn)位可用于改善完整性數(shù)據(jù)傳送。</p><p>  大多數(shù)串行端口使用RS232C標(biāo)準(zhǔn),它指定了一個(gè)連接器25針或9針(見(jiàn)圖2)。大多數(shù)系列設(shè)備使用9針連接器。</p><p>  圖2:25針和9針串行接口</p><p><b&

8、gt;  利用串口通信</b></p><p>  你在這一章建立的第一個(gè)應(yīng)用程序?qū)⑹且粋€(gè)通信應(yīng)用程序。此通信應(yīng)用程序?qū)⒃试S兩個(gè)用戶的連接使用串行連接進(jìn)行通信的計(jì)算機(jī)。</p><p>  請(qǐng)注意,我提到的是串行連接,而不是串行電纜。這是因?yàn)閮蓚€(gè)連接的用戶通過(guò)藍(lán)牙也可以使用這個(gè)應(yīng)用程序進(jìn)行通信。你可以在使用藍(lán)牙配對(duì)的兩臺(tái)計(jì)算機(jī)之間建立串行連接。</p><p

9、>  最常見(jiàn)的方案是使用零調(diào)制解調(diào)器電纜連接兩臺(tái)計(jì)算機(jī)(見(jiàn)圖3)。</p><p>  圖3:零調(diào)制解調(diào)器電纜</p><p>  圖4顯示了完成的項(xiàng)目。要開(kāi)始通訊,選擇相應(yīng)的COM串行端口來(lái)連接到遠(yuǎn)程計(jì)算機(jī)。單擊連接,然后就準(zhǔn)備好通訊了。</p><p>  圖4:選擇一個(gè)串口開(kāi)始通訊</p><p><b>  需要的硬件

10、</b></p><p>  為了測(cè)試串行通信,你有以下幾個(gè)選擇:</p><p>  計(jì)算機(jī)到計(jì)算機(jī):如上所述,你可以使用零調(diào)制解調(diào)器電纜連接兩臺(tái)計(jì)算機(jī)。</p><p>  單臺(tái)計(jì)算機(jī):你可以使用一個(gè)兩個(gè)串口的調(diào)制解調(diào)器電纜連接到同一計(jì)算機(jī)上。如果你的計(jì)算機(jī)只有一個(gè)串行端口,你可以使用USB到串口轉(zhuǎn)換器轉(zhuǎn)換到USB端口串行端口(詳細(xì)信息見(jiàn)下一節(jié)關(guān)于這

11、一點(diǎn))。</p><p>  藍(lán)牙連接:你可以在使用藍(lán)牙配對(duì)的兩臺(tái)計(jì)算機(jī)之間建立串行連接。</p><p>  USB到串行端口變換器</p><p>  除非你有兩臺(tái)計(jì)算機(jī),否則你將無(wú)法進(jìn)行串行通訊的測(cè)試。但是,你可以使用零調(diào)制解調(diào)器電纜連接到同一計(jì)算機(jī)上的兩個(gè)串行端口模擬兩臺(tái)計(jì)算機(jī)通過(guò)串行端口進(jìn)行通信。但是今天大多數(shù)的電腦都帶有最多一個(gè)串口(筆記本電腦和一些甚至

12、沒(méi)有一個(gè))。一個(gè)好的解決方法是使用USB到串行端口變換器將USB端口轉(zhuǎn)換為串行端口。因此,如果你的電腦沒(méi)有任何串行端口,你將需要一對(duì)USB到串行端口適配器和一對(duì)空調(diào)制解調(diào)器電纜(見(jiàn)圖2-5)。然后,每個(gè)USB到串行端口適配器連接到USB端口。</p><p>  圖5:USB到串行端口變換器</p><p>  每個(gè)USB到串行端口適配器都有自己的驅(qū)動(dòng)程序。安裝驅(qū)動(dòng)程序后,右鍵單擊桌面上的

13、我的電腦,選擇屬性。系統(tǒng)屬性對(duì)話框框中,單擊硬件選項(xiàng)卡,單擊設(shè)備管理器按鈕。展開(kāi)端口(COM和并口)項(xiàng)目,并找到兩個(gè)新增加的COM端口(見(jiàn)圖6)。</p><p>  圖6:定位新創(chuàng)建的串行端口</p><p>  在這個(gè)例子中,兩個(gè)USB串行口分別是COM3和COM4</p><p><b>  藍(lán)牙適配器</b></p>&l

14、t;p>  除了使用零調(diào)制解調(diào)器電纜連接兩個(gè)串行端口,還可以使用藍(lán)牙對(duì)兩臺(tái)計(jì)算機(jī)進(jìn)行配對(duì)。我們可以給每臺(tái)計(jì)算機(jī)都配備一個(gè)藍(lán)牙適配器(見(jiàn)圖7)。然后,就可以給兩臺(tái)計(jì)算機(jī)配對(duì)并建立它們之間的串行連接了。</p><p>  注意:請(qǐng)參閱藍(lán)牙適配器文件的附帶文件,從而掌握如何為兩個(gè)藍(lán)牙電腦建立串行連接。</p><p><b>  圖7:藍(lán)牙適配器</b></p

15、><p><b>  構(gòu)建聊天應(yīng)用程序</b></p><p>  使用Visual Studio 2005,創(chuàng)建一個(gè)新的Windows應(yīng)用程序,并將它命名為SerialCommChat。按照?qǐng)D8所示填充默認(rèn)的Form1。</p><p>  圖8:利用各種控件構(gòu)建默認(rèn)的Form1</p><p>  按照表1所示設(shè)置控件屬

16、性</p><p><b>  表1:</b></p><p>  在NET 2.0中,在工具箱中的Compo-nents標(biāo)簽的位置(見(jiàn)圖9)有一個(gè)新的Windows窗體串口控件。這個(gè)串口控件封裝了所有必要的功能,你需要訪問(wèn)它來(lái)使用串行通訊進(jìn)行通信。你可以拖放一個(gè)串口控件到你的項(xiàng)目上或從代碼建立一個(gè)(在這個(gè)項(xiàng)目里你將使用這個(gè)方法)。</p><p&

17、gt;  圖9:工具箱中的串口控件</p><p>  切換到Form1的代碼視圖 來(lái)編輯代碼。</p><p><b>  實(shí)例化的串口類</b></p><p>  首先,聲明串口成員變量來(lái)代表你要使用的串口。</p><p>  Visual Basic 2005</p><p>  Pub

18、lic Class Form1</p><p>  Private WithEvents serialPort As New IO.Ports.SerialPort</p><p><b>  C# 2005</b></p><p>  public partial class Form1 : Form</p><p>

19、<b>  {</b></p><p>  private System.IO.Ports.SerialPort serialPort =</p><p>  new System.IO.Ports.SerialPort();</p><p>  注意:你可以使用如前所述的串口控件,或者使用IO.Ports.SerialPort類;兩者是相同的

20、。</p><p>  請(qǐng)注意,在Visual Basic 2005中,你需要用WithEvents關(guān)鍵字來(lái)聲明它。這是因?yàn)榇陬惖腄ataReceived事件是在數(shù)據(jù)到達(dá)時(shí)觸發(fā)串行端口的,因此你需要使用這個(gè)事件來(lái)接收數(shù)據(jù)。對(duì)于C#2005, DataReceived事件處理程序?qū)⒈惶砑釉贔orm1_Load事件中。</p><p>  列出所有可用的串行端口名稱</p>&

21、lt;p>  在窗體第一次加載時(shí),將檢索你的計(jì)算機(jī)上所有可用的串行端口名稱,然后將這些端口名稱送到到ComboBox控件。雙擊表格切換到代碼編輯視圖,F(xiàn)orm1_Load事件處理程序?qū)⒆詣?dòng)在這里顯示出來(lái)。按照如下代碼編輯事件。</p><p>  注意: Visual Studio 2005會(huì)為控件自動(dòng)創(chuàng)建事件的處理程序,如窗體的Load事件或一個(gè)按鈕的Click事件(),雙擊控件編輯事件處理程序。<

22、/p><p>  Visual Basic 2005</p><p>  Private Sub Form1_Load( _</p><p>  ByVal sender As System.Object, _</p><p>  ByVal e As System.EventArgs) _</p><p>  Handl

23、es MyBase.Load</p><p>  '---display all the serial port names on the local computer---</p><p>  For i As Integer = 0 To _</p><p>  My.Computer.Ports.SerialPortNames.Count - 1<

24、;/p><p>  cbbCOMPorts.Items.Add( _</p><p>  My.Computer.Ports.SerialPortNames(i))</p><p><b>  Next</b></p><p>  btnDisconnect.Enabled = False</p><p&

25、gt;<b>  End Sub</b></p><p><b>  C# 2005</b></p><p>  private void Form1_Load(object sender, EventArgs e)</p><p><b>  {</b></p><p>  

26、//---set the event handler for the DataReceived event---</p><p>  serialPort.DataReceived += new</p><p>  System.IO.Ports.SerialDataReceivedEventHandler(</p><p>  DataReceived);<

27、/p><p>  //---display all the serial port names on the local</p><p>  // computer---</p><p>  string[] portNames =</p><p>  System.IO.Ports.SerialPort.GetPortNames();</

28、p><p>  for (int i = 0; i <= portNames.Length - 1; i++)</p><p><b>  {</b></p><p>  cbbCOMPorts.Items.Add(portNames[i]);</p><p><b>  }</b></p&

29、gt;<p>  btnDisconnect.Enabled = false;</p><p><b>  }</b></p><p><b>  C#中的事件轉(zhuǎn)移</b></p><p>  在C#版本的Form1_Load事件中,我還增加了一個(gè)事件處理程序的串口類的DataReceived事件。在串行口有

30、數(shù)據(jù)輸入時(shí),此事件將被注銷。你不需要在Visual Basic 2005中處理這個(gè)事件的程序,因?yàn)槟憧梢允褂肏andles關(guān)鍵字來(lái)連接事件的處理程序。</p><p>  //---set the event handler for the DataReceived event---</p><p>  // serialPort.DataReceived += new</p>

31、<p>  // System.IO.Ports.SerialDataReceivedEventHandler(</p><p>  // DataReceived);</p><p>  圖10顯示了ComboBox控件在第一次加載時(shí)的外觀。</p><p>  圖10:ComboBox控件在第一次加載時(shí)的外觀</p><p>

32、;<b>  打開(kāi)一個(gè)串行口</b></p><p>  一旦一個(gè)端口的名稱被選中,用戶點(diǎn)擊連接按鈕時(shí),將會(huì)打開(kāi)選擇的端口。你可以用下面的方法實(shí)現(xiàn)這一點(diǎn)。</p><p>  Visual Basic 2005</p><p>  '---Event handler for the Connect button---</p>

33、<p>  Private Sub btnConnect_Click( _</p><p>  ByVal sender As System.Object, _</p><p>  ByVal e As System.EventArgs) _</p><p>  Handles btnConnect.Click</p><p>

34、  '---close the serial port if it is open---</p><p>  If serialPort.IsOpen Then</p><p>  serialPort.Close()</p><p><b>  End If</b></p><p><b>  Try

35、</b></p><p>  '---configure the various parameters of the serial port---</p><p>  With serialPort</p><p>  .PortName = cbbCOMPorts.Text</p><p>  .BaudRate = 9

36、600</p><p>  .Parity = IO.Ports.Parity.None</p><p>  .DataBits = 8</p><p>  .StopBits = IO.Ports.StopBits.One</p><p><b>  End With</b></p><p> 

37、 '---open the serial port---</p><p>  serialPort.Open()</p><p>  '---update the status of the serial port and</p><p>  ' enable/disable the buttons---</p><p&g

38、t;  lblMessage.Text = cbbCOMPorts.Text & " connected."</p><p>  btnConnect.Enabled = False</p><p>  btnDisconnect.Enabled = True</p><p>  Catch ex As Exception</p&g

39、t;<p>  MsgBox(ex.ToString)</p><p><b>  End Try</b></p><p><b>  End Sub</b></p><p><b>  C# 2005</b></p><p>  //---Event handl

40、er for the Connect button---</p><p>  private void btnConnect_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p>  //---close the serial port if it is open---<

41、;/p><p>  if (serialPort.IsOpen)</p><p><b>  {</b></p><p>  serialPort.Close();</p><p><b>  }</b></p><p><b>  try</b></

42、p><p><b>  {</b></p><p>  //---configure the various parameters of the serial</p><p>  // port---</p><p>  serialPort.PortName = cbbCOMPorts.Text;</p>&

43、lt;p>  serialPort.BaudRate = 9600;</p><p>  serialPort.Parity = System.IO.Ports.Parity.None;</p><p>  serialPort.DataBits = 8;</p><p>  serialPort.StopBits = System.IO.Ports.Stop

44、Bits.One;</p><p>  //---open the serial port---</p><p>  serialPort.Open();</p><p>  //---update the status of the serial port and</p><p>  // enable/disable the button

45、s---</p><p>  lblMessage.Text = cbbCOMPorts.Text + " connected.";</p><p>  btnConnect.Enabled = false;</p><p>  btnDisconnect.Enabled = true;</p><p><b>

46、  }</b></p><p>  catch (Exception ex)</p><p><b>  {</b></p><p>  MessageBox.Show(ex.ToString());</p><p><b>  }</b></p><p><

47、;b>  }</b></p><p>  值得注意的是,你需要設(shè)置串口類的各種屬性,如PortName,各種性能,波特率,奇偶校驗(yàn)等。</p><p>  注意:通信雙方必須具有相同的屬性設(shè)置。也就是說(shuō),他們必須有同樣的波特率,奇偶校驗(yàn),數(shù)據(jù)位,停止位。</p><p><b>  斷開(kāi)串口</b></p>&l

48、t;p>  斷開(kāi)按鈕用來(lái)關(guān)閉當(dāng)前打開(kāi)的串行端口。</p><p>  Visual Basic 2005</p><p>  '---Event handler for the Disconnect button---</p><p>  Private Sub btnDisconnect_Click( _</p><p>  

49、ByVal sender As System.Object, _</p><p>  ByVal e As System.EventArgs) _</p><p>  Handles btnDisconnect.Click</p><p><b>  Try</b></p><p>  '---close the

50、 serial port---</p><p>  serialPort.Close()</p><p>  '---update the status of the serial port and</p><p>  ' enable/disable the buttons---</p><p>  lblMessage.T

51、ext = serialPort.PortName & " disconnected."</p><p>  btnConnect.Enabled = True</p><p>  btnDisconnect.Enabled = False</p><p>  Catch ex As Exception</p><p&

52、gt;  MsgBox(ex.ToString)</p><p><b>  End Try</b></p><p><b>  End Sub</b></p><p><b>  C# 2005</b></p><p>  //---Event handler for the

53、 Disconnect button---</p><p>  private void btnDisconnect_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  try</b></p><p><b&g

54、t;  {</b></p><p>  '---close the serial port---</p><p>  serialPort.Close();</p><p>  //---update the status of the serial port and</p><p>  // enable/disable

55、 the buttons---</p><p>  lblMessage.Text = serialPort.PortName +</p><p>  " disconnected.";</p><p>  btnConnect.Enabled = true;</p><p>  btnDisconnect.Enabled

56、 = false;</p><p><b>  }</b></p><p>  catch (Exception ex)</p><p><b>  {</b></p><p>  MessageBox.Show(ex.ToString());</p><p><b&g

57、t;  }</b></p><p><b>  }</b></p><p>  使用串行端口發(fā)送數(shù)據(jù)</p><p>  要通過(guò)串口發(fā)送數(shù)據(jù),需要使用串口類的Write()方法。</p><p>  Visual Basic 2005</p><p>  '---Event h

58、andler for the Send button---</p><p>  Private Sub btnSend_Click( _</p><p>  ByVal sender As System.Object, _</p><p>  ByVal e As System.EventArgs) _</p><p>  Handles b

59、tnSend.Click</p><p><b>  Try</b></p><p>  '---write the string to the serial port---</p><p>  serialPort.Write(txtDataToSend.Text & vbCrLf)</p><p> 

60、 '---append the sent string to the TextBox control---</p><p>  With txtDataReceived</p><p>  .AppendText(">" & txtDataToSend.Text & vbCrLf)</p><p>  .Scroll

61、ToCaret()</p><p><b>  End With</b></p><p>  '---clears the TextBox control---</p><p>  txtDataToSend.Text = String.Empty</p><p>  Catch ex As Exception&

62、lt;/p><p>  MsgBox(ex.ToString)</p><p><b>  End Try</b></p><p><b>  End Sub</b></p><p><b>  C# 2005</b></p><p>  //---Even

63、t handler for the Send button---</p><p>  private void btnSend_Click(object sender, EventArgs e)</p><p><b>  {</b></p><p><b>  try</b></p><p>&l

64、t;b>  {</b></p><p>  //---write the string to the serial port---</p><p>  serialPort.Write(txtDataToSend.Text +</p><p>  Environment.NewLine);</p><p>  //---ap

65、pend the sent string to the TextBox control---</p><p>  txtDataReceived.AppendText(">" + txtDataToSend.Text +</p><p>  Environment.NewLine);</p><p>  txtDataReceived.Sc

66、rollToCaret();</p><p>  //---clears the TextBox control---</p><p>  txtDataToSend.Text = string.Empty;</p><p><b>  }</b></p><p>  catch (Exception ex)</p

67、><p><b>  {</b></p><p>  MessageBox.Show(ex.ToString());</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  串口接收數(shù)據(jù)<

68、/b></p><p>  串口類的一個(gè)優(yōu)點(diǎn)是,你不必不間斷地查詢傳入的數(shù)據(jù)。相反,你只需要使用提供的DataReceived事件,它會(huì)自動(dòng)檢測(cè)到傳入的數(shù)據(jù)并提醒你。但是,由于此事件運(yùn)行占用一個(gè)單獨(dú)的線程,任何更新主窗口的企圖都將導(dǎo)致錯(cuò)誤。因此,你需要在主線程(Form1中)使用委托來(lái)更新控件。</p><p>  Visual Basic 2005</p><p

69、>  '---Event handler for the DataReceived event---</p><p>  Private Sub DataReceived( _</p><p>  ByVal sender As Object, _</p><p>  ByVal e As System.IO.Ports.SerialDataRecei

70、vedEventArgs) _</p><p>  Handles serialPort.DataReceived</p><p>  '---invoke the delegate to retrieve the received data---</p><p>  txtDataReceived.BeginInvoke(New _</p>

71、<p>  myDelegate(AddressOf updateTextBox), _</p><p>  New Object() {})</p><p><b>  End Sub</b></p><p><b>  C# 2005</b></p><p>  //---Event

72、handler for the DataReceived event---</p><p>  private void DataReceived(object sender,</p><p>  System.IO.Ports.SerialDataReceivedEventArgs e)</p><p><b>  {</b></p&g

73、t;<p>  //---invoke the delegate to retrieve the received data---</p><p>  txtDataReceived.BeginInvoke(new</p><p>  myDelegate(updateTextBox));</p><p><b>  }</b>&

74、lt;/p><p>  Define the delegate and the updateTextBox() subroutine as follows.</p><p>  Visual Basic 2005</p><p>  '---Delegate and subroutine to update the TextBox control---</

75、p><p>  Public Delegate Sub myDelegate()</p><p>  Public Sub updateTextBox()</p><p>  '---append the received data into the TextBox control---</p><p>  With txtDataRec

76、eived</p><p>  .AppendText(serialPort.ReadExisting)</p><p>  .ScrollToCaret()</p><p><b>  End With</b></p><p><b>  End Sub</b></p><p&

77、gt;<b>  C# 2005</b></p><p>  //---Delegate and subroutine to update the TextBox control---</p><p>  public delegate void myDelegate();</p><p>  public void updateTextBox

78、()</p><p><b>  {</b></p><p>  //---append the received data into the TextBox control---</p><p>  txtDataReceived.AppendText(serialPort.ReadExisting());</p><p&

79、gt;  txtDataReceived.ScrollToCaret();</p><p><b>  }</b></p><p><b>  測(cè)試應(yīng)用程序</b></p><p>  現(xiàn)在已經(jīng)準(zhǔn)備好了測(cè)試應(yīng)用程序。在Visual Studio 2005中按F5調(diào)試該程序。你還需要運(yùn)行應(yīng)用程序的另一個(gè)實(shí)例,以測(cè)試通訊功能。

80、為此,在你存儲(chǔ)解決方案的Debug文件夾目錄中找到SerialCommChat.exe應(yīng)用程序。</p><p>  在應(yīng)用程序的第一個(gè)實(shí)例中,選擇端口3(根據(jù)我們計(jì)算機(jī)的端口號(hào)進(jìn)行選擇,然后檢查計(jì)算機(jī)上的端口號(hào)),然后點(diǎn)擊連接。在其他實(shí)例中,選擇端口4,然后點(diǎn)擊連接。你現(xiàn)在可以開(kāi)始通訊了(見(jiàn)圖11)!</p><p>  圖11:通過(guò)兩個(gè)串行口通訊</p><p>

81、;  傳輸U(kuò)nicode字符</p><p>  在默認(rèn)情況下,串口類發(fā)送ASCII字符。這是在編碼串口類時(shí)設(shè)置的。如果你想使用其他語(yǔ)言(如中文交談或日語(yǔ)),你需要設(shè)置串口屬性類的編碼為Unicode,以便可以正確地將數(shù)據(jù)發(fā)送和接收。</p><p>  提示:NET Framework 2.0和最新版本的NET Compact Framework的2.0在你使用ReadExisting(

82、)方法來(lái)讀取Unicode字符時(shí)不會(huì)正確工作。因此,我們不使用ReadExisting()方法來(lái)讀取傳入的Unicode字符,而是使用Read()方法。</p><p>  首先,你需要設(shè)置串口類的編碼為Unicode。</p><p>  Visual Basic 2005</p><p>  With serialPort</p><p>

83、;  .PortName = cbbCOMPorts.Text</p><p>  .BaudRate = 9600</p><p>  .Parity = IO.Ports.Parity.None</p><p>  .DataBits = 8</p><p>  .StopBits = IO.Ports.StopBits.One</

84、p><p>  '---set the encoding the Unicode---</p><p>  .Encoding = System.Text.Encoding.Unicode</p><p><b>  End With</b></p><p><b>  C# 2005</b>&

85、lt;/p><p>  serialPort.PortName = cbbCOMPorts.Text;</p><p>  serialPort.BaudRate = 9600;</p><p>  serialPort.Parity = System.IO.Ports.Parity.None;</p><p>  serialPort.Data

86、Bits = 8;</p><p>  serialPort.StopBits = System.IO.Ports.StopBits.One;</p><p>  //---set the encoding the Unicode---</p><p>  serialPort.Encoding = System.Text.Encoding.Unicode;<

87、/p><p>  然后,修改updateTextBox()子例程從而正確讀取傳入的Unicode字符。</p><p>  Visual Basic 2005</p><p>  Public Sub updateTextBox()</p><p>  '---UNICODE work-around---</p><p

88、>  With txtDataReceived</p><p>  '---find out the number of bytes to read---</p><p>  Dim bytesToRead As Integer = serialPort.BytesToRead</p><p>  '---declare a char arra

89、y---</p><p>  Dim ch(bytesToRead) As Char</p><p>  '---read the bytes into the ch array---</p><p>  Dim bytesRead As Integer = 0</p><p>  bytesRead = serialPort.Rea

90、d(ch, 0, bytesToRead)</p><p>  '---convert the ch array into a string---</p><p>  Dim str As String = New String(ch, 0, bytesRead)</p><p>  '---append the received string in

91、to the TextBox control---</p><p>  .AppendText(str)</p><p>  .ScrollToCaret()</p><p><b>  End With</b></p><p><b>  End Sub</b></p><p&

92、gt;<b>  C# 2005</b></p><p>  public void updateTextBox()</p><p><b>  {</b></p><p>  //---UNICODE work-around---</p><p>  //---find out the numbe

93、r of bytes to read---</p><p>  int bytesToRead = serialPort.BytesToRead;</p><p>  //---declare a char array---</p><p>  char[] ch = new char[bytesToRead];</p><p>  int

94、bytesRead = 0;</p><p>  //---read the bytes into the ch array---</p><p>  bytesRead = serialPort.Read(ch, 0, bytesToRead);</p><p>  //---convert the ch array into a string---</p&

95、gt;<p>  string str = new string(ch, 0, bytesRead);</p><p>  //---append the received string into the TextBox</p><p>  // control---</p><p>  txtDataReceived.AppendText(str);

96、</p><p>  txtDataReceived.ScrollToCaret();</p><p><b>  }</b></p><p>  圖12顯示了發(fā)送和接收的中文字符。</p><p>  圖12:發(fā)送和接收的中文字符附件2:外文原文</p><p>  Serial Communi

97、cations</p><p>  Serial communicationis one of the oldest mechanisms for devices to communicate witheach other. Starting with the IBM PC and compatible computers, almost all computers are equipped with one o

98、r more serial ports and one parallel port. As the name implies, a serialport sends and receives data serially, one bit at a time. In contrast, a parallelport sends and receives data eight bits at a time, using eight sepa

99、rate wires.</p><p>  ■ Tip For serial communication to work,you just need a minimum of three wires—one to send,one to receive,and one signal ground.For parallel communication,you need eight wires.</p>

100、<p>  Despite thecomparatively slower transfer speed of serial ports over parallel ports, serial communication remains a popular connectivity option for devices because of its simplicity and cost-effectiveness. Fig

101、ure 2-1 shows some of the devices that use a serial port to connect to the computer. Using a serial port, you can connect to a modem, a mouse, or a device such as a bridge/router for configuration purposes.</p>&l

102、t;p>  Although consumer products today are using USB connections in place of serial connec-</p><p>  tions, still a lot of devices use serial ports as their sole connections to the outside world.</p>

103、;<p>  In thischapter, you will learn how to communicate with other serial devices using the new SerialPortclass available in the .NET Framework 2.0 and the .NET Compact Framework 2.0. In particular, you will buil

104、d three projects that illustrate how to use serial communications. The first project is a chat application that allows two computers (connected using either a serial cable or a Bluetooth connection) to communicate. And u

105、sing the foundation of this application, you can extend it to communicate </p><p>  Some Serial Communication Basics</p><p>  As mentioned, aserial device sends and receives data one bit at a ti

106、me. Some devices can send and receive data at the same time and are known as full-duplexdevices. Others that can either send or receive at any one time are known as single-duplex.</p><p>  To initiate transm

107、ission, a device first transmits a start bit, followed by the data bits. The data bits can be five, six, seven, or eight bits, depending on what has been agreed upon. Both the sender and the receiver must be set to the s

108、ame data bits for communication to take place correctly. Once the data bits are sent, a stop bitis sent. A stop bit can be one, one and a half, and two bits. The baudrateis the speed of transmission of data from one devi

109、ce to another. Baud rate is usually measur</p><p>  ■ Note Most serial devices transmit in seven or eight bits.</p><p>  To detectthat the data has been sent correctly, an optional parity bitcan

110、 be included together with the data bits. A parity bit can be one of the following: odd, even, mark, space, or none (mark and space parity are almost always used). Using a parity bit provides a basic mechanism to detect

111、 corruption of data that was sent and does not guarantee that the data received is free from error. Nevertheless, a parity bit is useful for improving the integrity of the data sent.</p><p>  Most serial por

112、ts adhere to the RS232C standard, which specifies a connector either with 25 pins or with 9 pins (see Figure 2-2). Most serial devices use thenine-pin connector.</p><p>  The mostcommon scenario is to conne

113、ct two computers using a null modem cable (see Figure 2-3).</p><p>  Figure 2-4 showsthe finished project. To start the chat, select the COM number corre- sponding to the serial port that is connected to the

114、 remote computer. Click Connect, and you are readyto talk!</p><p>  Hardware Needed</p><p>  To test serialcommunications, you have a couple of options:</p><p>  Computer to compute

115、r: As mentioned, you can connect two computers using a null modem cable.</p><p>  Single computer: You can connect two serial ports on the same computer using a null modem cable. If your computer has only on

116、e serial port, you can convert a USB port to a serial port using a USB-to-serial-port converter (see the next section for more informa- tion about this).</p><p>  Bluetooth connection: You can create a seria

117、lconnection between two Bluetooth-paired computers.</p><p>  USB-to-Serial-Port Converters</p><p>  Unless youhave two computers, you won’t be able to test serial communications. However, you ca

118、n use a null modem cable to connect two serial ports on the same computer to simulate two computers communicating over serial ports. But most computers today come with at most one serial port (and some notebooks do not e

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論