| Author |
Message
|
piotr411 Poziom 9

Joined: 07 Jan 2009 Posts: 38 Location: Legnica
|
#1
18 Dec 2009 12:15 [VISUAL BASIC 2008] Odczyt z RS232 |
|
|
|
Witam
Problem jest Taki, że wszystko działa jak należy z tym drobiazgiem
- jeśli nie ma sygnału informacji na RS232 to program staje w przerwaniu i czeka na znak końca linii, jak to zrobić żeby wychodził z przerwanie jesli nie ma sygnału np po 200mili sekundach niby jest polecenie ale po przepełnieni sie stanu wywala błąd i program zatrzymuje sie
| Code: |
Public Class Form1
<System.Runtime.InteropServices.DispId(1)> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.Open()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer1.Enabled = False
End Sub
Private Sub Timer1_Tick_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim znak As String
Dim s As Byte
znak = SerialPort1.ReadLine()
s = (InStr(znak, "GPS"))
TextBox1.Text = (znak)
End Sub
End Class |
[img]
[/img]
|
|
| Back to top |
|
 |
Google

|
#
18 Dec 2009 12:15 |
|
|
|
|
|
| Back to top |
|
 |
one_eddie Poziom 20

Joined: 22 Jul 2004 Posts: 990 Location: Polska
|
#2
23 Dec 2009 16:08 Re: [VISUAL BASIC 2008] Odczyt z RS232 |
|
|
|
Odpowiedz już chyba znasz. Doczytahj w MSDN jak dokładnie korzysta się ze zdarzenia DataRecieved. Możesz też poszukać jak przerywać operacje IO. Podpowiem że jest do tego funkcja CancelIO. Niestety dobrze przerywanie operacji jest już trudnym do opanowania zagadnieniem i nie będe nawet próbował go teraz opisywać :)
|
|
| Back to top |
|
 |
Google

|
#
23 Dec 2009 16:08 |
|
|
|
|
|
| Back to top |
|
 |
piotr411 Poziom 9

Joined: 07 Jan 2009 Posts: 38 Location: Legnica
|
#3
23 Dec 2009 17:04 Re: [VISUAL BASIC 2008] Odczyt z RS232 |
|
|
|
No właśnie. Dzięki nie pomogłeś, ale zmobilizowałeś, za punktowałeś ;)
Zrobiłem to nie co inaczej, ale efekt osiągnięty.
Dla tych co by mieli podobny problem zamieszczam kod
| Code: |
Public Class Form1
Private WithEvents serial As New IO.Ports.SerialPort
Private Delegate Sub UpdateTextboxDelegate(ByVal Zmienna As String)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
serial.BaudRate = 1200
serial.PortName = "COM1"
serial.Open()
End Sub
Private Sub serial_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles serial.DataReceived
Dim Ciąg As String = serial.ReadLine
UpdateTextbox(Ciąg)
End Sub
Private Sub UpdateTextbox(ByVal Zmienna As String)
If Me.TextBox1.InvokeRequired Then
Dim d As New UpdateTextboxDelegate(AddressOf UpdateTextbox)
Me.TextBox1.Invoke(d, New Object() {Zmienna})
Else
TextBox1.Text = Zmienna
End If
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If serial.IsOpen Then serial.Close()
End Sub
End Class |
Jest tylko jedno, ale.
Po kompilacji i uruchomieniu jest wszystko ok, jak zamykam "X" aplikacje zawiesza się, rozwiązaniem jest Button z End , ale problem jest do rozwiązania dlaczego tak sie dzieje
|
|
| Back to top |
|
 |
Google

|
#
23 Dec 2009 17:04 |
|
|
|
|
|
| Back to top |
|
 |
one_eddie Poziom 20

Joined: 22 Jul 2004 Posts: 990 Location: Polska
|
#4
23 Dec 2009 17:32 Re: [VISUAL BASIC 2008] Odczyt z RS232 |
|
|
|
@piotr411: Czuje się lekko urażony :P Dlaczego uważasz że nie pomogłem?
Sprawdź jaki watek blokuje aplikację (debug) i dociekaj dlaczego nie został zamknięty :)
Dodano po 3 [minuty]:
Zakładam że pomiez yzmianą z DataReceived nie dodałeś żadnego wątku. Aplikacja w tym momencie czekać może na zakończenie operacji IO. Zamykasz port przed zamknięciem aplikacji? Sprawdzałeś czy wykonywana jest linia z .Close()?
|
|
| Back to top |
|
 |
piotr411 Poziom 9

Joined: 07 Jan 2009 Posts: 38 Location: Legnica
|
#5
23 Dec 2009 17:44 Re: [VISUAL BASIC 2008] Odczyt z RS232 |
|
|
|
wiesza sie tam gdzie można się spodziewać:
| Code: |
| Dim Ciąg As String = serial.ReadLine |
"zwis" jest w chwili odczytu portu, kiedy do portu nic nie dochodzi zamyka się poprawnie
|
|
| Back to top |
|
 |