Obrazovky

Volná diskuse k projektu AMiTsys Junior

Obrazovky

Příspěvekod partikam » pát 16. dub 2010 22:31:52

Dobrý den, já používám na zapínání a vypínání bitů příkaz bitswitchkey, ale tenhle bit měníme pomocí nastavených kláves. Chtěl bych na jednu obrazovku použít více příkazu bitswitchkey, abych mohl uživatelsky do všeho zasáhnout. Chci se tedy zeptat jestli pro to nelze udělat menu. Představu mám takovou, že by to fungovalo jako obyčejné menuscreen, ale s tím rozdílem, že by to nepřepínalo obrazovky, ale zapínalo a vypínalo bity =>klávesy pouze šipka nahoru, šipka dolů a změna bitu po použití enter. Děkuji za radu...
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod riha » pon 19. dub 2010 9:52:32

Dobrý den,
Vámi požadovanou funkčnost lze učinit např. pomocí prvku "Menu" ze sekce "General" (nikoliv pomocí prvku "MenuScreen" ze sekce "Basic"). Tento prvek přímo neotvírá obrazovky, ale vytvoří Vám v části "Skript" tolik událostí, kolik položek v prvku "Menu" nadefinujete. Události se vykonávají v případě, kdy na displeji vyberete příslušnou položku v prvku "Menu". Do jednotlivých událostí lze zapsat požadovaný kód. Za předpokladu, že byste např. chtěl měnit 3 bity jedné proměnné (např. s názvem "i") pouhým výběrem jednotlivých položek prvku "Menu", nadefinujete tento prvek se třemi položkami. Potvrzením takové definice budou vytvořeny tři události. Do každé události pak napíšete kód pro změnu hodnoty bitu proměnné "i". Výsledný kód ve skriptovací části DetStudia by tedy vypadal následovně:

Kód: Vybrat vše
event Menu1_Item0_OnPressEnter()
i.0 = not i.0;
end;
event Menu1_Item1_OnPressEnter()
i.1 = not i.1;
end;
event Menu1_Item2_OnPressEnter()
i.2 = not i.2;
end;


Více informací o skriptování v DetStudiu lze nalézt v aplikační poznámce "AP0023 - Skriptování v DetStudiu", která je volně ke stažení na http://www.amit.cz v sekci "Podpora/Aplikační poznámky".
Zbyněk Říha
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
riha
 
Příspěvky: 375
Registrován: čtv 10. dub 2008 12:46:00

Re: Obrazovky

Příspěvekod partikam » pon 19. dub 2010 20:26:52

Dobrý den, zkoušel jsem do mého programu definovat aliasy, ale to nefungovalo. Poté co jsem tam nadefinoval bity mé proměnné (manual.1, manual.2, ...), tak již bylo možno generovat procesy, ale nefungovalo to. Uvedu příklad.

Mám program, který běží automaticky, má teplotní čidla a různé senzory a chci, aby při změně jedné proměnné (@manualrezim) režim přešel do manuálního režimu a některé bity bylo možno měnit manuálně.
BININ......
if @manualrezim

if @proudeni1_m
let @proudeni1=true
endif

if @proudeni2_m
let @proudeni2=true
endif

if @odsavani_m
let @odsavani=true
endif

if @kyslik_m
let @kyslik=true
endif

else

//režim, který běží automaticky pokud je @manualrezim v log.0

endif

A na obrazovce mám právě nastevono=>pokud dám @manualrezim pomocí bitswitchkey do log.1, tak mohu již zasahovat do programu manuálně. A dále mám nastaveno Menu, kde bych chtěl zapínat a vypínat jednotlivé bity (uvedené v příkladu). Potřeboval bych radu co dělám špatně, popřípadě, jak nastavit obrazovky jiným způsobem.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod partikam » čtv 22. dub 2010 16:12:18

Dobrý den, problém je již vyřešen. Problém byl v tom, že mám více procesů a v jednom z nich jsem měl podmínku, která nebyla úplně vhodná. Po úpravě a zapsání daného skriptu je již menu (na zapínání a vypínaní bitů) plně funkční. Děkuji za radu..
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod partikam » čtv 03. bře 2011 13:55:29

Dobrý den, potřeboval bych pár rad ke skriptování:

1) Používám prvek MENU a potřebuji, aby po stisknutí <ent> (nebo jiné nadefinová klávesy) se vygeneroval puls. Uvažoval jsem, že bych do skriptu zadal
@alias = not @alias; =>v procesu bych pak použil timerpuls a bit poté vynuloval. Spíše by mě ale zajímala ta možnost vygenerování pulsu pomocí skriptu, pokud je to možné, popřípadě co by jste mi doporučili.

