前述:
在一个项目中,需要从串口通信的磁卡读卡器中读取刷卡的卡号,以便后续的业务操作。该刷卡器的型号为:SMR-RU2,使用USB接入电脑,通过USB转串口,Windows会根据USB口分配器固定的串口号。本人使用了.net中自带的SerialPort串口监控控件来读取磁卡读卡器所读取的卡号,下面讲述具体细节。
使用SerialPort接受串口信号:
首先在创建一个From,并且在工具箱中拖入SerialPort控件,在这里我命名为mySerialPort,并拖进一个TextBox,一遍显示信号数据。
接着初始化SerialPort控件,代码如下
/// 初始化控件
/// </summary>
/// <param name="portName"></param>
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);//这个事件为最关键点,一旦端口收到信号,就会触发该事件,这个事件就是真正读取信号,以便做接下的业务。
}
最后加上接受信号的事件:
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;
}
}
以上为整个
SerialPort控件接收信号的代码,请大家多都指教,如有什么疑惑,可以留言,大家一起共同学习探讨!