PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000. 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1



Podobné dokumenty
MenuLIB KNIHOVNA SIMPLE4 PRO TVORBU UŽIVATELSKÉHO ROZHRANÍ NA PLC MICROPEL

LdrLib KNIHOVNY PRO TVORBU ZAVADĚČE (LOADERU) ŘÍDICÍCH APLIKACÍ. Příručka uživatele a programátora

Řídicí systémy řady 400 str.2 z 16 MICROPEL

CA21 PŘÍRUČKA UŽIVATELE

Propojení systému MICROPEL a inteligentní elektroinstalace ABB Ego-n

NAPOJENÍ ZAŘÍZENÍ S KOMUNIKACÍ BELIMO MP-BUS NA SÍŤ AUTOMATŮ MICROPEL

MT201. 0LQLDWXUQtSURJUDPRYDWHOQêWHUPLQiO 8åLYDWHOVNiStUXþND 070,1,$7851Ë7(50,1È/VWUDQ

Knihovna GalaxyLib TXV druhé vydání srpen 2012 změny vyhrazeny

Firemní aplikace pro nástěnný ovladač AMR-OP60. Aplikace disponuje automatickým přepínáním zobrazení vnitřní / venkovní teploty.

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

PCKEYB JEDNOTKA PRO OBSLUHU KLÁVESNICE TYPU PC AT. Příručka uživatele a programátora

KNIHOVNA LETNI_CAS. edice verze 1.0. Knihovna letni_cas. Ing. Zdeněk Rozehnal MICROPEL s.r.o. 2008

1 Knihovní funkce Skupina funkcí bool Skupina funkcí String Testovací program ELDEC Interface X.XX Example...

Universal Serial Bus. Téma 12: USB. Komunikační principy Enumerace Standardní třídy zařízení

ArduinotechGSMShield knihovna

Temp-485. Teplotní čidlo pro vnitřní použití na sběrnici RS-485 s jednoduchým komunikačním protokolem

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

1. ÚVODNÍ USTANOVENÍ 2. NAHRÁNÍ VLOŽENÉHO PROGRAMU


MCIO2. Kompaktní I/O modul. Shrnutí. Použití Kompaktní I/O modul pro sběr dat a řízení procesů. Funkce

MIDAM MW 240 modbus 2 x DI, 2 x DO

Malý distribuovaný I/O modul

K8055D.DLL v Technická příručka. Úvod. Obecné. Konvence volání. Nastavení adresy karty

Knihovna EpsnetLib TXV první vydání září 2012 změny vyhrazeny

FUNKCE DVEŘNÍKU INSTALACE DVEŘNÍKU

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

uterm03r JEDNOTKA IMPLEMETUJÍCÍ VZDÁLENÝ TERMINÁL TERM03 Příručka uživatele a programátora

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

1 Podrobná specifikace Yunifly Datasheet

Programování v Javě I. Leden 2008

JEDNOTKA SNÍMAČŮ 1-WIRE (DALLAS) TUDS-40-MOD

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

HypEd4 Uživatelská příručka 2004 HYPEL

O datových typech a jejich kontrole

SA-GSMALL. Instalační manuál

Paměti a jejich organizace

Pace Maker ZJ18. Návod k použití. 1) Popis výrobku:

ALLEX FX Programovatelný logický automat. Katalogový list. říjen Programovatelné logické automaty

všechna práva vyhrazena kopírování publikace dovoleno pouze bez změny textu a obsahu

Knihovna DataBoxLib TXV první vydání prosinec 2010 změny vyhrazeny

MBUS.LIB KNIHOVNA URČENÁ PRO MCA46 OVLÁDÁNÍ PŘÍKAZOVÉ BRÁNY M-BUS KOMUNIKÁTORU CA6 / AUTOMATU. edice verze 1.2

Teoretické minimum z PJV

dovolují dělení velkých úloh na menší = dekompozice

USB485 Převodník USB na RS-485. Katalogový list. únor Komunikační převodníky

LZ77 KNIHOVNA PRO KOMPRESI A DEKOMPRESI DAT POMOCÍ ALGORITMU LZ77. Příručka uživatele a programátora

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

MANUÁL SMART-MQU. 1. Úvod. 2. Fyzické provedení přenosové sítě.

Programovací jazyk Pascal

Komunikace v síti M-Bus

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

