前述:
在一个项目中,需要从串口通信的磁卡读卡器中读取刷卡的卡号,以便后续的业务操作。该刷卡 器的型号为:SMR-RU2,使用USB接入电脑,通过USB转串口,Windows会根据USB口分配器固定的串口号。本人使用了.net中自带的
SerialPort串口监控控件来读取磁卡读卡器所读取的卡号,下面讲述具体细节。 使用SerialPort接受串口信号:
首先在创建一个From,并且在工具箱中拖入SerialPort控件,在这里我命名为mySerialPort,并拖进一个TextBox,一遍显示信号数据。 接着初始化SerialPort控件,代码如下:
///
private void InitMySerialPort(String portName) 2
{ 3
if (mySerialPort != null) 4
{ 5
mySerialPort.PortName = portName;//端口号,这里可以6
电脑已经连接的COM口,如COM1; 7
mySerialPort.DataBits = 8;//设置每个字节的数据位,在8
这里我设置为8位,可以为7位 9
mySerialPort.DiscardNull = false; 10
mySerialPort.DtrEnable = false; 11
mySerialPort.Handshake = Handshake.None; 12
mySerialPort.Parity = Parity.None; 13
mySerialPort.ParityReplace = Convert.ToByte(\14
mySerialPort.RtsEnable = false; 15
mySerialPort.StopBits = StopBits.One; 16
} 17
if (!mySerialPort.IsOpen) 18
{ 19
mySerialPort.Open();//打开端口,进行监控 20
} 21
mySerialPort.DataReceived += new 22
SerialDataReceivedEventHandler(serialPort_DataReceived);//这个事件23
为最关键点,一旦端口 收到信号,就会触发该事件,这个事件就是真正读取信号,以便做接下的业务。 }
最后加上接受信号的事件:
public void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 1 { 2
3 string s = \
4 int count = mySerialPort.BytesToRead; 5
6 byte[] data = new byte[count]; 7 mySerialPort.Read(data, 0, count); 8
9 foreach (byte item in data) 10 { 11 s += Convert.ToChar(item); 12 } 13 14 if (this.InvokeRequired)//由于是非创建线程访问 17 18 { 19 this.Invoke(new MethodInvoker(delegate 20 { this.textBox1.Text = s; })); 21 } 22 else 23 { 24 this.textBox1.Text = s; } }