Knihovna SBUS
Implementace neúplných protokolů S-BUS pro stanici server, paritní a datový mód
Verze 3.07/2007
Změny ve verzích Verze 3.05 - 9.10.2006 ♦ Doplnění timeoutu při vysílání na sériovém kanálu. Mohlo dojít k zatuhnutí komunikace při ztraceném přerušení od vysílání znaku z řadiče sériového portu. Verze 3.06 - 19.6.2007 ♦ Lineární vyhledávání v modulu RegSBUS nahrazeno binárním s konstrukcí se AVL-strom z důvodu rychlosti vyhledávání. Verze 3.07 - 13.8.2007 ♦ Nové moduly SBusDat a SBusPar s možností zadávat adresu sbus stanice v proměnné ♦ Původní moduly SrvSBUS a S1SBUS přejmenovány na _X_SrvSBUS a _X_S1SBUS a je doporučeno je nahradit nově vzniklými. Modul SrvSBUS je nahrazen modulem SBusPar a modul S1SBUS je nahrazen modulem SBusDat.
2
Knihovna SBUS
SBusPar Popis
Upozornění
Server protokolu SBUS - paritní mód
Modul implementuje paritní mód protokolu SBUS server. Modul implementuje pouze neúplný protokol SBUS. Je doporučeno umístit modul do procesu INIT. Paritní mód je funkční pouze na kanálu 0 (RS232), na kanálech RS485 stejně jako na dodatečných kanálech RS232 (např. AD-UART) je nutné použít datový mód. U paritního módu se používá k identifikaci začátku rámce 9-bit ve slově (odtud paritní mód), a tento mechanismus lze implementovat pouze na některých řadičích sériového kanálu.
Parametry
SrvAdr
IN IN IN
Konst Síťová adresa serveru. I Síťová adresa serveru zadaná proměnnou. MI Síťová adresa serveru zadaná buňkou matice.
Port
IN
Konst Sériový kanál RS232.
Baud
IN
Konst Baudová rychlost komunikace.
LastError OUT NONE Kód poslední chyby. I Ovládání
Server odpovídá na dotazy klienta. Modul zpracovává pouze neúplný protokol SBUS, což je následující repertoár telegramů: Čtecí požadavky RF Read flag RI Read input RK Read clock RO Read output RR Read register
Zápisové požadavky WF Write flag WK
Write clock
WR
Write register
Interpretace jednotlivých příkazů závisí na jejich mapování do prostoru proměnných řídicího systému. Mapování se provádí prostřednictvím modul RegSBUS. Chybové kódy
Po každém vykomunikování rámce je nastavena proměnná LastError. Pokud byla komunikace úspěšná, je proměnná nulována, v opačném případě je do proměnné zapsán jeden z následujících chybových kódů. Výjimečné jsou hodnoty 100 a 101, které signalizují fatální chybu. Kód 100
Význam Je použit neexistující sériový kanál. Signalizuje fatální stav, modul neběží.
Knihovna SBUS
3
101 32 33 34 35 36 37 38 39 40 41
42 43 44 45 46 47 48
49
4
Vyčerpání přidělení vnitřních zdrojů systému. Fatální stav, modul neběží. Chyba CRC v telegramu. Nepodporovaný příkaz. Příkaz v telegramu neumí modul zpracovat. Proměnná v modulu RegSBUS spojená s významem Plan7×2 není rozměru 7×2. Chyba při čtení (telegram RR). Proměnná v modulu RegSBUS spojená s významem Plan7×2 není matice. Chyba při čtení (telegram RR). V příkazu RI nebo RO nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu RF nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu RR, RC, RT nebo RD nebyla nalezena adresa RTC_IOF uvedená v telegramu. Byl přijat příkaz RK ale nebyla nalezena odpovídající vazba. V aplikaci není nikde použit modul RegSBUS s nastavením Clock v parametru Binding. V příkazu RR, RC, RT nebo RD nebyla nalezena adresa RTC_IOF uvedená v telegramu. Počet požadovaných bajtů v při čtení proměnné v rámci vazby Plan7×2 není 14. Touto vazbou lze číst pouze matici ML[7, 2] telegramem RR s počtem vyčítaných dat rovno 14. Proměnná v modulu RegSBUS spojená s významem Plan7×2 není rozměru 7×2. Chyba při zápisu (telegram WR). Proměnná v modulu RegSBUS spojená s významem Plan7×2 není matice ML. Chyba při čtení (telegram WR). V příkazu WR, WC nebo WT nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu WF nebyla nalezena adresa RTC_IOF uvedená v telegramu. Byl přijat příkaz WK ale nebylo nalezeno odpovídající vazba. V aplikaci není nikde použit modul RegSBUS s nastavením Clock v parametru Binding. V příkazu WR, WC nebo WT nebyla nalezena adresa RTC_IOF uvedená v telegramu. Počet požadovaných bajtů v při zápisu proměnné v rámci vazby Plan7×2 není 14. Touto vazbou lze zapisovat pouze matici ML[7, 2] telegramem WR s počtem zápisových dat rovno 14. V příkazu WF nebyla nalezena adresa RTC_IOF uvedená v telegramu.
Knihovna SBUS
SbusDat Popis
Server protokolu SBUS - datový mód
Modul implementuje datový mód protokolu SBUS server. Modul implementuje pouze neúplný protokol SBUS. Je doporučeno umístit modul do procesu INIT. Datový mód je funkční na jakémkoliv sériovém kanálu.
Parametry
SrvAdr
IN IN IN
Konst Síťová adresa serveru. I Síťová adresa serveru zadaná proměnnou. MI Síťová adresa serveru zadaná buňkou matice.
Port
IN
Konst Sériový kanál RS 232 nebo RS 485.
Baud
IN
Konst Baudová rychlost komunikace.
LastError OUT NONE Kód poslední chyby. I Ovládání
Server odpovídá na dotazy klienta. Modul zpracovává pouze neúplný protokol SBUS, což je následující repertoár telegramů: Čtecí požadavky RF Read flag RI Read input RK Read clock RO Read output RR Read register
Zápisové požadavky WF Write flag WK
Write clock
WR
Write register
Interpretace jednotlivých příkazů závisí na jejich mapování do prostoru proměnných řídicího systému. Mapování se provádí prostřednictvím modul RegSBUS. Chybové kódy
Po každém vykomunikování rámce je nastavena proměnná LastError. Pokud byla komunikace úspěšná, je proměnná nulována, v opačném případě je do proměnné zapsán jeden z následujících chybových kódů. Výjimečné jsou hodnoty 100 a 101, které signalizují fatální chybu. Kód 100 101 32 33
Význam Je použit neexistující sériový kanál. Signalizuje fatální stav, modul neběží. Vyčerpání přidělení vnitřních zdrojů systému. Fatální stav, modul neběží. Chyba CRC v telegramu. Nepodporovaný příkaz. Příkaz v telegramu neumí modul zpracovat.
Knihovna SBUS
5
34 35 36 37 38 39 40 41
42 43 44 45 46 47 48
49
6
Proměnná v modulu RegSBUS spojená s významem Plan7×2 není rozměru 7×2. Chyba při čtení (telegram RR). Proměnná v modulu RegSBUS spojená s významem Plan7×2 není matice. Chyba při čtení (telegram RR). V příkazu RI nebo RO nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu RF nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu RR, RC, RT nebo RD nebyla nalezena adresa RTC_IOF uvedená v telegramu. Byl přijat příkaz RK ale nebylo nalezeno odpovídající vazba. V aplikaci není nikde použit modul RegSBUS s nastavením Clock v parametru Binding. V příkazu RR, RC, RT nebo RD nebyla nalezena adresa RTC_IOF uvedená v telegramu. Počet požadovaných bajtů v při čtení proměnné v rámci vazby Plan7×2 není 14. Touto vazbou lze číst pouze matici ML[7, 2] telegramem RR s počtem vyčítaných dat rovno 14. Proměnná v modulu RegSBUS spojená s významem Plan7×2 není rozměru 7×2. Chyba při zápisu (telegram WR). Proměnná v modulu RegSBUS spojená s významem Plan7×2 není matice ML. Chyba při čtení (telegram WR). V příkazu WR, WC nebo WT nebyla nalezena adresa RTC_IOF uvedená v telegramu. V příkazu WF nebyla nalezena adresa RTC_IOF uvedená v telegramu. Byl přijat příkaz WK ale nebylo nalezeno odpovídající vazba. V aplikaci není nikde použit modul RegSBUS s nastavením Clock v parametru Binding. V příkazu WR, WC nebo WT nebyla nalezena adresa RTC_IOF uvedená v telegramu. Počet požadovaných bajtů v při zápisu proměnné v rámci vazby Plan7×2 není 14. Touto vazbou lze zapisovat pouze matici ML[7, 2] telegramem WR s počtem zápisových dat rovno 14. V příkazu WF nebyla nalezena adresa RTC_IOF uvedená v telegramu.
Knihovna SBUS
RegSBUS
Popis
Parametry
Mapování adres protokolu SBUS do prostoru databáze řídicího systému.
Modul mapuje adresy protokolu SBUS do prostoru databáze řídicího systému a vytváří logické vazby mezi adresami. Je doporučeno umístit modul do procesu INIT. RTC_IOF IN
Konst Adresa v protokolu SBUS.
Variable
IN
I, MI Odkaz na proměnnou ve stanici. L, ML V některých případech může být F, MF NONE.
Binding
IN
Konst Typ vazby. Je popsáno dále.
SrvSBUS IN
Module Odkaz na modul SrvSBUS nebo S1SBUS.
Hits
OUT NONE Vždy když dojde k zápisovému nebo čtecímu požadavku, je tato I proměnná inkrementována.
A
IN
Konst
Konstanta pro lineární přepočet hodnoty. Uplatňuje se pouze u čtení nebo zápisu do registru (příkazy RR nebo WR).
B
IN
Konst
Konstanta pro lineární přepočet hodnoty. Uplatňuje se pouze u čtení nebo zápisu do registru (příkazy RR nebo WR).
Vazba
Modulem RegSBUS se vytváří vazba mezi adresou v telegramu SBUS a proměnnou v databázi řídicího systému. Vazbu tvoří trojice parametrů RTC_IOF (adresa zdroje v telegramu), Variable (odkaz na proměnnou v PSE) a Binding (typ nebo interpretace vazby). Vazba 100, MyVar, Register znamená, že telegram s adresou 100 a s příkazem RR nebo WR (Read/Write Register) se bude odkazovat na proměnnou MyVar.
Neexistující adresy
Předpokládejme, že server obdrží od klienta žádost o čtení registru s adresou 100 a následujících 16 registrů (tedy registry s adresami 101, 102 až 115). Pokud existuje vazba adresy 100 na proměnnou, je tato hodnota vrácena. Dále probíhá vyhledávání vazby adresy 101 na proměnnou. Pokud je tato vazba nalezena, je vrácena příslušná hodnota. Pokud vazba není nalezena je vrácena hodnota nula. Pokud ovšem neexistuje vazba adresy 100 na proměnnou, vrací server
Knihovna SBUS
7
odpověď NAK, což znamená chybný dotaz. Jinými slovy řečeno, server odpovídá telegramem NAK pouze v případě, že není vytvořena vazba na adresu uvedenou v telegramu. Pokud není vytvořena vazba na další adresy vyplývající z počtu dat v telegramu, jsou v případě čtecího požadavku vraceny nuly, v případě zápisového požadavku jsou zápisy ignorovány. Významy pole Binding Register
Vytvoření vazby Register-proměnná. Například pokud bude pole RTC_IOF obsahovat číslo 20 a Variable bude odkazovat na proměnnou MyFloat (typu F), bude při čtecím požadavku RR na adrese 20 vyslána hodnota, kterou má proměnná MyFloat. Protože je proměnná MyFloat typu F, bude vnitřní interpretace v telegramu zaslána také jako typ F. Pokud by se daná adresa RTC_IOF odkazovala na proměnnou MyInt typu I, bude vnitřní reprezentace v telegramu odpovídat typu I (resp. L). Stejně se chová i zápisový požadavek tj. pokud je proměnná typu F, je hodnota přenášená v telegramu interpretována jako typ F, v opačném případě jako typ L (typ I je telegramech přenášen také jako typ L). Pokud je třeba přenášet v telegramech hodnotu striktně ve formátu L, je třeba použít hodnotu CastLong v poli Binding. V tomto případě jsou všechny hodnoty ukládané do telegramu převáděny na typ L. Pokud je třeba přenášet hodnotu striktně ve formátu F, je třeba použít hodnotu CastFloat v poli Binding. Obě dvě nastavení se vztahují pouze ke čtení nebo zápisu registrů (příkazu RR nebo WR), u ostatních příkazů nelze přetypování použít. Často jsou hodnoty typu L přenášené v telegramech používány pro přenos hodnot v plovoucí řádové čárce (typ F). Například hodnota 350 přenášená telegramem je pak ve stanici interpretována jako 35.0. Pro tento účel jsou v modulu RegSBUS dva parametry, které umožňují lineární přepočet podle vztahu přenášená_hodnota = A × proměnná + B. Celý mechanismus přepočtu a přetypování je znázorněn blokově pro čtecí požadavky: Přetypování na hodnotu v telegramu
8
Lineární přepočet T = A × Var + B
Knihovna SBUS
Proměnná Var v databázi PSE
Pro zápisové požadavky je blokové schéma obdobné: Přetypování z hodnoty v telegramu
Lineární přepočet Var = (T - B) / A
Proměnná v databázi PSE
V kombinaci přetypování s lineárním přepočtem lze pak vyřešit situaci, kdy klient používá hodnotu typu I pro komunikaci s registrem, který obsahuje hodnotu typu F. Tedy například klient chce nastavit žádanou teplotu vratné vody na 50.7 °C, ale používá k tomu integerovou interpretaci 507 (tedy A = 10, B = 0). V programu PSE je tato hodnota typu F (tak, jak to odpovídá přirozenému stavu) a jmenuje se TVratna. Pokud je adresa registru 100, pak modul RegSBUS bude mít následující parametry: RegBus 100, TVratna, CastLong, :0001, NONE, 10.0, 0.0 Toto nastavení zajistí to, že v telegramu zaslaná hodnota 507 změní proměnnou TVratna na 50.7 a naopak vyčtení této proměnné zajistí vyslání hodnoty 507. Flag
Vazbou typu F se dociluje čtení či zápis bitových proměnných. Adresa v poli RTC_IOF je vždy zarovnána na násobek osmi, ale zarovnávání probíhá interně v modulu, tzn. že adresa 2 bude vnitřně zarovnána na hodnotu 0, nicméně vstupní parametr do modulu RegSBUS bude stále 2. Jako proměnná do parametru Variable může jít jakákoliv proměnná, smysl má však použití proměnné typu I nebo L (nebo prvků matice MI nebo ML). Z proměnné je využita pouze hodnota na nižších osmi bitech, tzn. že proměnná je využívána jako typ bajt. V telegramu může být uvedena jakákoliv adresa (nemusí být tedy zarovnána na násobek osmi), neexistující adresy flagů vrací hodnotu nula nebo ignorují zápisové požadavky (pokud neexistující adresa není uvedena přímo v telegramu – viz předchozí část Neexistující adresy). Pokud tedy budeme mít vazbu 24, Flag, MyInt, kde MyInt je typu I, pak dotaz RF na adresu 24 s délkou 16 (2 bajty) vrátí nižších osm bitů z proměnné MyInt a dále nižších osm bitů z přiřazení s adresou 32 pokud existuje nebo 8 nulových bitů pokud takové přiřazení neexistuje. Dotaz RF na adresu 28 vrátí hodnoty bitů z druhého nibblu proměnné MyInt (MyInt.4 až MyInt.7), 8 bitů z přiřazení s adresou 32 a první nibble z přiřazení s adresou 40 (pokud samozřejmě tyto přiřazení existují). Příklad rozložení bitových adres pro následující vazby ukazuje obrázek RegSBUS 24, Int24, Flag, …. RegSBUS 40, Int40, Flag, ….
Knihovna SBUS
9
Bity 0..7 proměnné Int24 Bity neexistují Bity 0..7 proměnné Int40 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
10
Input, Output
Tato vazba zprostředkovává přímý přístup k logickým DI a DO kanálům řídicího systému. Nejedná se tedy o přístup k fyzickým kanálům řídicího systému. Proto, aby čtená hodnota odpovídala fyzickému stavu na vstupech, je třeba vykonat modul DigIn s parametrem příslušného logického kanálu. Modul SrvSBUS čte z datových struktur, které jsou plněny nebo čteny moduly DigIn nebo DigOut. Protože jsou všechny binární kanály 16-ti bitové, musí být adresy RTC_IOF v modulu RegSBUS násobkem šestnácti. Příkaz RI s adresou 0 znamená, že bude přečtena spodní osmice bitů na logickém kanálu 0.
Clock
Tato vazba umožňuje zpracovat čtení nebo zápis datumu. Adresa RTC_IOF není použita. Pokud je parametr Variable NONE, příkazy pracují s reálným časem stanice. Pokud je parametr typu L, je jeho hodnota interpretována jako datum a čas (DbNet time). Parametry typu I a F nejsou povoleny, při čtení v tomto případě modul vrací reálný čas stanice a zápis je ignorován, i když je klientovi potvrzen. V aplikaci může být použita pouze jedna tato vazba, resp. bude zpracovávána pouze první nalezená.
Knihovna SBUS