Diskuse Elektrika.cz

HYBRIDNÍ zóna => Technická podpora výrobce TECO Kolín radí odborníkům => Téma založeno: Slavomír Skopalík 17.09.2012, 13:28



Název: Jak dostat NSlookUP do globalnich dat?
Přispěvatel: Slavomír Skopalík 17.09.2012, 13:28
Mosaic 2012.2 pri kompilaci projektu kde je tohle:

VAR_GLOBAL
  SNTP : fbSntp;                                  // Time sychronization
  NS_SNTP: fbNsLookUp;                            // SNTP time server domain name lookup

END_VAR


Spadne na tuto chybu:
List of message window: 17.9.2012 12:27:11
=======================================================
0    :[Xpro:Warning] Running compile again due to resizing remanent register zone
1    :[Xpro:Error] LOCALLIB\INTERNETLIB_V22_20120306.MLB (236): jump to undefined label
2    :[Xpro:Error] LOCALLIB\INTERNETLIB_V22_20120306.MLB (262): jump to undefined label

Lze to nejak obejit?
Deklarovat do v promennych Mainu a predavat si to jako pointery me prijde divne.


Název: Re: Jak dostat NSlookUP do globalnich dat?
Přispěvatel: Milan Bydžovský 17.09.2012, 13:52
,  Vámi popisovaná chyba nastane pokud se v globálních proměnných vyskytne funkční blok, který není v volán v žádném programu.
Pokud volání bloku doplníte chyba zmizí.

Otázkou je, co je cílem této konstrukce. Pokud budete volat funkční blok z více programů, nebude vám blok správně fungovat.


Název: Re: Jak dostat NSlookUP do globalnich dat?
Přispěvatel: Slavomír Skopalík 17.09.2012, 15:58
Jelikoz neni mozne mit lokalni promenne funkci perzistetni a pocet programu je omezen (tusim na 12-16, pak mi to prestalo fungovat bez jedinne chyby),  tak je nutne psat programy s globalnimi promennymi a funkcemi.
Je ale zajimave, ze kdyz je uvedeny FB v globalnich promennych programu, tak jiz nemusi byt volany.
Bylo by mozne alespon upravit hlasku kompileru na neco trochu smysluplneho, MOSAIC neni jedine prostredi ve kterem musim pracovat a je ponekud nepohldne si tohle pamatovat?


Název: Re: Jak dostat NSlookUP do globalnich dat?
Přispěvatel: Milan Bydžovský 18.09.2012, 08:14
Počet programů omezen není, omezením je pouze velikost paměti kódu a počet dostupných registrů.
Ve většině programů, co jsem zatím viděl, se používá přístup, kdy perzistentní data jsou v globálních proměnných a nad nimi pracují funkce a funkční bloky, které pak již nemusí být perzistentní, ale od toho je volné programování, aby si každý našel cestu, která mu vyhovuje.
Chyba, na kterou jste narazil, vzniká od linkeru, který v případě, že je knihovní funkční blok globální, nezařadí z knihovny výkonný kód dokud není blok zavolán. Když je funkční blok součástí lokálních proměnných programu je linkerem do kódu zařazen vždy. Vylepšit hlášení chyby je pak obtížné :'( ,  protože chyba nepopisuje příčinu, ale důsledek, který může vzniknout více způsoby.


Název: Re: Jak dostat NSlookUP do globalnich dat?
Přispěvatel: Slavomír Skopalík 20.09.2012, 02:01
S programovanim problem nemam, spise s omezenim Mosaicu. Funkcni blok jsem chtel samozrejme volat, ale proste mam zvyk, nadeklarovat promenne, zkontrolovat prelozitelnost a pak teprve s promennymi pracovat, tak jsem skoncil (zajimave, ze u ostanich FB to nedela)...

U tech programu je to zajimave, opravdu me u verze tusim 2011.x neslo nadefinovat vice jak nejakych 12-16.
Protoze puvodni model byl, jedna mistnost, jeden program, ale proste tohle mosaic nepobral :(.
Duvod pro to byl, aby lokalni data mistnosti, byla striktne lokalni (nabezne hrany a podobne).

V pripade pouziti FB pro mistnosti jsem narazel na problemy s falesnymi warningy, tak tudy cesta take nevedla.

Velmi bych ocenil moznost definovat na urovni struktury vlastni metody, to by bylo doslova genialni.

Pak by se take hodil NULL/NIL pointer (neco je v WebGrafech).

A jestli mohu, tak rychlost prekladu, respektive priparava k prekladu ne neuveritelne dlouha (>5sec).