Ekvitermní regulátor teploty TERM2.2

2) Nový druh připojení Ethernet-CA5 umožňující připojit nové zařízení CA5 a to přes Ethernet nebo přes GPRS

BankKlient. FAQs. verze 9.50

Kompaktní procesní stanice

Záznamník teploty ZT, ZT1ext Návod k použití

Modul analogových vstupů M-AI4

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

CQ485. Opakovač a převodník linek RS485 a RS422. S aktivní i pasivní obnovou dat

Měřič krevního tlaku. 1 Měření krevního tlaku. 1.1 Princip oscilometrické metody 2007/

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

usimt03r JEDNOTKA PRO SIMULACI VZDÁLENÉ VARIANTY TERMINÁLU TERM03 NA POČÍTAČI PC Příručka uživatele a programátora

NPRG030 Programování I, 2017/18 1 / :22:16


Rozšiřující modul s protokolem MODBUS

ExcelVBAmodul. Podpora pro výměnu dat automatů MICROPEL s aplikací Microsoft Excel

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Převodník na DIN lištu s frekvenčním výstupem typ RF1

Snímač barometrického tlaku T2314, T2414

MIDAM UC 101 modbus regulátor topení, teplota, 1x DO, 1x DI, RS485

Canon Controller. Komunikační protokol. Řídicí jednotka k objektivům Canon EF/EF-S

TCP2RTU. Transparentní převodník protokolu MODBUS TCP na MODBUS RTU/ASCII. Tři varianty: pro RS422, RS485 a RS232

MCP BIOS řídicí jednotky Kit386EXR

24 bitový AD USB modul AD24USB. Návod k použití

Programy v prostředí operačního systému

Knihovna XmlLibEx TXV druhé vydání prosinec 2013 změny vyhrazeny

MIDAM Verze 1.1. Hlavní okno :

UDAQ-1216A UDAQ-1416A. multifunkèní modul pro rozhraní USB

Návod k obsluze satelitního lokalizátoru GUARDYS PGT5020

Programování v Javě I. Únor 2009

Návod na obsluhu SendPíp1 verse V0.2 (PŘEDBĚŽNÝ NÁVOD).

FPC - Převodník pro čínské čtečky F17 a F18 - podrobný popis služeb a příkazů -

TEPL2344 Technická dokumentace PŘEVODNÍK TEPLOTY. typ TEPL2344 s rozhraním RS232.

Uživatelský manuál programu WZORKY. pro vyčítání historických databank. z regulátorů PROMOS line 2

Dotykový panel FTC03DALI

Rychlý průvodce konfigurací LAN SUITE 2002

SCIO-11. Stavebnice PROMOS Line 2. Technický manuál

CA4 PŘÍRUČKA UŽIVATELE

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

Operační systémy Tomáš Hudec. 6 Komunikace procesů (IPC) Obsah: 6.1 Klasické problémy souběhu Obědvající filosofové

PREPROCESOR POKRAČOVÁNÍ

TQS3. popis modifikace s protokolem MODBUS RTU. 29. února 2008 w w w. p a p o u c h. c o m 0199

Komunikace v síti GSM/GPRS

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

KONFIGURACE RS485/MODBUS JEDNOTKY PDU4xx-P

Komunikace v síti ARION definice tabulkou

Adresovatelný převodník rozhraní RS48/RS232 ELO E250. Uživatelský manuál

TEDrv OVLADAČE KLÁVESNICE, MYŠI A DISPLEJE EMULÁTORU TERMINÁLU PRO MS WINDOWS. Příručka uživatele a programátora

Transkript:

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/2000 1 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 1

PESlib Popis knihoven PASCAL a C 03.2000 2. verze dokumentu Zmìny a doplòky proti 1. verzi dokumentu : pouze reedice, zmìny žádné PESlib MICROPEL 1995,1996 všechna práva vyhrazena kopírování publikace dovoleno pouze bez zmìny textu a obsahu http://www.micropel.cz 2 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 2

