Application Note #05/14: Vyčtení / zapsání hodnot z/do OMC8000 pomocí protokolu UDP Požadavky:
OMC8000 má přiřazenu IP adresu (statickou, nebo pomocí DHCP), označme ji OMC8000_IP Na straně PC máte spuštěného UDP klienta, který dovoluje odesílat a číst UDP pakety. UDP klient odesílá a čte na portu 57999. Odesílá se tedy na adresu OMC8000_IP:57999. Čte se na adrese localhost:57999. Na konec každé zprávy je potřeba připojit kontrolní součet MODBUS CRC 16. Pakety s neplatným CRC kontrolním součtem budou zahozeny bez odpovědi. Tento postup funguje na FW 6.15 a vyšší. Doporučeno je FW 6.17 a vyšší.
Generování CRC Cyklický kontrolní součet (CRC) obsahuje 16-ti bitovou hodnotu. CRC je vypočtena odesilatelem a příjemce na základě přijaté zprávy kontroluje, zda jsou vypočtené CRC stejné. Pokud ne, pak je taková zpráva zahozena. Výpočet CRC začíná nastavením na 0xFFFF. Potom se postupně přidávají jednotlivé byty zprávy. Nejprve je obsah bytu přidán k hodnotě CRC operací XOR, potom se bitově posune vpravo a nejvyšší bit se nuluje. Nejnižší bit je testován, a pokud je 1, pak je k CRC přidána operací XOR přednastavená konstanta. Toto je opakováno celkem 8x. Po osmém posunu je takto získaná hodnota přidána k původnímu obsahu registru operací XOR. Postup generování CRC 1. Nahrání 16–bit CRC registru hodnotou 0xFFFF 2. XOR 1. bytu zprávy s LSB bytem 16–bit CRC a uložení do CRC 3. Posun CRC vpravo, zapsání 0 do MSB. Test LSB 4. Když LSB bylo 0: opakuj krok 3 (dalsí posun) Když LSB bylo 1: XOR CRC s hodnotou 0xA001 5. Opakuj kroky 3 a 4 aby se provedlo 8 posunů 6. Opakuj kroky 2 až 5 s dalšími byte zprávy, dokud nejsou všechny byte zpracovány 7. CRC se přidá ke odesílané zprávě v pořadí LSB, MSB
Označování proměnných a obecné informace potřebné pro vzdálený přístup: 1. Znáte název proměnné, kterou chcete číst/zapisovat vzdáleně pomocí UDP protokolu. Příklad: MyCnt1 2. Znáte POU, ve které je proměnná použita. Příklad: main 3. Znáte úlohu, ve které je daná POU volána. Příklad: Pmain
1
Obrázek 1: Úlohy a projekty
Poznámka: Každá proměnná, která je označena jako globální, má úlohu s názvem @GV.
2
Čtení hodnot z OMC8000 pomocí protokolu UDP A. Formát příkazu pro vyčtení lokální proměnné MyCnt1 v úloze Pmain: 0*Pmain.MyCnt1
B. Formát příkazu pro vyčtení globální proměnné MyCnt1 v úloze Pmain: 0*@GV.MyCnt1
Struktura příkazu:
První znak je adresa modulu: 0 - adresování hlavního modulu. Druhý znak: * - příkaz pro vrácení hodnoty proměnné. -> Příkaz * vrací hodnotu proměnné jako string, pokud je to string nebo číslo. Podporované typy: STRING, INT, UINT, DINT, UDINT, REAL
-> Příkaz # vrací hodnotu proměnné jako HEXSTRING ve formátu „D;HHHH…“, kde D je délka proměnné, HHHH… je její HEXSTRING. Podle typu proměnné, který je nutno znát předem, je potřeba převést HEXSTRING na odpovídající číselnou, nebo stringovou reprezentaci. Je také potřeba vzít do úvahy kódování, vrácené číslo je ve formátu BIG ENDIAN, nebo ve formátu IEEE 754 pro čísla s plovoucí desetinnou čárkou (REAL). Následuje úplný název proměnné Následuje MODBUS CRC 16
Poznámka: 1. Pokud proměnná neexistuje, nebo dojde k jiné chybě, je na příkaz * vrácen string: „Error“, na příkaz # “0;No data” 2. Odpovědí na příkaz * je hodnota proměnné jako string, na příkaz # je odpovědí „délka proměnné;hexstring” 3. Příkaz je case-sensitive. Proto název úlohy i název proměnné je třeba psát s důrazem na velká a malá písmena v názvu.
3
Zápis hodnot do OMC8000 pomocí protokolu UDP A. Formát příkazu pro zapsání hodnoty 12 do lokální proměnné MyCnt1 v úloze Pmain: 0{12,Pmain.MyCnt1 B. Formát příkazu pro vyčtení globální proměnné MyCnt1 v úloze Pmain: 0{12, @GV.MyCnt1 Struktura příkazu:
První znak je adresa modulu: 0 - adresování hlavního modulu. Druhý znak: { - příkaz pro zapsání hodnoty proměnné. -> Příkaz { zadá hodnotu proměnné jako string, pokud je to celé číslo. Podporované typy: INT, UINT, DINT, UDINT, LINT -> Příkaz [ zadá hodnotu proměnné jako hexstring, pokud je to celé číslo. Podporované typy: INT, UINT, DINT, UDINT, LINT
Následuje číslo zapsané jako bytový zápis INT čísla. Následuje oddělovací znak „,“ Následuje úplný název proměnné Následuje MODBUS CRC 16
Poznámka 1. Odpovědí na příkaz {, případně příkaz [ je „!“ v případě úspěšného zapsání čísla. V jiném případě se zápis hodnoty nezdařil. 2. Příkaz je case-sensitive. Proto název úlohy i název proměnné je třeba psát s důrazem na velká a malá písmena v názvu.
4
C. Formát příkazu pro zapsání hodnoty 1234.58 typu REAL do lokální proměnné MyCnt1 v úloze Pmain: 0}Pmain.MyCnt1,1234.58 D. Formát příkazu pro zapsání hodnoty 1234.58 typu REAL do globální proměnné MyCnt1 v úloze Pmain: 0}@GV.MyCnt1,1234.58 Struktura příkazu:
První znak je adresa modulu: 0 - adresování hlavního modulu. Druhý znak: } - příkaz pro zapsání hodnoty proměnné. -> Příkaz } zadá hodnotu proměnné jako string, pokud je to číslo s plovoucí desetinnou čárkou. Podporované typy: REAL
Následuje úplný název proměnné Následuje oddělovací znak „,“ Následuje hodnota proměnné Následuje MODBUS CRC 16
Poznámka: 1. Odpovědí na příkaz } je „!“ v případě úspěšného zapsání čísla. V jiném případě se zápis hodnoty nezdařil. 2. Příkaz je case-sensitive. Proto název úlohy i název proměnné je třeba psát s důrazem na velká a malá písmena v názvu.
5
E. Formát příkazu pro zapsání hodnoty „abcde“ typu STRING do lokální proměnné MyCnt1 v úloze Pmain: 0]Pmain.MyCnt1,abcde F. Formát příkazu pro zapsání hodnoty „abcde“ typu STRING do globální proměnné MyCnt1 v úloze Pmain: 0]@GV.MyCnt1,abcde Struktura příkazu:
První znak je adresa modulu: 0 - adresování hlavního modulu. Druhý znak: ] - příkaz pro zapsání hodnoty proměnné. -> Příkaz ] zadá hodnotu proměnné jako string. Podporované typy: STRING
Následuje úplný název proměnné Následuje oddělovací znak „,“ Následuje hodnota proměnné Následuje MODBUS CRC 16
Poznámka: 3. Odpovědí na příkaz ] je „!“ v případě úspěšného zapsání čísla. V jiném případě se zápis hodnoty nezdařil.
Příkaz je case-sensitive. Proto název úlohy i název proměnné je třeba psát s důrazem na velká a malá písmena v názvu.
6