Modelový řídící systém pro ovládání technolog. procesu portálový jeřáb



Podobné dokumenty
Klimatizace. Třída: 4.C. Střední Průmyslová Škola Elektrotechnická Havířov Protokol do MIT. Skupina: 3. Zpráva číslo: 3

Univerzální jednočipový modul pro řízení krokových motorů

TW15 KONCOVÝ PRVEK MSKP. Popis výrobku Technická data Návod k obsluze. Technologie 2000 s.r.o., Jablonec nad Nisou

Uživatelská příručka

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Universální CNC stolní vrtačka

Ovládání tiskárny BT-100

PK Design. Uživatelský manuál. Modul USB-FT245BM v2.2. Přídavný modul modulárního vývojového systému MVS. Verze dokumentu 1.0 (7. 11.

Rozšiřující desce s dalšími paralelními porty Rozšiřující desce s motorkem Elektrickém zapojení Principu činnosti Způsobu programování

EC Motor. IO Modul EC200. EC200 Int. EC200 Ext. Verze 1.20, revize PMControl s.r.o.

Průvodce programováním AMiNi-E jazykem STL Dipl. Ing. Pavel Votrubec

1. Univerzální watchdog WDT-U2

Přijímací modul ECA-16

Control4 driver systému Lacrima - přijímač TRX-A a bateriové rádiové snímače teploty, vlhkosti TTX-A, TTX-AH a TTX-AX

Merkur perfekt Challenge Studijní materiály

Mikropočítačová vstupně/výstupní jednotka pro řízení tepelných modelů. Zdeněk Oborný

JAN JUREK POČÍTAČOVÁ INSTRUMENTACE. Virtuální přístroje. Jméno: Podpis: Název měření: Třída: E4B Skupina: 2. Číslo měření: 12 Změřeno dne: 13.2.

STŘEDOŠKOLSKÁ TECHNIKA 2013

POPIS STROJE S500 CNC

Přenos signálů, výstupy snímačů

Software pro vzdálenou laboratoř

Praktický návod. Inteligentní elektroinstalace obytného domu Ego-n

Ústav automobilního a dopravního inženýrství. Datové sběrnice CAN. Brno, Česká republika

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií

Principy komunikace s adaptéry periferních zařízení (PZ)

SW24x3 programovatelné relé

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Vysílací modul ECT-16

Převodník sériového rozhraní RS-485 na mnohavidové optické vlákno ELO E171 Uživatelský manuál

Uživatelský manuál. KNXgal. řízení zabezpečovacích ústředen. Galaxy ze sběrnice KNX. napájeno ze sběrnice KNX. indikace komunikace na KNX

Přednáška A3B38MMP. Bloky mikropočítače vestavné aplikace, dohlížecí obvody. 2015, kat. měření, ČVUT - FEL, Praha J. Fischer

ROUTPRO FX Programovatelný převodník RS485 na RS232. Katalogový list. prosinec Komunikační převodníky

Návrh konstrukce odchovny 2. dil

Přijímací modul ECA-4

Modemy rozhraní RS-485/422 na optický kabel ELO E243, ELO E244, ELO E245. Uživatelský manuál

Použití UART a radia na platformě micro:bit

UC485P. Převodník RS232 na RS485 nebo RS422. Průmyslové provedení s krytím

Programovatelné relé Easy (Moeller), Logo (Siemens)

Uživatelský manuál. KNXgal

December 12, Martin Bereznanin Daniel Piši Jan Kubizňák login xberez01 xpisid00 xkubiz01 ID

AD4RS. měřící převodník. 4x vstup pro měření unifikovaného signálu 0 10 V, 0 20 ma, 4 20 ma. komunikace linkami RS232 nebo RS485

Univerzální watchdog WDT-U2/RS485

1. Měření: V programu easy-soft otestujte tyto funkce: a) Vstup/výstup I, Q: Př.1.Sestavte jednoduchý program pro ověření funkce vstupu a výstupu.

Selec4. Čtyřnásobný přepínač RS232. Přepínání řídicími signály RS232 nebo externími vstupy. 25. listopadu 2011 w w w. p a p o u c h. c o m v.

CNC Technologie a obráběcí stroje

Modul LCD displeje se čtyřmi tlačítky. Milan Horkel

Návod k obsluze trenažéru

Programovatelné relé Easy (Moeller), Logo (Siemens)

FREESCALE TECHNOLOGY APPLICATION

Návrh ovládání zdroje ATX

Obousměrný modul ECX-4

Výukový materiál KA č.4 Spolupráce se ZŠ

DOMINUS Millennium MU4-N

Manuál přípravku FPGA University Board (FUB)

ŘÍZENÍ MECHANICKÝCH ZAŘÍZENÍ

Integrovaná střední škola, Sokolnice 496

VYHODNOCOVACÍ JEDNOTKA A VELMI RYCHLÝ PŘEVODNÍK

UC485. Převodník linky RS232 na RS485 nebo RS422 s galvanickým oddělením

Programovatelný časový spínač 1s 68h řízený jednočip. mikroprocesorem v3.0a

SB485. Převodník rozhraní USB na linku RS485 nebo RS422. s galvanickým oddělením. Převodník SB485. RS485 nebo RS422 USB. přepínače PWR TXD RXD

KP MINI KP MINI CONTROL

Laboratorní cvičení z předmětu Elektrická měření 2. ročník KMT

Seznámení s Quidy. vstupní a výstupní moduly řízené z PC. 2. srpna 2007 w w w. p a p o u c h. c o m

Praktické úlohy- 2.oblast zaměření

Rozvaděč na ochranu čerpadla RED JACKET

Systém přenosu audiosignálu pro evakuační rozhlasy 200M-EVA.E BOX + DIN35-LOCK* Slave 2. Slave 4

Digitální teploměr s LCD