ÚVOD 1. ÚVOD Knihovny jsou øešeny jako samostatné bloky pro zaèlenìní do programù psaných v jazycích PASCAL a C. Jako výchozí prostøedí byly zvoleny pøekladaèe fy Borland - TURBO PASCAL nebo BORLAND C, C++. Kromì již pøeložených souborù (*.TPU nebo *.OBJ) jsou souèástí dodávky i úplné zdrojové texty (*.PAS a *.CPP). Pro dokonalé pochopení funkce a významu jednotlivých funkcí v knihovnách je tøeba vìdìt ještì základní minimum o funkci sí ového protokolu PESNET, používaném automaty PES (viz dále). Knihovny obsahují všechny základní nástroje pro komunikaci se sítí automatù PES (s protokolem PESNET verze 3.xx) pøes standardní PC sériový port COM1 - COM4. Komunikaèní procedury pracují tak, aby bylo možné pro komunikaci využívat pøevodník RS323 -> RS485 typu PES-CA1 i bez externího napájení. 1.1. Adresy promìnných U funkcí, které ètou nebo zapisují data do programových registrù (ReadSTPBit, WriteSTPBit, ReadSTPWord, WriteSTPWord) je tøeba patøiènou promìnnou vždy zadat její absolutní adresou. U promìnných umís ovaných automaticky pøekladaèem SIMPLE (s využitím "otazníkového" zápisu pøi definici symbolických názvù promìnných) je tøeba jejich skuteènou adresu zjistit z pøíslušného *.DNL souboru (soubor vzniklý pøekladem zdrojového textu). Tyto adresy se však napø. po zadefinování dalších promìnných mohou po dalším pøekladu posunout a v takovém pøípadì je nutné opìtovnì zkontrolovat, zda nedošlo v adresách ke zmìnì. Z uvedeného vyplývá, že používání automatického pøiøazování promìnných pomocí otazníku je pro spolupráci s knihovnami PESLIB nevhodné a jen komplikuje situaci. Seznam absolutních adres všech promìnných používaných jazykem SIMPLE: promìnné typ popis absolutní adresa X0 - X31 bit digitální vstupy BIT 0-31 Y0 - Y31 bit digitální výstupy BIT 32-63 M0 - M127 bit uživatelské bity BIT 64-191 B0 - B127 bit speciální funkèní bity BIT 192-319 I0 - I31 word analogové vstupy WORD 0-31 O0 - O31 word analogové výstupy WORD 32-63 D0 - D63 word uživatelské registry WORD 64-127 W0 - W127 word speciální funkèní registry WORD 128-255 3 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 3

ÚVOD 1.2. Struèný popis funkce sítì PESNET V3.xx PESNET je sí typu "multi-master, token-passing". Jinak øeèeno : všechny stanice v síti jsou na stejné hierarchické úrovni, všechny mají oprávnìní k vysílání dat a pokyn k vysílání (tzv. TOKEN) si navzájem pøedávají v logickém kruhu. I když stanice nemají žádná data k vysílání, sí bìží "naprázdno" - stanice si neustále dokola pøedávají token. Pokud dojde k narušení komunikace na síti (napø. zkratem na vedení, vnucením log. úrovnì nula na lince, nebo vlivem extrémnì silného rušení), pøeruší se provoz na síti a stanice zaènou èasovat tzv. "mrtvý èas", po jehož uplynutí se opìt pokusí nastartovat provoz na síti. Tento èas je mimo jiné závislý i na adrese stanice (aby se zabránilo kolizím pøi restartu). Stanice která první doèasuje mrtvý èas do konce zahájí vysílání a zaène zkoušet pøedání token na všechny sí ové adresy dokud nedostane kladnou odpovìï. Tento mechanismus funguje rovnìž vždy po zapnutí stanic a zabezpeèuje tak spolehlivý start sítì. Maximální moøná délka mrtvého èasu (závisí též na adresách použitých v síti) je asi 5 sekund. Pokud je právì zapnuta další stanice na již aktivní síti, trvá její zaøazení do logického kruhu o nìco déle (zpravidla do 20 sekund - závisí i na použité baudové rychlosti) - každá stanice totiž neustále prohledává volný prostor adres pøed sebou a toto prohledávání se nemùže dít pøíliš èasto, aby se zbyteènì nesnižovala propustnost sítì. Pøenos dat po síti probíhá po malých kvantech - tzv. "rámcích". Každý rámec obsahuje adresu cílové stanice (lze použít i speciální globální adresu - pak je rámec urèen všem stanicím v síti) a kontrolní souèet. Pokud stanice detekuje pøi pøíjmu rámce chybu kontrolního souètu, ignoruje celý tento rámec. Pøi používání knihoven PESNET je tøeba mít na pamìti logický fakt, že stanice pøi pøíjmu rámce s globální adresou nedává žádnou odezvu - nelze tedy nastavit globální adresu a pak vyèítat data (v tomto pøípadì interface hlásí chybu "RX TIMEOUT"). 1.3. Používání knihoven pro PESNET3 Na lince neustále bìží pøedávání TOKEN v logickém kruhu mezi stanicemi. Na vyšších rychlostech již standardní poèítaè PC se svým COM portem není schopen se zaèlenit do logického kruhu aniž by jej zdržoval, v horším pøípadì dokonce úplnì zrušil. Komunikace s automaty proto probíhá v dávkovém režimu. Bìhem pøenosu dat mezi PC a stanicemi je logický kruh zrušen, pøedávání TOKEN je zastaveno a PC pracuje jako master. Po pøenesení potøebných dat je vhodné nastartovat opìt pøedávání TOKEN (pomocí "SendToken") a nechat chvíli prostor pro pøenos globálních sí ových promìnných mezi automaty. Délku èasových prodlev zvolíme v závislosti na množství využívaných sí ových promìnných a na množství stanic v síti (maximální doba vysílání jedné stanice je asi 15 ms pøi rychlosti 57600 Bd, tedy pøi 30 stanicích v síti mùže trvat jedna obrátka logického kruhu maximálnì asi 450 ms). Na disketì jsou i pøíklady (EXAMPLES), které ukazují typické použití funkcí modulù PESNET3. 4 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 4

