VB.NET SerialPort 串口DataReceived事件,超过五十分钟后无法触发

Private Sub btnKeiRyo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnv_nJ.Click
If SerialPortHaKaRi IsNot Nothing Then
If SerialPortHaKaRi.IsOpen = True Then
SerialPortHaKaRi.Close()
End If
If SerialPortHaKaRi.IsOpen = False Then
SerialPortHaKaRi.Open()
'TCY
SerialPortHaKaRi.ReceivedBytesThreshold = 1
End If

SerialPortHaKaRi.WriteLine(haKaRi_temp)
End If
End Sub

Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPortHaKaRi.DataReceived
Dim strRecvData As String = ""
strRecvData = SerialPortHaKaRi.ReadExisting
Call disPlayComData(strRecvData)

If SerialPortHaKaRi IsNot Nothing Then
If SerialPortHaKaRi.IsOpen = True Then
SerialPortHaKaRi.Close()
End If
End If
End Sub

但是把程序重新启动,就又能触发了。
感觉时间长之后,程序好像变得慢了
Delegate Sub callback(ByVal strT As String) '定义委托

Sub showString(ByVal comdata As String) '显示结果
strHaKaRi_TEMP = comdata
F_ハカリ_设定()
End Sub

Sub disPlayComData(ByVal strTmp As String) '判定是否为跨线程
If Me.lbl入力値.InvokeRequired Then
Dim d As New callback(AddressOf showString)
Me.Invoke(d, New Object() {strTmp})
Else
strHaKaRi_TEMP = strTmp
F_ハカリ_设定()
End If
End Sub

如能解决,可加分啊。帮帮忙~

一般是数据线的问题(是不是USB转232的,如果是,长时间测试一定要用上100元/条的那种线)追问

这么厉害。还真的是usb转的232。但是直接插在COM口上。还是不好使啊。我在试一遍。不能理解的是,为什么只有重启程序才能触发。不然就一直不好使了

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-11-17
需要帮你做设计吗追问

就是想解决问题。

追答

好的

第2个回答  2014-11-17
这个要看你的 disPlayComData()函数吧,追问

发上去了,在帮忙看看吧~3q

VB.NET SerialPort 串口DataReceived事件,超过五十分钟后无法触发
一般是数据线的问题(是不是USB转232的,如果是,长时间测试一定要用上100元\/条的那种线)

serialPort的DataReceived事件无法触发
1、看一下你的SerialPort的Dts属性和Rts属性,都应该设为True才行 2、数据以后 更新textbox 用个委托 3、多线程来完成

c#,采用SerialPort类的DataReceived事件来接收数据,性能达不到要求,有...
1.如果是从设备数据发出,到程序SerialPort类的DataReceived收到时间觉得过长,那你这个系统需要的性能就太牛叉了,还是换其他方式吧,例如socket。2.如果是设备数据发出,程序也收到。但是如果是因为你在DataReceived事件里写了大量的处理逻辑导致在两次接收数据的时间间隔之内跟不上处理,那这个,我建议你...

.net串口接收超时问题
1.SerialPort_DataReceived事件启动1ms的计时器,2.计时器到达时执行break跳出程序;否则循环监听\/检测comport数据即可

vb.net 串口收发数据有问题
是的话那是因为51的sbuf最多存放8个字节,所以你发12个字节会分成两次发完。还有在接收的时候最好定义好通信协议,比如加一个侦头,一个侦尾,通过这两个字节的内容来接收数据。老兄,提问还是给点悬赏分嘛,不要吝啬哪点分,知识是无价的,你给得越多,回答你的人才会越多。

亲,想请教个关于serialport的datareceived问题
你好!!datareceived 的触发是串口收到数据才执行的,而不是你发送完数据就能触发 datareceived

vb.net SerialPort控件接收数据问题,用串口调试助手发数据,只有第一次...
你定义的委托需要带参数才行,DataReceived事件中没有接收数据代码,下面的代码经测试可用 Delegate Sub SetTextCallback(ByVal InputString As String)Private Sub ShowString(ByVal comData As String)txt_Rect.Text += comData '将收到的数据入接收文字框中 txt_Rect.SelectionStart = txt_Rect.Text...

...但数据接收不到,DataReceived事件总是不触发?
用串口调试工具确保代码无误.设置好串口和比特率点击open,然后编辑内容发送.用下面的方法接收.private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { if (serialPort1.IsOpen) { StringBuilder strb = new StringBuilder(); ...

vb.net+判断串口发送是否空?
在 VB.NET 中,判断串口发送是否为空可以通过判断 SerialPort 类的 IsOpen 和 BytesToWrite 属性来实现。IsOpen 属性可以判断串口是否已经打开,如果串口没有打开,则无法发送数据,因此 IsOpen 属性可以用来判断串口发送是否可行。BytesToWrite 属性可以获取当前串口发送缓冲区中待发送的字节数,如果 BytesTo...

VB.net 串口传送回数据处理的问题
使用委托方式处理:Public Class Form1 Dim mSTR As String Dim strData As String Dim strDat As String Dim mRecvByte() As Byte Dim Hexsj As String Dim form2 As Form Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.S...

相似回答