现在写一个读取串口数据的问题,以前没有用到这方面的问题,不知道该怎么办,请高手指点下,或给点思路.谢谢,(本人分不多,不过还得请大家帮忙)
从串口中读20个字符作为一个学生的餐卡号,然后根据这个餐卡号去查找相关信息.
读串口这块我觉得应该采用同步阻塞的方式,以下是读串口的代码,浪费大家一点时间了. //初始化
private void InitComm()
{
serialPort1 = new SerialPort();
//更改参数
serialPort1.PortName = "COM2";
serialPort1.Open(); //开启接收数据线程
ReceiveData(serialPort1);
} /// <summary>
/// 开启接收数据线程
/// </summary>
private void ReceiveData(SerialPort serialPort)
{
//同步阻塞接收数据线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.IsBackground = true;
threadReceive.Start(serialPort); } private void SynReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(0);
//serialPort.ReadTimeout = 1000;
try
{
string cardId = serialPort.ReadLine();
MessageBox.Show(cardId);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理超时错误
}
ReceiveData(serialPort); }不知道这样写行不行.
我现在是在串口模拟器上测试的,接收的时候,每次第一次开始接收都会接到一个字符'a',不知道什么原因.
请高手指点,感激不尽!谢谢大家!
从串口中读20个字符作为一个学生的餐卡号,然后根据这个餐卡号去查找相关信息.
读串口这块我觉得应该采用同步阻塞的方式,以下是读串口的代码,浪费大家一点时间了. //初始化
private void InitComm()
{
serialPort1 = new SerialPort();
//更改参数
serialPort1.PortName = "COM2";
serialPort1.Open(); //开启接收数据线程
ReceiveData(serialPort1);
} /// <summary>
/// 开启接收数据线程
/// </summary>
private void ReceiveData(SerialPort serialPort)
{
//同步阻塞接收数据线程
Thread threadReceive = new Thread(new ParameterizedThreadStart(SynReceiveData));
threadReceive.IsBackground = true;
threadReceive.Start(serialPort); } private void SynReceiveData(object serialPortobj)
{
SerialPort serialPort = (SerialPort)serialPortobj;
System.Threading.Thread.Sleep(0);
//serialPort.ReadTimeout = 1000;
try
{
string cardId = serialPort.ReadLine();
MessageBox.Show(cardId);
}
catch (Exception e)
{
MessageBox.Show(e.Message);
//处理超时错误
}
ReceiveData(serialPort); }不知道这样写行不行.
我现在是在串口模拟器上测试的,接收的时候,每次第一次开始接收都会接到一个字符'a',不知道什么原因.
请高手指点,感激不尽!谢谢大家!
2、清楚与下位机的通讯协议
3、serialPort1.DataReceived += dowithdata; //订阅DataReceived事件,指定事件处理程序
private void dowithdata(object sender, SerialDataReceivedEventArgs e)
{
//你要处理的内容
}