ÚVOD 1.4. Detekce chyb Po zavolání kterékoliv knihovní funkce se vždy nastaví pøíznaková promìnná Success. Pokud je nastavena (PASCAL : boolean = true, nebo C++ : unsigned char = 1), akce probìhla úspìšnì a pokud není (PASCAL - false, C++ - 0), znamená to, že došlo k chybì a v promìnné COM_Error je kód chyby. Chyby jsou definovány jako symbolické konstanty takto : Symbol. název Kód Popis chyby ERR_NONE 00 žádná chyba Chyby vzniklé a detekované na stranì PC ERR_INITCOM 01 chyba procedury COM_Init pøi inicializaci COM portu ERR_TIMEOUT 02 obecná chyba pøekroèení èasového limitu na akci ERR_TIMEOUTTX 03 pøíliš dlouhé èekání na uvolnìní vysílaèe ERR_TIMEOUTRX 04 pøíliš dlouhé èekání na pøíjem znaku z linky ERR_RXSUM 05 chyba kontrolního souètu pøijatého rámce ERR_DATASIZE 06 nesouhlasí délka datového pole pøi pøíjmu rámce ERR_ADDRESS 07 adresa stanice mimo povolený rozsah ERR_DEBUGFLAG 08 interní chybový kód ERR_MOREBAUD 09 detekovány stanice s rùznou komunikaèní rychlostí ERR_NETEMPTY 10 žádná aktivní stanice v síti Chyby vzniklé a detekované v pøipojeném automatu ERR_BADERROR 128 neznámý chybový kód ze subprocesu ERR_BADCMD 129 neznámý pøíkaz v rámci ERR_TARGETSUM 130 chybný kontrolní souèet v pøijatém rámci ERR_BADFRAME 131 neznámý typ rámce ERR_SELFRX 132 chyba pøi zpìtné kontrole vlastního vysílání ERR_IOFULL 133 plný vstupní buffer pøi operaci CmIO - ztráta dat ERR_NODATA 134 ve výstupním bufferu nejsou data (operace CmIO) 5 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 5