Návod k obsluze [CZ] VMS 08 Heineken. Řídící jednotka pro přesné měření spotřeby nápojů. Verze: 1.1 Datum: Vypracoval: Vilímek

Bezdrátový přenos signálu v reálné aplikaci na letadle.

BKD/ BKF 7000 tyristorové DC měniče od 5 do 1100 kw

PCKIT LPT MODUL SBĚRNICE IOBUS PRO PC LPT. Příručka uživatele. Střešovická 49, Praha 6, s o f c o s o f c o n.

ZOBRAZOVACÍ ZAŘÍZENÍ DIS2351C1R1

PK Design. Modul USB2xxR-MLW20 v1.0. Uživatelský manuál. Přídavný modul modulárního vývojového systému MVS. Verze dokumentu 1.0 (05.04.

NÁVOD K POUŽÍVÁNÍ Řídící jednotka bazénového zakrytí

Quido ETH 30/3 Quido ETH 60/3 Quido ETH 100/3

Technická dokumentace ČTEČKA ČIPŮ DALLAS. typ DSRS

Megarobot.cz Senzory Jan Stránský. Senzory. Co je to senzor Jednotlivé senzory Hit senzor senzor nárazu Modul fotorezistoru...

Ṁikroprocesory v přístroj. technice. Ohm-metr ... Petr Česák

Genius 4x Čtyřosý pozicionér pro frézovací, vrtací a vyvrtávací stroje

Sériové komunikace KIV/PD Přenos dat Martin Šimek

POKLADNÍ ZÁSUVKY VIRTUOS

Výukové texty. pro předmět. Automatické řízení výrobní techniky (KKS/ARVT) na téma

Robot BBC Micro:bit kódovaní v PXT Editoru

STÍNÍCÍ TECHNIKA BUDOUCNOSTI

Ganitor. Monitorovací a řídicí I/O moduly pro systém C dubna 2011 w w w. p a p o u c h. c o m v.1.2

Počítač jako elektronické, Číslicové zařízení

ZOBRAZOVACÍ JEDNOTKA

ZOBRAZOVACÍ ZAŘÍZENÍ DIS2351C1R4

Multiplexory sériových rozhraní na optický kabel ELO E246, ELO E247, ELO E248, ELO E249, ELO E24A, ELO E24B. Uživatelský manuál

AUTOMATIKA DOPRAVNÍKŮ APD1

Obousměrný modul ECX-8

ZAŘÍZENÍ PRO MĚŘENÍ DÉLKY

Robotická ruka. Lukáš Fotr a Jaroslav Karban. Integrovaná střední škola, 2. ročník Kumburská 846, Nová Paka

MĚŘICÍ PŘÍSTROJ PRO PC. 4 VSTUPY: 0 10 V ZESÍLENÍ : 1x, 2x, 4x, 8x VÝSTUP: LINKA RS232 RS232 DRAK 4 U1 U2 U3 U4

DIGITÁLNÍ ODPALOVACÍ PULT

2) Nulový bod stroje používáme k: a) Kalibraci stroje b) Výchozímu bodu vztažného systému c) Určení korekcí nástroje

Podprogram DELAY.INC. - konstanty časových prodlev. RB3 equ 11b DEL1MS: DEL800: DEL400: DEL200 DEL100 DELAY: ret DEL1MS

4x vstup pro měření unifikovaného signálu 0 10 V, 0 20 ma, 4 20 ma. komunikace linkami RS232 nebo RS485

SEMESTRÁLNÍ PROJEKT Y38PRO

IPZ laboratoře. Analýza komunikace na sběrnici USB L305. Cvičící: Straka Martin, Šimek Václav, Kaštil Jan. Cvičení 2

Transkript:

Středoškolská odborná činnost 2006/2007 Obor 12 Tvorba učebních pomůcek, didaktická technologie Modelový řídící systém pro ovládání technolog. procesu portálový jeřáb Autor: Jiří Pénzeš SPŠ Trutnov, Školní 101 541 01 Trutnov, 3.ročník Konzultant práce: Ing. Petr Velech SPŠ Trutnov, Školní 101 541 01 Trutnov Trutnov, 2007 Královehradecký kraj

2 Jiří Pénzeš Tovární 598 Trutnov 4 Anotace Práce se zabývá realizací skutečného modelu technologického zařízení. Uvedeným zařízením je model portálového jeřábu, který je sestaven ze známé stavebnice Merkur. Předložená práce řeší vlastní hardware pro ovládání daného zařízení včetně několika způsobů komunikace mezi řidícím PC a hardwarem tohoto zařízení. Součástí je dále počítačový program v Control Web, který celé zařízení ovládá a poskytuje přehlednou vizualizaci při ovládání. V Trutnově dne 7. února 2007

3 Tímto prohlašuji, že jsem soutěžní práci vypracoval samostatně pod vedením Ing. Petra Velecha a uvedl v seznamu literatury veškerou použitou literaturu a další informační zdroje včetně internetu. V Trutnově dne 7.2.2007. podpis autora

4 Obsah Úvod:... 5 Komunikace:... 5 Návrh způsobu komunikace (protokol)... 5 Volba typu sběrnice pro komunikaci... 6 Hardware:... 7 Úprava dodaných motorků stavebnice Merkur, elektronické řízení... 7 Návrh způsobu snímání polohy natočení hřídele... 8 Řídící jednotka pro obsluhu komunikace a pohonu (up 8051)... 9 Software:... 9 Program řídící jednotky v asembleru... 9 Vlastní program v prostředí Control Web 5, vizualizace... 12 Přílohy:... 14 Fotografie... 14 Výpis programu řídící jednotky... 16 Výpis programu v Control Web 5... 23

