AMMI v3 » Historie » Revize 5
Revize 4 (Jednatel J.H., 2017-12-07 15:16) → Revize 5/12 (Jednatel J.H., 2017-12-07 15:21)
{{>toc}}
h1(#top). Advance Machine Machine Interface ([[AMMI_v3|AMMI]]) ver.3.x
Pokročilé rozhraní zařízení-zařízení ve zkratce ([[AMMI_v3|AMMI]]) poskytuje komunikační protokol jednotlivých [[DKE#diagram|komponent DKE]]. [[AMMI_v3|AMMI]] je součástí libovolného [[PAC|DKE-PAC]]. Označení MMI představuje komunikaci mezi zařízeními, jako jsou například počítače, kontroléry, mobilní telefony, chytré senzory... a písmeno A (Advance) informuje o pokročilosti a komplexnosti této komunikace. Cílem AMMI je inteligentní kybernetické řízení. [[AMMI_v3|AMMI]] protokol je určený spíše pro zařízení, než pro uživatele a je optimalizovaný pro rychlost a spolehlivost. Pro přímou komunikaci uživatele a [[PAC-AT90|DKE-PAC]] je vhodné instalovat [[AHMI]] software. Aktuální vývojová verze [[AMMI_v3]] podporuje [[PAC-AT90_v3]] a má implementovány protokoly:
* [[MMI#usb|DKE-MMI-USB]] je převodník, dekodér nebo kodér komunikačního rozhraní. Označení USB představuje metalický komunikační standard Universal Serial Bus 2.0.
* [[MMI#wifi|DKE-MMI-WIFI]] je převodník, dekodér nebo kodér komunikačního rozhraní. Označení WIFI představuje bezdrátový komunikační standard IEEE 802.11.
* [[MMI#uart|DKE-MMI-UART]] je převodník, dekodér nebo kodér komunikačního rozhraní. Označení UART představuje metalický komunikační standard ANSI EIA/TIA-232.
-------------------------------------------------------------
h2(#spec). Specifikace komunikačního protokolu [[AMMI_v3|AMMI]]
Fyzická, linková, síťová a transportní vrstvy vychází z níže uvedených protokolů. Uvádíme zde pouze konkrétní odlišnosti a informace potřebné pro snadnou implementaci. Sledy vodičů, napěťové úrovně, napájení a vodiče jsou specifikovány v [[PAC-AT90]].
## USART
*** TTL (5 V, 3,3 V)
*** RS232
*** USB 2.0
## IEEE 802.11 (Wi-Fi)
*** 2,4 GHz
*** TCP/UDP
*** client/server
Relační, prezentační a aplikační vrstvy společně zajišťují přenos informací mezi zařízeními. Převážně se jedná o sériový přenos dat a je optimalizovaný pro minimální datový tok. Dále uvádíme pouze tělo rámce (rámec definován užitou linkou). Tělo rámce [[AMMI_v3|AMMI]] je v podobě sekvence bajtů:
# B je počet následujících B těla rámce;
# B je adresa [[PAC-AT90|DKE-PAC]];
# B je adresa zařízení;
# B je příkaz/sdělení;
# B až N. B jsou určeny pro data zařízení, data příkazu nebo data sdělení.
Zařízení, sdělení, příkazy a jejich možné hodnoty jsou popsány níže uvedenou tabulkou (slovníkem [[AMMI_v3|AMMI]]).
h3(#tx). Struktura odchozího těla rámce (aplikace posílá do [[PAC-AT90]] bajty skrze předchozí vrstvy)
|=. *B0* B0 |=. *B1* B1 |=. *B2* B2 |\2=. B3 |=. B4 |=. B5 |=. B6 |
|*ΣB* |*adredsa* |*zařízení* |*sdělení/příkaz* |popis |*data B 1* |*data B 2* |*data B 3*|*data B 4*|
|/6^.4 |/6^.1:255 |/6^.KERNEL(0x00) |/3^.TRANSLATOR(0x01)|/3^.vlastnosti překladače | 0x01 = zapne informaci o chybách| | | |
| 0x02 = vypne informaci o chybách| | | |
| 0x0E = posílat zpět přijaté B *B3 až B9* |
|suma posílaných bajtů|adresa volaného | | |
|/3^.DEVICES |/3^.správa zařízení |sdělení nebo příkaz | 0x01 = zapne informaci o chybách| | | |
| 0x02 = vypne informaci o chybách| | | |
| 0x0E = posílat zpět přijaté B |data patřící sdělení nebo příkazu |
Jednotlivé příkazy nebo sdělení jsou uvedeny v kapitole
| | |
h3. Struktura příchozího těla rámce ([[PAC-AT90]] posílá do aplikace bajty skrze předchozí vrstvy)
|1. B | 2. B | 3. B | 4.-5. B |
|*počet B*|*adresa*|*sdělení*|*hodnota*|
|*sdělení* |hex kód | popis |*hodnota* |*počet B*|
| OUTPUTS | 0xC3| Informace o aktivním nastavení výstupů [[IOPE]]| sekvence bitů (1=ON, 0=OFF) |3|
|/6^.TRANSLATOR|/6^.0x01|/6^. Informace z překladače. Aktivní pouze v případě, že je překladač zapnut.|UNKNOW_DEV (0x0C) neznámé zařízení |2|
| UNKNOW_COM (0x0D) neznámý příkaz |2|
| UNKNOW_VAL (0x0E) neplatná hodnota |2|
| TIMEEXPIRE (0x0A) vypršel čas komunikace |2|
| ERROR_PROCS (0x0B) chyba při provádění příkazu |2|
| ERROR_TRANS (0x0F) chyba překladače |2|
h3. Příklad komunikace a)
# aplikace otevře TCP port
# aplikace pošle |0x03|0x01|0xC3|0x03|
# aplikace zavře TCP port
Aplikace přikázala skrze Wi-Fi aby [[PAC-AT90]] na adrese 1 náhodně nastavil výstupy [[IOPE]] na 1 a 0.
h3. Příklad komunikace b)
# aplikace otevře TCP port
# aplikace pošle |0x03|0x01|0x01|0x0E|
# [[PAC-AT90]] pošle |0x03|0x01|0x01|0x0E|
# aplikace pošle |0x04|0x01|0xC3|0x32E6|
# [[PAC-AT90]] pošle |0x04|0x01|0xC3|0x32E6|
# aplikace zavře TCP port
Aplikace skrze Wi-Fi zapnula echo na [[PAC-AT90]] a přikázala [[PAC-AT90]] zapnout a vypnout výstupy [[IOPE]] dle schématu 0011 0010 1110 0110.
-------------------------------------------------------------
h2(#funkce). Syntaxe a sémantika komunikačního protokolu [[AMMI_v3|AMMI]]
Následující kapitoly se věnují jednotlivým zařízením, modulům, funkčním celkům které lze skrze [[AMMI_v3|AMMI]] ovládat. Podrobné popisy chování a vlastností naleznete v dokumentaci jednotlivých modulů.
-------------------------------------------------------------
h3(#kernel). Jádro ([[AMMI_v3#ammi_kernel|AMMI-KERNEL]])
Jádro AMMI představuje hlavní proces, který řídí, ovládá a plánuje činnost celého PAC. Jádro má načteny všechny HW prostředky, všechna rozšiřující zařízení a ví co kdy a jak provede. Chování jádra AMMI se dá pomocí následujících příkazů upravit. Příkaz vrátí aktuální nastavení, pokud bude délka příkazu 2 B, nebo pokud změníte nastavení.
|=. B0 |=. B1 |\2=. B2 |=. B3 |
|*ΣB* |*adresa* |*sdělení* |hex|popis |*data B 1* |
|/8^.2:3 |/8^.00:FF |^.AMMI_SILENT |00 |tichý režim bez sdělení | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_ASCII |01 |pro komunikaci používat ASCII | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_REPEAT |02 |rezervováno | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_PING |03 |posílat zpět přijaté B | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_LINE |04 |každé sdělení má svůj řádek | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_HMI |05 |rezervováno | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_BACK |06 |posílat sdělení procesů na pozadí | ENABLE(0x01)/DISABLE(0x00) |
|^.AMMI_ISR |07 |zakázat nebo povolit přerušení | ENABLE(0x01)/DISABLE(0x00) |
-------------------------------------------------------------
h3(#translator). Překladač ([[AMMI_v3#ammi_translator|AMMI-TRANSLATOR]])
Překladač vytváří formu pro veškerou komunikaci jak mezi moduly DKE tak i mezi AHMI a PAC. Správné nastavení překladače je důležité pro veškeré komunikační funkce. Překladač umožňuje různé úrovně diagnostiky, volání, hlášení.
Nastavení překladače
|=. B0 |=. B1 |\2=. B2 |=. B3 |
|*ΣB* |*adresa* |*sdělení* |hex|popis |*data B 1* |
|/10^.2:3|/10^.00:FF |^.TRNSL_DISABLE|F0 |překladač vypnut | |
|^.TRNSL_ENABLE |F1 |překladač zapnut | |
|^.TRNSL_ERROR |F8 |neznámá chyba překladače | |
|^.TRNSL_TEXP |F9 |vypršel čas příjmu dalšího B | pozice nepřijatého B |
|^.TRNSL_SHRT |FA |přijato málo B | |
|^.TRNSL_LONG |FB |přijato mnoho B | |
|^.TRNSL_UCOM |FC |neznámý příkaz | |
|^.TRNSL_UVAL |FD |neznámá nebo chybná hodnota | |
|^.TRNSL_UDEV |FE |neznámé zařízení | |
|^.TRNSL_NOTME |FF |příkaz není pro mne | |
-------------------------------------------------------------
h3(#ammi_sequences). Sekvenční řízení ([[AMMI_v3#ammi_sequences|AMMI-SEQUENCES]])
[[AMMI_v3#ammi_sequences|AMMI-SEQUENCES]] představuje třídu s metodami a proměnnými pro odložené, opakované a cyklické řízení [[AMMI_v3|AMMI]]. Každý uložený příkaz má následující vlastnosti:
# SEKVENCE, sled bajtů konkrétního příkazu viz [[AMMI_v3#tx|tabulka Struktura odchozího těla rámce]]
# STATUS, zapnuto, vypnuto
# LOOP, počet opakování příkazu
# TIMER, kdy bude příkaz poprvé volán
# PERIODE, doba mezi jednotlivými volání příkazu.
Příkazy pro práci s metodami [[AMMI_v3#ammi_sequences|AMMI-SEQUENCES]] jsou v [[AMMI_v3#tx|tabulce Struktura odchozího těla rámce]] a jsou to:
|=. B0 |=. B1 |\3=. B2 |=. B3 |
|*ΣB* |*adresa* |*příkaz* |hex|popis |*Vstupní a výstupní parametr* |
|/9^.2:3 |/9^.00:FF | SEQUENCES_SET |40| Nastaví sled bajtů konkrétního volání. | Sled bajtů, viz [[AMMI_v3#tx|tabulka Struktura odchozího těla rámce]]|
| SEQUENCES_SET_TIME|41| Nastaví čas prvního volání. | 0 až 65536 jednotek, viz [[AMMI_v3#tc|Hodiny]] |
| SEQUENCES_SET_LOPS|42| Nastaví počet volání. | 0 až 255 |
| SEQUENCES_SET_PERD|43| Nastaví prodlevu mezi voláními. | 0 až 255 jednotek, viz [[AMMI_v3#tc|Hodiny]] |
| SEQUENCES_SET_STAT|44| Nastaví status volání. | Zap, Vyp, Zámek |
| SEQUENCES_GET |45| Vrátí všechny vlastnosti sekvence. | Sled bajtů v posloupnosti seznamu z předchozího odstavce. |
| SEQUENCES_INIT |46| Uvolní všechna nastavení sekvencí. | |
| SEQUENCES_RUN |47| Spustí konkrétní volání. | 0 až maximální počet volání |
| SEQUENCES_AUTORUN |48| Spustí automatický běh volání. | |
-------------------------------------------------------------
h3(#ammi_iope). Syntaxe a sémantika pro ovládání [[IOPE_v3|IOPE]] modulu ([[AMMI_v3#ammi_iope|AMMI-IOPE]])
[[AMMI_v3#ammi_iope|AMMI-IOPE]] je třída s metodami a proměnnými pro komunikaci, ovládání a nastevaení rozšiřujícího modulu [[IOPE_v3|IOPE]].
Příkazy pro práci s metodami [[AMMI_v3#ammi_iope|AMMI-IOPE]] jsou v [[AMMI_v3#tx|tabulce Struktura odchozího těla rámce]] a jsou to:
|=. B0 |=. B1 |=. B2 |\2=. B3 |=. B4 |=. B5 |=. B6 |
|*ΣB* |*adredsa* |*zařízení* |*sdělení/příkaz* |popis |*data B 1* |*data B 2* |*data B 3*|*data B 4*|
|/28^.4|/28^.1:255|/28^.IOPE(0x01:0xFF)|/6^.COLLECTORS(0xC3)|/6^.nastaví všechny výstupy [[IOPE]]| | | | |
| 0x00 = vše vypnout | | | |
| 0x01 = vše zapnout | | | |
| 0x02 = vše invertovat | | | |
| 0x03 = náhodná kombinace | | | |
| 0xF0 = vrať stavy výstupů | | | |
|COFF(0xC0) |vypne výstup [[IOPE]] (vysoká impedance) | 0x00:0x0F = číslo kolektoru | | | |
|CON(0xC1) |sepne výstup [[IOPE]] (otevřený kolektor)| 0x00:0x0F = číslo kolektoru | | | |
|CTGL(0xC2) |invertuje výstup [[IOPE]] | 0x00:0x0F = číslo kolektoru | | | |
|/6^.PWM(0xD0:0xDF) |/6^.správa PWM pro jednotlivé výst. | 0x00 = PWM vypnout | | | |
| 0x01 = PWM zapnout | | | |
| 0x02 = PWM perioda | | | |
| 0x03 = PWM střída | | | |
| 0x04 = efekt1 | | | |
| 0xF0 = vrať aktuální nastavení | | | |
|/4^.ADC(0xA0:0xAF) |/4^.správa kanálů ADC | 0x00 = ADC vypnout | | | |
| 0x01 = ADC zapnout | | | |
| 0x02 = vrať hodnotu ADC kanálu | | | |
| 0xF0 = vrať aktuální nastavení | | | |
|/9^.ENCODER(0x60) |/9^.příkazy inkrementálního enkodéru| 0x01 = kontrola délky cyklů | | | |
| 0x02 = vrátí délka cyklů | | | |
| 0x03 = kontrola počtu cyklů | | | |
| 0x04 = vrátí počet cyklů | | | |
| 0x05 = vrátí směr rotace | | | |
| 0x06 = nastaví minimální délu | DELKA | | |
| 0x07 = nastaví maximální délu | DELKA(MSB) |DELKA(LSB)| |
| 0x08 = vyčistí čítače a hodnoty | | | |
| 0x09 = nastaví rozlišení čítače | ROZLISENI(0:255)| | |
-------------------------------------------------------------
h2(#dev). Vývojové informace
Vývojové informace mohou procházet uživatelé s bezpečnostní prověrkou reportér a vyšší.
# Aktuální vývojová verze: [[versions|2.x]]
# Developments Issues: #485
# "Components List":https://www.tme.eu/cz/Profile/Parking/740721.html
-------------------------------------------------------------
h2(#atch). Přílohy