Have fun with sci.dog

使用C#  SerialPort对象编写串口通信上位机软件的方法

使用 SerialPort 能方便的定义软件端的串口对象,并设置串口通信参数:

        SerialPort mySerialPort = new SerialPort("COM1");
        mySerialPort.BaudRate = 9600;
        mySerialPort.Parity = Parity.None;
        mySerialPort.StopBits = StopBits.One;
        mySerialPort.DataBits = 8;
        mySerialPort.Handshake = Handshake.None;
        mySerialPort.RtsEnable = true;

上位机下发串口命令实现较简单,使用Write方法可将数据写入串行端口的输出缓冲区。

mySerialPort .Write(sendBuffer, 0, sendBuffer.Length);

接收串口上传数据比较tricky,也是出问题比较多的地方。通过触发SerialPort.DataReceived 事件表示串口接收了数据,并触发接收数据的处理程序。采用事件触发的方式对比使用轮询的方法比较节省时间,更加方便。

        mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);

那么串口硬件不停地向上位机上传数据,何时触发DataReceived 事件呢?使用ReceivedBytesThreshold设置接收字节限制,当到达设定的字符个数或者收到文件结束字符时,将数据放入输入缓冲区时,触发事件。

mySerialPort.ReceivedBytesThreshold = 13;

实际上receivedbytesthreshold设置为1的时候,硬件也不会每个字节产生一次事件,因此要使用使用 BytesToRead 属性确定缓冲区中剩余的要读取的数据量,原因是:现在的PC不适合处理单个数据,而是一次处理批量数据。当你速率足够高时,PC是处理不过来的。只有一次缓冲一批数据,再一次处理,PC才能搞得定。

可以参考这个Blog,对SerialPort里面的接口和函数解释很清楚:串行通讯之.NET SerialPort – hanford – 博客园 (cnblogs.com)

赞(0)
未经允许不得转载:SciDog » 使用C#  SerialPort对象编写串口通信上位机软件的方法

评论 抢沙发