odczyt danych z pliku konfiguracyjnego
odczyt danych z pliku konfiguracyjnego
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.
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.
odczyt danych z pliku konfiguracyjnego
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
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
- Krzysztof Szewczyk
- Posty: 37
- Rejestracja: 19 maja 2011 02:48
- Wersja środowiska: LabVIEW 2017
- Lokalizacja: Koszyce
- Kontakt:
Re: odczyt danych z pliku konfiguracyjnego
Dodałam moje SubVI do zapisu konfiguracji do pliku.
- Załączniki
-
- bec_konf_write.vi
- (63.99 KiB) Pobrany 511 razy
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
odczyt danych z pliku konfiguracyjnego
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 ;)

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 ;)
Re: odczyt danych z pliku konfiguracyjnego
No właśnie nie, jak widać w załączonym przeze mnie pliku, mam podpięte TRUE.musiałeś podpiąć stałą FALSE do wejścia Create File If Necessary
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

- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: odczyt danych z pliku konfiguracyjnego
Po pierwsze chciałbym przeprosić za to, że zwracałem się do Ciebie w formie męskiej
Końcówki mi umknęły...
Zatem:
ad.1.Oba załączone niżej przypadki działają tak samo 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. Zamiast tego możesz zrobić tak: 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.

Zatem:
ad.1.Oba załączone niżej przypadki działają tak samo 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. Zamiast tego możesz zrobić tak: 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.
Re: odczyt danych z pliku konfiguracyjnego
Dziękuję za cenne uwagi, postaram się je wprowadzić, by mój kod był lepszy 

- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
odczyt danych z pliku konfiguracyjnego
Jasne ;) Daj znać czy udało Ci się pokonać problem z Open Config Data.
Re: odczyt danych z pliku konfiguracyjnego
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 ;)
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 ;)
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: odczyt danych z pliku konfiguracyjnego
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?

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 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?
Re: odczyt danych z pliku konfiguracyjnego
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ą).
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
odczyt danych z pliku konfiguracyjnego
A wklej dokładnie ścieżkę, która wchodzi do bloczka Create File.
Re: odczyt danych z pliku konfiguracyjnego
Probe daje: C:\Documents and Settings\Administrator\Desktop\sterowanie_bec\przebiegi\ef ...
- Pitol
- Moderator
- Posty: 986
- Rejestracja: 19 lip 2007 00:00
- Wersja środowiska: LabVIEW 2019
- Lokalizacja: Kraków
Re: odczyt danych z pliku konfiguracyjnego
A zrób tak:
Nadal się będę upierał, że ta ścieżka nie istnieje
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
