bulee Napisano Maj 13, 2011 Zgłoś Share Napisano Maj 13, 2011 Witam Nie będę owijał w bawełne i od razu przejdę do rzeczy, mianowicie: czy można w VB stworzyć program który obsługiwać będzie urządzenie pomiarowe skonstruwane przeze mnie, (urządzenie to działać będzie na podobnej zasadzie co mysz komputerowa a dokładniej jej przyciski tzn. dwa oddzielne czujniki dające sygnał do komputera przez port usb). Jak się do tego zabrać ?? Jestem początkujący jeżeli chodzi o programowanie, w związku z tym prosiłbym o wyrozumiałość. Link do komentarza Udostępnij na innych stronach More sharing options...
DevPort Napisano Maj 13, 2011 Zgłoś Share Napisano Maj 13, 2011 Jeżeli Twoje urządzenie USB przesyła dane do komputera to śmiem przypuszczać, że używasz programowego/sprzętowego konwertera RS-232/USB. Dalej... W systemie zapewne ukazuje Ci się to urządzenie jako port COM. Twoim kolejnym krokiem jest napisanie w VB programu do obsługi RS-232 i wybranie portu Twego urządzenia (COM?). Dalej moje wskazówki się kończą (z uwagi na brak wiedzy o VB). Pozdrawiam Prawdziwy programista wiesza sie wraz ze swoim programem. Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Maj 13, 2011 Autor Zgłoś Share Napisano Maj 13, 2011 Właśnie o to mi chodzi dzieki za zainteresowanie i sprecyzowanie mojego problemu. Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Maj 13, 2011 Autor Zgłoś Share Napisano Maj 13, 2011 A może łatwiej byłoby to napisać w jakimś innym języku, narzuciłem VB ponieważ trochę się otarłem o to i przynajmniej w minimalnym stopniu wiem o co tam chodzi. Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Maj 13, 2011 Zgłoś Share Napisano Maj 13, 2011 w c# jest komponent SerialPort do obsługi COM, w VB.NET też to powino być, więc VB powinien sie nadać. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Maj 13, 2011 Autor Zgłoś Share Napisano Maj 13, 2011 Rzeczywiscie jest SerialPort, przydałby mi się jakiś przykład z wykorzystaniem SerialPort -u , na którym mógłbym się bazować. Dobrze też byłoby gdyby w przykładzie uwzględnione było wejście oraz wyjscie, Link do komentarza Udostępnij na innych stronach More sharing options...
Wosiedem Napisano Maj 15, 2011 Zgłoś Share Napisano Maj 15, 2011 RTFM! http://lmgtfy.com/?q=serial+port+msdn http://msdn.microsoft.com/en-us/library/sy...lport.aspx#Y114 Pozdrawiam, vo7 (; Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Maj 16, 2011 Autor Zgłoś Share Napisano Maj 16, 2011 A moze jakiś mniej skomplikowany przykład ?! Ewentualnie może ktoś chciałby mi pomóc w napisaniu programiku ? Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 1, 2011 Autor Zgłoś Share Napisano Czerwiec 1, 2011 Witam ostatnio udało mi się coś stworzyć ale nie do końca chce to działać. Czy mógłby ktoś sprawdzić i powiedzieć co może być nie tak ?? Dim time As New DateTime Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SerialPort1.PortName = TextBox1.Text SerialPort1.Open() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click SerialPort1.WriteLine(TextBox2.Text)End Sub Public Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) If TextBox3.Text = Val(&H3B) Then time = DateTime.Now Timer1.Start() End If Refresh() Loop Until TextBox3.Text = Val(&H3B) Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) If TextBox3.Text = Val(&H1F) Then Timer1.Enabled = False Timer1.Stop() End If Refresh() Loop Until TextBox3.Text = Val(&H1F) End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim difference As TimeSpan = DateTime.Now.Subtract(time) Label1.Text = difference.Days.ToString & ":" & difference.Hours.ToString & ":" & difference.Minutes.ToString & ":" & difference.Seconds.ToString & "." & difference.Milliseconds.ToString End Sub Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 1, 2011 Zgłoś Share Napisano Czerwiec 1, 2011 Ale, że co nie do końca działa? Jak chcesz pomocy to opisz dokładniej problem. www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 2, 2011 Autor Zgłoś Share Napisano Czerwiec 2, 2011 Przepraszam może rzeczywiście nie sprecyzowałem w czym jest problem. Chodzi o to, że fragment kodu powyżej nie działa poprawnie. Generalnie chciałem żeby po odczytaniu danych w tym przypadku Val(&H3B) wystartował stoper, a po odczytaniu wartości Val(&H1F) zatrzymał odliczanie. Problemem jest to, że stoper wogóle nie startuje. A na dodatek chciałbbym żeby podczas wykonywania pętli program się nie wieszał. Odwiesza się dopiero po wykonaniu pętli czyli przy odczytaniu wartości Val(&H1F). Link do komentarza Udostępnij na innych stronach More sharing options...
Blind Napisano Czerwiec 2, 2011 Zgłoś Share Napisano Czerwiec 2, 2011 I teraz jaśniej. Timer działa na komunikatach systemowych, twoja aplikacja nie odbiera komunikatów(dlatego nie reaguje) gdy jest w pętli. Twoje możliwości: 1) obsługiwać komunikaty w pętli(Nie mam pojecia jak to sie robi w VB) 2) Przenieść pętle do innych wątków 3) (Najprostszy) Zmienić organizację tak, że tworzysz sobie jakąś globalną flage, nazwijmy ją np. isFirst. W procedurze ustawiasz to na true i startujesz timer. Teraz w timerze: BEGIN TIMER IF isFirst Wykonaj to co w pętli 1; Sprawdz czy pętla 1 powina się zakończyć jeśli tak to isFirst = false; ELSE Wykonaj to co w pętli 2; Sprawdz czy pętla 2 powina się zakończyć jeśli tak to zatrzymaj timer END IF Wykonaj to co było wcześniej w timeze. END TIMER www.blinder.pl - Blog Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 5, 2011 Autor Zgłoś Share Napisano Czerwiec 5, 2011 Kombinuje z rozwiązaniem numer 2, ale jak narazie z mizernym skutkiem. Spróbowałem rozdzielić dwie pętle, problem jest taki, że pierwsza pętle startuje wszystko jest ok ale jak przechodzę do drugiej to stoper się wiesza (ale liczy dalej tylko nie widzę jak przeskakują cyferki). Nie bardzo rozumie o co chodzi w rozwiązaniu 3, który prawdopodobnie byłby najrozsądniejszy. Czy można troszkę jaśniej. Powtórze to co pisałem przy zakładaniu tematu. Jestem początkujący jeżeli chodzi o programowanie, w związku z tym prosiłbym o wyrozumiałość. Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 6, 2011 Autor Zgłoś Share Napisano Czerwiec 6, 2011 Kolejna próba: Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() Loop Until TextBox3.Text = Val(&H3B) Timer1.Enabled = True time = DateTime.Now Timer1.Start() End Sub Klikam "button3" uruchamia się pętla i dopiero po wciśnięciu odpowiedniego guzika czyli po odebraniu danych w tym wypadku Val(&H3B) stoper startuje wszystko ladnie pracuje cyferki przeskakują jest miodzio. Dla przykładu zrobiłem coś takiego Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() Loop Until TextBox3.Text = Val(&H1F) Timer1.Stop() Timer1.Enabled = False End Sub Po wciśnięciu "button4" uruchamiam 2 pętle która ma mi zatrzymać stoper po otrzymaniu sygnału/danych Val(&H1F) Niestety, jeżeli wchodzę do pętli 2 to od razu stoper staje nie czeka na otrzymanie danych Val(&H1F) Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 6, 2011 Autor Zgłoś Share Napisano Czerwiec 6, 2011 mała modyfikacja i prawie działa tak jak chciałbym żeby działało, ale nie przeskakują cyferki w label1, pokazuje tylko czas jaki upłynał od odebrania Val(&H3B) do Val(&H1F) Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() Loop Until TextBox3.Text = Val(&H3B) time = DateTime.Now Timer1.Start() Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() If TextBox3.Text = Val(&H1F) Then Timer1.Stop() Timer1.Enabled = False End If Loop Until TextBox3.Text = Val(&H1F) Dim difference As TimeSpan = DateTime.Now.Subtract(time) Label1.Text = difference.Days.ToString & ":" & difference.Hours.ToString & ":" & difference.Minutes.ToString & ":" & difference.Seconds.ToString & "." & difference.Milliseconds.ToString End Sub Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 9, 2011 Autor Zgłoś Share Napisano Czerwiec 9, 2011 Problem z cyferkami rozwiazany. Poniżej kod. Jedyny problem który mi pozostał to zawieszanie się całej formy tzn. podczas wykonywania pętli nic nie działa. Nie mogę przerwać pętli. Chyba że poprzez urządzenie zewnętrzne , wówczas umieściłbym coś w pętli że jak osiągnie wartość val(xxx) to koniec, ale chciałbym przerwać pętle za pomocą jakiegoś przycisku na formie. Proszę o pomoc kolegów programistów !! KOD Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() Loop Until TextBox3.Text = Val(&H3B) time = DateTime.Now Timer1.Start() Do SerialPort1.WriteLine("pinb ?") TextBox3.Text = SerialPort1.ReadLine TextBox3.Text = Val("&h" & TextBox3.Text) Refresh() If TextBox3.Text = Val(&H1F) Then Timer1.Stop() Timer1.Enabled = False End If Dim differenceq As TimeSpan = DateTime.Now.Subtract(time) Label1.Text = differenceq.Hours.ToString & ":" & differenceq.Minutes.ToString & ":" & differenceq.Seconds.ToString & "." & differenceq.Milliseconds.ToString Loop Until TextBox3.Text = Val(&H1F) Dim difference As TimeSpan = DateTime.Now.Subtract(time) Label1.Text = difference.Hours.ToString & ":" & difference.Minutes.ToString & ":" & difference.Seconds.ToString & "." & difference.Milliseconds.ToString TextBox4.Text = sek() End Sub Link do komentarza Udostępnij na innych stronach More sharing options...
xevil21 Napisano Czerwiec 10, 2011 Zgłoś Share Napisano Czerwiec 10, 2011 Witam. VB to nie jest moja specjalność, ponieważ nie jest to język ciekawy. Poczytaj o: "Application.DoEvents". Spróbuj dać to w pętli, aby było wykonywane w każdym jej przebiegu. Możesz też zainteresować się wątkami. Pozdrawiam. Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 10, 2011 Autor Zgłoś Share Napisano Czerwiec 10, 2011 No i rewelacja w końcu działa jak powinno. Wielkie dzięki mój GURU Link do komentarza Udostępnij na innych stronach More sharing options...
bulee Napisano Czerwiec 17, 2011 Autor Zgłoś Share Napisano Czerwiec 17, 2011 Witam Chciałbym poruszyć jeszcze ten temat a w szczególności wziaść na widelec temat poprawności funkcji do zamiany czasu w formie HH:MM:SS.FFF na same sekundy czyli SS.FFF. Public Function sek() As String Dim difference As TimeSpan = DateTime.Now.Subtract(time) Dim hours As Double Dim minutes As Double Dim seconds As Double Dim mili As String hours = difference.Hours.ToString * 3600 minutes = difference.Minutes.ToString * 60 seconds = difference.Seconds.ToString mili = difference.Milliseconds.ToString / 1000 sek = hours + minutes + seconds + mili End Function Głównie chodzi mi o pozycję mili, co będzie jeżeli czas będzie 00:01:23.150 a co w przypadku 00:01:23.015. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.