5 Úvod: U příležitosti Krkonošské hospodářské výstavy naše škola navázala spolupráci s firmou Merkur Police n/m., která vyrábí známou stejnojmennou stavebnici Merkur. Z této stavebnice bylo postaveno několik modelů. Jedním z modelů byl i portálový jeřáb, který byl vybaven motorky pro pohon ve všech třech osách ovládaný tlačítky bez jakékoliv elektroniky a koncových snímačů. Tento model mě velice zaujal a rozhodl jsem se ho upravit a využít jako výukovou pomůcku v programování a automatizaci. Ve škole při výuce programování a následně i při cvičení z automatizace používáme prostředí Contrel Web 5 a řízení tohoto modelu jeřábu pomocí počítače PC může být pro studenty velice atraktivní. Komunikace: Aby bylo možné model jeřábu řídit a ovládat, je zapotřebí si mezi PC a modelem předávat informace. Je velice důležité zvolit vhodný způsob komunikace. Řídící PC musí elektronice modelu předávat informace o požadované poloze, kam se má hák jeřábu přesunout, případně i další řídící signály a naopak model musí PC informovat o skutečné poloze, aby tento mohl získané informace zpracovat. První myšlenka k realizaci komunikace byla použít zásuvnou kartu ADICOM, kterou máme k dispozici, a veškeré signály zpracovávat pouze programem v PC. Již při prvotním návrhu způsobu řízení, založeném na kartě ADICOM, jsem zjistil, že ovládání jeřábu tímto způsobem by bylo velmi obtížné a pro mě snad ani nerealizovatelné. Protože se v předmětu MIT (mikroprocesorová technika) věnujeme jednočipovému mikroprocesoru 8051, rozhodl jsem se po konzultaci s vyučujícím použít komunikaci založenou právě na tomto obvodu. Ukázalo se, že to byla velice šťastná volba. V případě použití karty ADICOM by kromě jiného k modelu vedlo velké množství vodičů, celé zařízení by se stalo molochem, musela by být minimální vzdálenost mezi kartou a modelem. Řešení na bázi obvodu 8051 otevírá v případě přenosu dat, ale i ovládání pohonů fantastické možnosti. Přenos lze realizovat od sériové linky RS232, přes USB až k bezdrátovému přenosu dat. Obvod 8051 má přímo v sobě oboustrannou sériovou linku USART. Návrh způsobu komunikace (protokol) Funkce portálového jeřábu je naprosto jasná. Pomocí pohonů ve třech osách musíme lidově řečeno dostat hák jeřábu na požadované místo. Protože však pohony jeřábu bude řídit PC musíme navrhnout a zvolit, co si jeřáb s PC budou vlastně povídat. Vzájemný způsob dorozumívání mezi jednotlivými zařízeními se nazývá komunikační protokol. K tomu, než vůbec můžeme tento protokol začít vytvářet je důležité přesně definovat co jaké zařízení bude obstarávat dělat. Zařízení PC Řídící jednotka up 8051 elektronika Funkce Vizualizace, přijímat skutečnou polohu, vysílat požadovanou polohu Snímat a vysílat skut. polohu, přijímat požadavek a na základě rozdílu ovládat budiče motorů (pohonů), nastavení výchozí polohy (kalibrace) Změna otáčení motorů (pohonů), optické snímaní polohy hřídele, koncáky Z funkce portálového jeřábu je jasné, že řídící PC musí jeřábu říci, kam se má hák jeřábu přesunout. Dále je zapotřebí, čas od času a hlavně při zapnutí zařízení hák jeřábu

6 přesunout do výchozí (kalibrační) polohy. Poloha háku jeřábu je vlastně dána polohou natočení hřídele jednotlivých pohonů, a vlivem prokluzu né skutečnou absolutní polohou, která se i při mírném prokluzování a pojezdu sem a tam může podstatně lišit. Tato metoda ovládání je založena na přírůstcích (nazývá se inkrementální) od výchozího známého bodu. V našem případě jsou těmito výchozími body koncové snímače v jednotlivých osách pohybu. Tuto metodu používá velké množství zařízení (tiskárny, plottery, scannery, CNC stroje atd.). První návrh komunikačního protokolu obsahoval hodnoty v osách X, Y a Z a dále řídící signál na požadavek kalibrace. V průběhu realizace se však protokol zjednodušil pouze na hodnoty v ose X, Y a Z. Požadavek na kalibraci se nakonec stal zbytečný, a ke kalibraci dojde v jednotlivých osách vždy, když je příslušná hodnota osy X, Y nebo Z nulová. Protože byl s ohledem na Control Web 5 nakonec zvolen přenos pomocí RS232, byl vytvořen následující protokol. Pro přenos hodnot bylo s rezervou zvoleno 12-ti bitové číslo (hodnoty 0 až 4095) v každé ose v obou směrech. To znamená, že přenos dat je pro příjem i vysílání stejný. Aby nedocházelo ke kolizi při přenosu hodnot odpovídajících řídícím znakům, a hlavně přenosu hodnoty 00H, je pro každé čtyři bity použit jeden znak (byte). Každý přenášený znak (byte) je tedy tvořen tak, že vyšší čtyři bity vždy obsahují hodnotu 3H a nižší čtyři bity obsahují odpovídající čtveřici bitů přenášené hodnoty. Protože je přenášena 12-ti bitová hodnota pro každou osu, je zapotřebí odeslat celkem 36 bitů. Daným způsobem to odpovídá přenosu 9-ti znaků. Ovladač sériového portu implementovaný v Control Web 5 však pro ukončení přenosu vyžaduje povinně dva řídící znaky CR LF. Proto je komunikace uskutečňována pomocí celkem 11-ti znaků (včetně CR LF). Znaky (byty) jsou tedy přenášeny v následujícím pořadí: 3 x byte pro osu X, 3 x byte pro osu Y, 3 x byte pro osu Z a nakonec znaky CR LF. Tvar přenášených znaků (bytů) pro hodnotu v jedné ose: 0 0 1 1 b11 b10 b9 b8 0 0 1 1 b7 b6 b5 b4 0 0 1 1 b3 b2 b1 b0 3xH 3xH 3xH Celkový komunikační protokol: Osa X Osa Y Osa Z CR LF b11- b8 b7- b4 b3- b0 b11- b8 b7- b4 b3- b0 b11- b8 b7- b4 b3- b0 3xH 3xH 3xH 3xH 3xH 3xH 3xH 3xH 3xH 13H 10H b0 b11: jednotlivé bity 12-ti bitové hodnoty x: odpovídající hodnota příslušných čtyř bitů Uvedený způsob komunikace je kompromisem, který umožňuje poměrně snadné zpracování na obou stranách. To znamená jak na straně PC, tak i na straně řídící jednotky. Volba typu sběrnice pro komunikaci Pro fyzické propojení PC s řídící jednotkou bylo zvoleno sériové rozhraní RS232, které je stále poměrně rozšířené u běžných PC. V současné době se samozřejmě nabízejí i další možnosti přenosu. Jednou z možností je využití dnes velice rozšířeného USB portu nebo pomocí bezdrátového spojení pomocí modulů 499,33MHz. Tyto moduly sice mají malou přenosovou rychlost, ale pro naši aplikaci to není kritické. Rozhraní RS232 je plně duplexní (umí nezávisle na sobě vysílat i přijímat současně) UART, což znamená univerzální asynchronní přijímač a vysílač. Vzhledem k tomu, že procesory 8051 již v sobě obsahují duplexní USART (univerzální synchronní i asynchronní přijímač a vysílač) lze obě zařízení vzájemně propojit. Jediným problémem je rozdílnost logických napěťových hladin (nejsou kompatibilní), což za nás vyřeší k tomu určené obvody např. MAX232.

