Strona 1 z 2

odczyt danych z pliku konfiguracyjnego

: 13 sty 2012 13:38
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.

odczyt danych z pliku konfiguracyjnego

: 13 sty 2012 15:35
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

odczyt danych z pliku konfiguracyjnego

: 13 sty 2012 15:49
autor: Krzysztof Szewczyk
pokaz vi :)

Re: odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 12:08
autor: slav
Dodałam moje SubVI do zapisu konfiguracji do pliku.

odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 12:57
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 ;)

Re: odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 14:25
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 :)

Re: odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 15:19
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 19008 razy
FOR_good.gif
FOR_good.gif (4.68 KiB) Przejrzano 19008 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 19008 razy
Zamiast tego możesz zrobić tak:
GOOD.gif
GOOD.gif (4.43 KiB) Przejrzano 19008 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.

Re: odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 15:55
autor: slav
Dziękuję za cenne uwagi, postaram się je wprowadzić, by mój kod był lepszy :)

odczyt danych z pliku konfiguracyjnego

: 16 sty 2012 17:49
autor: Pitol
Jasne ;) Daj znać czy udało Ci się pokonać problem z Open Config Data.

Re: odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 13:39
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 ;)

Re: odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 15:16
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?

Re: odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 15:29
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ą).

odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 15:33
autor: Pitol
A wklej dokładnie ścieżkę, która wchodzi do bloczka Create File.

Re: odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 15:58
autor: slav
Probe daje: C:\Documents and Settings\Administrator\Desktop\sterowanie_bec\przebiegi\ef ...

Re: odczyt danych z pliku konfiguracyjnego

: 19 sty 2012 16:05
autor: Pitol
A zrób tak:
FileRead.gif
FileRead.gif (9.93 KiB) Przejrzano 18924 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 :)