Witajcie, wraz z kolegą podjąłem sie budowy pulpitu, dla państwa symulatora, opierając się na Arduino. Jako że samo zrozumienie ramki do i z Arduino, zajęło dużo nam czasu, to chciałbym podsumować swoją wiedzę i prosiłbym o wskazanie gdzie czegoś nie zrozumiałem, albo pomyliłem. Naturalnie o kilka spraw chciałbym też dopytać.
Przeglądałem państwa wikipedię, ale zatrzymała sie na LPT, o uarcie nic nie widziałem:
https://wiki.eu07.pl/index.php/Informacje_zwrotneMoże na początek mały błąd: że świeżo po zainstalowaniu MaSzyny nie ma w eu07.ini linijek uarttune, uartfeature, uartdebug i program startowy nie potrafi ich dopisać, w sensie nie zapisuje tego co tam wpiszę. Ale po dopisaniu stosownych lini, już zmiana poprzez program startowy działa.
Brakujące linijki wziąłem od p. Maćka:
https://baur.pl/soft-do-zmiany/uart COM3 115200 0.03 0.03
uarttune 26 225 71 236 1.4 255 0.8 255 0.8 255 0.8 255 4000 255 800 255 150 255
uartfeature yes yes yes yes
uartdebug no
Pierwszą rzeczą o którą chciałem dopytać jest "0.03 0.03" w poprzednim poście państwo wspomnieli że to <częstość wysyłania danych (czas)>. Rozumiem że "0.03" to 30ms.
W kodzie programu znalazłem ">> uart_conf.updatetime;", dlatego też nie rozumiem dlaczego "0.03" jest dwa razy. Kiedy wpisałem "0.03" jeden raz program działał tak samo.
uarttune jest skalowaniem wartości, z COM do PC(dla hamulców) i z PC do COM(dla manometrów i mierników) żebym w mikrokontrolerze nie zużywał niepotrzebnie zasobów, na skalowanie wartości.
Czyli p. Maciek ustawił kolejno:
>> uart_conf.mainbrakemin = 26 // Hamulec główny (Train brake)
>> uart_conf.mainbrakemax = 225
>> uart_conf.localbrakemin = 71 // Hamulec dodatkowy (Independent brake)
>> uart_conf.localbrakemax = 236
>> uart_conf.tankmax = 1.4 // Trzeci okrągły manometr - Ciśnienie w zbiorniku głównym(Tank press)
>> uart_conf.tankuart = 255
>> uart_conf.pipemax = 0.8 // Drugi okrągły manometr - Ciśnienie w przewodzie głównym(Pipe press)
>> uart_conf.pipeuart = 255
>> uart_conf.brakemax = 0.8 // Pierwszy okrągły manometr - Ciśnienia hamulców (Break press)
>> uart_conf.brakeuart = 255
>> uart_conf.pantographmax = 0.8 // (Domyślam się, nie sprawdziłem) Ciśnienie pantografu (pantograph press)
>> uart_conf.pantographuart = 255
>> uart_conf.hvmax = 4000 // Piąty prostokątny miernik - Napięcie od pantografu (HV voltage)
>> uart_conf.hvuart = 255
>> uart_conf.currentmax = 800 // Trzeci i czwarty prostokątny miernik - Prąd silników (HV current 1 oraz HV current 2)
>> uart_conf.currentuart = 255
>> uart_conf.lvmax = 150 // Drugi prostokątny miernik - Napięcie baterii (LV voltage)
>> uart_conf.lvuart = 255
W okrągłych nawiasach jest nazwa z opisu ramki danych "20220910 Maszyna UART.xlsx" z pierwszego wpisu.
Niestety ciśnienia pantografu nie sprawdziłem, próbowałem, ale te wskazanie ani drgnęło podczas testowej jazdy.
Czyli w ramach hamulców głównego(mainbrake) i lokomotywy(localbrake):
jeżeli mój potencjometr daje wartości od 70 do 180 to ustawię:
>> uart_conf.mainbrakemin = 70 // <- minimalna pozycja hamulca
>> uart_conf.mainbrakemax = 180 // <- maksymalna pozycja hamulca
a MaSzyna sama przelicza ile powinna ustawić, na podstawie otrzymanej wartości.
Z kolei tank, pipe, brake, pantograph, hv, current, lv to prostokątne i okrągłe mierniki na symulacji.
I działa to tak że '***max' to skala górna jaką mamy na mierniku fizycznym, a '***uart' to największa liczba jaką wpisuje np. jako wypełnienie PWM w Arduino.
Czyli jak dla prądu pierwszego zestawu silników (HV current 1) mam skale 1200A,
a maksymalne wypełnienie PWM w Arduino mam 65535(to tylko przykład, normalnie jest 255) to wpiszę:
>> uart_conf.currentmax = 1200
>> uart_conf.currentuart = 65535
i dostanę od maszyny liczbe "gotową" wyskalowaną wartość, którą nie musze przekształcać i wpisuje bezpośrednio do wypełnienia PWM.
uartfeature <nastawnik> <bocznik> <hamulec> <hamulec lokomotywy>
jest prosty: jeżeli jest "yes" to wartość wysłana z Arduino do MaSzyny jest wiodąca i nie można ustawić z klawiatury bo ta nastawa będzie nadpisywana. Jeżeli "no" to wartości z Arduino nie będą brane pod uwagę i sterowanie wiodące jest z klawiatury(w przypadku nastawnika i bocznika jeszcze można sterować za pomocą "Switch group", wtedy też jest na "no" w uartfeature).
Wspomniane cztery nastawy wysyłamy zgodnie z "20220910 Maszyna UART.xlsx" -> Data from pulpit to MaSzyna
<nastawnik> -> Master controller: podajemy liczbe od 0 do 43 i jest to aktualna pozycja.
<bocznik> -> Second controller: podajemy liczbe od 0 do 7 i jest to aktualna pozycja.
<hamulec> -> Train brake: podajemy odczytaną wartość analogową, MaSzyna sama ją wyskaluje za pomocą uarttune.
<hamulec lokomotywy> -> Independent brake: podajemy odczytaną wartość analogową, MaSzyna sama ją wyskaluje za pomocą uarttune.
Wspomniane wcześniej "Switch group" koreluje z "eu07_imput-uart.ini"
Switch group to 48 bitów sterujących(Z arduino DO MaSzyny) gdzie w "eu07_imput-uart.ini" wpisujemy numer bitu, rodzaj akcji, akcje. Akcja jest taka same jak w "eu07_input-keyboard.ini", więc wysłanie ustalonego bitu z Arduino do MaSzyny wywołuje akcję, którą normalnie możemy zrobić skrótem klawiszowym.
Rodzaje akcji są dwie impulse(guzik) oraz toggle(przełącznik). Po "impulse" dajemy jedną akcje, po "toggle" dwie akcje, pierwsza będzie wykonana kiedy bit jest '1', druga kiedy bit jest '0';
Na podstawie przykładu programu z wcześniejszego wpisu napisałem program na kilka podstawowych kontrolek/przełączników, oraz nastawnik i bocznik, na Arduino:
https://github.com/kaczor112/SterownikKontrolekMaSzynaNiestety nie wiem dlaczego działa mi tylko dla prędkości 9600.
Nie potrafię sie komunikować z MaSzyną dla innych prędkości nawet 19200,
jeżeli ktoś z państwa ma na to radę to bardzo bym prosił o pomoc!
Niestety nie znam za dobrze angielskiego i przy czytaniu "20220910 Maszyna UART.xlsx" brakowało mi go.
Jeżeli mają państwo jakąś rozpiskę co jest czym, angielsko - polską to bardzo bym prosił.
Chodzi mi wyłącznie o "Indicator group 0-4", bo do pozostałych, jak widać wyżej już doszedłem(Hasler to 'Tacho').
Na chwilę obecną wiem że:
alerter - czuwak
line breaker - lampa wyłącznika szybkiego
motor resistors - lampa jazdy na oporach
Jeżeli ma ktoś z państwa rozpisane te bity również po polsku, to ułatwiłoby to nam zadanie!
Zdaje sobie sprawę że moja wiadomość nie wnosi nic nowego.
Może jedynie stanowić małe ułatwienie dla przyszłych nowicjuszy jak ja.
A ja będę miał zysk taki że upewnię sie czy wszystko dobrze zrozumiałem,
naturalnie proszę o podpowiedź gdzie coś sknociłem.
Brakuje mi jeszcze do pierwszego prostokątnego miernika(prąd ładowania akumulatora z przetwornicy), wiedzieć który sygnał(Data from MaSzyna) od MaSzyny jest właśnie dla niego.
Bardzo dziękuję za wszelką podpowiedź!