7 Asynchronní přenos je založen na vysílání řídících signálu na jednom datovém vodiči společně s daty. Jedná se o řídící signály START a STOP bit. Tyto signály jsou v negaci a po zachycení signálu START bit se nastaví obvody přijímače pro příjem a přijímá jednotlivé datové bity. Po ukončení vysílání je na linku poslán signál STOP bit, přijímač ukončí příjem a přijímací obvody čekají na příchod dalšího řídícího signálu START bit. Celý děj se neustále opakuje. Pro asynchronní (samozřejmě i synchronní) přenos je nezbytně nutné, aby vysílač i přijímač byly nastaveny shodně a na stejnou přenosovou rychlost. Protože obě zařízení, jak PC, tak i řídící jednotka disponují obvody UART není realizace přenosu obtížná. Pouze, jak již bylo uvedeno, se musí obě zařízení nastavit shodně včetně přenosové rychlosti. Hardware: Velká část této práce je věnovaná úpravám, které jsou nezbytné pro elektronické řízení jeřábu. Úpravy jeřábu spočívají především v upevnění vhodných koncových snímačů do krajních poloh tak, aby byla možná kalibrace a nemohlo dojít ke kolizi. Dále vyřešit řízení motorků a zvolit vhodný způsob snímání polohy hřídele. Úprava dodaných motorků stavebnice Merkur, elektronické řízení Ke stavebnici Merkur jsou dodávány vlastně pohony, součástí kterých je i převodovka s možností volby jednoho ze dvou převodů. Pohony jsou poháněny běžnými stejnosměrnými motorky, u kterých se změna směru otáčení provádí změnou polarity napájení. Změnu polarity napájení je možné realizovat pomocí relé nebo samozřejmě elektronicky. Já jsem se rozhodl pro elektronické řešení řízení směru otáčení. V podstatě se jedná o běžný H-můstek, kde jsou dvě shodné větve tvořené komplementárními tranzistory, přičemž ve vodivém stavu je vždy pouze jeden tranzistor v závislosti na hodnotě řídícího signálu. Vývody motorku jsou zapojeny do středu obou větví a v závislosti na hodnotě logických signálů motorek buď stojí nebo je napájen v jednom nebo druhém směru. Každý motorek musí mít vlastní H-můstek. V případě pohonu jeřábu je tedy nutno mít tři H-můstky. Na obrázku je schéma zapojení a návrh plošného spoje.

8 Návrh způsobu snímání polohy natočení hřídele Poměrně mechanicky náročný úkol je snímání polohy hřídele. Při otáčení hřídele je nutno mít informaci o směru otáčení i úhlu natočení. Stavebnice Merkur obsahuje kruhovou součást, která je určena pro nasazení na hřídel a po obvodu jsou rovnoměrně rozmístěny otvory. Rozhodl jsem se tuto součást a optickou závoru využít pro snímání polohy. Jedná se o jednoduchý princip, jaký se používá například u klasické kuličkové myši k PC. Podmínkou pro správné snímání jsou dvě světelné závory, které musí být vzájemně pootočeny tak, aby výsledné signály byly fázově posunuty přibližně o úhel 45. Signál: A B Při vyhodnocení takto posunutých signálů je jeden inkrementální a druhý řídící, ze kterého lze určit směr otáčení (inkrementace nebo dekrementace). V případě, že signál A je inkrementální, tak každá změna jeho logické hodnoty inkrementuje (zvyšuje) nebo dekrementuje (snižuje) čítač polohy, a to v závislosti na logické hodnotě signálu B. Jdeme-li zleva, pak každá změna je reprezentována stejnou logickou hodnotou obou signálů. Naopak jdeme-li zprava, pak je každá změna reprezentována vzájemnou negací obou signálů. Řídící program pak na základě shody nebo negace těchto signálů inkrementuje nebo dekrementuje odpovídající proměnnou. Součást Merkuru, kterou jsem použil pro snímání polohy má rovnoměrně po obvodu otvory o průměru 4 mm a rozteč otvorů je 8 mm. Pro získání odpovídajícího signálu je zapotřebí umístit optozávory 6 mm od sebe pokud možno do osy otvorů. Schéma zapojení snímače a deska s plošnými spoji je na následujícím obrázku. Ačkoliv jsem si pohon, který má být opatřen snímačem polohy poctivě poměřil a plošný spoj nechal vyrobit přesně fotocestou, nepodařilo se mi optozávory umístit tak, abych získal požadované signály. Několikrát jsem optické prvky přepajoval, ale výsledné signály nebylo možné využít ke snímání polohy. Příčinou jistě bylo ruční pájení optických prvků, ale taky zřejmě přispěl fakt, že pohon Merkuru byl vyosen a značně házel. Nakonec nezbylo nic jiného, než součást Merkuru značně mechanicky upravit, čímž se samozřejmě zmenšila

