Wysyłanie i odbieranie danych w Visual basic

Pisanie aplikacji na PC w Visual Studio
Awatar użytkownika
Karlos128@nos
Posty: 53
Rejestracja: 18 sie 2015, 13:32

Re: Wysyłanie i odbieranie danych w Visual basic

Post autor: Karlos128@nos » 20 kwie 2022, 9:37

Witam ponownie w tej samej sprawie.
Szanowny Bartku korzystam cały czas z twojej pomocnej reguły i jest cacy , ale doszedłem do wniosku że mój cpu który to ma poświęcić więcej czasu na kontolę i czówanie nad
całym procesem zabezpieczeń ; napięć, prądów, przekaźników i temperatur przetwornic w systemie solarnym to niestety cpu musi także poświęcić czas 3s na wysłanie danych do pc.
Dlaczego 3s. Poniżej krótki sub w którym jest wysyłka danych z waitami 270ms bo jak zmniejsze to program odbierający chyba nie wyrabia i powstaje bałagan.
  1. Sub Wysylka
  2.    Print #3 , "V1=" ; Outpomiar(5) ; Chr(13)
  3.    Waitms 260
  4.    Print #3 , "V2=" ; Outpomiar(6) ; Chr(13)
  5.    Waitms 260
  6.    Print #3 , "V3=" ; Outpomiar(7) ; Chr(13)
  7.    Waitms 260
  8.    Print #3 , "V4=" ; Outpomiar(8) ; Chr(13)
  9.    Waitms 260
  10.    Print #3 , "V5=" ; Outpomiar(1) ; Chr(13)
  11.    Waitms 260
  12.    Print #3 , "V6=" ; Outpomiar(2) ; Chr(13)
  13.    Waitms 260
  14.    Print #3 , "V7=" ; Outpomiar(3) ; Chr(13)
  15. End Sub
Moje pytanie jest takie, teraz np. wysyłam coś takiego:
  1. Sub Wysylka
  2. Print #3 , "V1=" ; Outpomiar(1) ; "V2=" ; Outpomiar(2) ; "V3=" ; Outpomiar(3) ;"V4=";Outpomiar(3); Chr(13)  
  3. End Sub
Teraz jak można by to po odebraniu tej paczki porozdzielać na poszczególne elementy danych po stronie PC. V1 , V2 , V3 , V4 itd.
Chodzi o to że to skróciłoby czas na wysyłanie do maksimum , a xmega miała by więcej czasu na inne sprawy ważniejsze.
Poniżej obecnie dzałający Sub , ale spowolniony.
  1.     Private Sub ReceivedText1() 'input from ReadExisting
  2.  
  3.  
  4.         If InStr(1, mystring1, "V1=") > 0 Then  ' ***************** Pomiar solara 40V
  5.            Dim mydane() As String = mystring1.Split("=")
  6.             'RichTextBox1.Text = mydane(1)
  7.            vcc1 = CStr(mydane(1)) ' Przepisany wynik w postaci np. 16,20
  8.            vbar1 = Val(mydane(1))
  9.             ProgressBar1.Value = vbar1
  10.             RichTextBox1.Text = vcc1
  11.         End If
  12.         If InStr(1, mystring1, "V2=") > 0 Then  ' ***************** Pomiar ładowania 24V
  13.            Dim mydane() As String = mystring1.Split("=")
  14.             'RichTextBox2.Text = mydane(1)
  15.            vcc2 = CStr(mydane(1))
  16.             vbar2 = Val(mydane(1))
  17.             ProgressBar2.Value = vbar2
  18.             RichTextBox2.Text = vcc2
  19.         End If
  20.         If InStr(1, mystring1, "V3=") > 0 Then  '****************** Pomiar 12V
  21.            Dim mydane() As String = mystring1.Split("=")
  22.             'RichTextBox3.Text = mydane(1)
  23.            vcc3 = CStr(mydane(1))
  24.             vbar3 = Val(mydane(1))
  25.             ProgressBar3.Value = vbar3
  26.             RichTextBox3.Text = vcc3
  27.         End If
  28.         If InStr(1, mystring1, "V4=") > 0 Then  ' ***************** Pomiar Napięcia AKUMULATOR-1
  29.            Dim mydane() As String = mystring1.Split("=")
  30.             vcc4 = CStr(mydane(1))
  31.             'RichTextBox4.Text = mydane(1)
  32.            RichTextBox4.Text = vcc4
  33.         End If
  34.         If InStr(1, mystring1, "V5=") > 0 Then  ' ***************** Pomiar Napięcia AKUMULATOR-2
  35.            Dim mydane() As String = mystring1.Split("=")
  36.             'RichTextBox5.Text = mydane(1)
  37.            vcc5 = CStr(mydane(1))
  38.             RichTextBox5.Text = vcc5
  39.         End If
  40.         If InStr(1, mystring1, "V6=") > 0 Then  ' ***************** Pomiar Napięcia 5V SYSTEM
  41.            Dim mydane() As String = mystring1.Split("=")
  42.             TextBox16.Text = mydane(1)
  43.  
  44.         End If
  45.         If InStr(1, mystring1, "V7=") > 0 Then  ' ***************** Pomiar Napięcia 3.3V CPU
  46.            Dim mydane() As String = mystring1.Split("=")
  47.             TextBox17.Text = mydane(1)
  48.  
  49.         End If
  50.  
  51.         ' ********************************************************** Pomiar Temperatur 2 x DS18b20
  52.        If InStr(1, mystring1, "DS1 =") > 0 Then  'Pomiar temp DS1
  53.            Dim mydane() As String = mystring1.Split("=") '
  54.            TextBox4.Text = mydane(1)
  55.  
  56.         End If
  57.  
  58.         If InStr(1, mystring1, "DS2 =") > 0 Then  'Pomiar temp DS2
  59.            Dim mydane() As String = mystring1.Split("=") '
  60.            TextBox5.Text = mydane(1)
  61.  
  62.         End If
Awatar użytkownika
Karlos128@nos
Posty: 53
Rejestracja: 18 sie 2015, 13:32

Re: Wysyłanie i odbieranie danych w Visual basic

Post autor: Karlos128@nos » 04 gru 2022, 20:25

Odświeżę trochę temat.
Moje pytanko, ostatnio zamiast wysyłać i odbierać pojedyncze dane i marnować czas xmegi to wysyłam je za jednym pchnięciem cały string np: 1452=2300=0010=101052=123=12.6=01.0 tak wyglądają dane które przesyłam z sleave do mastera.
Odbiornik dzieli na tablice pomijając "=" ten znak je rozdziela.
A może ktoś by podpowiedział jak podzielić te dane w VB?
Awatar użytkownika
niveasoft
Posty: 1187
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Wysyłanie i odbieranie danych w Visual basic

Post autor: niveasoft » 05 gru 2022, 20:01

To to chyba proste jak w Bascom tyle że tablice można tworzyć na bieżąco.
  1.  Dim argsString As String = "1452=2300=0010=101052=123=12.6=01.0"
  2.         Dim myArgs() As String = argsString.Split("=")
  3.         Console.WriteLine("Found " & myArgs.Length & "  args")
  4.         If myArgs.Length > 0 Then
  5.             For i = 0 To myArgs.Length - 1
  6.                 Console.WriteLine(i & " = " & myArgs(i))
  7.             Next
  8.         End If

Found 7 args
0 = 1452
1 = 2300
2 = 0010
3 = 101052
4 = 123
5 = 12.6
6 = 01.0

Można sprawdzać ile ich jest albo uzyć For Each...
Awatar użytkownika
Karlos128@nos
Posty: 53
Rejestracja: 18 sie 2015, 13:32

Re: Wysyłanie i odbieranie danych w Visual basic

Post autor: Karlos128@nos » 14 gru 2022, 16:41

Jeszcze jedno pytanko, w jaki sposób zamienić liczbę odebraną np.4392 na 43.92?
Awatar użytkownika
niveasoft
Posty: 1187
Rejestracja: 17 sie 2015, 12:13
Kontakt:

Re: Wysyłanie i odbieranie danych w Visual basic

Post autor: niveasoft » 14 gru 2022, 17:09

Sposobów jest oczywiscie więcej. Nie wiem czy czasem nie otrzymasz tam kiedyś wartości z jednym zerem i wtedy musisz dopisać coś po else bo ja nie będe teraz gdybał.
Chyba że się upewnisz w Bascom i napiszesz "myString = Format(myString , "000") " to wtedy zawsze nada przynajmniej trzy znaki. Głupio by wyglądało dla 34=> .34
To juz lepiej wtedy jak nada 034 i wyjdzie => 0.34
Dla czterech liter to zadziała na przykład to:
  1.  
  2.         Dim ori As String = "1234"
  3.         If ori.Length > 2 Then
  4.             ori = ori.Insert(ori.Length - 2, ".")
  5.         Else
  6.  
  7.         End If
  8.         Console.WriteLine(ori)
ODPOWIEDZ