成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#串口操作的使用淺析

開發 后端
C#串口操作在工業通信方面的應用是如何的呢?那么本文就向你介紹C#串口操作在工業通信編程中使用的心得體會,希望對你了解和學習C#串口操作有所幫助。

C#串口操作的使用:做工業通信有很長時間了,特別是串口(232/485),有VB/VC/C各種版本的串口操作代碼,這些代碼也經過了多年的現場考驗,應該說是比較健壯的代碼,但是目前卻沒有C#相對成熟的串口操作代碼,最近用Moxa的設備開發基于WinCE5.0的C#串口操作代碼,所以就擴充完善了一下C#串口操作,特別是SendCommand函數,這是我比較常用的主從通信代碼,不喜歡用事件或線程接數據,在規定的超時時間內直接循環判斷要接收的數據。

下面是具體C#串口操作的代碼:

  1. public class PortData  
  2. {  
  3. public event PortDataReceivedEventHandle Received;  
  4. public event SerialErrorReceivedEventHandler Error;   
  5. public SerialPort port;  
  6. public bool ReceiveEventFlag = false;   
  7.  //接收事件是否有效 false表示有效  
  8.  
  9. public PortData(string sPortName,   
  10. int baudrate,Parity parity,SerialInterface.SerialMode mode)  
  11. {  
  12. port = new SerialPort(sPortName,   
  13. baudrate, parity, 8, StopBits.One);  
  14. port.RtsEnable = true;  
  15. port.ReadTimeout = 3000;  
  16. port.DataReceived +=   
  17. new SerialDataReceivedEventHandler(DataReceived);  
  18. port.ErrorReceived +=   
  19. new SerialErrorReceivedEventHandler(ErrorEvent);  
  20. }  
  21.  
  22. ~PortData()  
  23. {  
  24. Close();  
  25. }  
  26. public void Open()  
  27. {  
  28. if (!port.IsOpen)  
  29. {     
  30. port.Open();  
  31. }  
  32. }  
  33.  
  34. public void Close()  
  35. {  
  36. if (port.IsOpen)  
  37. {  
  38. port.Close();  
  39. }  
  40. }  
  41. //C#串口操作之數據發送  
  42. public void SendData(byte[] data)  
  43. {  
  44. if (port.IsOpen)  
  45. {  
  46. port.Write(data, 0, data.Length);  
  47. }  
  48. }  
  49. public void SendData(byte[] data,  
  50. int offset,int count)  
  51. {  
  52. if (port.IsOpen)  
  53. {  
  54. port.Write(data, offset, count);  
  55. }  
  56. }  
  57. //C#串口操作之發送命令  
  58. public int SendCommand(byte[] SendData,  
  59.  ref  byte[] ReceiveData,int Overtime)  
  60. {  
  61.  
  62. if(port.IsOpen)  
  63. {  
  64. ReceiveEventFlag = true;//關閉接收事件  
  65. port.DiscardInBuffer(); //清空接收緩沖區   
  66. port.Write(SendData, 0, SendData.Length);  
  67. int num=0,ret=0;  
  68. while (num++ < Overtime)  
  69. {  
  70. if (port.BytesToRead >= ReceiveData.Length) break;  
  71. System.Threading.Thread.Sleep(1);   
  72. }  
  73. if (port.BytesToRead >= ReceiveData.Length)   
  74. ret = port.Read(ReceiveData, 0, ReceiveData.Length);  
  75. ReceiveEventFlag = false;   //打開事件  
  76. return ret;  
  77. }  
  78. return -1;  
  79. }  
  80.  
  81. public void ErrorEvent(object sender,  
  82.  SerialErrorReceivedEventArgs e)  
  83. {  
  84. if (Error != null) Error(sender, e);  
  85. }  
  86. //C#串口操作之數據接收  
  87. public void DataReceived(object sender,  
  88.  SerialDataReceivedEventArgs e)  
  89. {  
  90. //禁止接收事件時直接退出  
  91. if (ReceiveEventFlag) return;  
  92.  
  93. byte[] data = new byte[port.BytesToRead];  
  94. port.Read(data, 0, data.Length);  
  95. if (Received != null) Received(sender,   
  96. new PortDataReciveEventArgs(data));  
  97. }  
  98.  
  99. public bool IsOpen()  
  100. {  
  101. return port.IsOpen;  
  102. }  
  103. }  
  104. public delegate void PortDataReceivedEventHandle(  
  105. object sender, PortDataReciveEventArgs e);  
  106. public class PortDataReciveEventArgs : EventArgs  
  107. {  
  108. public PortDataReciveEventArgs()  
  109. {  
  110. this.data = null;  
  111. }  
  112.  
  113. public PortDataReciveEventArgs(byte[] data)  
  114. {  
  115. this.data = data;  
  116. }  
  117.  
  118. private byte[] data;  
  119.  
  120. public byte[] Data  
  121. {  
  122. get { return data; }  
  123. set { data = value; }  
  124. }  
  125. }  