9 citlivost snímače. Úprava je zřejmá z fotodokumentace. Po této úpravě byly výsledné signály naprosto v pořádku. Původní signál od snímače polohy Signál po úpravě a snížení citlivosti Vzhledem k použitým optočlenům, hlavně jejich charakteristice, již není potřeba výstupní signály snímače polohy nijak upravovat a lze je přímo připojit k vstupně/výstupním portům řídící jednotky. Řídící jednotka pro obsluhu komunikace a pohonu (up 8051) Jako řídící jednotku lze použít libovolný obvod řady 8051 v základním zapojení s převodníkem TTL/RS232 nutným pro přizpůsobení napěťové úrovně logických signálů. Já jsem jako řídící jednotku použil hotový kit, který je využíván ve výuce při praktických cvičeních. Aby komunikace, a samozřejmě i obslužný program v PC byly co nejjednodušší, ovládá řídící jednotka jeřáb úplně samostatně bez nutnosti vnějšího zásahu. Princip spočívá v tom, že PC po sériové lince dle stanoveného protokolu pošle řídící jednotce hodnoty, kam se má hák jeřábu posunout a řídící jednotka již samostatně ovládá pohony a kontroluje správnost polohy, přičemž samozřejmě vyhodnocuje stav koncových snímačů. Na druhou stranu řídící jednotka opět na základě stanoveného protokolu posílá do PC aktuální (v reálném čase) polohu háku jeřábu. Software: Program řídící jednotky v asembleru Nejdůležitější část modelu jeřábu je obslužný program řídící jednotky. Program je uložen přímo v paměti FLASH procesoru 8051. Protože program ošetřuje přímo jednotlivé bity vstupně/výstupních portů, a samozřejmě proto, že škola má vývojové prostředí pro tyto obvody, je program napsán v Asembleru 51. Struktura programu řídící jednotky je přehledně znázorněna v přiloženém vývojovém diagramu. Program se vlastně skládá z jednotlivých částí, které obsluhují sériovou linku, vyzvednutí a uložení přijímacího bufferu do paměti, zápis aktuální skutečné pozice do bufferu a jeho vyslání, sledování polohy na základě snímačů polohy a ovládání pohonů pro pojezd do požadované polohy. Sériová linka je nastavena v režimu 3 jako 9-bitový UART s přenosovou rychlostí 9600Bd. Přijímací i vysílací buffer má 16 bytů. Při příjmu není nutno dodržovat přesně syntaxi komunikačního protokolu (nemusí obsahovat CR LF), protože přijímací buffer je neustále naplňován dokud nedojde k časové prodlevě mezi přenášenými daty (tato prodleva je

povinná) minimálně cca. 10ms a lze ji měnit nastavením hodnoty SetIn pro proměnnou TimeIn. V tomto okamžiku je buffer uložen do paměti, nulován a připraven pro další příjem. Protože komunikační protokol je navržen jako 11-ti bytový, je pět bytů bufferu jako rezerva pro případné rozšíření funkce. K vysílání dochází přibližně každých 250ms, což lze opět měnit nastavením hodnoty SetOut pro proměnnou TimeOut. Nejprve je do vysílacího bufferu přesunuta aktuální skutečná pozice polohy háku včetně CR LF a poté je dán požadavek na odeslání dat z bufferu (11 bytů, počet bytů lze opět měnit v SetByte). Skutečná poloha háku jeřábu je dána vyhodnocením sejmutého aktuálního stavu snímače polohy. Tento stav snímače je uložen do paměti a vyhodnocován samostatně pro jednotlivé osy. V případě, že došlo ke změně logické hodnoty od inkrementálního snímače v dané ose, je v závislosti na stavu řídícího signálu snímače k příslušné proměnné přičteno nebo odečteno jedna. Tento postup je stejný pro všechny tři osy. Pohyb háku jeřábu v každé ose je závislý na rozdílu mezi požadovanou hodnotou (přijatou z PC) a skutečnou aktuální pozicí. Pokud jsou obě hodnoty stejné, je pohyb motorku zastaven. V případě rozdílu je vyhodnoceno, jestli je rozdíl kladný nebo záporný a motorek se rozběhne v odpovídajícím směru. Pokud by rozdíl trval, a v kterékoliv ose by došlo k sepnutí koncového spínače, motorek se zastaví. Pohyb je pak možný pouze v druhém směru. Jestliže je však sepnut koncový spínač v kalibrační (výchozí poloze) je současně vynulovaná příslušná proměnná. Zvláštním případem je kalibrace, která se vyvolá požadováním nulové pozice v dané ose. V tomto případě nezáleží na rozdílu hodnot ani na sejmuté aktuální pozici. Motorky jsou zapnuty v příslušném směru tak dlouho, dokud nedojde k sepnutí kalibračních koncových spínačů. Poté jsou příslušné proměnné opět vynulovány. Tento postup je opět stejný pro všechny tři osy. 10

Přiložený vývojový diagram usnadní orientaci v ovládacím programu. 11

Vlastní program v prostředí Control Web 5, vizualizace Součástí předložené práce je i aplikace pro ovládání jeřábu, která je naprogramována ve vývojovém prostředí Control Web 5. Program vytváří především jednoduché prostředí a vizualizaci celého procesu ovládání jeřábu. Pro úplnou představu o činnosti programu je přiložen vývojový diagram. 12

