Ankieta

Co powinien robić program, jeśli wykryje błędy formalne w .chk?

Zaakceptować plik z błędami i próbować wczytać poprawne fragmenty.
2 (3.4%)
Jak wyżej, ale wyświetlić ostrzeżenie o błędzie.
8 (13.8%)
Zignorować cały plik bez ostrzeżenia.
1 (1.7%)
Zignorować cały plik i wyświetlić ostrzeżenie
2 (3.4%)
Poprawić, co się da i zapisać ze zmianami.
5 (8.6%)
Jak wyżej, ale po zapytaniu o zgodę.
8 (13.8%)
Pobrać prawidłowy plik z serwera i zastąpić błędny.
17 (29.3%)
Jak wyżej, ale z zapytaniem o zgodę.
12 (20.7%)
Coś innego (napisz co).
3 (5.2%)

Głosów w sumie: 52

Autor Wątek:  Jak to działa, czyli efekty grzebania w chk.  (Przeczytany 6192 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6355
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 389
Jak to działa, czyli efekty grzebania w chk.
« dnia: 11 Czerwca 2008, 18:46:48 »
Jakiś czas temu zrobiłem w moim programie wyświetlanie parametrów z plików .chk. To częściowo działało (dla EU07), a częściowo się program sypał. Nie chciało mi się dochodzić, co jest przyczyną. Zwłaszcza, że na pierwszy rzut oka wyglądało, że jest wszystko dobrze.

Przed dwoma dniami zabrałem się do zapisywania wszystkich parametrów w pliku bazy danych. No i pojawiły się te same problemy, tylko w bardziej zmasowany sposób. Najwięcej problemów tworzyła tabelka z MotorParamTable:. Zaczynając od EU07, mamy tak:

Cytat: dynamic\PKP\EU07\303e.chk
MotorParamTable:
0 23.34 206  124  118   
1 42.12 826  124  165   
2 25.81 380  123  218   
3 27.89 558  129  324   
4 30.48 798  130  427   
5 25.26 742  131  555   
6 23.27 807  145  852   
END-MPT

No ładnie wszystko. Nie ma co prawda zapisanej ilości pozycji, jak niektóre inne tabelki, ale ma znacznik końca. W każdej linii jest 5 parametrów, idzie to jakoś ogarnąć. Ale dalej jest coś takiego:

Cytat: dynamic\PKP\ET22\201e.chk
MotorParamTable:
0 23.34 206  124  118   
1 42.12 826  124  165   
2 25.81 380  123  218   
3 27.89 558  129  324   
4 30.48 798  130  427   
5 25.26 742  131  555   
6 23.27 807  145  852   
Circuit: CircuitRes=0.01 ImaxLo=600 ImaxHi=750 IminLo=350 IminHi=450
END-MPT


To co ja mam z tym zrobić? W EU07 jest to na zewnątrz tabelki. Uznałem to za błędne i poprawiłem plik .chk, żeby program przeszedł dalej. Musiałem to jeszcze poprawić w kilku innych plikach. Ale dalej czekała mnie kolejna niespodzianka:

Cytat: dynamic\PKP\SM03\Ls150.chk
MotorParamTable: minVelfullengage=7.8 engageDia=0.5 engageMaxForce=8000 engagefriction=0.8
0   0   0   -1    1    
1   5.056   -1   20.5  1
2   3.325   14.2   31.6  1
3   2.259   25.2   46.4  1
4   1.486   41.6   71.2  1
5   1.000   68.6   200   1
END-MPT


Jak widać doszły kolejne parametry w nagłówku, które psują trochę formę. Pozmieniałem to tymczasowo w plikach, bo mi się nie chciało dorabiać analizatora. Niemniej jednak program się wysypał na kolejnym:

Cytat: dynamic\PKP\EN57\6bs.chk
MotorParamTable:
0 20.68 63.8   149  76    1
1 20.48 84.5   144 106    1
2 22.41 147    140 134    1
3 21.94 188    120 132    0
END-MPT


Co jest? Otórz doszedł szósty parametr, który nie ma żadnego opisu. Dobra, przeżyję. Zrobiłem obsługę warunkowego parametru. Nie na długo. Następne było:

Cytat: dynamic\PKP\SM42\SM42.chk
MotorParamTable:
0   17.567   64   1500   15   0   0
1   15   183.3   2000   49   0   0
END-MPT

Co tu jest inaczej? Otórz jest siódmy parametr. Plik ten pochodzi z paczki całościowej z 2004 roku. W paczce z 2006 już tego ostatniego parametru nie ma. Coś można jeszcze wymyślić? Można. Proszę:

Cytat: dynamic\PKP\Dl2\Dl2.chk
MotorParamTable: minVelfullengage=3.8 engageDia=0.3 engageMaxForce=5000 engagefriction=0.8
0   0   0   -1        
1   15.9   -1   20.5 
2   8.7   14.2   31.6 
3   5.3   51.2   46.4     
END-MPT

Ja jestem pełen podziwu, że to w ogóle działa.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline youBy

  • Deweloper
  • Wiadomości: 6169
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 889
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #1 dnia: 11 Czerwca 2008, 19:05:36 »
Znacznik END-MPT jest niewiążący (czyli jest pomijany). Circuit przed END-MPT nie jest błędem, jest to natomiast nieeleganckie. Poza tym MPT jest modyfikowane zależnie od EngineType i AutoRelay. Dlatego też jest to w stanie działać tak, jak powinno, gdyż za każdym razem jest wybierana inna procedura wczytująca.
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6355
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 389
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #2 dnia: 21 Czerwca 2008, 22:55:03 »
Dodałem ankietę - co ma program zrobić z niepoprawnym .chk. Konkretnie to chodzi mi głównie o przestawione linie Circuit i END-MPT. Być może jakiś błąd się jeszcze ujawni, typu błędna nazwa parametru, brak istotnego parametru, zdublowane wpisy, albo wartość liczbowa spoza sensownego przedziału. Chodzi o błędy, które można stwierdzić i poprawić automatycznie, bez analizowania konkretnego przypadku pojazdu. Ankieta dotyczy domyślnej akcji w trybach prostym i normalnym. W wyższych trybach program będzie sygnalizował znalezienie błędu albo zapisywał listę błędów do pliku, aby autor mógł naprawić błąd ręcznie przed dystrybucją.

Wyświetlanie ostrzeżeń lub zapytań wymagających podjęcia decyzji może być uciążliwe, gdy pojawi się ich kilkanaście na raz. Również mogą być one niezrozumiałe dla początkującego użytkownika. W przypadku braku zgody, model pojazdu zostanie zignorowany i nie pojawi się w edytorze składów, a jego parametry w istniejących składach nie będą uwzględniane (np. masa i długość będą zerowe).

Opcja pobrania z serwera jest o tyle niedoskonała, że ktoś musiałby poprawny plik tam umieścić, a wcześniej go zweryfikować. (Poza tym, co zrobić, gdy plik nie został umieszczony?) Docelowo planuję stworzenie internetowej bazy parametrów dla poszczególnych pojazdów, co pozwoli zaktualizować parametry w dowolnej chwili u wszystkich użytkowników. Jednak na razie chodzi mi o rozwiązanie doraźne, aby można było prawidłowo wczytać plik .chk, zrobić cache parametrów i używać ich do obliczania własności składu.
« Ostatnia zmiana: 21 Czerwca 2008, 23:57:14 wysłana przez Ra »
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline AtapiCl

  • Zasłużony dla Symulatora
  • Wiadomości: 4426
    • Zobacz profil
    • O warszawskiej części linii kolejowej nr 7 Warszawa – Lublin i nie tylko ;)
  • Otrzymane polubienia: 212
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #3 dnia: 21 Czerwca 2008, 23:10:42 »
Zagłosowałem na "Coś innego":