PASCAL - PESNET3.PAS 2. KNIHOVNA PASCAL - MODUL PESNET3.PAS Rozhraní modulu obsahuje jednak promìnné, jednak procedury a funkce. Zde je struèný pøehled: Promìnné BaudRate : longint baudová rychlost ComPort : byte èíslo COM portu, použitého pro komunikaci COM_Error : byte kód chyby vzniklé pøi poslední akci Success : boolean úspìšnost poslední akce (true=ok, false=error) StationNum : byte poèet stanic v síti detekovaný procedurou "NetScan" StationList : array[0..31] of byte seznam adres nalezených v síti pomocí "NetScan" Procedury a funkce procedure COM_Init; procedure COM_Close; function BaudScan:longint; procedure NetScan; procedure SelectStation(StAddr : byte); procedure NetBreak; procedure SendToken; function ReadSTPWord(Addr:word):word; function ReadSTPBit(Addr:word):boolean; procedure WriteSTPWord(Addr:word; Dato:word); procedure WriteSTPBit(Addr:word; Bit:boolean); function ReadStack(var Buffer; Position : word; Count : word) : word; function WriteStack(var Buffer; Position : word; Count : word) : word; function GetErrorString : string; procedure COM_Init ; Procedura, kterou je tøeba volat vždy jako úplnì první - inicializuje pøíslušný COM port. Pøed voláním této procedury je nutno uložit do promìnné ComPort èíslo portu s kterým budeme pracovat (1..4) a do promìnné BaudRate pøíslušnou baudovou rychlost (jsou povoleny hodnoty 2400, 9600, 19200, nebo 57600). Hodnota BaudRate není povinná, pro její zjištìní lze použít napø. proceduru BaudScan - viz dále. procedure COM_Close ; Tuto proceduru je tøeba volat vždy pøed ukonèením programu, slouží ke korektnímu uvedení COM portu do klidového stavu. 6 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 6

PASCAL - PESNET3.PAS function BaudScan : longint ; Funkce nejprve pøeruší sí ový provoz na lince (zavoláním procedury Net- Break) a poté vyzkouší komunikaci na všech podporovaných rychlostech. Pokud nalezne v síti pouze jedinou komunikaèní rychlost, vrátí ji jako výsledek a nastaví Success=true. Pokud nalezne stanice komunikující na rùzných rychlostech, nebo naopak nenalezne vùbec žádné stanice, vrací nulu, nastaví Success=false a v promìnné COM_Error je detailní kód chyby. V pøípadì, že funkce byla úspìšná, je zároveò do promìnné BaudRate uložena detekovaná baudová rychlost. Chceme-li se tedy pøipojit k síti automatù a nevíme jakou mají nastavenou baudovou rychlost, staèí použít tuto posloupnost pøíkazù : ComPort := CISLO_COM_PORTU ; COM_Init ; if not Success then writeln('chyba INICIALIZACE COM PORTU') ; BaudScan ; if not Success then begin if COM_Error=ERR_NETEMPTY then writeln('zadna STANICE V SITI'); if COM_Error=ERR_MOREBAUD then writeln('ruzne BD-RYCHLOSTI V SITI!') ; end ; COM_Init ; Poslední volání COM_Init je proto, aby se port nastavil na nalezenou baudovou rychlost. procedure NetScan ; Procedura nejprve pøeruší provoz na síti zavoláním procedury NetBreak a poté provede komplexní prùzkum sítì. Pokud nenalezne žádné stanice, nebo pokud nalezne nekorektnosti v baudových rychlostech na síti, nastaví Success=false a pøíslušný kód chyby do COM_Error. Pokud je vše v poøádku, nastaví do promìnné BaudRate nalezenou baudovou rychlost a do StationNum poèet nalezených aktivních stanic na síti. Dále do pole StationList (poèínaje prvkem 0) vypíše adresy nalezených stanic. procedure SelectStation(StAddr : byte) ; Používá se k nastavení adresy stanice s kterou bude vedena komunikace. Tato adresa je platná až do další zmìny. Adresy 0 až 30 jsou lokální, adresa 31 je tzv. globální adresa. Vzhledem k tomu, že služby modulu PESNET3.PAS jsou urèeny pro komunikaci vždy s vybranou jednou stanicí, doporuèujeme globální adresu vùbec nevyužívat. 7 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 7

