int bytes = serialPort1.BytesToRead //读取数据长度
byte[] buffer = new byte[bytes]
serialPort1.Read(buffer, 0, bytes) //读取串口数据
serialPort1.ReadLine()是输入缓冲区中直到首次出现NewLine值,出现异常参见csdn
对于粘贴出的代码:
首先确认使用的串口是SerialPort2还是SerialPort1,截图中你调用BytesToRead使用的是SerialPort1,而定义的响应函数名为serialPort2_DataReceived,是不是串口调用出现了问题;其次串口serialPort2的响应,定义为
this.serialPort2.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.serialPort2_DataReceived)
其声明为
private void serialPort2_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
依据你贴出的程序来看,明明是串口2的响应函数,你却用串口1调用BytesToRead(),自然会出现异常
参考以下:1)通过虚拟串口软件创建虚拟串口
2)安装modbus主站和从站的软件
3)使用这两个软件结合虚拟串口来看下数据发送正不正常
4)打开C#写得软件和从站软件,看下C#发送出来的报文格式对不对
请问数据源来自哪里!个人觉得:
1、读取串口数据先设置好com口,波特率、奇偶校验、停止位数、数据位数等
2、数据发送了数据口,串口适当延时后在读取。
3、你可以把串口的2#和3脚短路,进行调试程序!电脑先发送数据,然后立即读取,以测试硬件和软件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)