static SerialPort g_serialPort;
g_serialPort = new SerialPort();
//PortName
foreach (string s in SerialPort.GetPortNames())
{
cboPort.Items.Add(s);
}
g_serialPort.PortName = cboExtRS232Port.Text;
//BaudRate
g_serialPort.BaudRate = int.Parse(cboBaudRate.Text); //預設值為每秒 9600 位元 (bps)。
//Parity
foreach (string s in Enum.GetNames(typeof(Parity)))
{
cboParity.Items.Add(s);
}
Parity.None | 不發生同位檢查。(預設) |
Pairty.Even | 設定同位檢查位元,以便位元集計數為偶數。 |
Pairyt.Odd | 設定同位檢查位元,以便位元集計數為奇數。 |
Parity.Mark | 將同位檢查位元集保持為 1。 |
Parity.Space | 將同位檢查位元集保持為 0。 |
g_serialPort.Parity = (Parity)Enum.Parse(typeof(Parity), cboParity.Text);
//DataBit
g_serialPort.DataBits = int.Parse(txtDataBit.Text);
//StopBits
foreach (string s in Enum.GetNames(typeof(StopBits)))
{
cboStopBits.Items.Add(s);
}
StopBits.None | 未使用停止位元。 不支援這個值。 將 StopBits 屬性設定為 None,會引發 ArgumentOutOfRangeException。 |
StopBits.One | 使用一個停止位元。(預設) |
StopBits.OnePointFive | 使用 1.5 個停止位元。 |
StopBits.Two | 使用兩個停止位元。 |
g_serialPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), cboStopBits.Text);
//Handshake
foreach (string s in Enum.GetNames(typeof(Handshake)))
{
cboHandshake.Items.Add(s);
}
Handshake.None | 沒有用於信號交換的控制。(預設) |
Handshake.RequestToSend | 使用 Request-to-Send (RTS) 硬體流量控制 (Flow Control)。 RTS 表示資料可用於傳輸。 如果輸入緩衝區已滿,RTS 線路將設為 false。 輸入緩衝區中有更多空間時,RTS 線路將設為 true。 |
Handshake.RequestToSendXOnXOff | 同時使用 Request-to-Send (RTS) 硬體控制和 XON/XOFF 軟體控制。 |
Handshake.XOnXOff | 使用 XON/XOFF 軟體控制通訊協定。 傳送 XOFF 控制以停止資料傳輸。 傳送 XON 控制以繼續傳輸。 使用這些軟體控制而不是 Request to Send (RTS) 和 Clear to Send (CTS) 硬體控制。 |
g_serialPort.Handshake = Handshake.None;
g_serialPort.Encoding = Encoding.ASCII; //預設值為 ASCIIEncoding。
//如果忽略 null 位元組則為 true,否則為 false。
g_serialPort.DiscardNull = false; //預設為 false。
//取得或設定 DataReceived 事件發生之前,內部輸入緩衝區中的位元組數。
g_serialPort.ReceivedBytesThreshold = 1; //預設值為 1。
//緩衝區大小。
g_serialPort.ReadBufferSize=65534; //預設值為 4096。
//true 表示啟用 Data Terminal Ready (DTR),否則為 false。
g_serialPort.DtrEnable = false; //預設為 false。
* 在 XON/XOFF 軟體交握和 Request to Send/Clear to Send (RTS/CTS) 硬體交握,以及數據機通訊期間,通常啟用 Data Terminal Ready (DTR)。
//如果啟用 Request to Transmit (RTS) 則為 true,否則為 false。
g_serialPort.RtsEnable = false; //預設值為 false。
//讀取作業未完成時,發生逾時之前的毫秒數。
g_serialPort.ReadTimeout = 500;
//發生逾時之前的毫秒數。
g_serialPort.WriteTimeout = 500; //預設值為 InfiniteTimeout。
//連線
g_serialPort.Open();
_continue = true;
Thread readThread = new Thread(Read);
readThread.Start();
//接收讀取
public static void Read()
{
while (_continue)
{
try
{
string message = g_serialPort.ReadLine();
}
catch (TimeoutException) { }
}
}
readThread.Join();
//發送
g_serialPort.WriteLine(String.Format("{0}", message))
//結束
if (g_serialPort.IsOpen)
{
g_serialPort.Close();
_continue = false;
}
留言列表