PASCAL - PESNET3.PAS procedure NetBreak ; Slouží k pøerušení sí ového provozu na lince. Používá se vždy pøed provádìním akcí se sítí automatù. Pokud mezi jednotlivými akcemi není prodleva delší než 0.5 sec., není nutné volat NetBreak pøed každou akcí, ale jen na zaèátku vykonávané sekvence. procedure SendToken ; Vyšle TOKEN na zvolenou sí ovou adresu (nastavenou pomocí procedury SelectStation). Používá se vždy na závìr sekvence akcí pro urychlení startu sítì. Bìhem komunikace mezi PC a stanicemi totiž nefunguje globální sí ový pøenos dat používaný ve stanicích (protože pøed zapoèetím komunikace musí být volán NetBreak). Po ukonèení komunikace mezi PC a automaty totiž ještì bìží èasování "mrtvého èasu" a potom teprve automaty startují sí ový provoz. Tento krátký výpadek mùže být v nìkterých aplikacích fatální. Proto je vhodné po ukonèení komunikaèní sekvence zavolat proceduru SendToken (pøed tím nastavit pomocí SelectStation nìkterou existující adresu) - procedura zajistí vyslání TOKEN na danou stanici a tím okamžitý restart sí ové komunikace v logickém kruhu aby se mohly pøedávat sdílené promìnné mezi automaty. function ReadSTPWord (Addr:word) : word ; Pøeète datovou promìnnou z daného automatu (adresa automatu se nastavuje pomocí SelectStation) a vrátí ji jako typ word. Adresa promìnné je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu WORD. function ReadSTPBit (Addr:word) : boolean ; Pøeète bitovou promìnnou z daného automatu (adresa automatu se nastavuje pomocí SelectStation) a vrátí ji jako typ boolean. Adresa bitu je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu BIT. procedure WriteSTPWord (Addr:word; Dato:word) ; Zapíše datovou promìnnou do daného automatu (adresa automatu se nastavuje pomocí SelectStation). Adresa promìnné je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu WORD. Zapisovaná hodnota je dána parametrem Dato. procedure WriteSTPBit (Addr:word; Bit:boolean) ; Zapíše bitovou promìnnou do daného automatu (adresa automatu se nastavuje pomocí SelectStation). Adresa bitu je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu BIT. Zapisovaná hodnota je dána parametrem Bit. 8 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 8

PASCAL - PESNET3.PAS function ReadStack (var Buffer; Position : word; Count : word) : word; Slouží k vyèítání hodnot z uživatelského zásobníku (pro tento úèel totiž nelze použít spec. registry POINTER a STACK, nebo ty mohou být právì využívány programem bìžícím v automatu a mohlo by dojít ke kolizím). Funkce ReadStack vyète ze zásobníku blok dat (délka bloku je dána parametrem Count) a uloží je do pole Buffer. Jako Buffer se pøedpokládá pole prvkù typu word (pole dimenzujeme tak, aby pojmulo poèet prvkù Count). Parametr Position urèuje adresu v zásobníku, od které se zaène vyèítat blok dat. Návratová hodnota funkce typu word udává, kolik položek se do bufferu skuteènì vyèetlo. function WriteStack (var Buffer; Position : word; Count : word) : word ; Procedura WriteStack zapíše do zásobníku blok dat (délka bloku je dána parametrem Count). Data bere z pole Buffer. Jako Buffer se pøedpokládá pole prvkù typu word (pole dimenzujeme tak, aby pojmulo poèet prvkù Count). Position udává adresu v zásobníku, odkud se zaène ukládat blok dat. Návratová hodnota funkce typu word udává, kolik položek se do zásobníku skuteènì zapsalo. POZN.: Funkce provádìjící operace se zásobníkem si automaticky kontrolují dùležité systémové promìnné z automatu, mimo jiné i informace o pøípadném pøemístìní zásobníku. U automatù s rozšíøenou pamìtí 32kB je totiž možné dynamicky mìnit pozici a velikost zásobníku v pamìti (provádí se automaticky pøi downloadu programu do automatu). Funkce se tedy automaticky pøizpùsobují konfiguraci pamìti toho automatu, se kterým se zrovna komunikuje. Funkce kontrolují i velikost pamìti vyhrazené pro zásobník v tom kterém automatu a svojí návratovou hodnotou mimo jiné informují i o tom, zda již náhodou nebylo dosaženo horní meze zásobníku. function GetErrorString : string ; Procedura vrátí slovní popis poslední chyby. 9 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 9