2) Dále bych potřeboval nejspíše pomocí prvku keybit, který bych použil 4* a nadefinoval jim klávesy šipek. Budu potřebovat, aby po dobu co na AMINi2D budu držet např. šipku doleva, tak aby daný bit==1, ale pokud tlačítko pustím, tak bit==0.

Děkuji za odpověď.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod Kozdera » čtv 03. bře 2011 20:44:30

partikam píše:1) Používám prvek MENU a potřebuji, aby po stisknutí <ent> (nebo jiné nadefinová klávesy) se vygeneroval puls. Uvažoval jsem, že bych do skriptu zadal
@alias = not @alias; =>v procesu bych pak použil timerpuls a bit poté vynuloval. Spíše by mě ale zajímala ta možnost vygenerování pulsu pomocí skriptu, pokud je to možné, popřípadě co by jste mi doporučili.

Asi by to bylo možné realizovat prvkem Timer (prvek pro obrazovky). Při stisku klavesy se zapíše Timeru interval.
A při události OnTick se shodí bit a zapíše nula do intervalu, aby neběžel.
Jestli to bude fungovat si musíte vyzkoušet sám.

partikam píše:2) Dále bych potřeboval nejspíše pomocí prvku keybit, který bych použil 4* a nadefinoval jim klávesy šipek. Budu potřebovat, aby po dobu co na AMINi2D budu držet např. šipku doleva, tak aby daný bit==1, ale pokud tlačítko pustím, tak bit==0.


Prvek Key má procedury OnKeyDown a OnKeyUp. Nezapomeňte, že některé displeje tyto události generují současně.
Jan Kozdera
NEUMAN EL, spol. s r.o.
Kozdera
 
Příspěvky: 96
Registrován: stř 07. kvě 2008 14:29:48

Re: Obrazovky

Příspěvekod partikam » ned 27. bře 2011 22:23:14

Dobrý den,
měl bych ještě pár otázek ohledně skriptování a obrazovky GLOBAL. Potřebuji, aby při kritickém stavu se mi zobrazila potřebná obrazovka. Na to, jak toho docílit jsem již přišel a to v obrazovce global napíšu do skriptu:
1)

if @alias then
nazev_obrazovky.show();
else
endif;

Jenomže bych potřeboval, aby po přepnutí na zvolenou obrazovku bylo možno odejít z oné obrazovky i v případě, že @alias bude stále v log.1. Jde to vyřešit nějak esteticky pomocí skriptu, nebo musím do skriptu dopsat nějaký timer, aby mě to nedrželo po celou dobu v jedné obrazovce?

2)
Je možné v případě kritického stavu (nehody) po přepnutí na některou obrazovku onu obrazovku rozblikat, aby to upozornilo dispečink a zároveň po stisknutí některé klávesy to skončilo?

3)
Mám na jedné obrazovce prvek MENU (o dvou řádcích) a DATATIMEEDIT. Chci mezi těmito prvky přecházet pomocí šipek. Jak toho docílit, aby se tyhle dva prvky "ztotožnily" a šipkami bych poté mohl mezi jednotlivými prvky přecházet.

Řešil jsem to pomocí prvku KEY:
event Key1_OnKeyup()
nastaveni_planu.NextFocus();
end;
Funguje to, ale ne tak esteticky, jak funguje samotný přechod mezi řádky prvků MENU, či MENUSCREEN.

Děkuji vám předem za rady ;)
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod riha » pon 28. bře 2011 11:21:27

partikam píše:Dobrý den,
měl bych ještě pár otázek ohledně skriptování a obrazovky GLOBAL. Potřebuji, aby při kritickém stavu se mi zobrazila potřebná obrazovka. Na to, jak toho docílit jsem již přišel a to v obrazovce global napíšu do skriptu:
1)

if @alias then
nazev_obrazovky.show();
else
endif;

Jenomže bych potřeboval, aby po přepnutí na zvolenou obrazovku bylo možno odejít z oné obrazovky i v případě, že @alias bude stále v log.1. Jde to vyřešit nějak esteticky pomocí skriptu, nebo musím do skriptu dopsat nějaký timer, aby mě to nedrželo po celou dobu v jedné obrazovce?


