- Symulator MaSzyna -
Symulator EU07 (i nie tylko) => Symulator => Wątek zaczęty przez: Ra w 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:
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:
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:
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:
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:
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ę:
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
Nie chcę wałkować ciśge tego tematu, ale jeśli:
Jest to błąd formalny, na który symulator został uodporniony
To przestaje to być błędem dla symulatora.
I muszę również kombinować, jak to zrobić, żeby się wczytało.
To jest problem dla Ciebie i twojego programu i nie neguję tego.
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 :)
-
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.
-
Skąd jest brane ScndCtrlPosNo, bo ja takiego parametru nigdzie nie znalazłem?
Tablica RList: ma parametr Size i tu nie ma problemu.
-
Skąd jest brane ScndCtrlPosNo, bo ja takiego parametru nigdzie nie znalazłem?
Poleciałem po nazwie zmiennej z przywyczajenia :) Parametr nosi nazwę SCPN.