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

Program do przekonwertowania zapisu TXT do obsługi sterownika dzwonów

Wiesław19 23 Lut 2012 10:32 4174 29
  • #1 23 Lut 2012 10:32
    Wiesław19
    Poziom 10  

    Proszę o pomoc w napisaniu programu do sterownika dzwonów. Wpisywanie programów z palca jest bardzo pracochłonne.

    Przykładowy program załączenia i wyłączenia dzwonów 2012.01.01-2012.01.01 godz. 12.00, czas trwania 2 min, dzwon C, dzwonienie przez 7 dni w tygodniu (tak wygląda zapis w pamięci zewnętrznej i to co mi udało się ustalić przez zmiany wartości nastaw)
    41 [01 D4 C0] [01 D5 25] [01 D5 25] [7F] [03] [00 78] 01 FF

    41 - nie wiem jaką funkcje spełnia w każdym zapisie progamu jest wartością stałą
    [01 D4 C0] - godzina włączenia 12:00:00
    [01 D5 25] - data od kiedy załącza 120101 jest domyślnie rok 2tyś, miesiąc, dzień
    [01 D5 25] - data do kiedy załącza 120101
    [7F] - dzień tygodnia
    [03] - dzwon 01 - A, 02 - B, 03 - C
    [00 78] - czas trwania w sekundach
    01 - stan 00 - 0 lub 01 - 1 jest to puste nic nie obsługuje
    FF - nie wiem za co odpowiada też jest wartością stałą

    dni tygodnia zaznaczone ( 1- poniedziałek, 2 - wtorek, 3 - środa, 4 - czwartek itp.) odpowiada to danym w komórce
    1234567 - 7F
    123456 - 3F
    12345 - 1F
    1234 - 0F
    123 - 07
    12 - 03
    1 - 01
    brak zaznaczenia dnia - 00
    1 - 01
    2 - 02
    3 - 04
    4 - 08
    5 - 10
    6 - 20
    7 - 40

    Proszę o pomoc w napisaniu programu który by w całości przekonwertował linie zapisane w pliku txt z zawartością np:

    41 120000 120101 120101 1234567 03 120 01 FF
    41 110000 120101 120101 123456 02 60 01 FF
    na zapis poniżej
    41 01D4C0 01D525 01D525 7F 03 0078 01 FF
    41 01ADB0 01D525 01D525 3F 02 003C 01 FF

    może on zapisywć np. w formacie HEX

    Proszę o wskazówki od czego zacząć i jakim programem najlepiej to zrobić.

    0 29
  • #2 23 Lut 2012 20:30
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Temat mnie zainteresował, lubię takie łamigłówki.

    1) Według mnie, pierwsza liczba "41" to jest litera "A" duże A (wiem, "masło maślane") i może oznaczać append (okien czasowych czyli ustawień dzwonów może być więcej...) ale to tylko moja sugestia z racji tego, że jest to dla mnie nowość. Sprawdź to.
    2) godzina: jeśli zapis pod koniec Twojego postu jest prawidłowy - sprawa trywialna: liczba 120000 przekonwertowana na liczbę typu int (pod warunkiem, że typ int ma 4 bajty) odpowiada zapisowi w bajtach poniżej (01D4C0).
    3) data: jak wyżej.
    4) Prosiłbym Cię o wygenerowanie w podobny sposób innych godzin i dat w ilości 3-4 żebym mógł zweryfikować tok mojego myślenia - sposób konwersji godziny i daty na zapis binarny przy czym prosiłbym o uwzględnienie lat zwykłych i przestępnych i miesiąca lutego 28/29 dni
    5) Dni tygodnia to po prostu bity w bajcie na kolejnych pozycjach i tak: bit 1 to poniedziałek, bit 2 wtorek itd
    stąd: poniedziałek = 01, wtorek = 02, środa = 04 itd.
    6) Język programowania użyty w celu stworzenia ww programu jest serdecznie obojętny; osobiście używam języka "C" i stosuję darmowy kompilator Pelles C.

    0
  • #3 24 Lut 2012 20:21
    Wiesław19
    Poziom 10  

    Wartości daty i godziny włączenia i czas trwania przeliczałem konwerterem DEC to Hex to mi się dało ustalić, nie wiem jak konwertować zapis dni w których jest aktywny, są tam kombinacje siedmiu dni. Dzwon może się uruchamiać np: każdego dnia przez cały tydzień o tej samej godzinie jak sie wpisze wartości 1234567 (każda cyfra oznacza dzień tygodnia), lub np: we wtorek i czwartek wtedy numerycznie będzie 2 4 ale jak to konwertować i czym na zapis zrozumiały przez sterownik. Wyżej podałem to co mi się z palca udało wprowadzić i odczytać jak to zapisało.

    Aby może troszkę rozjaśnić

    np dzień: 2012 - 02 - 05 to 120205 a teraz potratowałem kalkulatorem DEC na HEX otrzymujemy zapis 01D58D rok 2tyś nie jest brany pod uwagę jest domyślny w sterowniku tak mi się wydaje. Kalendarz znajduje się w sterowniku jest od 2000 do 2999 r.

    np: godzina uruchomienia 11.00.00 to 110000 i pod kalkulator i otrzymujemy 01ADB0

    W taki sposób można przeliczać każdą datę i godzinę, oraz czas trwania.

    Programy można do sterownika wgrać przez kartę która jest na pamięci ATMLH820 32C.

    Dodałem plik z przykładowymi programami są one zapisane w górnej części a na dole nie wiem co to jest, może dane startowe dla sterownika. Są zawsze identyczne obojętnie ile jest programów i jakie.

    0
  • Pomocny post
    #4 25 Lut 2012 21:02
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Co do konwersji dni tygodnia, to w pliku PLIK.TXT pole dni tygodnia (pole 5 u Ciebie) musisz stworzyć coś w rodzaju kompilatora (analizatora składniowego) ale nie przerażaj się, w dalszej części opisu zobaczysz, że nie taki diabeł straszny jak go malują :) Najpierw wyobraź sobie postać wiersza i w oparciu o niego stwórz projekt analizatora składniowego (podstawa). Nie zapomnij o obsłudze błędów składniowych tak żebyś wiedział gdzie tkwi błąd i jaki jest jego rodzaj.
    Proponuję np taki zapis:
    nn; nn; nn; nn; [po, wt, sr]; nn; itd
    W oparciu o ten mój kaprys popełniłem zarys prostego analizatora składniowego (stąd moja zwłoka w odpowiedzi na forum), analizujący wiersz a w szczególności pole dni tygodnia, który to napisałem w języku C i pozwoliłem sobie przedstawić na forum.
    Przyjąłem następujące założenia:
    - pola oddzielone są od siebie znakami ';' (średnik);
    Dalsza część założeń dotyczy szczegółów składniowych pola "dni tygodnia":
    - pole dni tygodnia otoczone jest nawiasami kwadratowymi (początek '[', koniec ']') i traktowane jest składniowo jako jedno pole. W konsekwencji:
    - identyfikatory (dni tygodnia) zawarte są pomiędzy ww nawiasami i traktowane są jako składniowa całość; i dalej:
    - dni tygodnia oddzielone są spacjami lub przecinkami;
    - nazwy dni tygodnia pisane są bez polskich liter;
    - litery małe i odpowiadające im duże, traktowane są jako takie same;
    - kolejność dni tygodnia jest obojętna;
    - nazwy dni tygodnia mogą być pełne (max 16 znaków), jednak dla niniejszego analizatora znaczące są tylko dwie pierwsze litery;
    Błędy:
    - brak otwierającego nawiasu klamrowego ' [ ' - błąd;
    - niedokończony wiersz lub brak zamykajacego nawiasu klamrowego ' ] ' - błąd;
    - nieznany dzień tygodnia - ostrzeżenie;

    Dla sprawdzenie poprawności działania stworzonego przeze mnie ad hoc analizatora ( a właściwie jego szkieletu) utworzyłem plik tekstowy "dzwony1.txt". Jego zawartość wygląda tak:

    41; 120000; 120101; 120101;[pon, wto, sro, czw, pia, sob]; 03; 120; 01; ff

    A to program analizatora:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Pole 6, 7, 8 nie są w powyżej zaprezentowanym programie analizowane, ale nic nie stoi na przeszkodzie...
    Po drodze jest jeszcze kilka innych niuansów, np to, że liczba int mieści się w 4 bajtach, a Twój sterownik zapisuje na 3 bajtach (data, godzina) zatem trzeba wziąć pod uwagę przy ekspedycji danych.
    PS Prosiłbym Cie o przesłanie plików w ZIP a nie w RAR. (Coś mi się uwaliło...)

    0
  • #5 26 Lut 2012 13:24
    Wiesław19
    Poziom 10  

    Tutaj jest plik z obecnymi ustawieniami dzwonów.
    Prosiłbym o jakąś przystępną lekturę do tego kompilatora Pelles C, gdyż nie mam zielonego pojęcia o pisaniu programów.
    Datę, godzinę trzeba, aby konwertował z DEC (113000) w zapis HEX ( 01B968) wtedy bedzie 3 bajty.

    0
  • #6 27 Lut 2012 21:06
    Krzysztof Gustaw
    Poziom 23  

    Witam ponownie!
    Kompilator Pelles C można sobie ściągnąć za darmo z netu. Gorsza sprawa, że nie znasz się na pisaniu programów... Np czy rozumiesz (z całym szacunkiem) o co chodzi w wyrażeniu:
    x = x + 1 ?
    Jeśli chciałbyś mieć jakiekolwiek pojęcie (tu chodzi o język C), to polecałbym książkę "język C" B. Kerningham, D. Ritchie, ale jest mnóstwo języków programowania np Pascal, Basic, C, C++ itd... ale jest to zbyt ogólny temat. Moja rada (jeśli chcesz zacząć pisać własne programy np tego rodzaju) poznaj kilka języków (jest ich multum) i wybierz ten, który Ci najbardziej będzie odpowiadał. Nie od razu Kraków zbudowano!
    Wracając do naszych baranów:)
    Udało mi się rozpakować przesłany przez Ciebie plik, ten z rar, i zacząłem pisać kompletny programik dla Ciebie...
    Czy ten program ma się wykonywać pod linuksem czy windows w trybie konsoli a może windows w trybie komend albo stary DOS?
    Nie jestem specjalistą od sterowników...

    0
  • #7 27 Lut 2012 22:13
    Wiesław19
    Poziom 10  

    Program se ściągnolem ale jestem zupełnie zielony, trochę czytałem ale nie bardzo coś z tego rozumiem. Programik chcę pod XP.
    Wczoraj zacząłem pisać w EXEL-u już jestem prawie na ukończeniu, wszystkie wartości mi już przelicza, zostało mi tylko jeszcze wkleić komendy z przeliczenia dni w których ma dzwon dzwonić. To co zrobiłem ułatwia sprawę, ale trzeba będzie kopiować z EXEL-a i wklejać do icprog i wtedy wgrać dopiero do pamięci a potem do sterownika.
    Tak to wygląda. Tam na drugiej zakładce jest przeliczanie dni tygodnia jeszcze to musze połączyć.

    0
  • #8 28 Lut 2012 21:26
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    No, to teraz chyba jestem w domu! Wiem, że ten programik ma działać pod windą.
    Przyznam, że o EXCEL nie pomyślałem - Fajne rozwiązanie, w sumie to też jakby "język programowania".
    No, ale przystępuję do pisania tej aplikacji windows...
    Aha, numer dzwona wolisz oznaczać liczbą czy literą?

    0
  • #9 02 Mar 2012 00:31
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Napisałem programik konwertujący dla Ciebie pod windows, wypróbuj. Nazwa pliku wdzwony.exe powinien działać o razu, nie definiowałem żadnej ikonki. Jesli próbować go zmienić pod pelles c, to po otwarciu Pelles C wybierz z menu file, potem open i wybierz plik wdzwony.c Otworzy Ci się ten plik. Potem wybierz z menu "project" i podmenu "build", "rebuild" albo "compile" i pokaże Ci się w całej okazałości.
    Aha, nie działa (jeszcze) przycisk "zmień"

    0
  • #10 10 Mar 2012 21:42
    Wiesław19
    Poziom 10  

    Przepraszam że się nie odzywałem, ale tydzień mnie nie było i nie miałem jak sprawdzić. Coś mi się programik nie otwiera.:(

    0
  • Pomocny post
    #11 11 Mar 2012 21:23
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Mam pytanko:
    Otwiera Ci się okno główne? To gdzie na listwie tytułowej jest nazwa "Dzwony" a pole jest puste?
    Jeśli tak, to kliknij w obrębie tego białego pola a pojawi się właściwe okienko dialogowe. Oczywiście, programik jest jeszcze niedokończony, ale jeśli Ci się ten styl podoba, to możemy go rozwijać, zwłaszcza w obsłudze plików.

    Czyli:
    Po skopiowaniu i rozpakowaniu kliknij na ikonkę pliku wykonywalnego z nazwą "wdzwony". Wtedy powinno otworzyć Ci się puste okno. Nastepnie kliknij w obrębie tego okna lewym przyciskiem myszki a pojawi się właściwe okienko dialogowe.
    Wypróbowałem to pod windows Vista i pod windows 98. Zadziałał mi w obu środowiskach. Przy okazji wypróbuję go w XP-ku

    0
  • #12 12 Mar 2012 21:53
    Wiesław19
    Poziom 10  

    Tak otwiera się. Błąd jest w przeliczaniu godziny załączenia i dacie początkowej i końcowej. Nie przelicza DEC na HEX (dla sprawdzenia dorzucam programik który przelicza odwrotnie) np: 120000 ma być 01D4C0. Godzina, czy data to musi być brane jako całość. Pozostałe wartości wydają się być dobre. Jeszcze jedna sprawa maksymalna liczba linii to jest 256 w tym jest 6 linii końcowych stałych. Trzeba aby domyślnie już one były. Sprawdzić muszę czy są nawet przy braku programów, ale zauważyłem że są zawsze takie same bez względu na ilość wpisanych programów
    55 555555 555555 555555 55 55 5555 55 55
    43 040100 016500 555555 55 55 5555 55 55
    43 000616 051E55 555555 55 55 5555 55 55
    43 000616 010203 040219 55 55 5555 55 55
    43 010002 000300 040006 16 06 0106 03 55
    55 434CFF FFFFFF FFFFFF FF FF FFFF FF FF

    0
  • Pomocny post
    #13 13 Mar 2012 23:51
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Poprawiłem, ale sugeruję podział godzin i dat na trzy pola. W przyszłości, w miarę rozwijania programu łatwiej będzie kontrolowac ewentualne błędy np dzień 32 marca, ale oczywiście można sprowadzić to do jednego pola. Posyłam poprawiony plik wykonywalny, sprawdź.

    0
  • #14 14 Mar 2012 07:44
    Wiesław19
    Poziom 10  

    Jest taki myk że godznę (godziny, minuty, sekundy) i date (rok, miesiąc, dzień) programator odczytuje jako całość. Jeśli mu się rozdzieli wtedy wychodzą głupoty. Do przeliczenia musi być brana cała ta wartość.
    np: 120000 (godzina) to 01D4C0 (i to jest zrozumiałe dla programatora który wykonuje proces załączenia) a jeśli zastosujemy oddzielne przeliczanie wpisujemy godz. 120000 daje nam 0C0000 poddając tę wartość pod kalkulatr HEX - DEC otrzymujemy 786432, nie jest to naszą godziną: godzina 12, minut 00, sekund 00.
    Myśłe że sie rozumiemy.

    0
  • #15 14 Mar 2012 08:04
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Z tymi bajtami dat i czasu, wezmę to pod uwagę w trakcie tworzenia funkcji spedycji danych. Czy mogę zrobić to w ten sposób ?:
    Dodaję do planszy nowe okno edycyjne a potem metodą "kopiuj/wklej" wklejasz całość do programu zapisującego dane do sterownika?
    Po prostu jeszcze nie potrafię wysyłać danych na ten konkretny port.
    Oczywiście te nagłówki, lista ustawień, wypełnienie pustych miejsc zerami i dodanie "ogona" będzie wzięte pod uwagę.
    A tak w ogóle, czy forma planszy dialogowej w takiej postaci Ci odpowiada?
    Ostatnio skupiałem się na usuwaniu błędów. Jeśli teraz będzie w porządku (bez błędów), to zacznę teraz tworzyć moduł spedycji danych.
    Aha, podświetlenie elementu listy automatycznie aktualizuje pola. Zrobiłem też, że kolejne pozycje dopisywane są na koniec listy a nie na początek jak do tej pory. Kolejny plik już tak ma.

    0
  • #16 14 Mar 2012 13:34
    Wiesław19
    Poziom 10  

    Jeśli chodzi o mnie to ja widzę to tak:
    To co stworzyłeś jest jak najbardziej bardzo dobre i mi się podoba i to że kolejna dopisywana linijka idzie na dół choć nie jest to konieczne. Trzeba tylko poprawić przeliczanie dat i godziny, to co wspominałem wyżej, zrobić ogon (te dane stałe pewnie są potrzebne do pracy sterownika) i wypełnianie zerami między ogonem a ostatnią linijką wpisanego programu. Tych linijek łącznie z ogonem musi być 256 nie więcej i nie mniej. Teraz otrzymaną listę programów, żeby można było zapisać do pliku z rozszerzeniem BIN lub HEX. I to by było wszystko co mi jest potrzebne. Wtedy ja mam już gotowy wsad, który wgrywam do pamięci zewnętrznej (tu już mam wszystko przygotowane połączenie jej z komputerem i wgraniem wsadu) i podłączam ją do sterownika który pełni funkcję wykonawczą (to też mam opanowane). Ogólnie mówiąc brakuje mi kalkulatora który tworzysz, aby te dane przeliczał i zapisał do pliku BIN lub HEX, dobrze by było gdyby mógł też odczytać plik i wyświetlić dane aby można było dokonać zmian.

    Mój kalkulator zrobiony w OpenOffice wygląda tak. Należy go otwierać przez ten program bo z Microsoft Office Excel 2003 coś jest nie tak nie czyta formuł stworzonych przez OpenOffice.

    0
  • #17 19 Mar 2012 22:33
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Udało mi się doprowadzić do poprawnej konwersji dat i czasu i rozbudowałem program o możliwość czytania z pliku i tworzenia pliku danych (jak na razie, w obydwu przypadkach, tylko w formie binarnej) ale jeśli chcesz, mogę rozszerzyć o format INTEL HEX. Wziąłem pod uwagę również przestrzeń adresową. Miejsc na wpisy jest 250, bo pozostałe 80 zajmuje "ogon", co spowodowało ograniczenie liczby wpisów oraz fakt wprowadzenia przeze mnie dodatkowej informacji nad oknem listy i oczywiscie stosownym ograniczeniem ilości wpisów na liście.
    Zapis/odczyt do/z pliku odbywa się w nastepujący sposób: Jeśli masz utworzone jakieś dane na liście to wybierz przycisk "zapisz do pliku..." wtedy otworzy się kolejna plansza dialogowa. Teraz w polu edycyjnym wpisujesz nazwę pliku i potwierdzasz przyciskiem "zapisz" Zostanie utworzony pełny plik (te pierwsze 152 bajty, potem Twoje ustawienia (max 250 wierszy) i na końcu 80 bajtów "ogona"). Na dysku otrzymasz plik binarny (na razie jedyny format...) To samo z odczytaniem pliku. Klikasz przycisk "Czytaj z pliku" i jeśli nie pomylisz nazwy to wczytane zostaną bajty początkowe i końcowe (które są dla Ciebie ukryte) a jeśli sa jakieś nastawy to zostana dopisane kolejno w oknie listy a ilość ich zostanie policzona a nastepnie wyswietlona w formie tekściku nad oknem listy. Te dane możesz modyfikować, sprawdzać, dodawać, usuwać...
    Obsługa listy:
    "Dodaj do listy" - jeśli nie jest zaznaczysz żadnej pozycji na liście to nowe nastawy zostaną dopisane na końcu listy, w przeciwnym wypadku - przed zaznaczonym elementem.
    "Usuń z listy" - usuwa zaznaczoną pozycję i jednoczesnie usuwa zaznaczenie
    "Zmień" - zastępuje poprzednią pozycję nowymi nastawami i jednocześnie usuwa zaznaczenie.
    Wskazówka: Jeśli chcesz usunąć zaznaczenie w celu dopisania nowej nastawy na końcu listy, to podświetl dowolny element a następnie, nie zmieniając ustawień, wybierz przycisk "Zmień".
    Najważniejsze: Ta wersję już chyba możesz spróbować użyć w praktyce :?: ale najpierw ścągnij sobie ze sterownika jego obecną postać.
    Wypróbuj i czekam na dalsze sugestie ewentualne błędy do korekty :)

    Pozdrawiam!
    P.S.
    Pytanko: Czy sterownik musi mieć wgrywany cały program czy może też wybiórczo pod określone adresy? Bo na razie wgrywa całość (4kB z hakiem?)

    0
  • #18 21 Mar 2012 19:33
    Wiesław19
    Poziom 10  

    Jeśli chodzi o przeliczanie jest wszystko OK. Problem jest z zapisem pliku jego rozszerzenie nie jest dla mnie znajome. Już wyjaśniam o co chodzi. Tym programikiem co stworzyłeś chcę otrzymać wsad ( przykładowy podałem w załączniku "dzwony kościol"). Następnie przy pomocy programu Pony program wgrać go do pamięci a następnie pamięcią przerzucić do sterownika. A więc potrzebuje pliku który będzie zrozumiały dla tego programu zobacz jakie rozszerzenia on odcztuje. To co uzyskamy na Twoim kalkulatorze po przeliczeniach to samo mamy otrzymać po otwarciu tego zapisanego pliku w PONY PROGRAM oczywiście z ogonem który u Ciebie jest nie widoczny.
    Jeśli chodzi o wgrywanie wybiórcze to myślę żę nie da się tego zrobić, wgrywa się cały wsad programowy na raz. Załóżmy mamy wgrane 10 programów zajmuje to adres 000000 do 000090 ( popatrz w pony program ) a dalej są wartości "0" i na końcu ogon, jeśli teraz wgramy program od 000000 do 000040 dalej są zera więc wykasuje nam wcześniejsze wartości i zapisze zera. Tak mi się wydaje a jak jest tego do końca nie wiem.

    0
  • #19 21 Mar 2012 20:59
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Zasugerowałem się plikiem "test" dostarczonym przez Ciebie. Wyszło mi, że plik ten jest plikiem binarnym i taką obsługę na "dzień dobry" stworzyłem. Po Twoim ostatnim poście zerknąłem do dokumentacji dostarczonej przez Ciebie i myślę, że tworzony przez nas program na chwilę obecną produkuje/czyta dane w formacie "raw binary". Wypróbuj. Teraz zabieram się za format INTEL HEX. Jeśli "raw binary" wypadnie pozytywnie u Ciebie, dokonam stosownych zmian w opisie przycisków obsługujących zapis/odczyt do/z pliku.
    Jakby się udało, byłoby fajnie... Potem to już kosmetyka :)
    Ale zaniepokoiło mnie jedno: Mianowicie, jeden z plików który dostarczyłeś mi w ostatnim zestawie, mianowicie plik "dzwony kosciol.hex" zawiera opisy działania dzwonów, ale zawartość wiersza wynosi:
    :100000004101D4C001AE1501D6557F03009601FF12
    a nie
    :100098004101D4C001AE1501D6557F03009601FF78
    co sugeruje, że dane zaczynają się od adresu 0, i to mnie niemile zaskoczyło... Format intel hex dość dobrze znam... Innymi słowy, pominięty jest nagłówek, co rozbija mój tok myślenia w zakresie eksportowania/importowania danych... Ale na razie wypróbuj moje wypociny w zakresie zapisu/odczytu plików "raw binary"
    A skoro plik HEX został wyprodukowany przez pony w ten sposób, zastosuję się do tego.
    Przesłany przez Ciebie program pony nie działa na moim kompie...

    0
  • #20 21 Mar 2012 22:26
    Wiesław19
    Poziom 10  

    Zobacz źle zapisuje wartości nie od adresu "00", i na początku wrzuca jakieś śmieci wygląda to na dane o pamięci. Nawet jak sie nie wprowadzi danych to plik po zapisaniu powinien być czysty tylko na końcu z ogonem, a tu są jakieś dane. Otwórz go w pony to zobaczysz o co chodzi. Każda linijka to ma być jeden program i od początku. Jeśli chodzi o rodzaj pliku jest mi obojętne czy hex czy bin. Pony czyta ich więcej zobacz jakie wtedy może będzie łatwiej coś dobrać. Pony może nie działać dlatego że nie został zainstalowany a tylko skopiowany. Dorzucam instalkę.
    I jeszcze jedna sprawa którą teraz zobaczyłem żle umieszcza ogon powinien być od adresu 000FAO-0 a jest od 001030-9 odpal pony dwa razy i wczytaj mój plik i plik który otrzymasz z kalkulatora i zobaczysz o co mi chodzi.

    0
  • #21 25 Mar 2012 19:39
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Zmodyfikowałem program na razie w taki sposób, że zapisuje dane do pliku w formacie INTEL HEX a czyta w formacie binarnym ale pracuję nad tym, żeby tez wczytywał w formacie HEX, żeby to miało ręce i nogi. W poprzednim formacie (binarnym) to problem związany jest prawdopodobnie z sumą kontrolną. W formacie HEX który właśnie stworzyłem (na razie tylko dla zapisu) wypisuje chyba prawidłowo. Sprawdziłem to w PONY który otrzymałem od Ciebie i czyta poprawnie, co sprawdziłem wczytując program do pony (przeczytał prawidłowo), nastepnie celowo zniekształciłem dane w jednym z wierszy aby NIE ZGADZAŁA się suma kontrolna i ponownie wczytałem do pony (w tym przypadku wypisał "cuda"), więc chyba teraz kalkulator działa w miare poprawnie...
    W formacie binarnym raczej na pewno są zapisywane jakies dane kontrolne (chyba w nagłówku) ale na razie nie jestem w stanie przeanalizować. Pomogłoby mi kilka różnych nastaw w formacie raw binary abym mógł przeanalizować.
    Ale jeśli zadziała w HEX, byłoby fajnie...
    Jak na razie:
    Obecna przesłana wersja czyta w formie binarnej a zapisuje w formacie HEX

    0
  • #22 26 Mar 2012 14:34
    Wiesław19
    Poziom 10  

    Może być zapis hex mi to nie przeszkadza. Widze że raczej dobrze przelicza i zapisuje. Później się przyjrze bardziej przeliczaniu i wgram kilka programów z tego kalkulatora i zobacze co się bedzie działo. Dobrze by było jakby się udało zrobić aby mógł też odczytać ten plik co zapisał.

    0
  • #23 26 Mar 2012 21:43
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    W tej wersji niniejszy program już zapisuje i czyta pliki w formacie HEX. Jeśli będzie działał zgodnie z Twoim życzeniem, to wezmę się za wprowadzanie dodatków takich jak kontrola poprawności wprowadzania dat i czasu, wykrywanie zdublowanych wierszy (?) itp. Oprócz pliku wykonywalnego posyłam pliki źródłowe. Plik zasoby1.txt, musisz zmienić nazwę tego pliku na zasoby1.rc, żeby był rozpoznawany przez kompilator jako plik zasobów. Możesz go przeglądać i modyfikować zwykłym edytorem tekstu. Podobnie wdzwony.c W tym bowiem pliku (zasoby1.rc) jest opis wyglądu planszy dialogowej, który trzeba dołączyć w trakcie kompilacji. Plik wdzwony.c jest plikiem źródłowym napisanym w języku C. Może będziesz chciał się pobawić, przejrzeć ze znajomymi programistami, zmienić itd...
    Poprawiłem w programie procedurę zapisu i odczytu. Już nie zamyka się okno dialogowe w przypadku podania błędnej nazwy pliku ale grzecznie Cię zapyta czy chcesz poprawić swój wpis nazwy pliku
    Aha, w trakcie testowania nie sprawdzaj jeszcze dat np 32 15 czy godziny 27:75 bo jeszcze nie wprowadzałem weryfikacji poprawności :) koncentrując się na sprawach ważniejszych...

    0
  • #24 27 Mar 2012 00:37
    Wiesław19
    Poziom 10  

    W tej przedostatniej wersji którą mi wysłałeś utworzyłem programy na najbliższy tydzień. Przeliczanie i zapis pliku jest OK. Wgrałem je do sterownika i pierwszy program już zrealizowało i działało tak jak powinno. Teraz będę się przyglądał co się będzie działo z następnymi ale tak na "oko" będzie dobrze.
    W ostatniej wersji pojawia się jakieś okienko z napisem ostrzeżenie przy wczytywaniu zapisanego pliku przez Twój program. Pewnie jest to zapytanie czy chcę wczytać ?
    Twoje ostatnie dzieło zapisuje i odczytuje ślicznie.:), nawet czyta pliki z pony po zapisaniu go z rozszerzeniem hex, więc można ściągnąć nastawy ze sterownika i je edytować. Jedyną rzeczą to pewnie to jak pisałeś wprowadzić ograniczenia co do wpisywania dat i godzin i jeszcze jedno umieścić gdzieś legendę do dzwonów 1- duży 2 - średni - 3 mały. Z legendą to już bzdet domyślam się jak ją dodać bo coś wcześniej grzebałem i sie przyglądałem jak są okna robione. Któraś wcześniejsza wersja uruchamiała mi się odrazu jako okienko które należało kliknąć i wtedy było to okno gdzie można było wpisywać nastawy, a teraz jest inaczej wyskakuje okno czy chcę je uruchomić.

    0
  • #25 28 Mar 2012 00:56
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Ta wersja już weryfikuje poprawność dat i czasu. Nie nałożyłem restrykcji na ilość dzwonów (może być ich więcej niż trzy), dodałem legendę dzwonów zgodnie z Twoimi sugestiami oraz ostrzeżenie przy zapisie, że plik o danej nazwie już istnieje. Co do ostrzeżeń, wypisz mi ich treść, bo nałożyłem ich trochę w rodzaju "nie wykrył dwukropka", "nie zgadza sie suma kontrolna w wierszu n" itp. Chciałbym to zweryfikować. Zaskoczyła mnie inormacja od Ciebie, że poprzednia wersja żąda dodatkowego potwierdzenia... Na moim windows vista nie mam tego objawu. Pytanko: Czy chcesz aby program utworzył dodatkową listę COMBOBOX wyświetlającą "ogon"? COMBOBOX to ta lista z dodatkowym polem edycyjnym na górze, ta obecna to jest LISTBOX.
    Pozdrawiam
    KG
    P.S.
    Cieszę się, że program zaczął wreszcie funkcjonować zgodnie z Twoimi oczekiwaniami i można już go uzywac w praktyce.

    0
  • #26 28 Mar 2012 19:25
    Wiesław19
    Poziom 10  

    Witam!
    Tamta wersja o której wspominałem śmiga prawidłowo, dzwoni jak trzeba. Jeśli chodzi o to otwieranie to wyskakuje ostrzeżenie o zabezpieczeniach, wystarczy odznaczyć i już jest ok. Nie ma tej informacji przy następnym uruchomieniu. Co do ogona nie jest mi potrzebny dostęp do niego, aby go edytować, bo jak zauważyłem jest on stały bez względu na ilość wpisanych programów. W polach data i godzina należało by zablokować ilość wpisywanych cyfr do dwóch bo w jednej komórce można wpisać ich wiele. Fakt że wyskoczy informacja o błędnym wpisie, ale jakby się dało to ograniczyć na zasadzie: wpisuję np 12 i jeszcze raz klikam cyfrę to od tyłu je przesunie. Pierwszą usunie druga przejdzie na pierwsze miejsce a dopisana wskoczy na drugie miejsce. Inna sugestia zmiana wartości o jeden w komórkach po kliknięciu w komórkę przy pomocy strzałek "góra dół". Lub taka sprawa przy wpisywaniu daty "data od", aby automatycznie wrzucało w dacie "data do" te same wartości oczywiście możliwe do korekty wzwyż. Są nieraz programy dotyczące jednego dnia, więc by ułatwiło.
    Pozdrawiam
    W. K.
    Ps.
    Powiem tak, to co stworzyłeś to już jest kosmos, ale jakby się dało usprawnić to by było fanie.

    0
  • #27 28 Mar 2012 22:14
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Zanim przeczytałem Twój ostatni post, też się zorientowałem co do ilości znaków w polach edycyjnych (wczoraj, a własciwie dzisiaj przegapiłem ten fakt, cóż, była późna pora :) ) i obecna wersja już ma nałożone stosowne ograniczenia. Niestety, trzeba poprawiać w sposób klasyczny, jeszcze nie przewija w poziomie, nie wiem, czy mi się to uda dlatego że klasa EDIT jest już wstępnie zdefiniowana przez programistów Microsoft, niemniej, przynajmniej w odniesieniu do klawiszy strzałek bądź pgup, pgdn które mają zwiększać/zmniejszać o 1 raczej jest to możliwe i będę próbował choć wstępuję w tym przypadku na bardzo grząski grunt :!: z racji tego, że już ingeruję w wewnętrzną funkcję okienkową klasy "EDIT". Nie znam jej struktury a tym samym istnieje niebezpieczeństwo, że WSZYSTKIE okna klasy EDIT, a nie tylko w tym programie będą zachowywać się dziwnie. Po prostu zmiana funkcji okienkowej danej klasy będzie obowiązywać w odniesieniu do WSZYSTKICH elementów tej klasy (tu: EDIT), i to nie tylko tych w naszych wypocinach. Innymi słowy, mogę nieźle narozrabiać :( zwłaszcza, że nie próbowałem jeszcze tego w odniesieniu do zasobów. Co do kopiowania z "data od do "data do", po lewej stronie sekcji dat dodałem (na chwilę obecną) przycisk "Kopiuj VV" po "wciśnięciu" ktorego zostanie skopiowany zapis z "data od" do "data do", ale zobaczę, bo jeśli "data od" jest starsza od "data do" to chyba można zrobić taki automat.
    Skorygowałem kolejność zapisu w pliku zasobów żeby można we właściwej kolejności podświetlać okna klawiszem "Tab" - do nastepnej, [SHIFT Tab] do poprzedniej oraz spacji w odniesieniu do przycisków "dni tygodnia" (pierwsze wcisnięcie zaznacza, drugie odznacza) jak to zostało już zdefiniowane przez Microsoft w planszach dialogowych.
    Posyłam pliki po korekcie a więc:
    wdzwony.exe - plik wykonywalny
    wdzwony.c - plik źródłowy w języku C
    zasoby1.txt - plik zasobów. Uwaga! Jak zwykle, temu plikowi należy zmienić rozszerzenie z txt na rc
    Pozdrawiam
    KG
    P.S.
    Niniejszy program jest na licencji GNU (Pelles C jest też stworzony w oparciu o niniejsza licencję) więc oprócz pliku wykonywalnego otrzymujesz również pliki źródłowe (jak wymaga licencja GNU), które możesz przeczytać, edytować itd.

    0
  • #28 28 Mar 2012 22:47
    Wiesław19
    Poziom 10  

    Witam!

    Daj już spokój z tymi pomysłami co pisałem, już jest i tak niesamowity program. Nie sądziłem że aż takie cacko wyjdzie. Choć po głowie mi się kręci coś takiego aby można było bezpośrednio wgrywać przez USB na pamięć zewnętrzną jest to pamięć szeregowa 24c32. Nie wiem jak stoisz z elektroniką bo co do programowania to dla mnie jesteś mistrz.

    0
  • Pomocny post
    #29 01 Kwi 2012 22:26
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Pozwoliłem sobie dokonać pewnych modyfikacji programu z powodu cywilno-prawnych. Więc tak:
    1) Niniejszy program, zwany dalej "Programem" obowiązują licencje GNU GPL i GNU LGPL;
    1) Udzielam Tobie jak też innym użytkownikom, mających zamiar korzystać z tego programu, zgody na użytkowanie niniejszego Programu w ramach swojej działalności;
    2) Udzielam Tobie jak też innym użytkownikom używającym tego programu zgody na modyfikacje Programu zgodnie z licencją GNU GPL i GNU LGPL;
    3) Udzielam zgody na rozpowszechnianie niniejszego programu zgodnie z licencją GNU GPL i GNU LPGL;
    4) Nie gwarantuję poprawności działania Programu po dokonanych zmianach w Programie przez Ciebie i osoby trzecie;

    Tyle część oficjalna.
    A teraz:
    - Wprowadziłem w oknie głównym pasek menu (Czemu wcześniej o tym nie pomyślałem, nie byłoby problemu na początku...) i żeby wywołać okno dialogowe, trzeba teraz kliknąć menu "Uruchom...".W polu roboczym okna głównego umieściłem krótki opis dotyczący autorstwa i praw.
    Co do dalszych części... Uważam, że więcej jak pewne jest to, że jest możliwe wgrywanie/czytanie bezpośrednio z/do dowolnej pamięci. Kwestia drivera (sterownika) usb. Nie próbowałem tego, ale jeśli ktoś by chciał spróbować, to niniejszy program komunikacje widzi jako pliki, np sterownik po USB też widzi jako plik. Kwestia taka, że ma to być plik znakowy (nie blokowy). Jeśli byś znalazł kogoś który dobrze zna protokół transmisji USB (jest dość złożony), zrobi odpowiednie urządzenie (hardware) i sterownik to możemy wspólnymi siłami pokombinować dalej, i wtedy...

    Jak zwykle, przesyłam plik wykonywalny "wdzwony.exe", plik źródłowy "wdzwony.c" i plik zasobów "zasoby1" z rozszerzeniem txt które przed użyciem należy przemienić na rc

    0
  • #30 01 Kwi 2012 22:56
    _alfred_
    Poziom 16  

    Krzysztof Gustaw napisał:
    Pozwoliłem sobie dokonać pewnych modyfikacji programu z powodu cywilno-prawnych. Więc tak:
    1) Niniejszy program, zwany dalej "Programem" obowiązuje licencja GNU;
    1) Udzielam zgody na użytkowanie niniejszego Programu w ramach swojej działalności;
    2) Udzielam zgody na modyfikacje Programu zgodnie z licencją GNU;
    3) Udzielam zgody na rozpowszechnianie niniejszego programu zgodnie z licencją GNU;
    4) Nie gwarantuję poprawności działania Programu po dokonanych zmianach w Programie przez Ciebie i osoby trzecie;

    Nie ma takiej licencji jak "GNU", są np. GNU GPL, GNU LGPL. Poza tym, jak już wybierzesz odpowiednią licencję, umieść informację o tym w każdym z plików źródłowych (na początku pliku).

    0