Jste zde

Jak na sériovou komunikaci s PLC Fatek

PLC Fatek, tak jako většina jiných PLC, umožňuje uživateli využívat sériovou komunikaci pro výměnu dat s libovolným dalším zařízením, které ji též poskytuje (snímače, čtečky, další PLC, PC, modemy, převodníky apod.). Díky však dost univerzálně pojaté funkci, která sériový přenos programově zajišťuje, však její nastavení není na poprvé zrovna jednoduché…

Naprogramování a zprovoznění sériové komunikace, například pro potřeby realizace komunikace se čtečkou čárového kódu, jsem potřeboval i já ve své úloze rozlišení produktu na dopravním páse podle čárového kódu a jeho následné vyhledání v databázi.

I když to na první pohled může působit pro začátečníky docela složitě, v praxi to opět zas tak složité není, ale je nutné vědět, kde je nutné brát potřebné informace o nastavení.

V mém případě jsem měl připojenou stacionární čtečku čárových kódů Sick přes klasickou sériovou linku RS-232, protože „kabelová vzdálenost“ mezi čtečkou a PLC nebyla příliš veliká (do 10 m). Jako programovatelný automat bylo použito PLC taiwanského výrobce FATEK (v ČR zastoupený společností SEA Praha), konkrétně střední cenová skupina s označením FBs-20MC (více v článku Výkonné PLC jednotky Fatek FBs-xxMC a přídavné moduly). To z hlavně z důvodu možnosti rozšíření o přídavné moduly, zde mimo jiné o modul sériové komunikace RS-232 s označením FBs-CM22, na který byla čtečka připojena. Modul obsahuje dva klasické 9pinové D-Sub konektory s klasickým zapojením signálů označené jako Port3 a Port4. Vcelku nic zvláštního…

Zajímavější je pak část programu PLC, která komunikaci, přesněji řečeno příjem ASCII znaků ze čtečky provádí. Jen pro pořádek připomínám, že pro programování PLC Fatek se využívá volného firemního vývojového softwaru WinProLadder a k dispozici je programování v liniovém (Ladder) diagramu obsahující databázi mnoho desítek různých funkcí (funkčních bloků).

Komunikační funkce FUN151

Základem této části programu je funkce s číslem FUN151, která nese název CLINK. Ta sama realizuje samotnou obsluhu sériové komunikace (RS-232/RS-422/RS-485), vysílání a příjem dat, které čte či ukládá z definovaného místa v paměti PLC. Mimo ni je  v "sortimentu" vývojového softwaru WinProLadder ještě funkce FUN150 reprezentující komunikaci MODBUS protokolem po sběrnici RS-485.

Funkce sériové komunikace FUN151 (151.CLINK) PLC Fatek vložená do Ladder programu.

Funkce FUN151 tak sice sama komunikaci obslouží, ale je nutné ji předem vhodně „naládovat“ parametry typu: který nainstalovaný port použít, jaký komunikační režim použít, kde najít bližší informace o přenosovém režimu a kam přijatá data odkládat či odkud vysílaná data brát.

To se zadá v parametrech samotného funkce do položek označených jako:

  • Pt = číslo komunikačního COM portu
  • MD = komunikační režim
  • SR = řídicí registry s informacemi pro řízení přenosu
  • WR = datové registry odkud se berou nebo kam se zapisují přenášená data

 

Detail nastavení samotné komunikační funkce.

Do políčka „Pt“ se prostě zadá číslo COM portu, kterým se má komunikovat. Hodnota může být 1 až 4, v případě použití externího modulu FBs-CM22 jde o porty číslo 3 a 4.

Velmi důležité je políčko MD. To definuje v jakém přenosovém režimu (jakým protokolem) se bude komunikovat. Funkce FUN151 je totiž schopna pracovat hned v několik různých režimech:

  • MD0 : Master station mode for FATEK CPU LINK = speciální firemní sériový komunikační režim pro přenos ASCII znaků prostřednictvím FATEK CPU LINK (“FATEK FBs-PLC Communication Protocol” ), který umožňuje sdílet data až mezi 254 PLC a využívá ke komunikaci speciální příkazy. Například se využívá i při komunikaci HMI panelů Fatek s PLC Fatek.
  • MD1 : Active ASCII data transmission mode = univerzální sériový přenos (vysílání/příjem) 7 nebo 8bitových dat ASCII znaků
  • MD2 : Passive ASCII data receiving mode = jen příjem ASCII znaků
  • MD3 : Master station mode of FATEK high speed CPU LINK = speciální vysokorychlostní komunikace mezi Fatek zařízeními pro přenos binárních dat

Je tedy nutné vybrat ten správný režim, což ve většině případů bude režim MD1 nebo MD2 podle toho, zda potřebujete komunikovat obousměrně nebo jen data v PLC přijímat, například z nějakého senzoru. Druhá varianta byl přesně můj požadavek, tedy příjem ASCII znaků vysílaných čtečkou, proto jsem použil režim MD2.

Význam registrů WR a SR funkce sériové komunikace FUN151

