- Status W trakcie
- Procent zaawansowania:
- Typ zgłoszenia Pozostałe
- Kategoria Konfigurator
-
Przydzielone do
LWPM - Samochód wszystkie
- Priorytet Pilne
- Rozpoznane w wersji v0.5c
- Do realizacji w wersji konfigurator
-
Głosy
3
- Pabel22 (22.12.2022)
- kiler88 (03.04.2019)
- mariusz.ratman (04.03.2019)
- Prywatne
Zgłoszone przez LWPM - 04.03.2019
Ostatnio edytował LWPM - 18.06.2020
FS#288 - Opis tworzenia akcji
W tym miejscu jest opisany sposób tworzenia akcji, jak i wszystkie dostępne polecenia
Opis będzie aktualizowany po dodaniu nowych funkcji.
Opis jest uproszczony, wymagana znajomość systemu szesnastkowego i często także operacji bitowych.
Ogólna postać akcji:
<informacje o akcji> <ilość powtórzeń> <początek> <koniec> <pętla>
<informacje o akcji>
<informacje o akcji> = <długość informacji> <informacje>[*] <informacje> = <typ danych> <długość danych> <dane>
Informacje o animacji
<typ danych> == 1TODO:
Informacje o warunkach wykonania akcji
<typ danych> == 2Kalkulator posiada:
- dwa rejestry: a oraz b
- 4 wartości tymczasowe (dostępne przez polecenia 10-13)
Generalnie <dane> to ciąg instrukcji dla “kalkulatora” z dwoma wartościami, działającego na zasadzie RPN (Odwrotna notacja polska). Wynik ostatnich obliczeń porównywany jest do 0 i na tej podstawie jest określane, czy akcja zostanie wykonana, czy nie. Wartości są ładowane do pola nr 2 po przesunięciu wartości z pola 2 na pole 1, czyli: LOAD = <1> ← <2>; <2> = wartość. Obie liczby to 32-bitowe liczby ze znakiem.
<dane> = <rozmiar> <index> <flagi> <start> <stop> <instrukcja>[*]
<rozmiar> - długość danych akcji (w bajtach)
<index> - indeks informacji o aktualnym stanie obliczeń (0..3). W tym miejscu jest przechowywana np informacja o aktualnej liczbie prawidłowych obliczeń, czy aktualnym stanie akcji.
<flagi> - wartości bitowe zmieniające zachowanie kalkulatora
01 - w przypadku jakiegokolwiek błędu, obliczenia zostaną potraktowane jako prawidłowe
<start> - ilość wymaganych poprawnych obliczeń aby uruchomić akcję.
<stop> - ilość wymaganych poprawnych obliczeń aby zakończyć działającą akcję
<instrukcja>:
// pobranie liczby 00 - Load 0 01 - Load 1 02 - Load -1 03 - Load Signed Byte <aa> 04 - Load Unsigned Byte <bb> 05 - Load Signed Word <aa bb> 06 - Load Unsigned Word <aa bb> 07 - Load Double Word = <aa bb cc dd> // zapisanie wartości 10 <xx> - zapisz a na pozycji xx [x: 0..3] 11 <xx> - zapisz b na pozycji xx [x: 0..3] 14 <xx> - zapisz wartość z pozycji xx [x: 0..3] do a 15 <xx> - zapisz wartość z pozycji xx [x: 0..3] do b // pobranie danych 20 - standard <aa> <aa>: 00 - prędkość 01 - obroty silnika 02 - temperatura 21 - OBDII <aa> (4 najmłodsze bajty) 22 - ECUInfo <aa> (4 najmłodsze bajty) // konwersja danych 30 - extend signed byte 31 - extend unsigned byte 32 - extend signed word 33 - extend unsigned word 34 - extend bit // instrukcje 40 - exchange a <==> b 41 - b = b + a 42 - b = b - a 43 - b = b * a 44 - b = b / a 45 - b = b << a 46 - b = b >> a 47 - b = b & a 48 - b = b | a 49 - b = b ^ a 4A - b = ~b 4B - b = (b && a) ? 1 : 0 4C - b = (b || a) ? 1 : 0 4D - b = (b != a) ? 1 : 0 4E - b = !b // porównanie, wynik porównania zapisywany jest w b: 1 - gdy warunek prawdziwy, 0 gdy fałszywy F0 - b == 0 F1 - b != 0 F2 - b < 0 F3 - b <= 0 F4 - b > 0 F5 - b >= 0
FF - koniec obliczeń, zwróć wynik (b)
<Ilość powtórzeń>
Rozmiar: 1 bajt
to domyślna ilość powtórzeń wykonania pętli w przypadku gdy wartość nie jest podana przy uruchomieniu akcji. Zwykle jest to 0.
<początek akcji>
Polecenia wykonane przy uruchomieniu/włączeniu akcji.
<długość> [<polecenie 1>, <polecenie 2>, ....]
długość (1 bajt) - ilość bajtów w początku akcji. Wartość zawsze obecna, nawet jeśli jest to 0
polecenie n - lista poleceń do wykonania. Długość polecenia jest zmienna i zależy od rodzaju polecenia. Opisane w dalszej części.
<koniec akcji>
Polecenia wykonane przy wyłączeniu/zakończenie akcji.
<długość> [<polecenie 1>, <polecenie 2>, ....]
długość (1 bajt) - ilość bajtów w końcu akcji. Wartość zawsze obecna, nawet jeśli jest to 0
polecenie n - lista poleceń do wykonania. Długość polecenia jest zmienna i zależy od rodzaju polecenia. Opisane w dalszej części.
<pętla>
Polecenia wykonywane w trakcie trwania pętli. Powtarzane w trakcie każdego wykonania akcji
<ilość poleceń> [<polecenie 1>, <polecenie 2>, ....]
ilość poleceń (1 bajt) - ilość poleceń do wykonania. Wartość zawsze obecna, nawet jeśli jest to 0
polecenie n - lista poleceń do wykonania. Długość polecenia jest zmienna i zależy od rodzaju polecenia. Opisane w dalszej części.
Przykład (najprostsza akcja, która nic nie robi):
00 00 00 00 00
Dostępne polecenia:
Ogólny format polecenia:
<rodzaj polecenia> [<parametr 1>, <parametr 2>, ...]
Rodzaje poleceń: (1 bajt)
- 00 - krótka pauza
- 01 - długa pauza
- 02 - sterowanie pinami I/O / PWM
- 03 - zmiana parametru w konfiguracji modułu
- 04 - zapis konfiguracji modułu do pamięci
- 05 - restart modułu
- 08 - uruchomienie innej akcji
- 09 - sterowanie akcją w tle
- 10 - wysłanie tekstu do wyświetlacza
- 11 - sterowanie głośnością radia
- 12 - otwórz Video
- 13 - zamknij menu modułu
- 14 - pokaż okno dialogowe
- 15 - ustaw automatyczne otwieranie okna czujników parkowania
- 2F - ustawienie sposobu wykonywania poleceń
- 30 - wysłanie pakietu na CAN
- 31 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez OR
- 32 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez AND
- 33 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez XOR
- 34 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez MOV
- 40-5F - sterowanie modułami na LSCAN przez GMLan (240 - 25F)
- 60-6F - sterowanie modułami na MSCAN przez GMLan (240 - 25F)
- 80-9F - sterowanie modułami na HSCAN przez GMLan (240 - 25F)
- A0-BF - wysłanie polecenia do modułu na LSCAN przez GMLan (240 - 25F)
- C0-DF - wysłanie polecenia do modułu na MSCAN przez GMLan (240 - 25F)
- E0-FF - wysłanie polecenia do modułu na HSCAN przez GMLan (240 - 25F)
00 - krótka pauza
Format polecenia:
00 <xx>
gdzie
<xx> - czas w ms
01 - długa pauza
Format polecenia:
01 <xxxx>
gdzie
<xxxx> - czas w ms
02 - sterowanie pinami IO
Format polecenia:
02 <pin> <dane>
gdzie
<pin> - wyjście do ustawienia
dozwolone wartości:
00 - C2D 01 - UART_TX 02 - UART_RX 03 - LED- 04 - AUX1 05 - AUX2 06 - AUX3 F0 - inicjalizacja PWM F1 - sterowanie PWM1 F2 - sterowanie PWM2
Zawartość pola <dane> zależą od wartości pola <pin>.
Dla wartości 00 - 06 (maska bitowa):
0x01 - ustaw 1 na wyjściu 0x02 - ustaw wyjście jako push-pull (0x00 - open-drain) 0x04 - zmień wartość wyjścia na przeciwną (0 na 1, 1 na 0)
użycie pinów UART_TX lub UART_RX wyłącza komunikację po UART do momentu restartu modułu.
Dla wartości F0 - inicjalizacja PWM:
<xx> <yyyy>
gdzie:
<xx> - parametry wyjść, bitowo: 0x01 - włączone jedno wyjście (PWM1 na pinie AUX2) 0x02 - włączone dwa wyjścia (PWM1 na pinie AUX2 oraz PWM2 na pinie AUX1). nie ma możliwości włączenie tylko AUX2! 0x40 - ustawienie PWM1 jako push-pull (normalnie jest open-drain) 0x80 - ustawienie PWM2 jako push-pull (normalnie jest open-drain) <xxxx> - czas syklu PWM w ms Np gdy chcemy ustawić na 10ms stan 1, 40ms stan 0 - wpisujemy tutaj wartość 50 (0032)
Inicjalizacja PWM musi być użyta przed sterowaniem PWM - dla obu PWM ustawiane są te same czasy!
Dla wartości F1 oraz F2:
<xx> - wypełnienie sygnału PWM (0x00 - 0xFF -> 0..100%)
Przykład:
chcemy wygenerować sygnał PWM o parametrach:
10ms jako logiczne 1 (5V), 60ms jako logiczne 0 (0V)
liczymy czas cyklu: 10 + 60 = 70. Polecenie wygląda następująco:
02 F0 41 0046 wyjście PWM1 (na AUX2), push-pull, z czasem cyklu 70ms
następnie liczymy wypełnienie:
10 / (10 + 60) =~ 0,14 0,14 * 255 = ~36 = 0x24
wysyłamy polecenie:
02 F1 24
03 - zmiana konfiguracji modułu
03 04 0234 00112233Powyższy przykład w pisze w konfigurację w pole o identyfikatorze wartość 4 bajów
oznacza to wpis w konfigurację
234=00112233
zmiana nie jest wpisywana do pamięci stałej, zostanie aktywna do wyłączenia modułu
Zapisania zostanie przy zapisie konfiguracji inną akcją lub poprzez zmiany w module (ECUInfo, OBD)
UWAGA: nie wszystkie parametry można zmieniać w ten sposób! Jednak jest to zdecydowana większość parametrów dostępna w konfiguracji (liczbowe, struktury) Nie można zmieniać w ten sposób np definicji akcji, nazw akcji - ogólnie napisów. W razie wątpliwości - pytaj
Poprawność danych nie jest weryfikowana! Ostrożność wysoce zalecana!
04 - zapis konfiguracji modułu do pamięci
04polecenie zapisuje bieżącą konfigurację do modułu
05 - restart modułu
05restart modułu
08 - uruchomienie innej akcji
08 xx aabbgdzie:
xx - identyfikator akcji wbudowanej (opisane pod koniec tej strony) aabb - parametry wykonania akcji (zależne od typu akcji)
UWAGA: nie wszystkie akcje wbudowane można w tej sposób uruchomić, tylko te najprostsze
09 - sterowanie akcją w tle
09 xygdzie:
x - numer akcji (0..3) y - polecenie: 0 - stop, 1 - start, 2 - przełącz
10 - wysłanie tekstu do wyświetlacza
10 xxxx yy <tekst>gdzie:
xxxx - identyfikator pola na wyświetlaczu yy - długość tekstu w bajtach <tekst> tekst zakodowany w UTF-8
11 - sterowanie głośnością radia
11 xx yygdzie:
xx - tryb sterowania: 1 - ustaw poziom <yy> 2 - zwiększ poziom o <yy> 3 - zmniejsz poziom o <yy> 4 - zapisz aktualny poziom głośności, <yy> - bez znaczenia 5 - przywróć poprzednio zapisany poziom głośności, <yy> - bez znaczenia
UWAGA: polecenia 1-3 automatycznie zapisują poziom głośności
yy - głośność do ustawienia (wartość ze znakiem)
gdy wartość wykroczy poza zakres obsługiwany przez radio, zostanie ustawiona ostatnia dozwolona wartość
12 - otwórz Video
przełącz CID w tryb Video
brak parametrów
13 - zamknij menu modułu
zamknij menu modułu, odpowiada naciśnięciu przycisku MAIN na CD70/DVD90
brak parametrów
14 - pokaż okno dialogowe
pokaż na ekranie okienko dialogowe
parametry: <xx> <yyyy> <zzzz> <aa> <tytuł> <bb> <wiadomość> <xx> - typ okienka: 01 - zwykłe okienko z małą ikonką 05 - okienko z dużym obrazkiem <yyyy> - ikonka do pokazania 0000 - brak ikonki 3300 - ostrzeżenie (wykrzyknik) 3400 - informacja 5300 - SOS FE07 - samochód <zzzz> - czas automatycznego ukrycia okienka w ms. 0000 - okienko nie zostanie automatycznie ukryte <aa> <tytuł> - tytuł komunikaty <aa> - długość w bajtach <tytuł> - tytuł do wyświetlenia zakodowany w UTF-8 <bb> <wiadomość> - treść widomości <bb> - długość w bajtach <wiadomość> - wiadomość do wyświetlenia zakodowany w UTF-8
przykład:
14 01 3300 03E8 03 616263 04 31323334 komunikat z trójkątem ostrzegającym, ukrywany automatycznie po 1000ms, tytuł: abc, treść: 1234
15 - ustaw automatyczne otwieranie okna czujników parkowania
Ustawia opcję automatycznego pokazywania okna czujników parkowania (tymczasowo, to czasu wyłączenia silnika)
przykład:
15 00
dostępne wartości:
00 - automatyczne pokazywanie włączone 01 - automatyczne pokazywanie wyłączone
2F - ustawienie sposobu wykonywania poleceń
Ustawia sposób wykonywania poleceń w akcji
Domyślnie ustawiane są następujące flagi:
- przed początkiem akcji: 01
- przed pierwszym wykonaniem pętli: 00
- przed końcem akcji: 01
Dostępne flagi:
01 - wykonywanie akcji nie może być niczym przerwane (przez guzik na kierownicy, przez pilota ani przez zmianę pozycji kluczyka) 02 - nie czekaj na potwierdzenie polecenia. Moduł nie będzie czekał na potwierdzenie wysłania polecenia do modułu. Daje to możliwość szybszego działania akcji, jednak należy zapewnić przerwę pomiędzy poleceniami do tego samego modułu.
30 - wysłanie pakietu na CAN
polecenie wysyła dowolny pakiet na CAN
30 xyyy zz <dane>
gdzie:
x - sieć CAN: 0 - LSCAN, 1 - MSCAN, 2 - HSCAN yyy - identyfikator pakietu zz - długość pkaietu w bajtach (0..8) <dane> - dane w pakiecie do wysłania
przykład:
30 1234 03 013342
wykona:
cansend mscan 234#013342
31 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez OR
polecenie czeka na pakiet o określonym ID a następnie odsyła ten pakiet odpowiednio zmieniony
31 xyyy zz <dane>
gdzie:
x - sieć CAN: 0 - LSCAN, 1 - MSCAN, 2 - HSCAN yyy - identyfikator pakietu zz - długość danych do zmodyfikowania w bajtach <dane> - sposób modyfikacji danych, pakiet[i] = packet[i] OR dane[i]
przykład:
31 1234 03 000001
oczekuje na pakiet na MSCAN o identyfikatorze #234, a następnie go odeśle
otrzymany pakiet:
234#1020304050
odesłany pakiet:
234#1020314050
32 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez AND
polecenie czeka na pakiet o określonym ID a następnie odsyła ten pakiet odpowiednio zmieniony
32 xyyy zz <dane>
gdzie:
x - sieć CAN: 0 - LSCAN, 1 - MSCAN, 2 - HSCAN yyy - identyfikator pakietu zz - długość danych do zmodyfikowania w bajtach <dane> - sposób modyfikacji danych, pakiet[i] = pakiet[i] AND dane[i]
33 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez XOR
polecenie czeka na pakiet o określonym ID a następnie odsyła ten pakiet odpowiednio zmieniony
33 xyyy zz <dane>
gdzie:
x - sieć CAN: 0 - LSCAN, 1 - MSCAN, 2 - HSCAN yyy - identyfikator pakietu zz - długość danych do zmodyfikowania w bajtach <dane> - sposób modyfikacji danych, pakiet[i] = pakiet[i] XOR dane[i]
34 - oczekiwanie na pakiet CAN i odesłanie go zmodyfikowanego przez MOV
polecenie czeka na pakiet o określonym ID a następnie odsyła ten pakiet odpowiednio zmieniony
34 xyyy zz <dane>
gdzie:
x - sieć CAN: 0 - LSCAN, 1 - MSCAN, 2 - HSCAN yyy - identyfikator pakietu zz - długość danych do zmodyfikowania w bajtach <dane> - sposób modyfikacji danych, pakiet[i] = dane[i]
40-5F - sterowanie modułami na LSCAN przez GMLan (240 - 25F)
polecenie wysyła polecenie sterujące (AE - Device Control) do urządzenia GMLan na sieci LSCAN
przykład:
47 03 020101
wykona:
cansend lscan 247#04AE020101
60-6F - sterowanie modułami na MSCAN przez GMLan (240 - 25F)
polecenie wysyła polecenie sterujące (AE - Device Control) do urządzenia GMLan na sieci MSCAN
przykład:
67 03 020101
wykona:
cansend mscan 247#04AE020101
80-9F - sterowanie modułami na HSCAN przez GMLan (240 - 25F)
polecenie wysyła polecenie sterujące (AE - Device Control) do urządzenia GMLan na sieci HSCAN
przykład:
87 03 020101
wykona:
cansend hscan 247#04AE020101
A0-BF - wysłanie polecenia do modułu na LSCAN przez GMLan (240 - 25F)
polecenie wysyła dowolne polecenie do urządzenia GMLan na sieci LSCAN
przykład:
A7 04 3301012213
wykona:
cansend lscan 247#043301012213
C0-DF - wysłanie polecenia do modułu na MSCAN przez GMLan (240 - 25F)
polecenie wysyła dowolne polecenie do urządzenia GMLan na sieci MSCAN
przykład:
C7 04 3301012213
wykona:
cansend mscan 247#043301012213
E0-FF - wysłanie polecenia do modułu na HSCAN przez GMLan (240 - 25F)
polecenie wysyła dowolne polecenie do urządzenia GMLan na sieci HSCAN
przykład:
E7 04 3301012213
wykona:
cansend hscan 247#043301012213
Akcje wbudowane:
- 01 - otwórz bagażnik
- 02 - otwórz szyby
- 03 - zamknij szyby
- 04 - sterowanie trybem SPORT
- 05 - wyczyść błędy
- 08 - sterowanie DDS
- 09 - zatrzymanie szyb
- 0A - odtwórz dźwięk z CIM
- 0B - otwórz drzwi (CZ)
- 0C - zamknij drzwi (CZ)
- 10 - sterowanie akcją w tle
- 11 - sterowanie głośnością radia
- 20 - otwórz menu modułu
- 21 - otwórz ustawienia modułu/przełącz stronę
- 22 - otwórz ekran silnika
- 23 - otwórz ekran stanu DPF
- 24 - otwórz ekran czujników parkowania
- 25 - otwórz menu ECUInfo
- 26 - otwórz menu OBD2
- 27 - otwórz menu Video
- 28 - otwórz menu listy akcji
- 70 - zasymuluj naciśniecie przycisku
- 80-9F - własne zdefiniowane akcje
- A0-BF - akcje wbudowane
01 - otwórz bagażnik
TODO:
02 - otwórz szyby
TODO:
03 - zamknij szyby
TODO:
04 - sterowanie trybem SPORT
TODO:
05 - wyczyść błędy
TODO:
08 - sterowanie DDS
TODO:
09 - zatrzymanie szyb
TODO:
0A - odtwórz dźwięk z CIM
TODO:
0B - otwórz drzwi (CZ)
TODO:
0C - zamknij drzwi (CZ)
TODO:
10 - sterowanie akcją w tle
TODO:
11 - sterowanie głośnością radia
TODO:
20 - otwórz menu modułu
TODO:
21 - otwórz ustawienia modułu/przełącz stronę
TODO:
22 - otwórz ekran silnika
TODO:
23 - otwórz ekran stanu DPF
TODO:
24 - otwórz ekran czujników parkowania
TODO:
25 - otwórz menu ECUInfo
TODO:
26 - otwórz menu OBD2
TODO:
70 - zasymuluj naciśniecie przycisku
TODO:
80-9F - własne zdefiniowane akcje
TODO:
A0-BF - akcje wbudowane
TODO:
Wczytywanie...
Available keyboard shortcuts
- Alt + ⇧ Shift + l Login Dialog / Logout
- Alt + ⇧ Shift + a Dodaj nowe zgłoszenie
- Alt + ⇧ Shift + m Moje wyszukiwania
- Alt + ⇧ Shift + t focus taskid search
Lista zgłoszeń
- o open selected task
- j move cursor down
- k move cursor up
Task Details
- n Następne zgłoszenie
- p Poprzednie zgłoszenie
- Alt + ⇧ Shift + e ↵ Enter Edytuj zgłoszenie
- Alt + ⇧ Shift + w Obserwuj zgłoszenie
- Alt + ⇧ Shift + y Zamknij zgłoszenie
Task Editing
- Alt + ⇧ Shift + s save task