Softvér 1PLC

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Opis operačného systému

Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v jazyku C s použitím knižníc avr-libc [1] (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.

Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.

Riadiaca slučka

PLC vykonávajú program v neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.

Riadiaca slučka PLC

Moduly operačného systému

Modul sériovej komunikácie

Modul sériovej komunikácie slúži na komunikáciu s počítačom. Sériový modul sa skladá z niekoľkých funkcií:

  • Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.
  • Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu.
  • Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.
  • Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.

Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).

Parametre sériovej komunikácie
Prenosová rýchlosť Počet stop bitov Počet dátových bitov Parita
115200baud 1 8 Nie

Modul prístupu k pamäti programu

Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B) alebo 1024W(2048B). Funkcie modulu:

  • Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).
  • Čítanie z pamäte programu - funkcia prečíta blok o veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie.

Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.


Modul prístupu k pamäti údajov

Modul umožňuje čítanie adresy v pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie. Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku:

Rozdelenie pamäte

Rozdelenie virtuálnej pamäte

Virtuálna pamäť je rozdelená na niekoľko častí:

Rozdelenie virtuálnej pamäte

Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:

  • P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)
  • PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)
  • SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v tabuľke význam bajtov pamäte SP.
  • T - pamäť časovačov (obsluhuje modul časovača)
  • C - pamäť čítačov (obsluhuje priamo blok čítača)
  • V - pamäť pre premenné (voľne prístupná užívateľovi)
Význam bajtov pamäte SP
Bajt Bit Význam
SP0 0 Vždy 1
SP0 1 1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0
SP0 2 1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0
SP1 Zatiaľ nepoužité
SP2 Zatiaľ nepoužité
SP3 0-1 Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)
SP4 0-2 Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)
SP4 3 Zapnutie výstupu na kanál PWM1
SP4 4 Zapnutie výstupu na kanál PWM2
SP5 Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)
SP6 Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)
Význam bitov pre nastavenie AD prevodníka
Bit 1 Bit 0 Význam
0 0 Externá referencia pripojená na vstup AREF
0 1 Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor
1 0
1 1 Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor
Význam bitov pre nastavenie nosnej frekvencie PWM
Bit 2 Bit 1 Bit 0 Význam
0 0 0 PWM vypnuté
0 0 1 16MHz (frekvencia kryštálu)
0 1 0 2MHz (frekvencia kryštálu /8)
0 1 1 250kHz (frekvencia kryštálu /64)
1 0 0 62,5kHz (frekvencia kryštálu /256)
1 0 1 15,625kHz (frekvencia kryštálu /1024)
1 1 0 PWM vypnuté
1 1 1 PWM vypnuté

Záloha RAM pri výpadku

Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku.

Záloha pamäte RAM

Je to časť schémy riadiacej jednotky. Napájanie je privedené do mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.

Modul prístupu k pamäti EEPROM

Modul má na starosti zápis a čítanie z a do pamäte EEPROM. Sú použité funkcie z knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná.


Modul časovačov

Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:

Rozdelenie pamäte T

Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v tabuľke:

Význam bitov stavového bajtu časovača
Bit Význam
0-5 Mikročas
6 Beh časovača (ak je 1, tak sa inkrementuje)
7 Stav (či už dosiahol nastavenú hodnotu)

Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V obsluhe prerušenia sa postupne prechádzajú všetky časovače s rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.

Časovače s rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.

Vstupno/výstupný modul

Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. Modul obsahuje niekoľko funkcií:

  • Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v pamäti EEPROM.
  • Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.
  • Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z pamäte P.
  • Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v konfiguračnom bloku v pamäti EEPROM.
  • Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)
  • AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).
  • Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.
  • Beh PWM - z pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.
  • Stop PWM - vypne časovač obsluhujúci PWM.

Modul komunikácie s perifériami

Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I2C. Modul obsahuje tieto funkcie:

  • Inicializácia I2C zbernice - nastaví prenosovú rýchlosť
  • Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať
  • Komunikácia s I2C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o protokole pozri kapitolu \ref{sec:uni_protokol})
  1. avr-libc: Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/