C# SetialPort类读取串口数据时使用委托出错。public void Sp_DataReceived(object sender, System.IO.Port
C# SetialPort类读取串口数据时使用委托出错。
public void Sp_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { string strTemp = ""; double iSecond = 0.5; DateTime dtOld = System.DateTime.Now; DateTime dtNow = System.DateTime.Now; TimeSpan dtInter; dtInter = dtNow - dtOld; int i = Sp.BytesToRead; if (i > 0) { try { strTemp = Sp.ReadExisting(); } catch { } if (strTemp.ToLower().IndexOf("\r") < 0) { i = 0; } else { this.Invoke(interfaceUpdataHandle, strTemp); } } while (dtInter.TotalSeconds < iSecond && i <= 0) { dtNow = System.DateTime.Now; dtInter = dtNow - dtOld; i = Sp.BytesToRead; if (i > 0) { try { strTemp += Sp.ReadExisting(); } catch { } if (strTemp.ToLower().IndexOf("\r") < 0) { i = 0; } else { this.Invoke(interfaceUpdataHandle, strTemp); } } } // do null } private SerialPort Sp = new SerialPort(); Sp.PortName = this.comboBox2.Text.Trim(); Sp.BaudRate = Convert.ToInt32(this.comboBox1.Text.Trim()); Sp.Parity = Parity.None; Sp.StopBits = StopBits.One; Sp.DataReceived += new SerialDataReceivedEventHandler(Sp_DataReceived);
以上是我使用SerialPort类去读取串口数据的部分代码,我用了SerialDataReceivedEventHandler(Sp_DataReceived)去调用函数Sp_DataReceived去读取数据。可程序执行到Sp.DataReceived += new SerialDataReceivedEventHandler(Sp_DataReceived)时,程序没有进入函数Sp_DataReceived。请问这是为什么呢??急急急急...........
[解决办法] 串口收到数据,
然后是收到数据弹出窗口。
上面的语法要跨线程,并且又有datareceived事件。由于datareceived事件触发的条件有点点复杂,需要弄懂,再跨线程调用窗体语法很复杂。
就把程序分拆开,先用较简单的方法确认有没有收到数据。再收到数据后显示窗体。
功能完成以后再用这样的“精简”的代码。
加个定时器,然后定时用sp.readexist()读串口数据。
如果有数据了看看收到的数据对不对。
然后再改为用datareceived收数据。
另外datareceived手数据好像要用Thread.Sleep()来延时,以确保把数据收完。
[解决办法] 如果你实验的时候是com1接com2,一个用串口精灵发,一个用你的程序收,记得要用交叉线,用直连线是肯定收不到的(串口线有两种)
你先用串口精灵看看能不能收到数据,未必是程序的问题。
[解决办法] 一般串口收发数据就用一个串口头,把收发的两个引脚(2脚和3脚)短接就行了。这样发的时候串口也收到数据了。
------解决方案--------------------
既然电子秤使用的是COM3 你打开COM1和COM2去测试 肯定收不到数据啊
这种电子秤应该是采用的USB模拟串口技术 COM3就是他虚拟出来的串口 你把你的sp指向COM3然后在打开试试
[解决办法] 引用: 引用:引用:引用:一般串口收发数据就用一个串口头,把收发的两个引脚(2脚和3脚)短接就行了。这样发的时候串口也收到数据了。这个用程序如何实现呢?对这个不了解耶! 你该不会连线都没接吧。。。那数据要怎么传输啊,通过空气咩 当然是要交叉啦,将COM1的…… = =我说的是你用串口精灵测试的时候采用这种接线方法。。。先检测下你的程序能不能用
USB的我没做过