PDA

View Full Version : دریافت نادرست داده در سرعت بالا پورت سریال



book66
سه شنبه 16 تیر 1394, 00:14 صبح
سلام دوستان.من برای ارتباط میکرو با کامپیوتر یک برنامه ای نوشتم که یک مشکلی داره.وقتی سرعت ارسال داده زیاد میشه نرم افزار اعداد نادرست دریافت میکنه درحالی که یک نرم افزار terminal دارم که در همون سرعت با همون تنظیمات درست کار میکنه.من کد برنامم برو میزارم لطفا اساتید یک نگاهی بندازند ببینند مشکل از کجاست.ممنون

Imports System
Imports System.IO.Ports
Imports System.Threading
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Management
Imports System.Windows.Forms
Imports System.Drawing




Public Class ComETC
Dim buf As String
Dim arr(99) As Integer


Private Sub IrUSB_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
com1.Close()
com1.Dispose()
End Sub
Private Delegate Sub WorkDelegate(ByVal Index As SerialPort)
Delegate Sub SetTextCallback(ByVal text As String)


Private Sub IrUSB_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
com1.Close()
com1.Dispose()
End Sub




Private Sub IrUSB_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

txt.Text = ""

For i = 0 To 99
arr(i) = 7000
Next
Chart1.Series("Series1").Points.Clear()




com1.PortName = "COM1"
com1.BaudRate = 7000


com1.Open()


Dim portnames() As String = SerialPort.GetPortNames




End Sub


Private Sub WorkingProcedure(ByVal SP As SerialPort)


buf = SP.ReadExisting
sttext(buf)


End Sub
Private Sub sttext(ByVal text As String)






If (Me.txt.InvokeRequired) Then
Dim d As SetTextCallback = AddressOf sttext
Me.Invoke(d, text)
Else




Me.txt.Text = text + Me.txt.Text




If InStr(txt.Text, ".0") > 1 Then
Chart1.Series("Series1").Points.Clear()




For i = 1 To 99
arr(i - 1) = arr(i)
Chart1.Series("Series1").Points.AddXY(i, arr(i - 1) - 7000)
Next




arr(99) = Mid(txt.Text, 1, InStr(txt.Text, ".0") - 1)




Chart1.Series("Series1").Points.AddXY(100, arr(99) - 7000)
TextBox2.Text = Mid(txt.Text, 1, InStr(txt.Text, ".0") - 1 + 2) + TextBox2.Text + Chr(13)
txt.Text = Mid(txt.Text, InStr(txt.Text, ".0") + 2)
End If


End If


End Sub


Private Sub com1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles com1.DataReceived
Dim d As WorkDelegate = AddressOf WorkingProcedure
d.BeginInvoke(com1, Nothing, Nothing)

End Sub

End Class