13 V následujících části je vysvětlení jednotlivých funkcí programu: Ovládání může být realizováno dvěma způsoby. První způsob funguje za pomoci šipek (viz obrázek vlevo). Zvolíme danou osu, kterou chceme ovládat (X,Y,Z) a stiskneme tlačítko. Jeřáb bude v chodu po dobu stisknutí tlačítka. Jakmile tlačítko přestane být stisknuté, jeřáb se zastaví v aktuální pozici. Druhý způsob představuje ruční zadávání souřadnic. Do pole určeného pro souřadnici vypíšeme danou souřadnici a stiskneme klávesu enter. Jeřáb se uvede do chodu a dojede na souřadnici, kterou jsme zvolili. Důležitou funkcí modelu jeřábu je také nastavení do výchozí polohy. Toto resetovaní může být buď jednotlivě v každé ose nebo všechny osy najednou. Funkce reset X, Y, Z nám zařídí, že dojde jak k fyzickému nastavení, tak i nastavení os na počáteční bod souřadnice (0,0,0). V programu je dále implementována nápověda, která slouží k jednoduchému vysvětlení funkcí.

14 Závěr: Touto prací se povedlo sestrojit funkční výukový model, který umožňuje názorné využití ICT při řízení technologických prostředků v automatizaci. Na této práci je také zajímavá ukázka propojeni různých technických oborů, což je v současné technické praxi nezbytným předpokladem úspěchu. Přílohy: Fotografie

15

16 Výpis programu řídící jednotky JMP Start StavHX EQU 30H StavLX EQU 31H PozHX EQU 32H PozLX EQU 33H StavHY EQU 34H StavLY EQU 35H PozHY EQU 36H PozLY EQU 37H StavHZ EQU 38H StavLZ EQU 39H PozHZ EQU 3AH PozLZ EQU 3BH MaskaX SET 11111100B MaskaY SET 11111100B MaskaZ SET 11111100B Scan EQU Port EQU 3CH 3DH TimeIn EQU 3EH TimeOut EQU 3FH ByteOut EQU 40H ; 11 znaku (3 x 3 byte + CRLF) ;--------------------------------------------------------- ; ;_XXXXXXXXXXX ; <- SetIn -> (TimeIn) ; => platny prijem ; ;_XXXXXXXXXXX XXXXXXXXXXX ; <---------- SetOut ----------> (TimeOut) ; => prenos out ; SetIn SET 10 ; v ms SetOut SET 250 ; v ms SetByte SET 11 ; max. 16 znaku, buffer od AdrOut ; posledni znaky CRLF (13,10) ;---------------------------------------------------------- ; Adr -> buffer (velikost max. 16 znaku Rx i Tx) ; ; pro prijem vice nez 16 znaku budou neustale ukladany ; a prepisovany znaky v bufferu (stale dokola dokud ; nedojde k prodleve TimeIn) ; pri vysilani bude odeslano SetByte znaku z bufferu ; (pozor: SetByte nesmi byt vetsi nez 16) ;---------------------------------------------------------- AdrIn SET 50H AdrOut SET AdrIn+16 ;------------------------------------- ; nastaveni casovace 2 ; pro 1ms/18,432MHz => 64000 tj FA00H SetTH2 SET 0FAH

17 SetTL2 SET 00H ;--------------------------- ; Definice reg 52, typ BYTE RCAP2L SET 0CAH RCAP2H SET 0CBH TL2 SET 0CCH TH2 SET 0CDH ; typ Bit TR2 SET 0CAH TF2 SET 0CFH ET2 SET 0ADH ;--------------------------- ORG JMP ORG JMP Start: 23H IntSer 2BH Int StavHX,#00H StavLX,#00H StavHY,#00H StavLY,#00H StavHZ,#00H StavLZ,#00H PozHX,#00H PozLX,#00H PozHY,#00H PozLY,#00H PozHZ,#00H PozLZ,#00H TimeIn,#0 TimeOut,#SetOut R0,#AdrIn R1,#AdrOut AdrOut+SetByte-2,#13 ; CRLF AdrOut+SetByte-1,#10 ; nastavit prenos ;---------------------------------------------------------- ; Oscil = 256 - f(osc)/32/12/bd ; 87H,#80H ;SMOD -> 2 x rychlost Oscil SET 251 ; -> 9600b/s (18,432MHz) CLR SM0 SETB SM1 TMOD,#20H TL1,#Oscil TH1,#Oscil SETB TR1 SETB REN ; priznak pro prijem ; nastaveni casovace 2 ;----------------------------------- TH2,#SetTH2 RCAP2H,#SetTH2

18 TL2,#SetTL2 RCAP2L,#SetTL2 SETB TR2 SETB ES ; seriovy port SETB ET2 ; casovac 2 SETB EA ; ALL JMP $ ;======================================================================= ; preruseni kazdou ms od citace 2 ; vyhodnotit pozici k stavu ; ; Poz -> je skutecna pozice jerabu ; Stav -> je pozadovana poloha jerabu ; ;======================================================================= Int: CLR TF2 ; Priznak preruseni -> set softwarove CPL P1.7 ;---------------------------------------------- A,TimeIn JZ SkIn1 DJNZ TimeIn,SkIn1 R0,#AdrIn ; ulozit hodnoty do StavX,Y,Z A,AdrIn ANL A,#0FH StavHX,A A,AdrIn+1 ANL A,#0FH SWAP A StavLX,A A,AdrIn+2 ANL A,#0FH ORL StavLX,A ANL StavLX,#MaskaX A,AdrIn+3 ANL A,#0FH StavHY,A A,AdrIn+4 ANL A,#0FH SWAP A StavLY,A A,AdrIn+5 ANL A,#0FH ORL StavLY,A ANL StavLY,#MaskaY A,AdrIn+6 ANL A,#0FH StavHZ,A A,AdrIn+7 ANL A,#0FH SWAP A

