Prepojenie 1PLC s počítačom
1. | Programovateľné logické automaty |
2. | Mikrokontrolér AVR |
3. | Softvér 1PLC |
4. | Funkčné bloky programu pre 1PLC |
5. | Prepojenie 1PLC s počítačom
|
Obsah
Možnosti prepojenia
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s počítačom je použitie tohto kanálu.
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).
V poslednej dobe sa ale z počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v dnešných počítačoch najviac používaná na pripojenie periférii.
Prevodník USB - UART
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku:
Zapojenie obvodu je čerpané z jeho katalógového listu.
Komunikačný protokol
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.
Pri návrhu boli na protokol kladené nasledujúce požiadavky:
- Čo najjednoduchší
- Komunikáciu riadi počítač
- Protokol má obsahovať mechanizmus na hlásenie chýb
Správa posielaná z počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:
- OK - vyslaný znak 0Fh - znamená, že je všetko v poriadku
- KO - vyslaný znak F0h - znamená, že poslaný príkaz neexistuje alebo ak sa použije ako potvrdenie dát, tak znamená, že dáta neprišli správne.
Prehľad všetkých príkazov protokolu aj s grafickým znázornením prenosu je v nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z PC do PLC, v dolnej časti sú dáta vysielané z PLC do PC.
Identifikácia PLC
Na príkaz 01h reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim).
Prepínanie režimu
Prepínanie režimu sa deje príkazmi 02h a 03h. Príkaz 02h prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03h prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0Fh).
Zápis a čítanie programu
Na zápis programu do PLC slúži príkaz 04h. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0h) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).
Čítanie programu je veľmi podobné zápisu. V tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FFh. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FFh).
Čítanie pamäte RAM
Príkaz 06h slúži na prečítanie hodnoty na adrese ADR (zloženej z 2 bajtov ADR H a ADR L). PLC odpovie hodnotou na zadanej adrese.
Čítanie bloku pamäte RAM
Príkaz 07h slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z 2 bajtov ADR H a ADR L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.
Zápis a čítanie konfiguračného bloku
Príkazom 08h sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).
Obrázok: Zápis konfiguračného bloku
Príkaz 09h slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s tým rozdielom, že PLC odošle konfiguračný blok v rovnakom tvare ako pri zápise.
Obrázok: Čítanie konfiguračného bloku
Kontrola pripravenosti I2C zariadenia
Príkaz 0Ah slúži na zistenie, či zariadenie s danou adresou je pripojené k PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.
Obrázok: Kontrola pripravenosti I2C zariadenia
Periférie
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I2C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I2C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s počtom periférii a tým by uberal vstupno/výstupné porty.
Opis I2C
I2C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v 2 režimoch - master (riadiaci) a slave (ovládaný). V jednom okamžiku môže byť na zbernici iba jedno zariadenie v režime master.
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I2C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7 bitovú adresu.
Univerzálny protokol
Aby bolo možné použiť ľubovoľné I2C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I2C zbernici vyskytnúť.
Typická ukážka komunikácie po zbernici je na obrázku:
Obrázok: Ukážka komunikácie po I2C zbernici
Z obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (S), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (R/W). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (A), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (K).
Mnou navrhnutý protokol umožňuje komunikáciu s akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k zariadeniu. Tento protokol sa prechádza v každej slučke a tým zabezpečí oslovenie každého želaného zariadenia.
Protokol je uvedený na obrázku:
Obrázok: Univerzálny protokol na komunikáciu po I2C zbernici
Vysvetlivky k jednotlivým bajtom na obrázku:
- SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec.
- PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt).
- PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000b).
- ADR - Adresa zariadenia.
- N - Počet čítacích/zapisovacích blokov.
- R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať.
- M - Počet slov dát.
- DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt).
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100h a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100h. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I2C zbernici.
Terminálový modul
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.
Hardvérová realizácia
Schéma zapojenia sa nachádza v prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4.
Softvérová realizácia
Softvérová časť sa skladá z týchto častí:
- komunikácia po I2C zbernici v režime slave
- komunikácia s LCD modulom
- obsluha maticovej klávesnice
Komunikačný protokol terminálového modulu je zobrazený na obrázku:
Obrázok: Komunikačný protokol terminálového modulu
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I2C. Rozdelenie tejto pamäte je na obrázku:
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. Na adrese 200 začína oblasť aktuálne zobrazenej "obrazovky". Obrazovka sa skladá z troch častí:
- formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v jazyku C. Reťazec musí byť ukončený znakom 0.
- adresy premenných použitých pri zobrazení na displeji
- dĺžka pípnutia pri zobrazení obrazovky (0-255)
Výkonový vstupno/výstupný modul
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o vstupy a výkonové výstupy.
Hardvérová realizácia
Schéma zapojenia sa nachádza v prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.
Softvérová realizácia
Softvérová časť je zhodná s terminálovým modulom. Sú z nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.
Záver
V práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v jazyku C s využitím knižníc avr-libc. Niektoré časti sú do kódu v jazyku C vkladané v jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).
Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v plávajúcej desatinnej čiarke, logické, časovače, čítače.
V nasledujúcej časti sa venujem prepojeniu PLC s počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s vývojovým prostredím. Na prepojenie s počítačom som navrhol prevodník USB-UART.
V poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s I2C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.
Literatúra
- Architektura AVR v kostce [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/
- Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003
- Atmel: Katalógový list ATMega 16. ATMEL Corporation, 2003
- Atmel: Katalógový list ATMega 32. ATMEL Corporation, 2003
- Atmel: Katalógový list ATMega 8. ATMEL Corporation, 2003
- avr-libc Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/
- I2C [online]. [cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/
- Future Technology Devices International Ltd.: Katalógový list FT232R USB UART I.C.. Future Technology Devices International Ltd., 2005
- Programovatelný logický automat [online]. [cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat
- Siemens: Programovatelný automat S7-200. Systémový manuál, Siemens, 2004
- Váňa, V.: Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor. BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0