Hjälp med ojämn timer Koppla på DataReceived-eventet för serieportkontrollen så säger serieporten till när du får data. Jag har ett liknande problem. Men min fråga blir. hur gör man om man bara vill hämta data säg var 10 sec. Medan själva enheten skickar var 10ms. Tack för hjälpen jag googlade på SerialPort1_DataReceived och hittade ett exempel så jag prövade <b>Timer1.Interval = 15</b> Jag hade FEL ! Ursäkta att jag inte har sakt hur det gick och tack för all hjälpHjälp med ojämn timer
Jag försöker gjöra ett program som ska ta imot serie data från en mätgrej.
Datan skickas lite olika tex (8 byte) (pause 50ms) (6 byte) (pause 30ms) (12 byte) (pause 80ms) (6 byte)
med mitt program så funkar det ganska bra men i bland gör timern för stor pause så att jag får 14 byte istället för 6 och 8 stycken
Kan man få en timern att ge en mer exakt intervall ?
Finns det nån annan timer funktin som är mer någa ?
Eller finns det nåt annat sätt att gjöra mitt program ?
Public Class Form1
Dim gammal_buf_storlek As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.PortName = "COM12"
SerialPort1.BaudRate = 9600
SerialPort1.Encoding = System.Text.Encoding.GetEncoding("Windows-1252")
If SerialPort1.IsOpen = False Then
SerialPort1.Open()
End If
Timer1.Interval = 15
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim buf As String
Dim ny_buf_storlek As Integer = SerialPort1.BytesToRead
If ny_buf_storlek > 0 Then
If ny_buf_storlek > gammal_buf_storlek Then
gammal_buf_storlek = ny_buf_storlek
Else
buf = SerialPort1.ReadExisting
ListBox1.Items.Add(buf)
End If
End If
End Sub
End Class
Sv: Hjälp med ojämn timer
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
End SubSv:Hjälp med ojämn timer
Jag har med försökt med en timer. Ofan funkar det bra men efter ett tag börjar siffrorna bli fel. Då läsningen ser mitt i en bye.Sv:Hjälp med ojämn timer
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SerialPort1.PortName = "COM12"
SerialPort1.BaudRate = 9600
SerialPort1.Encoding = System.Text.Encoding.GetEncoding("Windows-1252")
If SerialPort1.IsOpen = False Then
SerialPort1.Open()
End If
End Sub
Private Sub DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
ListBox1.BeginInvoke(New myDelegate(AddressOf updateListBox), New Object() {})
End Sub
Public Delegate Sub myDelegate()
Public Sub updateListBox()
Dim buf As String
Dim HEX_data As String
buf = SerialPort1.ReadExisting
ListBox1.Items.Add(buf & " " & buf.Length)
End Sub
End Class
men det blir ungefär samma resultat i stället för tex 8 bytes på varje rad får jag 7 och sen nästa rad 1
Sv: Hjälp med ojämn timer
<b>(8 byte) (pause 50ms) (6 byte) (pause 30ms) (12 byte) (pause 80ms) (6 byte)
med mitt program så funkar det ganska bra men i bland gör timern för stor pause
så att jag får 14 byte istället för 6 och 8 stycken.
Kan man få en timern att ge en mer exakt intervall ? </b>
Om du använder den gamla standard Timern från VB tiden
så är det så att den klarar bara att "ticka" 1/18 sek dvs var 56 ms Timer.intervall blir då 56 ms.
Du får inte dom paus-sekvenser du tror/vill ha
Det finns en ocx Hitimer som fixar ner till 1 ms. Kolla om du får igång denna
Programarkivet:HiTimer 1 ms
Lägg Ocx och Osa i ditt System32 eller i samma mapp som din applikation.
Återkom om du inte får den att funka. Kanske det behövs Registrera ocx
Kolla även denna variant.
http://cuinl.tripod.com/activex-7.htmSv:Hjälp med ojämn timer
Timern från VB6 klarar ner till 30 ms utan problem i NT/XP
56 ms gamla data från Win95 tiden. Förmodligen klarar den ner till 10 ms utan problem.
Synpunkter emotses.Sv: Hjälp med ojämn timer
Jag fick igång HiTimer men vb.net började krascha lite då och då. Men under tiden det funkade så han jag testa med 1 ms timer men det fungerade inte nått bättre för SerialPort1.BytesToRead inte uppdateras någ snappt
men jag hittade étt mönster i serie datan så jag ett gjorde ett filter så jag fick ut datan jag ville