Dobrze będzie, gdy program sam będzie poprawiał co się da bez pytania, ale po włączeniu takiej opcji w ustawieniach.

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3932
    • Zobacz profil
  • Otrzymane polubienia: 288
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #4 dnia: 22 Czerwca 2008, 01:30:50 »
Cytuj
Konkretnie to chodzi mi głównie o przestawione linie Circuit i END-MPT.

Na moje czy to jest błąd?
Błąd jest wtedy, gdy symulator źle to zinterpretuje i w związku z tym występują błędy w symulacji, a w tym wypadku akurat symulator interpetuje to dobrze (o ile dobrze zrozumiałem). Jedynie człowiek ma tendencję do porządkowania. Ale jeśli chcesz zrobić tak, aby maszyna i człowiek był "zadowolony", to moja propozycja jest taka, aby program próbował chk naprawić co się da, tylko aby to robił prawidłowo (aby nie pogorszył w czymś sprawe niżli ona jest). Program powinien wykonać archwizację oryginalnego pliku chk.bak a przed operacją naprawy wyświetlił pojedynczy komunikat typu "Czy chcesz, aby program wykonał oprację na plikach chk tak/nie". Po wyborze na tak, automatycznie przeleci wszystkie chk i coś tam z nimi porobi, jednocześnie zostawiając kopie plików oryginalnych. Można też zapytać się użytkownika, czy te kopie ma tworzyć.
Kopia pliku powinna być tworzona tylko wtedy, gdy program dokona zmiany w danym pliku. Wreszcie można dodać log.txt zmian.
To moje zdanie na ten temat.
Pozdro.
« Ostatnia zmiana: 22 Czerwca 2008, 01:49:23 wysłana przez Mariusz1970 »

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6355
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 389
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #5 dnia: 22 Czerwca 2008, 13:44:41 »
Jest to błąd formalny, na który symulator został uodporniony. Ktoś, zamiast szukać i poprawić przyczynę, zmodyfikował proces wczytywania. Za to ja mam teraz problem z wyczytaniem tego. I muszę również kombinować, jak to zrobić, żeby się wczytało. Najlepiej by było, żeby plik miał prawidłową strukturę. Symulatorowi jest obojętne, a jak człowiek zagląda do tego, to nie rozumie, po co jest linijka Circuit pomiędzy MotorParamTable: i END-MPT.