Předpokládám, že tuto funkci chcete využít pro obsluhu alarmů. Pokud ano, doporučil bych Vám už na regulační úrovni využít prvek "ErrSig" ("ErrSig32"), u kterého lze využít vámi navrhovanou funkci timeru (pomocí parametru „AckDuration“). Funkci timeru pak nemusíte doprogramovávat ve skriptu. Ve výsledku byste pak ve vašem SW zobrazoval požadovanou obrazovku v závislosti na hodnotě proměnné (dosazené za parametr "Alarm" prvku "ErrSig"), která vás bude informovat o nastalém alarmu. Kód by vypadal např. následovně:
Kód: Vybrat vše
if prom_alarm > 0 then
   alarmy.Show();
EndIf;

Na alarmem otevřené obrazovce (dle ukázky výše se jedná o obrazovku „alarmy“) pak použijete prvek "Key" a např. v jeho události "OnKeyDown" nastavíte příslušné bity proměnné pro kvitaci nastalého alarmu (proměnná dosazená za parametr "Ack" modulu "ErrSig") na hodnotu True. Kód by vypadal např. následovně:
Kód: Vybrat vše
event Key1_OnKeyDown()
   prom_kvit = 0xffff;
end;

Tím dojde k dočasnému nastavení odpovídajících bitů proměnné, dosazené za parametr "Alarm" (v našem případě se jedná o proměnnou "prom_alarm"), na hodnotu False a vy budete schopen z obrazovky odejít.
Pokud nechcete využít modulu "ErrSig", budete opravdu muset využít prvek "Timer" (umístěný v obrazovce "Global"), pomocí kterého dočasně nastavíte alias, který vám způsobuje otevření požadované obrazovky, na hodnotu false.

partikam píše:2)
Je možné v případě kritického stavu (nehody) po přepnutí na některou obrazovku onu obrazovku rozblikat, aby to upozornilo dispečink a zároveň po stisknutí některé klávesy to skončilo?


Pokud máte na mysli vypnutí/zapnutí podsvitu LCD displeje, toto možné není. Ve skriptu však můžete měnit hodnotu „barvy“ pozadí (vlastnost "Backcolor") a popředí (vlastnost "Forecolor") prvků na obrazovkách. Tuto změnu lze provádět např. v události "OnRefresh" vybrané obrazovky.

partikam píše:3)
Mám na jedné obrazovce prvek MENU (o dvou řádcích) a DATATIMEEDIT. Chci mezi těmito prvky přecházet pomocí šipek. Jak toho docílit, aby se tyhle dva prvky "ztotožnily" a šipkami bych poté mohl mezi jednotlivými prvky přecházet.

Řešil jsem to pomocí prvku KEY:
event Key1_OnKeyup()
nastaveni_planu.NextFocus();
end;

Funguje to, ale ne tak esteticky, jak funguje samotný přechod mezi řádky prvků MENU, či MENUSCREEN.

Zde bych se zatím pouze rád ujistil, že máte na mysli funkčnost, kdy v prvku "Menu" ("MenuScreen") vybíráte buď první položku nebo druhou položku. Výběr provádíte šipkami nahoru/dolů. Z prvku "DateTimeEdit" požadujete vytvořit něco jako třetí položku menu, neboli pokud jste aktuálně na druhé položce menu a stisknete klávesu dolů tak provedete fokus prvku "DateTimeEdit". Je to tak, nebo máte na mysli jinou funkčnost?
Zbyněk Říha
Technická podpora (support@amit.cz)
AMiT spol. s r.o.
Uživatelský avatar
riha
 
Příspěvky: 375
Registrován: čtv 10. dub 2008 12:46:00

Re: Obrazovky

Příspěvekod partikam » pon 28. bře 2011 17:30:04

Opověď:
ad 3) Ano, přesně takhle bych to chtěl zprovoznit. Mám prvek MENU o dvou řádcích a dále prvek datatimeedit (datatimeedit něco jako třetí položko MENU). Chci je ztotožnit a přecházet mezi prvky šipkami (up, down).

Jinak děkuji za předchozí odpovědi.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Re: Obrazovky

Příspěvekod partikam » pon 04. dub 2011 14:00:28

Dobrý den,
mám nadefinovanou obrazovku, kde je prvek MENU a vedle každého řádku chci mít bitswitchviw, abych věděl, která maximální rychlost je povolená. Jak udělám to aby se to "scrolovalo". Stotožnit řádek MENU s bitswitchview??

Děkuji za odpověď.
partikam
 
Příspěvky: 29
Registrován: čtv 08. říj 2009 16:17:27

Další

Zpět na AMiTsys Junior

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 2 návštevníků

cron