odczyt danych z pliku konfiguracyjnego

Sprawy związane z interfejsem użytkownika - kontrolki, wskaźniki, wyświetlacze, wykresy oraz inne zagadnienia tego typu...
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Witam,

w moim programie zapisuję dane konfiguracyjne do pliku (i to ładnie działa). Jak chcę je wczytać, to też wszystko ładnie działa (tzn. się dobrze wczytuje), jest tylko jedna mała niedogodność. Sub VI do odczytu z pliku oparłam na przykładzie Read Configuration Settings File.vi z config.llb z Helpa. I gdy klikam na odczyt pliku, pojawia się okno dialogowe, gdzie muszę wybrać plik i jak go wybiorę, to się pojawia informacja (po angielsku), że plik istnieje i czy chcę go zastąpić. Wprowadza mnie to w konsternację, choć jak kliknę tak, to się plik ładnie wczytuje. Czemu pojawia się ta wprowadzająca w błąd informacja, skoro ja nie chcę pliku zapisać tylko wczytać? Nie jest to może bardzo istotne dla działania programu, ale irytujące.
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Ok, z tym problemem sobie poradziłam, wystarczyło w File Dialog ustawić Selection Mode na New.

Ale pojawi mi się następny problem, mianowicie jak zapisuję plik konfiguracyjny (do nowego pliku), to wyskakuje mi poniższy błąd. Natomiast jak nadpisuję, to działa. I ustawienie właściwego Selection Mode nie pomaga...

Error 7 occurred at Open/Create/Replace File in NI_LVConfig.lvlib:Load.vi->NI_LVConfig.lvlib:Open Config Data.vi->bec_konf_write.vi->ster_BEC.vi

Possible reason(s):

LabVIEW: File not found. The file might have been moved or deleted, or the file path might be incorrectly formatted for the operating system. For example, use \ as path separators on Windows, : on Mac OS, and / on Linux. Verify that the path is correct using the command prompt or file explorer.
=========================
NI-488: Nonexistent GPIB interface.

C:\Documents and Settings\Administrator\Desktop\sterowanie_bec\przebiegi\ef
Awatar użytkownika
Krzysztof Szewczyk
Posty: 37
Rejestracja: 19 maja 2011 02:48
Wersja środowiska: LabVIEW 2017
Lokalizacja: Koszyce
Kontakt:

odczyt danych z pliku konfiguracyjnego

Post autor: Krzysztof Szewczyk »

pokaz vi :)
Obrazek
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Dodałam moje SubVI do zapisu konfiguracji do pliku.
Załączniki
bec_konf_write.vi
(63.99 KiB) Pobrany 455 razy
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

Powiem tak: u mnie działa :) Analizując zawartość funkcji Open Config Data.vi, która zwraca Ci błąd wynika, że musiałeś podpiąć stałą FALSE do wejścia Create File If Necessary. A ponieważ z File Dialog ustawiłeś typ pliku na New, więc bloczek Open Config Data nie może znaleźć nieistniejącego pliku. Sprawdź ustawienia jeszcze raz.

Co do samego VI to kilka sugestii:
1. Po co Ci pętle FOR, które kręcą się tylko raz? To nie ma sensu (żadnych wejść indeksowanych nie używasz)
2. Pętla FOR z pętli FOR (te duże). Nie ma potrzeby jednocześnie podpinać wejścia LOOP COUNT oraz używać wejść z indeksowaniem włączonym. Wykonana zostanie mniejsza ilość iteracji. Nie wiem czy sobie z tego zdajesz sprawę.
3. Można by to trochę posprzątać i ogarnąć lepiej ;)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

musiałeś podpiąć stałą FALSE do wejścia Create File If Necessary
No właśnie nie, jak widać w załączonym przeze mnie pliku, mam podpięte TRUE.

ad.1 Wiem, że nie używam wejścia indeksowanego. To jakiej powinnam użyć pętli? Jakiejś muszę, żeby mi Unbundle zadziałało.
ad.2 W ten sposób chciałam ograniczyć (poprzez podpięcie do N) ilość obrotów pętli, żeby mi program nie wczytywał danych z pustych kolumn z danymi, bo zdaje mi się że tak robi. Ale fakt, sprawdzę to sobie.
ad.3 Pewnie by można, ale zrobiłam najlepiej jak potrafiłam. A moje umiejętności programistyczne zdecydowanie nie są wielkie. Jedyne co mi przychodzi do głowy co może być lepiej, to popodpisywanie co jest czym :)
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

Po pierwsze chciałbym przeprosić za to, że zwracałem się do Ciebie w formie męskiej #-o Końcówki mi umknęły...

Zatem:
ad.1.Oba załączone niżej przypadki działają tak samo
FOR_bad.gif
FOR_bad.gif (5.54 KiB) Przejrzano 15249 razy
FOR_good.gif
FOR_good.gif (4.68 KiB) Przejrzano 15249 razy
Nie korzystasz z indeksacji wejść, zatem pętla jest zbędna, skoro pracuje tylko raz. Bloczki Unbundle By Name nie mają nic wspólnego z samą pętlą.

ad.2. To tu tego nie rozumiem. Indeksowane wejście spowoduje, że odczytane zostanie tyle elementów, ile jest w tablicy. Ani więcej, ani mniej. Więc jeśli wartość kontrolki Liczba Kolumn zgadza się z rozmiarem tablicy to nie ma sensu używać wejścia Loop Count.

