Peťan Programování Mosaic 8. 8. 2022 7:10 16. 8. 2022 16:53

Mám program, kde je nějaký počet proměnných "Global_Retain", při úpravě programu (přidání dalších proměnných) se mi proměnné rozhodí a nastaví se do nich jiné hodnoty (posune se paměť). Tím pádem o nějaké hodnoty přijdu, některé jsem nucen znovu nastavit.

Lze tomu nějakým způsobem zabránit?

 

Dále by okno "Vyčíslit/nastavit" nemusel být dialog, ale okno v popředí, za které jde kliknout, případně i nějak ukotvit. Když si tam chci přidat proměnnou a potřebuji si někde pohledat v programu, tak musím dialog zavírat a znovu otevírat. Stejné je to s dialogem "Hledat". Opravdu se mi nechce věřit, že v roce 2022 někdo vytvoří okno hledání, za které nejde kliknout. V příloze je inspirace, jak to lze jednoduše provést. Stejné je to třeba v prohlížečích, Acrobat Readeru, ... Samozřejmostí je i označení všech výskytů hledaného textu v právě prohlíženém souboru.

Omluvte mi mojí kritiku, ale při použití Mosaicu mám opravdu pocit, že jsem se vrátil o několik let zpět, kde ti, co programovali back-end zároveň i vymýšleli GUI.

Odpovědi 2

Luboš Urban 9. 8. 2022 12:20

U centrálních jednotek CP-10xx je zálohovaná paměť umístěna na začátku paměti programu v souvislém bloku. Pokud přidáváte globální proměnné do samostatného souboru a přidáváte je na konec (což se děje např. při přidávání proměnných přes IEC manažer nebo při použití klávesové zkratky Ctrl+D v editoru), tak se proměnné nepřehází a hodnotu neztratí ani při studeném, ani při teplém restartu, protože ta remanentní zóna se rozšiřuje tím, že přidáváte na její konec a ostatní neremanentní proměnné se posouvají dál na vyšší adresy. Těm to ale nevadí, protože se inicializují při každém restartu. 

Pokud ale píšete v textovém editoru a na začátku různých souborů máte nedefinované zóny VAR_GLOBAL a VAR_GLOBAL RETAIN, tak tím jak připisujete nově deklarované proměnné do těchto sekcí, tak vkládáte nové proměnné nejen na konec, ale také doprostřed té remanentní zóny. Ty jednotlivé soubory se překládají v pořadí, v jakém jsou řazeny v seznamu v okně Soubory v projektu a tedy doplněním proměnné na konec prvního souboru znamená, že za ní budou ještě proměnné VAR_GLOBAL RETAIN z druhého, třetího a dalších souborů. Potom samozřejmě dojde ke konfliktu, protože teplý restart se nijak nedotkne remanentní zóny, hodnoty ve registrech se zachovají, ale na v registrech už je po překladu jiná proměnná.

Uspokojivě se tento problém dá odstranit použitím režimu on-line změny programu (když kliknete na políčko Run, tak v rozbaleném menu je položka On-line změna se symbolem modré kytičky) a v tomto režimu nedochází k restartu při změně programu a systém zajistí, že se při přidání, smazání nebo změně typu proměnné stávající hodnoty přestěhují na správná místa.

U centrálních jednotek řady Foxtrot 2 CP-20xx už k tomuto nedochází, protože se hodnoty při vypnutí systému či při restartu odloží do souboru a při startu PLC se podle jména nastěhují do správných registrů i bez režimu online změny. Tady nezáleží ani na řazení proměnných, ani na souborech, ve kterých jsou deklarované, ale zase nesmíte změnit jméno remanentní proměnné, protože pak by systém nevěděl, kam hodnotu přiřadit.

Peťan 16. 8. 2022 16:53

Díky za info. Říkal jsem si, že to bude mapováním paměti, ale když tam nikde na první pohled nejsou offsety, tak jsem myslel, že by se s tím mohl Toxtrot popasovat :) Je pravda, že používám starší CPU CP-1004

Režim změny online používám, ale někdy mi to napíše "změnu nelze provést online", přitom HW konfiguraci neupravuji. A často se mi stává, že při online změně vybýhne hláška "Nelze vytvořit soubor", nebo něco podobného. Když dám CPUčko do režimu HALT, tak se to podaří přehrát. Případně musím restartovat Mosaic, nebo v krajním případě i PLCčko. Ale nestává se to zas tak často. Asi budu přidávat proměnné na konec souboru, i když bych je radši měl seřazené podle sebe :)

PS.: Psal jsem ještě nějaké postřehy do vlákna, tak nevím, jestli to někdo čte :) https://support.tecomat.cz/dotaz/chyby-v-mosaicu

Vaše odpověď

Pro vložení odpovědi je nezbytné být přihlášený. Pokračujte na přihlášení.