Diskuse Elektrika.cz

HYBRIDNÍ zóna => Technická podpora výrobce TECO Kolín radí odborníkům => Téma založeno: Michal Hozak 21.05.2012, 14:13



Název: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: Michal Hozak 21.05.2012, 14:13
Jak správně řešit v jazyce strukturovanéh o textu v Mosaicu dvojstisk, trojstisk tlačítka případně dlouhé podržení tlačítka? Požadavek je jednoduchý. Při jednom krátkém stisku vyhodnotit jako povel A při krátkém dvojstisku povel B při trojstisku povel C, při dlouhém držení povel D.



Název: Re: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: SMILEK 21.05.2012, 23:23
Teoreticky to samozřejmě řešitelné je  ;),  ale:

Ty dvoj/trojstisky nejsou úplně praktické,  protože je nutné chvilku počkat, zda po stisku nepřijde ještě další stisk a tedy vyhodnocení povelu "A" nepřijde okamžitě,  ale až po uplynutí nějaké doby od uvolnění tlačítka. Nebo se smířit s nutností dodatečně změnit typ přijatého povelu (pokud to povaha aplikace umožňuje).

A navíc některá tlačítka neumožňují (kombinací svého mechanického provedení a prodlev CIB sběrnice) dostatečně spolehlivě rozlišit několik rychlejších stisků za sebou.

Jedno z možných SW řešení je od okamžiku prvního stisku nechat běžet dva časové intervaly. První bude vyhodnocovat "délku" samotného stisku a rozliší,  zda jde o krátký/dlouhý. Druhý bude určovat dobu, v níž musí být tlačítko stisknuto podruhé/potřetí,  aby to bylo považováno za dvojstisk, nebo trojstisk.
Ale cest k dosažení výsledku je jistě více, záleží na fantazii programátora.


Název: Re: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: Stýskalík Jiří 22.05.2012, 10:37
K dispozici je funkční blok fbSimpleButton, který řeší dvojstisk, resp. rozlišení dlouhého a krátkého stisku s možností definice doby vyhodnocení dlouhého stisku. Tento funkční blok je součástí knihovny LightsLib.


Název: Re: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: Jindra_K 22.05.2012, 10:45
K předchozím příspěvkům ještě doplním:
Pro vyhodnocení krátkého a dlouhého stisku tlačítka lze použít vstupní modul C-IT-0908S (obslouží 8 tlačítek),  který přímo vyhodnocuje délku stisku a uživateli předává v datech informaci, zda se jednalo o krátký, nebo dlouhý stisk. Rozhodovací mez kratký/dlouhý stisk je v modulu konfigurovatel ná. Tato funkce bude již standardní součástí všech nově do prodeje uváděných modulů CFox.
Vyhodnocení dvojstisku a trojstisku se musí řešit na úrovni uživatelského programu (čítat indikované krátké stisky z modulu).   
Při použití jiných CFox vstupních modulů  se vyhodnocení stisku musí řešit uživatelským programem, (krátké stisky jsou těmito CFox moduly indikovány cca. 200 - 250ms pulsem),  takže se např. časovačem TON měří délka stisku.



Název: Re: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: Pavel Urbancik 22.05.2012, 11:27
Řešil jsem stejný problém a napsal si vlastní funkci která rozlišuje držení, stisknutí a dvouklik.

Vyhodnocování krátkého a dlouhého stisku má taky celkem vtipný důsledek, protože musíme počkat až uživatel pustí tlačítko a tak si většina návštěv nedokáže rozsvítit :-)
Možná by stačilo poladit čas pro rozlišení, ale takto je to větší zábava.


Název: Re: Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
Přispěvatel: Slavomír Skopalík 01.07.2012, 11:06
Pro vycestisk pouzivam tento kod:

Sv1On:=R112_WS1IN.BTN.UP1 or R112_WS2IN.BTN .UP1 or R112_WS3IN.BTN .UP1 or R112_WS4IN.BTN .UP1;

// Postupne rozsvetceni sekci
R112.Svetlo1a. BtnUp:=Sv1On;
if Sv1On and not R112.Svetlo1a. Old_BtnUp then   // Hack for positive edge on button
  if R112.Svetlo1a. OutputBool then
    R112.Svetlo1b. BtnUp:=true;
  end_if;
  if R112.Svetlo1b. OutputBool then
    R112.Svetlo1c. BtnUp:=true;
  end_if;
end_if;

Tento kod postupne (na kazdy stisk jedna sekce) rozvetcuje lustr o 3 sekcich.

Jinak v beznych PLC se na to pouziva prikaz "Positive edge",  ale jeho pouziti u foxtrotu je trochu krkolomne, ale principialne mozne.


Řešil jsem stejný problém a napsal si vlastní funkci která rozlišuje držení, stisknutí a dvouklik.

Vyhodnocování krátkého a dlouhého stisku má taky celkem vtipný důsledek, protože musíme počkat až uživatel pustí tlačítko a tak si většina návštěv nedokáže rozsvítit :-)
Možná by stačilo poladit čas pro rozlišení, ale takto je to větší zábava.