19 ANL ORL ANL SkIn1: StavLZ,A A,AdrIn+8 A,#0FH StavLZ,A StavLZ,#MaskaZ ;---------------------------------------------- DJNZ TimeOut,SkIn2 TimeOut,#SetOut ; odeslat hodnoty PozX,Y,Z A,PozHX ANL A,#0FH ORL A,#30H AdrOut,A A,PozLX AdrOut+2,A SWAP A ANL A,#0FH ORL A,#30H AdrOut+1,A ANL AdrOut+2,#0FH ORL AdrOut+2,#30H A,PozHY ANL A,#0FH ORL A,#30H AdrOut+3,A A,PozLY AdrOut+5,A SWAP A ANL A,#0FH ORL A,#30H AdrOut+4,A ANL AdrOut+5,#0FH ORL AdrOut+5,#30H A,PozHZ ANL A,#0FH ORL A,#30H AdrOut+6,A A,PozLZ AdrOut+8,A SWAP A ANL A,#0FH ORL A,#30H AdrOut+7,A ANL AdrOut+8,#0FH ORL AdrOut+8,#30H SkIn2: ByteOut,#SetByte R1,#AdrOut SBUF,@R1 ;---------------------------------------------------------- ; vyhodnoceni pohybu bit 0,2,4 -> pouze zmena ; A,P0

20 XRL ANL JZ Port,A A,Scan A,#00010101B Csk04 Scan,A ; Pro motor X JNB ACC.0,Csk01 A,Port JB ACC.0,Ask01 CPL ACC.1 Ask01: JB ACC.1,Bsk01 DEC PozLX A,PozLX CPL A JNZ Csk01 DEC PozHX JMP Csk01 Bsk01: INC PozLX A,PozLX JNZ Csk01 INC PozHX Csk01: A,Scan ; Pro motor Y JNB ACC.2,Csk02 A,Port JB ACC.2,Ask02 CPL ACC.3 Ask02: JB ACC.3,Bsk02 DEC PozLY A,PozLY CPL A JNZ Csk02 DEC PozHY JMP Csk02 Bsk02: INC PozLY A,PozLY JNZ Csk02 INC PozHY Csk02: A,Scan ; Pro motor Z JNB ACC.4,Csk03 A,Port JB ACC.4,Ask03 CPL ACC.5 Ask03: JB ACC.5,Bsk03 DEC PozLZ A,PozLZ CPL A JNZ Csk03 DEC PozHZ JMP Csk03 Bsk03: INC PozLZ A,PozLZ JNZ Csk03 INC PozHZ Csk03:

21 Scan,Port Csk04: ;---------------------------------------------- ; Pojezd do pozadovaneho stavu A,StavHX ; vychozi pozice pro Stav=0 JNZ S0X A,StavLX JZ S02 S0X: A,PozHX CJNE A,StavHX,SKX01 A,PozLX ANL A,#MaskaX CJNE A,StavLX,SKX01 ; zastavit motor X JMP S01 S00: PozHX,#00H PozLX,#00H S01: SETB P2.0 SETB P2.1 JMP SKX03 S02: PozHX,#00H PozLX,#01H SETB C SKX01: JNC SKX02 JNB P1.0,S00 ; narazi na koncak a nuluje pozici SETB P2.0 CLR P2.1 JMP SKX03 SKX02: JNB P1.1,S01 ; narazi na koncak CLR P2.0 SETB P2.1 SKX03: ; - - - - - - - - - - - - - - - - - - - - - - - A,PozHY CJNE A,StavHY,SKY01 A,PozLY ANL A,#MaskaY CJNE A,StavLY,SKY01 ; zastavit motor Y SETB P2.2 SETB P2.3 JMP SKY03 SKY01: JNC SKY02 SETB P2.2 CLR P2.3 JMP SKY03 SKY02: CLR P2.2 SETB P2.3 SKY03: A,PozHZ CJNE A,StavHZ,SKZ01 A,PozLZ ANL A,#MaskaZ CJNE A,StavLZ,SKZ01 ; zastavit motor Z

22 SETB P2.4 SETB P2.5 JMP SKZ03 SKZ01: JNC SKZ02 SETB P2.4 CLR P2.5 JMP SKZ03 SKZ02: CLR P2.4 SETB P2.5 SKZ03: RETI ;======================================================================= IntSer: JNB RI,Sk01 CLR RI CPL P1.6 TimeIn,#SetIn ; TimeOut pocet preruseni (ms) @R0,SBUF INC R0 CJNE R0,#AdrIn+16,Sk01 R0,#AdrIn Sk01: JNB CLR TI,Sk03 TI DJNZ ByteOut,Sk02 JMP IntSer Sk02: INC R1 SBUF,@R1 JMP IntSer Sk03: RETI ;======================================================================= END