注:1~9 串口的名稱是 "COMx:",>9的以前用\\\\.\\COMx:比較好使,但是在moxa 661設備上卻不行,要用如下格式"$device\\COM" + PortNo.ToString() + "\0",也許這是moxa修改了相應的串口驅動。

C#串口操作的一些內容就向你介紹到這里,希望對你了解和學習使用C#串口操作有所幫助。

【編輯推薦】

  1. 深度剖析C#序列化和反序列化
  2. 深入探討C#序列化和反序列化
  3. C# XML序列化應用淺析
  4. C#對象序列化應用淺析
  5. C#工具欄的編程實現淺析
責任編輯:仲衡 來源: 博客園
相關推薦

2009-08-17 13:34:02

C#異步操作

2009-09-11 11:27:38

AttributeUsC# Attribut

2009-09-07 06:07:46

C#窗體設計

2009-08-14 15:23:10

C#使用ErrorPr

2009-08-18 13:49:21

C# 操作Excel

2009-09-04 15:45:29

C#緩存流

2009-08-19 10:25:14

C#操作Word

2009-08-26 13:48:31

C#打印條碼

2009-08-18 09:37:14

C#枚舉類型

2009-08-18 16:04:12

C# 操作Excel

2009-08-19 09:42:52

C#操作Word書簽

2009-08-20 10:25:37

C#操作內存

2009-08-20 10:53:23

C#操作內存

2009-08-13 13:29:04

C#結構體使用

2009-08-19 16:42:41

C#如何使用XML

2009-08-31 18:38:59

C#寫文件

2009-09-18 10:58:31

C#數組操作

2009-08-19 11:13:49

C#操作Word

2009-08-19 11:34:06

C#操作Word

2009-08-25 16:29:33

C#使用sqlserv
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久青草av | 国产亚洲人成a在线v网站 | 中文一区二区 | 欧美美女被c| 午夜免费网站 | 一区二区三区中文字幕 | 日韩不卡在线 | 日韩精品一区二区在线 | 91文字幕巨乱亚洲香蕉 | 亚洲一级av毛片 | www.xxxx欧美| 国产成人精品网站 | 九九热这里只有精品在线观看 | 国产精品国产馆在线真实露脸 | 国产精品777一区二区 | 免费视频一区二区三区在线观看 | 国产福利在线看 | 国产精品毛片一区二区三区 | 91久久久久久 | 亚洲成人精品久久 | 久久久一区二区 | 人人爽人人爽人人片av | 91视频国产精品 | 一区二区三区免费看 | 国产乱精品一区二区三区 | 国产91久久久久久久免费 | 伦理片97 | 国产美女一区 | av网站免费在线观看 | 久久综合av | 国产又爽又黄的视频 | 日韩欧美精品一区 | 国产午夜精品一区二区三区在线观看 | 国产高清自拍视频在线观看 | 日韩欧美国产不卡 | 国产精品网页 | 99国产精品久久久 | 欧美日韩国产一区二区三区 | h片在线免费观看 | 久久手机视频 | 人人鲁人人莫人人爱精品 |