C - PESNET3.CPP 3. KNIHOVNA C - MODUL PESNET3.CPP Rozhraní modulu je zadefinováno v hlavièkovém souboru PESNET3.H a obsahuje jednak promìnné, jednak funkce. Zde je struèný pøehled: Promìnné unsigned long BaudRate baudová rychlost unsigned char ComPort èíslo COM portu, použitého pro komunikaci unsigned char COM_Error kód chyby vzniklé pøi poslední akci unsigned char Success úspìšnost poslední akce (1=OK, 0=ERROR) unsigned char StationNum poèet stanic v síti detekovaný funkcí "NetScan" unsigned char StationList[32] seznam adres nalezených v síti funkcí "NetScan" Funkce void COM_Init(); void COM_Close(); unsigned long BaudScan(); void NetScan(); void SelectStation(unsigned char StAddr); void NetBreak(); void SendToken(); unsigned int ReadSTPWord(unsigned int Addr); unsigned char ReadSTPBit(unsigned int Addr); void WriteSTPWord(unsigned int Addr, unsigned int Dato); void WriteSTPBit(unsigned int Addr, unsigned char Bit); unsigned int ReadStack(void *Buffer, unsigned int Position, unsigned int Count); unsigned int WriteStack(void *Buffer, unsigned int Position, unsigned int Count); char *GetErrorString(char *ErrString); void COM_Init() ; Procedura, kterou je tøeba volat vždy jako úplnì první - inicializuje pøíslušný COM port. Pøed voláním této procedury je nutno uložit do promìnné ComPort èíslo portu s kterým budeme pracovat (1..4) a do promìnné BaudRate pøíslušnou baudovou rychlost (jsou povoleny hodnoty 2400, 9600, 19200, nebo 57600). Hodnota BaudRate není povinná, pro její zjištìní lze použít napø. proceduru BaudScan - viz dále. void COM_Close() ; Tuto proceduru je tøeba volat vždy pøed ukonèením programu, slouží ke korektnímu uvedení COM portu do klidového stavu. 10 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 10

C - PESNET3.CPP unsigned long BaudScan() ; Funkce nejprve pøeruší sí ový provoz na lince (zavoláním procedury Net- Break) a poté vyzkouší komunikaci na všech podporovaných rychlostech. Pokud nalezne v síti pouze jedinou komunikaèní rychlost, vrátí ji jako výsledek a nastaví Success=1. Pokud nalezne stanice komunikující na rùzných rychlostech, nebo naopak nenalezne vùbec žádné stanice, vrací nulu, nastaví Success=0 a v promìnné COM_Error je detailní kód chyby. V pøípadì, že funkce byla úspìšná, je zároveò do promìnné BaudRate uložena detekovaná baudová rychlost. Chceme-li se tedy pøipojit k síti automatù a nevíme jakou mají nastavenou baudovou rychlost, staèí použít tuto posloupnost pøíkazù : ComPort = CISLO_COM_PORTU ; COM_Init() ; if (! Success) printf("chyba INICIALIZACE COM PORTU") ; BaudScan() ; if (! Success) { if (COM_Error == ERR_NETEMPTY) printf("zadna STANICE V SITI") ; if (COM_Error == ERR_MOREBAUD) printf("ruzne BD-RYCHLOSTI V SITI!") ; } COM_Init() ; Poslední volání COM_Init je proto, aby se port nastavil na nalezenou baudovou rychlost. void NetScan() ; Procedura nejprve pøeruší provoz na síti zavoláním procedury NetBreak a poté provede komplexní prùzkum sítì. Pokud nenalezne žádné stanice, nebo pokud nalezne nekorektnosti v baudových rychlostech na síti, nastaví Success=0 a pøíslušný kód chyby do COM_Error. Pokud je vše v poøádku, nastaví do promìnné BaudRate nalezenou baudovou rychlost a do StationNum poèet nalezených aktivních stanic na síti. Dále do pole StationList (poèínaje prvkem 0) vypíše adresy nalezených stanic. void SelectStation(unsigned char StAddr) ; Používá se k nastavení adresy stanice s kterou bude vedena komunikace. Tato adresa je platná až do další zmìny. Adresy 0 až 30 jsou lokální, adresa 31 je tzv. globální adresa. Vzhledem k tomu, že služby modulu PESNET3.PAS jsou urèeny pro komunikaci vždy s vybranou jednou stanicí, doporuèujeme globální adresu vùbec nevyužívat. 11 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 11