Do políčka SR je pak nutné zadat registr, který obsahuje informaci, zda aktuálně mám funkce vysílat či přijímat (v mém případě registr R10). V případě zvoleného režimu MD2 však na této hodnotě nezáleží, protože funkce jen přijímá. Důležitý je však hned následující registr v pořadí (u mě tedy R11), kam si funkce sahá pro informaci, jaký je úvodní a koncový znak přenášeného paketu (ASCII řetězce). Ten vždy uvozuje a ukončuje celou přenosovou posloupnost a je tedy takovým rozlišovacím znakem, co se má přijmout a co již vůbec neuvažovat. Laicky řečeno, data (znaky) přijatá mezi těmito „koncáky“ se budou ukládat do paměti PLC jako požadovaná užitečná data. Tyto znaky se dají libovolně nadefinovat přímo ve čtečce čárových kódů. V mém případě jde o hexa znaky „02“ a „03“, které jsem si nastavil v čtečce čárového kódu jako úvodní a koncový znak. Pokud by hodnota v registru zůstala nulová (0H) funkce by nepřetržitě přijímala, dokud by přicházeli nějaké znaky (příjem paketu se ukončí po určitém čase bez příchodu znaků, který se definuje pomocí speciálního bitu M1956 a speciálního registru R4148). V případě použití i režimu vysílání z PLC (režim MD1) pak na pozici SR+2 následuje počet vysílaných dat a od SR+3 pak konkrétní data, které se mají vyslat.

Přijatá data se pak ukládají do registrů od pozice uvedené v posledním políčku WR + 9. V mém případě tedy od registru R109. Předcházejících prvních 7 registrů funkce využívá pro své vnitřní účely a registr WR+8 (u mě tedy R108) je po dokončení příjmu uložen počat přijatých znaků. První přijatý znak je v mém případě úvodní rozlišovací znak „02H“, který se uloží do registru R109 a následující přijaté znaky do následujících registrů až do zachycení koncového znaku „03H“. Přestože jsou registry typu INTEGER, tedy 16bitové a jednotlivé přenášené znaky 8bitové, se uloží do každého registru PLC pouze jeden znak a horních 8 bitů registru je nula. V mém případě, kdy jsem čtečkou snímal 13místné kódy EAN13, jsem tak pro příjem využíval 15 registrů od registru R109 (13 znaků čárového kódu + úvodní a koncový znak) a tedy v registru R108 se nachází hodnota 15. Ta se například hodí pro kontrolu, zda již byla nová data přijata či ne (protože se do něj hodnota zapisuje vždy až po přijetí všech znaků), zda byl přijat správný počet znaků nebo pro funkci blokového přesunu přijatých dat na jiné paměťové místo PLC.

Ukázka nastavení konfiguračních registrů funkce sériové komunikace FUN151.

Jinak funkce FUN151 má ještě řídicí vstupy a výstupy, které spouštějí, pozastavují či přerušují její funkci (vstupy ENU = povolení funkce, PAU = pauza přenosu, ABT = přerušit přenos) nebo indikují stav funkce (ACT = aktivní přenos, ERR = chyba přenosu, DN = přenos dokončen). Těchto „signálů“ se dá využít pro řízení přenosu či dalšího vykonávání programu.

To ale v nastavování není stále vše. Aby to vůbec celé pracovalo, myslím tím komunikace probíhala, je ještě nutné nadefinovat parametry přenosu, tedy rychlost, parita, počet bitů znaku, počet stop bitů. To vše se zadává do jednoho speciálního registru R404x, kde x je číslo komunikačního portu, ke kterému se nastavení vztahuje. V mém případě Port3, tak tedy jde o registr R4043. Hodnota v něm je složena z konstanty 56H, dále následují 4 bity definující kombinaci parity, počtu bitů a stopbitů a nakonec 4 bity definující přenosovou rychlost. V mém případě 57600 b/s, tedy kombinace 1111 (8H).

A nakonec jsou tu ještě speciální bity M1936 (pro Port3), které říkají, zda je komunikační kanál č. 3, který chceme použít připraven (tedy zda již není obsazen / používaný jinou aplikací) .

Tabulka speciálních konfiguračních registrů pro jednotlivé porty sériové komunikace.

Průběh příjmu ASCII znaků ze čtečky

Samotná posloupnost běhu datového příjmu, pokud jsou parametry správně nastaveny, je pak následující:

Po aktivaci bloku komunikace aktivním signálem „ENU“, proběhne nejdříve kontrola zda je nadefinovaný sériový komunikační kanál přístupný (zda jej již nevyužívá jiné zařízení), tedy zda je aktivní bit M1936. Pokud ano, povolí se samotný režim komunikace, v našem případě příjmu dat do PLC vysílané čtečkou kódů. Tento stav je indikován aktivním signálem na výstupu funkce "ACT". Pokud není port připraven, komunikace se neuvolní a výstup "ACT" nenahodí.

Pokud je tedy výstup "ACT " nahozen, funkce čeká na zahájení komunikace příchodem startovacího bitu. V tu chvíli začne příjem dat a hledá se nadefinovaný startovací znak, který zahájí ukládání přijatých dat do paměti PLC od nadefinované adresy WR+9. Všechna data před nalezením startovacího znaku či sekvence se nemilosrdně zahazují. Stejně tak data po zjištění koncového znaku nebo po příjmu předem nadefinovaného množství dat, v mém případě počtu ASCII znaků. V případě, že v průběhu komunikace dojde k nějaké chybě, funkce to hlásí současně aktivním chybovým signálem „ERR“ a "DN" na výstupu bloku.

Po úspěšném dokončení příjmu se nahodí jen výstupní signál „DN“, což je povel pro další části programu, že data může přenést z přijímací části paměti do jiné oblasti či je vyhodnotit, aby příslušné paměťové místo bylo připraveno pro uložení dat z následujícího nového příjmu.

Závislost vstupních a výstupních signálů komunikační funkce FUN151.

Závěrem...

Pokud se správně nastaví parametry funkčního bloku FUN151, pak již vše běží po programové části bez problémů a nikdy při příjmu dat ze čtečky čárových kódů nedocházelo k žádným komunikačním problémům...

Autor článku : Antonín Vojáček

DOWNLOAD & Odkazy

Hodnocení článku: