Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C# - Visual Studio 08 TextBox-COM transmisja

konwalia_ 17 Lip 2012 22:07 1860 13
  • #1 17 Lip 2012 22:07
    konwalia_
    Poziom 7  

    Witam, jestem nowa na tym forum muszę zrobić pewien projekt, który polega na tym, że odpieram poprzez RS-232 dane z urządzenia i muszę je "posegregować" w oddzielnych textBoxach. Doszukałam się takiego kodu do obsługi COM'a :

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    Działa on jak najbardziej dobrze tzn w jednym textBoxie wysyła ciągle dane, powiedzmy że jest to 8 wartości z zakresu 0-1023 i chciałabym aby każda wartość była w oddzielnym TextBox. Nie mogę sobie dać z tym rady.
    Proszę was koledzy o pomoc.

    Proszę pamiętać o używaniu znaczników syntax. Opcja Listing kodu. Post poprawiłem.
    Pożyteczny jest również przycisk [Pisownia] ;) [adamas_nt]

    0 13
  • #2 17 Lip 2012 22:27
    gaskoin
    Poziom 38  

    Cześć, popraw proszę posta, używając znaczników

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
    zamiast code. Chodzi o to, żeby mieć 8 TextBoxów i po kliknięciu wyślij, żeby wysłały się one ciągiem ?

    --
    @adamas_nt- wybrałeś zły typ kodu ;P

    0
  • #3 17 Lip 2012 22:34
    konwalia_
    Poziom 7  

    C# - Visual Studio 08 TextBox-COM transmisja

    W tej chwili tak to wygląda jak na załączonym zdjęciu. A chodzi właśnie o to żeby te dane trafiły do TextBox'ów z prawej strony. Oczywiście transmisja ma być ciągła. Dziękuję za poprawki. ;)

    0
  • #4 17 Lip 2012 22:45
    gaskoin
    Poziom 38  

    Ważne jest w jakim formacie przychodzą dane. Dane są zakończone tabulatorem ?

    Tzn ramka danych jest taka?:

    x<nr>= <dana1><dana2>...<danax>\t ??

    Ważne jest to dlatego, że dane mogą przychodzić w zasadzie losowo i tak:

    W pierwszym evencie dostaniesz np. x<nr>= <dana1>
    W drugim: <dana2>...<danax>\t

    Więc jeśli format ramki jest jakiś sensowny to się będzie dało też i sensownie przeanalizować dane i na tej podstawie wrzucić je do odpowiedniego textboxa. Jeśli nie, to jest trochę więcej zabawy :)

    0
  • #5 17 Lip 2012 22:59
    konwalia_
    Poziom 7  

    To jest funkcja odpowiadająca za wysyłanie z uC poprzez RS-232 danych:

    sprintf(buf,"%d %d %d %d %d %d %d %d " ,Ix1,Iy1,Ix2,Iy2,Ix3,Iy3,Ix4,Iy4);

    Teraz tak wygląda 1023 1023...1023 ;) Wcześniej były jeszcze znaki \n oraz x1=... y4=...
    Sens chyba ma ;)

    0
  • #6 17 Lip 2012 23:27
    gaskoin
    Poziom 38  

    Ze screena wynika, że daną idą w stary sposób. Ale skoro są oddzielone spacją, to możesz spróbować czegoś takiego:

    1. Dodajesz sobie readonly kolekcje referencji na Textboxy, w kolejności takiej, w jakiej przychodzą dane. Jest to po to, żeby nie robić potem miliarda ifów żeby wpisać dane.

    2. Ponieważ dane mogą być pocięte i nie mają stałej długości, trzeba sobie w programie założyć bufor w postaci niestety kolekcji stringów, który będziemy analizowali.

    3. W funkcji odbioru danych odbieramy sobie tego stringa, tak jak jest to teraz, ale tu będzie ta różnica:
    - robimy splita na ' ', żeby uzyskać elementy oddzielone spacją
    - zapisujemy elementy do bufora, jeśli ostatni element jest pustym stringiem, to go pomijamy, jeśli nie jest pustym stringiem, tzn, że dane nam się podzieliły, mimo wszystko dodajemy go do bufora. Należy tu założyć jakąś flagę, że dane nam się pocięły i przy następnym odczycie należy dopisać pierwszy element jaki przyjdzie do ostatniego elementu w buforze (i oczywiście odpowiednio zmodyfikować flagę).
    - jeśli bufor ma tyle elementów (i nie ma flagi, że dane są pocięte) ile textboxów (lub więcej, co może się zdarzyć jak szybko popychasz dane), to jedziemy po textboxach (po to nam ta "mapa" z punktu 1 żeby nie robić w tym miejscu 8 ifów, czy kopiować kodu 8 razy) i jednocześnie po elementach w buforze, przypisując do texboxów elementy z bufora. Pamiętaj o wywaleniu elementów z bufora, które już wpisałaś, bo w przeciwnym przypadku zawsze będzie się wyświetlało to, co przyszło jako pierwsze, a bufor będzie rósł w nieskończoność :)

    Można też dane wpisywać na bieżąco, ale to wymaga trochę większej ekwilibrystyki.

    Może po przeczytaniu wyda Ci się to mega skomplikowane, ale jak do tego siądziesz, to się okaże, że w rzeczywistości wcale takie nie jest.

    0
  • #7 18 Lip 2012 10:33
    konwalia_
    Poziom 7  

    Wymiękam...;(( Będę musiała chyba założyć 3 nowe tematy;P
    Jak na razie nie mogę zrealizować nawet 1. punktu z Twojej sugestii. To musi być za trudne dla mnie ja jestem w c# zielona...;(

    A może w takim razie zrezygnować z tych 8 TextBoxów i użyć jednego, ale żeby dane w nim pojawiały się w 8 liniach i żeby ten textBox się nie scrollował. Czyli żeby te dane były "odświeżane" w tym samym miejscu.

    Czy jestem zrozumiała? ;)

    0
  • #8 18 Lip 2012 11:36
    gaskoin
    Poziom 38  

    czy to dla Ciebie za trudne? Punkt 1:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #9 18 Lip 2012 12:31
    konwalia_
    Poziom 7  

    Uwierz długo bym siedziała nad tym co napisałeś. Używałam C# do mało ambitnych zastosowań a tu nagle takie coś mam zrobić ;).

    Więc,

    error CS1518: Expected class, delegate, enum, interface, or struct

    pojawia się w linijce z:

    private readonly Collection<TextBox> m_TextBoxMap;

    To moja wina?:)

    0
  • #10 18 Lip 2012 14:10
    gaskoin
    Poziom 38  

    Tak, bo zamiast pomyśleć, to skopiowałaś cały kod.

    0
  • Pomocny post
    #11 20 Lip 2012 23:43
    pawelma17
    Poziom 9  

    Bez zbędnych kombinacji...

    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    0
  • #12 21 Lip 2012 11:43
    gaskoin
    Poziom 38  

    Jakbyś nie zauważył, to Twój kod nie obejmuje sprawdzania, która ramka kiedy przychodzi, jest to jedynie "przepisywacz wartości", a męka o której wspomniałeś, która zastępuje Twój kod wygląda tak:

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    Jakby zmienić format ramki to cały kod nie byłby taki "skomplikowany" i całość by była bardzo prosta.

    0
  • Pomocny post
    #13 21 Lip 2012 12:17
    pawelma17
    Poziom 9  

    Jak najbardziej się zgadzam, że moja propozycja nie jest idealna, ale " nie od razu Kraków zbudowano". Koleżanka się raczej uczy. Będzie chciała to skorzysta z obu propozycji.

    0
  • #14 21 Lip 2012 12:25
    konwalia_
    Poziom 7  

    Działa więc temat zamykam. Dziękuje za pomoc.

    0