Komunikačný modul: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
Riadok 11: Riadok 11:
  
  
{| class="prettytable"
+
 
>>> import serial
+
  >>> 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


Úč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()
Ukážka 43: Základné operácie so sériovým portom


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.