Q
發送字符到串口
-2
A
回答
0
0
2
我分享給你一個由我創建的課程,在一個生產性項目中。它處理串行連接和讀寫緩衝區:
public class CommSERIAL : IComm
{
#region Events
public event EventHandler EvtOnConnect;
public event EventHandler EvtOnDisconnect;
public event EventHandler<OnDataReceivedEventArgs> EvtOnDataReceived;
#endregion
System.IO.Ports.SerialPort Rs232 = new System.IO.Ports.SerialPort();
private string m_Port;
public string Port
{
get { return m_Port; }
set { m_Port = value; }
}
private int m_Baud;
public int Baud
{
get { return m_Baud; }
set { m_Baud = value; }
}
private int m_DataBit;
public int DataBit
{
get { return m_DataBit; }
set { m_DataBit = value; }
}
private System.IO.Ports.StopBits m_stopBits;
public System.IO.Ports.StopBits StopBits
{
get { return m_stopBits; }
set { m_stopBits = value; }
}
private System.IO.Ports.Parity m_parity;
public System.IO.Ports.Parity Parity
{
get { return m_parity; }
set { m_parity = value; }
}
public void Connect()
{
if (!(Rs232.IsOpen))
{
Rs232.PortName = this.Port;
Rs232.BaudRate = this.Baud; ;
Rs232.DataBits = this.DataBit;
Rs232.StopBits = this.StopBits;
Rs232.Parity = this.Parity;
Rs232.ReadTimeout = 5000;
Rs232.Handshake = System.IO.Ports.Handshake.None;
Rs232.ReadTimeout = 1000;
Rs232.WriteTimeout = 500;
Rs232.Open();
}
}
public void Disconnect()
{
Rs232.Close();
if (EvtOnDisconnect != null)
EvtOnDisconnect(new object(), new System.EventArgs());
m_Connected = false;
}
public CommSERIAL()
{
this.ConnType = ConnType.Direct;
}
public bool Connected
{
get
{
return m_Connected;
}
}
private ConnType m_ConnType;
public ConnType ConnType
{
get { return m_ConnType; }
set { m_ConnType = value; }
}
public string ReadOnByte(int Lenght,char EndChar)
{
char[] bytes = new char[Lenght];
string ret = "";
int numBytesRead = 0;
while (bytes[numBytesRead] != EndChar && numBytesRead <= bytes.Length)
{
while (Rs232.Read(bytes, numBytesRead, 1) == 1 && bytes[numBytesRead] != EndChar && numBytesRead <= bytes.Length)
{
numBytesRead++;
}
}
foreach (char b in bytes)
ret += b.ToString();
return ret.Substring(0,numBytesRead);
}
public String ReadBuffer()
{
try
{
if (Rs232.IsOpen)
{
Byte[] readBuffer = new Byte[Rs232.ReadBufferSize + 1];
try
{
// If there are bytes available on the serial port,
// Read returns up to "count" bytes, but will not block (wait)
// for the remaining bytes. If there are no bytes available
// on the serial port, Read will block until at least one byte
// is available on the port, up until the ReadTimeout milliseconds
// have elapsed, at which time a TimeoutException will be thrown.
Int32 count = Rs232.Read(readBuffer, 0, Rs232.ReadBufferSize);
String SerialIn = System.Text.Encoding.ASCII.GetString(readBuffer, 0, count);
return SerialIn;
}
catch (TimeoutException) { return ""; }
}
else
{
Thread.Sleep(50);
return "";
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public string Read()
{
return Rs232.ReadExisting();
}
public string ReadAll()
{
//TO DO
return "";
}
public void Write(string Data)
{
if (Rs232 == null)
throw new Exception("Must be connected before Write");
if (!Rs232.IsOpen)
throw new Exception("Must be opened before Write");
Rs232.Write(Data);
}
public void ClearBuffer()
{
Rs232.DiscardInBuffer();
}
private bool m_Connected;
#region IComm Members
private int m_Id;
public int Id
{
get
{
return m_Id;
}
set
{
m_Id = value;
}
}
#endregion
public override string ToString()
{
return this.ConnType.ToString();
}
#region IComm Members
#endregion
}
公共接口ICOMM { ConnType ConnType { 搞定; 集; }
bool Connected
{
get;
}
int Id
{
get;
set;
}
void Connect();
void Disconnect();
void Write(string Data);
string Read();
string ReadOnByte(int Lenght, char EndChar);
String ReadBuffer();
void ClearBuffer();
string ReadAll();
event EventHandler EvtOnConnect;
event EventHandler EvtOnDisconnect;
event EventHandler<EventArgs.OnDataReceivedEventArgs> EvtOnDataReceived;
}
我希望對你有用
相關問題
- 1. 發送字節串到串口設備
- 2. 從網站發送字節到串口
- 3. 發送字符串串行
- 4. 發送Ctrl + Z到串口
- 5. 16位程序集發送字符到串口
- 6. 如何發送字符串數組到COM端口?
- 7. 從PowerShell中發送詞典[字符串,字符串]到TextTransform.exe
- 8. 將字符串發送到AsyncTask
- 9. ESP8266發送UDP字符串到AP
- 10. TkInter發送字符串到IntVar
- 11. 將查詢字符串發送到publish_action
- 12. Android發送字符串到PHP
- 13. 將字符串發送到服務器
- 14. 發送字符串到php服務器
- 15. 從Form2發送字符串到Form3
- 16. 發送PHP字符串到C++
- 17. 發送char *到字符串c#
- 18. 發送PHP字符串到JavaScript提交
- 19. 從活動發送字符串到BroadcastReceiver
- 20. 用json發送字符串到php
- 21. 發送一個字符串到QLineEdit
- 22. 發送JSON字符串到C#方法
- 23. 向NSPasteBoard發送一串字符串
- 24. 發送阿拉伯字母串口
- 25. 在字節之間發送字符串之間的字符串
- 26. 套接字發送長字符串null
- 27. 發送二進制到串口
- 28. 用C#發送寫命令到串口?
- 29. 讀取和發送數據到串口
- 30. 發送查詢字符串變量,新彈出的窗口
什麼樣的設備正在嘗試連接?它是否實施某種協議? – Fernando 2010-06-28 18:08:55
未設置握手屬性將被猜測#1。 – 2010-06-28 18:15:46
它應該發送三個字符「a」和換行符(CR LF)。 – dbasnett 2010-06-29 10:10:43