Komunikačný modul: Rozdiel medzi revíziami
Riadok 11: | Riadok 11: | ||
− | + | ||
− | + | >>> import serial | |
>>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1) | >>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1) | ||
>>> ser.isOpen() <nowiki>#kontrola portu</nowiki> | >>> ser.isOpen() <nowiki>#kontrola portu</nowiki> | ||
Riadok 22: | Riadok 22: | ||
>>> ser.close() | >>> ser.close() | ||
− | |||
<center>''Ukážka 43: Základné operácie so sériovým portom''</center> | <center>''Ukážka 43: Základné operácie so sériovým portom''</center> | ||
Aktuálna revízia z 14:38, 19. máj 2010
1. | Kompilátor jazyka ST |
2. | Kompilátor IIC modulov |
3. | Komunikačný modul |
4. | Používateľské prostredie 1PLC
|
Obsah
Účelom tejto kapitoly je vytvoriť komunikačný modul na zabezpečenie výmeny informácií medzi počítačom a PLC. Komunikácia prebieha v dvoch režimoch. Na protokole RS232 alebo cez USB (pomocou prevodníka RS232-USB). Pre jazyk Python je vytvorený veľmi silný nástroj na zabezpečenie sériovej komunikácie, modul pySerial. Informácie v tejto časti sú čerpané z [8].
Modul pySerial
Jedná sa o Pythonovský modul ktorý v sebe združuje nástroje na prístup k sériovému portu. Výhodou tohto modulu je multiplatformovosť a jednoduchosť. Konkrétny modul beží na operačnom systéme Windows, Linux a každý iný POSIX-ový systém. Taktiež umožňuje prístup k sériovému portu pomocou Jython a IronPython, čo značne rozširuje možnosti použitia daného modulu.
>>> import serial >>> ser = serial.Serial('/dev/ttyS1', 19200, timeout=1) >>> ser.isOpen() #kontrola portu True >>> x = ser.read() #čítanie jedného bytu >>> ser.write("hello") #zápis reťazca >>> s = ser.read(10) #čítanie 10 bytov (časovo obmedzené) >>> line = ser.readline() #čítanie riadku ukončeného '\n' >>> ser.close()
Ako je patrné z ukážky práca so sériovým portom pomocou pySerial je jednoduchá. Po importovaní modulu seriál môžeme vytvoriť objekt seriál pomocou ktorého budeme odosielať alebo prijímať informácie cez sériový port, resp. USB port. Takisto je možné definovať špecifickejšie parametre sériového portu ako: baudrate prenosová rýchlosť, bytesyze počet dátových bitov, parity paritu, stopbits počet stopbitov, timeout čakací čas a ďaľšie. Podrobnejšie informácie o module pySerial nájdete v literatúre [8].
Komunikačný protokol PLC
Cieľom komunikačného protokolu je presne definovať priebeh komunikácie medzi komunikujúcimi zariadeniami. Protokol definuje základné príkazy na riadenie a identifikačné kódy jednotlivých operácii a samotné telo správy. Informácie v tejto časti sú čerpané z [5].
Identifikácia PLC
Identifikuje pripojené PLC. Slúži na presné určenie konfigurácie pre kompilátor.
PC | 0x01 | ACK | |||||||
PLC | SIG0 | SIG1 | SIG2 | RAM HIGHT | RAM LOW | STATUS |
Symbol | Popis |
0x01 | Kód PLC 0x01h |
SIG0 | Signatúra procesora |
SIG1 | Signatúra procesora |
SIG2 | Signatúra procesora |
RAM HIGHT | Horný byte adresy |
RAM LOW | Dolný byte adresy |
STATUS | Status plc
RUN STOP PAUSE |
ACK | Potvrdenie prenosu (0x0F) |
3.2.2 Štart PLC
Spustí PLC (prepne do režimu RUN) pokiaľ bolo v stave STOP alebo PAUSE.
PC | 0x02 | ||
PLC | ACK |
Symbol | Popis |
0x02 | Kód PLC 0x02h |
ACK | Potvrdenie prenosu (0x0F) |
Stop PLC
Zastaví PLC pokiaľ bolo v režime RUN alebo len zmení stav na STOP pokiaľ bolo PLC v režime PAUSE.
PC | 0x03 | ||
PLC | ACK |
Symbol | Popis |
0x03 | Kód PLC 0x03h |
ACK | Potvrdenie prenosu (0x0F) |
Upload PLC
Príkaz na nahrávanie programu do PLC. Vstupom je sekvencia strojového kódu generovaná kompilátorom, rozdelená na 64 bytové bloky. Nekompletný blok musí byť doplnený nulami na svoju menovitú veľkosť. Koniec komunikácie musí byť potvrdený dvakrát.
PC | 0x04 | Prog 0-63 | Prog 64-128 | ACK | ACK | ||||
PLC | ACK | ACK | ACK |
Symbol | Popis |
0x04 | Kód PLC 0x04h |
Prog 0-63 | Program PLC 64 Bytov |
Prog 63-128 | Program PLC 64 Bytov |
ACK | Potvrdenie prenosu (0x0F) |
3.2.5 Download PLC
Príkaz na načítanie programu z PLC. Výstupom je sekvencia strojového kódu mikrokontroléra AVR. Je rozdelená na 64 bytové bloky. Koniec prenosu je signalizovaný dvojitým potvrdením.
PC | 0x05 | ACK | ACK | ||||||
PLC | Prog 0-63 | Prog 64-128 | ACK | ACK |
Symbol | Popis |
0x05 | Kód PLC 0x05h |
Prog 0-63 | Program PLC 64 Bytov |
Prog 63-128 | Program PLC 64 Bytov |
ACK | Potvrdenie prenosu (0x0F) |
Read PLC
Príkaz pre načítanie obsahu pamäťovej bunky PLC, definovanou 16 bitovou adresou.
PC | 0x06 | ADR HIGH | ADR LOW | ACK | |||||
PLC | DATA |
Symbol | Popis |
0x06 | Kód PLC 0x06h |
ADR HIGHT | Horný byte adresy |
ADR LOW | Dolný byte adresy |
DATA | Hodnota na adrese 1 byte |
ACK | Potvrdenie prenosu (0x0F) |
Write PLC config
Príkaz pre zápis konfiguračného bloku do pamäte PLC. Konfiguračný blok tvorí 14 bytov reprezentujúcich stavy výstupných portov v režime STOP a smer dát pre dané porty.
PC | 0x08 | PORT_ST | PORT_DIR | ||||||
PLC | ACK |
Symbol | Popis |
0x08 | Kód PLC 0x08h |
PORT_ST | 7 bytov reprezentujúcich stav v stave STOP |
PORT_DIR | 7 bytov reprezentujúcich smer dát. Log. 1 = výstup. |
ACK | Potvrdenie prenosu (0x0F) |
Read PLC config
Príkaz pre načítanie konfiguračného bloku s pamäte PLC. Konfiguračný blok tvorí 14 bytov reprezentujúcich stavy výstupných portov v režime STOP a smer dát pre dané porty.
PC | 0x09 | ||||||||
PLC | PORT_ST | PORT_DIR |
Symbol | Popis |
0x09 | Kód PLC 0x09h |
PORT_ST | 7 bytov reprezentujúcich stav v stave STOP |
PORT_DIR | 7 bytov reprezentujúcich smer dát. Log. 1 = výstup. |
Komunikačný modul communication.py
Tento modul zabezpečuje spojenie počítača s PLC. Využíva k tomu spomínaný modul pySerial (serial.py). Pri návrhu musíme počítať s tým, že modul musí bežať na systéme Windows a tiež Linux. Preto je importovaný štandardný modul platform ktorý slúži na identifikáciu OS.
Pred samotnou komunikáciou je nutné vytvoriť inštanciu triedy COM. Po úspešnom vytvorení môžeme inicializovať port COM.Set_port(Port). Port predstavuje reťazec symbolizujúci adresu portu. Pre systém Windows je to COMn, naproti tomu system Linux používa dev/ttySn pre porty COM a dev/ttyUSBn pre porty USB.
Pre ľahšie identifikovanie prístupných portov je navrhnutá funkcia COM.Scan_port, navracajúca zoznám prístupných portov. Funkcia skenuje 256 COM adries pre Windows a 256 COM a 256 USB adries pre systém Linux.
Taktiež obsahuje príkazy komunikačného protokolu PLC. A to COM.Run_plc, COM.Stop_plc a COM.Pause_plc. Na nahrávanie programu slúži COM.Send_plc(data), kde data predstavujú sekvenciu strojového kódu vytvorenej kompilátorom.