ad.3. Co do sprzątania to np. zamiast oddzielnie każdy klucz ładować do pliku możesz złączyć kilka kluczy, które mają coś wspólnego w jedną tablicę i wrzucać je w pętli.
BAD.gif
BAD.gif (7.56 KiB) Przejrzano 15249 razy
Zamiast tego możesz zrobić tak:
GOOD.gif
GOOD.gif (4.43 KiB) Przejrzano 15249 razy
Zawartość dużej pętli możesz podzielić na funkcje, które zamknąć możesz w subVI. Staraj się nie prowadzić drutów z prawej do lewej... Ogólnie staraj się utrzymać diagram na jednym ekranie. Komentowanie wybranych części diagramu również nie jest złym pomysłem :)

Co do samego problemu z programem to załóż sondę (probe) na drucie wychodzącym z Selected Path z bloczka File Dialog. Jeśli ścieżka jest prawidłowa to możesz jeszcze spróbować wejść do Open Config Data.vi a w nim do Load.vi i włączyć żarówkę. Następnie odpal cały program (bec_konf_write) i zobacz co się dzieje w tym Load.vi.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Dziękuję za cenne uwagi, postaram się je wprowadzić, by mój kod był lepszy :)
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

Jasne ;) Daj znać czy udało Ci się pokonać problem z Open Config Data.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Powiem tak: częściowo mi się udało, tzn. już mi tworzy i zapisuje nowy plik. Musiałam wejść do Load.vi i tam przy Create File dać opcję "replace or create", bo było włączone "open". Tylko mam obiekcje do funkcji "replace". Bo ja bym rozumiała, że ona działa tak, że czyści plik i zapisuje od nowa. Tymczasem ona robi dziwne rzeczy, jakoś mi dopisuje do pliku (jest inna kolejność danych niż jakbym taki plik stworzyła od nowa), jeśli nowa konfiguracja zawiera np. więcej linii cyfrowych lub nie wykasowuje odpowiednio, jeśli nowa zawiera mniej. Ale po wczytaniu takiego pliku jakoś to daje dobre efekty. Jest to co najmniej tajemnicze. Wolałabym jednak, żeby mi uczciwie ten plik zapisywało w puste miejsce od nowa.

I jeszcze jedna niefajna rzecz jest. Ja to zmieniłam w tym Load.vi, a tego Open Config Data. vi używam jeszcze do odczyty z pliku. I tam z kolei powinno być ustawione (w Load) "open". A co ustawie, to się zmienia w obu miejscach naraz... Co z tym zrobić? Jakieś to takie niepełnosprytne... albo ja ;)
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

No to powiem Ci tak: NIE WOLNO ZMIENIAĆ BILBIOTECZNYCH FUNKCJI !!! :)

Problem jest potem taki, że jeśli używasz zmienionej funkcji w innym miejscu, to tam też się zmieni i nie wiesz jak to będzie działać. A potem pójdziesz na inny komputer i tam będzie po staremu (bez zmian) i też nie będzie działać.

W ogóle moim zdaniem, to ten pierwszy Twój błąd, o którym pisałaś wynikał z nieprawidłowej ścieżki do pliku. Całość działa w następujący sposób:
1. Jeśli ścieżka wskazuje na istniejący plik to po prostu go otworzy i zapisze do niego
2. Jeśli ścieżka wskazuje na nieistniejący plik to zostanie on stworzony pod warunkiem, że cała ścieżka (wyłączając nazwę pliku) jest poprawna! Jeśli wpiszesz ścieżkę np. C:\jeden\plik.txt a katalog "jeden" nie istnieje to program zwróci Ci właśnie błąd o którym mówisz.

W ogóle wciąż mi ciężko pojąć, że to u Ciebie nie działa :) W końcu masz tam File Dialog, w którym nie da się ustawić złej ścieżki... ech...

W drugim poście napisałaś wkleiłaś opis błędu. Jest tam ścieżka: C:\Documents and Settings\Administrator\Desktop\sterowanie_bec\przebiegi\ef. Czy jest ona prawidłowa?
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Tak, oczywiście że jest prawidłowa, ja jej nie wpisuję z ręki tylko wybieram w takim windowsowym okienku, nie wiem jak ono się zwie. Oczywiście nie ma tylko tego ostatniego członu, który jest nazwą pliku, który ma zostać stworzony. I zostanie, jeśli zmienię biblioteczną funkcję ;) Założyłam też probe przed tym Open Config Data.vi jak sugerowałeś i ta ścieżka tam sobie szła po drucie. Wykrzaczało się na bloczku Create File w Load.vi (obserwowałam żarówką).
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

A wklej dokładnie ścieżkę, która wchodzi do bloczka Create File.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
slav
Posty: 35
Rejestracja: 18 gru 2009 16:09
Wersja środowiska: LabVIEW 2009

Re: odczyt danych z pliku konfiguracyjnego

Post autor: slav »

Probe daje: C:\Documents and Settings\Administrator\Desktop\sterowanie_bec\przebiegi\ef ...
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: odczyt danych z pliku konfiguracyjnego

Post autor: Pitol »

A zrób tak:
FileRead.gif
FileRead.gif (9.93 KiB) Przejrzano 15165 razy
Użyte bloczki to Strip Path oraz Check If File/Folder Exists. Oba z palety File I/O (ten drugi jeszcze głębiej w Advanced).

Nadal się będę upierał, że ta ścieżka nie istnieje :)
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
ODPOWIEDZ