C - PESNET3.CPP void NetBreak() ; Slouží k pøerušení sí ového provozu na lince. Používá se vždy pøed provádìním akcí se sítí automatù. Pokud mezi jednotlivými akcemi není prodleva delší než 0.5 sec., není nutné volat NetBreak pøed každou akcí, ale jen na zaèátku vykonávané sekvence. void SendToken() ; Vyšle TOKEN na zvolenou sí ovou adresu (nastavenou pomocí procedury SelectStation). Používá se vždy na závìr sekvence akcí pro urychlení startu sítì. Bìhem komunikace mezi PC a stanicemi totiž nefunguje globální sí ový pøenos dat používaný ve stanicích (protože pøed zapoèetím komunikace musí být volán NetBreak). Po ukonèení komunikace mezi PC a automaty totiž ještì bìží èasování "mrtvého èasu" a potom teprve automaty startují sí ový provoz. Tento nìkolikasekundový výpadek mùže být v nìkterých aplikacích fatální. Proto je vhodné po ukonèení komunikaèní sekvence zavolat proceduru SendToken (a pøed tím nastavit pomocí SelectStation nìkterou existující adresu) - procedura zajistí vyslání TOKEN na danou stanici a tím okamžitý restart sí ové komunikace v logickém kruhu aby se mohlo realizovat pøedávání sdílených promìnných mezi automaty. unsigned int ReadSTPWord (unsigned int Addr) ; Pøeète datovou promìnnou z daného automatu (adresa automatu se nastavuje pomocí SelectStation) a vrátí ji jako typ word. Adresa promìnné je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu WORD. unsigned char ReadSTPBit (unsigned int Addr) ; Pøeète bitovou promìnnou z daného automatu (adresa automatu se nastavuje pomocí SelectStation) a vrátí ji jako typ boolean. Adresa bitu je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu BIT. void WriteSTPWord (unsigned int Addr, unsigned int Dato) ; Zapíše datovou promìnnou do daného automatu (adresa automatu se nastavuje pomocí SelectStation). Adresa promìnné je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu WORD. Zapisovaná hodnota je dána parametrem Dato. void WriteSTPBit (unsigned int Addr, unsigned char Bit) ; Zapíše bitovou promìnnou do daného automatu (adresa automatu se nastavuje pomocí SelectStation). Adresa bitu je dána parametrem Addr, viz sta Adresy promìnných - tedy adresy promìnných typu BIT. Zapisovaná hodnota je dána parametrem Bit. 12 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 12

C - PESNET3.CPP unsigned int ReadStack (void *Buffer, unsigned int Position, unsigned int Count) ; Slouží k vyèítání hodnot z uživatelského zásobníku (pro tento úèel totiž nelze použít spec. registry POINTER a STACK, nebo ty mohou být právì využívány programem bìžícím v automatu a mohlo by dojít ke kolizím). Funkce ReadStack vyète ze zásobníku blok dat (délka bloku je dána parametrem Count) a uloží je do pole Buffer. Jako Buffer se pøedpokládá pole prvkù typu word (pole dimenzujeme tak, aby pojmulo poèet prvkù Count). Parametr Position urèuje adresu v zásobníku, od které se zaène vyèítat blok dat. Návratová hodnota funkce typu word udává, kolik položek se do bufferu skuteènì vyèetlo. unsigned int WriteStack (void *Buffer, unsigned int Position, unsigned int Count) ; Funkce WriteStack zapíše do zásobníku blok dat (délka bloku je dána parametrem Count). Data bere z pole Buffer. Jako Buffer se pøedpokládá pole prvkù typu word (pole dimenzujeme tak, aby pojmulo poèet prvkù Count). Position udává adresu v zásobníku, odkud se zaène ukládat blok dat. Návratová hodnota funkce typu word udává, kolik položek se do zásobníku skuteènì zapsalo. POZN.: Funkce provádìjící operace se zásobníkem si automaticky kontrolují dùležité systémové promìnné z automatu, mimo jiné i informace o pøípadném pøemístìní zásobníku. U automatù s rozšíøenou pamìtí 32kB je totiž možné dynamicky mìnit pozici a velikost zásobníku v pamìti (provádí se automaticky pøi downloadu programu do automatu). Funkce se tedy automaticky pøizpùsobují konfiguraci pamìti toho automatu, se kterým se zrovna komunikuje. Funkce kontrolují i velikost pamìti vyhrazené pro zásobník v tom kterém automatu a svojí návratovou hodnotou mimo jiné informují i o tom, zda již náhodou nebylo dosaženo horní meze zásobníku. char * GetErrorString(char * ErrString) ; Procedura vrátí slovní popis poslední chyby. 13 PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/2000 13 stran 13