23 Výpis programu v Control Web 5 directories end_directories; settings operation_mode = real_time; startup_options call_procedures = false; activate_receivers = false; output_action = set_local; end_startup_options; end_settings; driver Ovl : 'ascdrv.dll', 'ASCDRV.DMF', 'ASCDRV.PAR'; end_driver; data channel DataIn : string {driver = Ovl; driver_index = 3; direction = input}; DataOut : string {init_value = '0'; driver = Ovl; driver_index = 4; direction = output}; end_channel; var posun1 : boolean {init_value = false; comment = 'tlacitko pro posun'}; posun2 : boolean {init_value = false; comment = 'tlacitko pro posun'}; posun3 : boolean {init_value = false; comment = 'tlacitko pro posun'}; posun4 : boolean {init_value = false; comment = 'tlacitko pro posun'}; posun5 : boolean {init_value = false; comment = 'tlacitko pro posun'}; posun6 : boolean {init_value = false; comment = 'tlacitko pro posun'}; x_osav : real {init_value = 190; comment = 'souradnice velkeho voziku'}; y_osav : real {comment = 'souradnice velkeho voziku'}; vyskav : real {comment = 'souradnice velkeho voziku'}; sirkav : real {comment = 'souradnice velkeho voziku'}; StavX : real {comment = 'pozadovana hodnota, odesilana'}; StavY : real {comment = 'pozadovana hodnota, odesilana'}; StavZ : real {comment = 'pozadovana hodnota, odesilana'}; pozx : real {comment = 'aktualni pozice jerabu'}; pozy : real {comment = 'aktualni pozice jerabu'}; pozz : real {comment = 'aktualni pozice jerabu'}; koex : real {comment = 'koecifient pro meritko velikosti'}; koey : real {comment = 'koecifient pro meritko velikosti'}; koez : real {comment = 'koecifient pro meritko velikosti'}; x_osal : real {comment = 'souradnice velkeho lanka'}; y_osal : real {comment = 'souradnice velkeho lanka'}; vyskal : real {comment = 'souradnice velkeho lanka'}; sirkal : real {comment = 'souradnice velkeho lanka'}; x_osah : real {comment = 'souradnice velkeho "haku"'}; y_osah : real {comment = 'souradnice velkeho "haku"'}; sirkah : real {comment = 'souradnice velkeho "haku"'}; vyskah : real {comment = 'souradnice velkeho "haku"'}; x_osam : real; y_osam : real; sirkam : real; vyskam : real; x_osahm : real; y_osahm : real;

24 x_osalm : real; y_osalm : real; napoveda : boolean {init_value = false}; skryj_nap : boolean {init_value = true}; o_programu : boolean {init_value = false}; skryj_prog : boolean {init_value = true}; vypnout : boolean {init_value = false; comment = 'vypne aplikaci (program)'}; start_programu : boolean {init_value = false; comment = 'pri startu programu nastavi X,Y,Z na nulu'}; resetx : boolean {init_value = false; comment = 'reset X na nulu'}; resety : boolean {init_value = false; comment = 'reset Y na nulu'}; resetz : boolean {init_value = false; comment = 'reset Z na nulu'}; resetxyz : boolean {init_value = false; comment = 'reset X,Y,Z na nulu'}; prom : boolean {init_value = false; comment = 'pomocna promenna'}; end_var; end_data; instrument panel panel_1; owner = background; position = 10, 70, 1000, 600; window = normal; win_title = 'Jerab beta 1.0'; win_disable = zoom, minimize, maximize; dv_file = 'JERAB_PANEL.JPG'; procedure OnActivate(); begin ukazatel1.disable(); ukazatel2.disable(); ukazatel3.disable(); if start_programu = false then if pozx <> StavX then StavX = 0; start_programu = true; else start_programu = true; if pozy <> StavY then StavY = 0; start_programu = true; else start_programu = true; if pozz <> StavZ then StavZ = 0; start_programu = true; else start_programu = true;

25 end_procedure; end_panel; panel o_programu; position = -3, 50, 1000, 350; visibility = skryj_prog; dv_file = 'O_PROGRAMU.JPG'; procedure OnActivate(); begin end_procedure; end_panel; switch switch_3; owner = o_programu; position = 854, 315, 137, 31; win_disable = zoom, maximize; output = o_programu; mode = text_button; font = 'Microsoft Sans Serif (Central European)', 11, bold; true_text = 'Zavøi o programu'; false_text = 'Zavøi o programu'; auto_update; end_switch; panel napoveda; position = -3, 50, 1000, 350; visibility = skryj_nap; dv_file = 'NAPOVEDA.JPG'; procedure OnActivate(); begin if napoveda = true then if o_programu = true then o_programu = false; skryj_prog = false; skryj_nap = true; if napoveda = false then skryj_nap = false; if o_programu = true then if napoveda = true then napoveda = false; skryj_nap = false; skryj_prog = true;

26 if o_programu = false then skryj_prog = false; if o_programu = true then napoveda = false; skryj_nap = false; o_programu = true; skryj_prog = true; end_procedure; end_panel; switch switch_3; owner = napoveda; position = 814, 295, 165, 36; win_disable = zoom, maximize; output = napoveda; mode = text_button; font = 'Microsoft Sans Serif (Central European)', 11, bold; true_text = 'Zavøi nápovìdu'; false_text = 'Zavøi nápovìdu'; auto_update; end_switch; meter meter_1; position = 375, 500, 75, 20; expression = pozy; mode = text_display; range_to = 4000; low_limit = 50; high_limit = 3950; font = font_caption; colors paper = black; value = blue; low_limit = red; high_limit = red; end_colors; end_meter; panel lanko1; position = 731, 130, 3, 1; dv_file = 'LANO.JPG'; end_panel; panel hak1; position = 726, 130, 14, 21; dv_file = 'HAK.JPG'; end_panel; control ukazatel3;

27 position = 456, 530, 70, 12; output = StavZ; mode = horizontal_slider; range_to = 4000; real_step = 10; auto_update; colors border_paper = green; top_shadow = color_window; bottom_shadow = 76, 120, 157; paper = color_highlight; mark = magenta; select = color_windowtext; end_colors; end_control; control ukazatel2; position = 456, 500, 70, 12; output = StavY; mode = horizontal_slider; range_to = 4000; real_step = 10; auto_update; colors border_paper = green; top_shadow = color_window; bottom_shadow = 76, 120, 157; paper = color_highlight; mark = magenta; select = color_windowtext; end_colors; end_control; panel hak; position = 101, 130, 14, 21; dv_file = 'HAK.JPG'; end_panel; panel lanko; position = 106, 130, 3, 1; dv_file = 'LANO.JPG'; end_panel; panel vozik_mal; timer = 0.01; position = 716, 90, 30, 27; dv_file = 'VOZIK_02.JPG'; end_panel; panel vozik_velky; timer = 0.01; position = 80, 90, 54, 28;