vb.net串口发送端不停发送接收端怎么处理

串口不停的向下位机发送数据,上位机怎么处理下位机反馈的数据好
用VB.net自带的mscomm控件完成
最新回答
徒孤鸣

2024-07-04 05:03:41

定义委托然后在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.Length
txt_Rect.ScrollToCaret()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim inData As String = SerialPort1.ReadExisting
Dim d As New SetTextCallback(AddressOf ShowString)
BeginInvoke(d, inData)
End Sub
追问
我用timer控件一直循环发送数据到串口,按照你的方法处理接收到的数据,为什么每次只能显示发送的第一个发送的数据反馈的字符
追答
不会啊!这个是事件触发模式哦
确认你的SerialPort1的ReceivedBytesThreshold 属性前的默认值是不是1
再者你用手动发送确认下,我不知道你的定时器是否正常工作
追问

我单步运行时发现时要等timer事件结束后才执行ShowString(ByVal comData As String)

追答
FCS是什么函数?
定时器中别用Application.DoEvents(),去掉Application.DoEvents()试
追问
FCS是计算要发送数据的效验码, 去掉Application.DoEvents还是一样,只显示发送comout(FCS("@00RD05520001"))反馈的字符   后面几个不显示
追答
定时器的时间间隔太短了,发送数据需要时间的啊,定时器时间间隔设置成100毫秒
每两条指令间必须要有时间间隔
基本可以确定是指令发送程序出问题
发送的方式基本是:send(cmd1)---delay(time)---send(cmd2)..............