Co do zmian wykonywanych przez program, to będą wielokrotnie testowane przed dopuszczeniem ich do działania bez nadzoru.

Przeglądanie plików .chk odbywa się w trakcie sprawdzania posiadanego taboru (zakładka Tabor posiadany). Obecnie jest to zablokowane, bo niekonsekwencja struktury .chk powodowała problemy. Tylko w ramach tej operacji mogłyby być poprawiane.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline Mariusz1970

  • Zasłużony dla Symulatora
  • Wiadomości: 3932
    • Zobacz profil
  • Otrzymane polubienia: 288
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #6 dnia: 22 Czerwca 2008, 14:18:41 »
Nie chcę wałkować ciśge tego tematu, ale jeśli:
Cytuj
Jest to błąd formalny, na który symulator został uodporniony
To przestaje to być błędem dla symulatora.
Cytuj
I muszę również kombinować, jak to zrobić, żeby się wczytało.
To jest problem dla Ciebie i twojego programu i nie neguję tego.

Cytuj
Symulatorowi jest obojętne, a jak człowiek zagląda do tego, to nie rozumie, po co jest linijka Circuit pomiędzy MotorParamTable: i END-MPT.

Zgadzam się.

Program powinien być "przezroczysty", czyli jeśli coś przeszkadza symulatorowi, powinno przeszkadzać programowi, jeśli natomiast coś nie przeszkadza symulatorowi, to nie powinno przeszkadzać twemu programowi.

PS
Ja wiem, że masz swoją wizję i zrobisz jak chcesz i olejesz moje zdanie :), ale pogadał se Mariusz :)

Offline youBy

  • Deweloper
  • Wiadomości: 6169
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 889
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #7 dnia: 22 Czerwca 2008, 14:21:26 »
Jest to błąd formalny, na który symulator został uodporniony. Ktoś, zamiast szukać i poprawić przyczynę, zmodyfikował proces wczytywania. Za to ja mam teraz problem z wyczytaniem tego. I muszę również kombinować, jak to zrobić, żeby się wczytało. Najlepiej by było, żeby plik miał prawidłową strukturę. Symulatorowi jest obojętne, a jak człowiek zagląda do tego, to nie rozumie, po co jest linijka Circuit pomiędzy MotorParamTable: i END-MPT.
To nie jest błąd formalny, gdyż END-MPT nie jest znacznikiem dla symulatora (co chyba już wcześniej zaznaczyłem), tylko jakimśtam sobie napisem w pliku chk. Symulator po prostu czyta określoną ilość pozycji MPT na podstawie ScndCtrlPosNo. END-MPT jest w zasadzie tak o sobie, żeby ułatwić czytanie pliku człowiekowi.

EDIT:
Sprawdziłem jeszcze raz. Symek bez problemów łyknął chk bez END-RL i END-MPT.
« Ostatnia zmiana: 22 Czerwca 2008, 14:23:40 wysłana przez youBy »
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6355
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 389
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #8 dnia: 22 Czerwca 2008, 14:35:31 »
Skąd jest brane ScndCtrlPosNo, bo ja takiego parametru nigdzie nie znalazłem?

Tablica RList: ma parametr Size i tu nie ma problemu.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline youBy

  • Deweloper
  • Wiadomości: 6169
  • Co tam?
    • Zobacz profil
    • Automat Weryfikujący Regulację i Lambdę
  • Otrzymane polubienia: 889
Odp: Jak to działa, czyli efekty grzebania w chk.
« Odpowiedź #9 dnia: 22 Czerwca 2008, 14:46:02 »
Skąd jest brane ScndCtrlPosNo, bo ja takiego parametru nigdzie nie znalazłem?
Poleciałem po nazwie zmiennej z przywyczajenia :) Parametr nosi nazwę SCPN.
Xoov
Powyższy post wyraża jedynie opinię autora w chwili publikacji. Autor zastrzega sobie prawo do zmiany poglądów bez podawania przyczyny, jak również informowania o tym.