搜档网
当前位置:搜档网 › 使用.net的SerialPort串口监控控件接收串口数据

使用.net的SerialPort串口监控控件接收串口数据

使用.net的SerialPort串口监控控件接收串口数据
使用.net的SerialPort串口监控控件接收串口数据

前述:

在一个项目中,需要从串口通信的磁卡读卡器中读取刷卡的卡号,以便后续的业务操作。该刷卡 器的型号为:SMR-RU2,使用USB 接入电脑,通过USB 转串口,Windows 会根据USB 口分配器固定的串口号。本人使用了.net 中自带的

SerialPort 串口监控控件来读取磁卡读卡器所读取的卡号,下面讲述具体细节。 使用SerialPort 接受串口信号:

首先在创建一个From ,并且在工具箱中拖入SerialPort 控件,在这里我命名为mySerialPort ,并拖进一个TextBox,一遍显示信号数据。

接着初始化SerialPort 控件,代码如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 /// 初始化控件

///

/// private void InitMySerialPort(String portName) { if (mySerialPort != null) { mySerialPort.PortName = portName;//端口号,这里可以电脑已经连接的COM 口,如COM1; mySerialPort.DataBits = 8;//设置每个字节的数据位,在这里我设置为8位,可以为7位 mySerialPort.DiscardNull = false; mySerialPort.DtrEnable = false; mySerialPort.Handshake = Handshake.None; mySerialPort.Parity = Parity.None; mySerialPort.ParityReplace = Convert.ToByte("63"); mySerialPort.RtsEnable = false; mySerialPort.StopBits = StopBits.One; } if (!mySerialPort.IsOpen) { mySerialPort.Open();//打开端口,进行监控 } mySerialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);//这个事件为最关键点,一旦端口 收到信号,就会触发该事件,这个事件就是真正读取信号,以便做接下的业务。

}

最后加上接受信号的事件:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 public void serialPort_DataReceived(object sender,

SerialDataReceivedEventArgs e)

{

string s = "";

int count = mySerialPort.BytesToRead;

byte[] data = new byte[count];

mySerialPort.Read(data, 0, count);

foreach (byte item in data)

{

s += Convert.ToChar(item);

}

if (this.InvokeRequired)//由于是非创建线程访问textBox1,所以要使用代理句柄。要不然会抛异常,这点需要特别注意

{

this.Invoke(new MethodInvoker(delegate

{ this.textBox1.Text = s; }));

}

else

{

this.textBox1.Text = s;

}

}

相关主题