Zmena časovania prístroja za behu

K napísaniu tohoto príspevku ma podnietil e-mail od jednoho čitateľa mojej stránky, ktorý sa dotazoval - citujem:
"Potreboval bych vedet, jestli je mozne nejakym zpusobem pri behu aplikace menit casovani pristroje. Konkretne jde o to, ze bych potreboval nastavovat v pristroji archiver ruzne casy pro ukladani dat a to behem chodu aplikace. Lze to vubec?"
V minulosti som niečo takéto riešil, takže sa pokúsim podeliť sa o to.

Uživateľ CP vie, že prístroje je možné aktivovať dvoma základnými prostriedkami - buď cyklickým časovaním (čiže pravidelne v nejaký časový interval) alebo podľa potreby (aktivácia "od udalosti"). Pri časovaní zadávame prístroju interval časovania buď priamou hodnotou alebo konštantou. Konštantu však samozrejme počas behu aplikácie nie je možné meniť. Bolo by krásne, keby interval časovania bolo možné zadávať i pomocou premennej - to však možné nie je.

Musíme si teda vypomôcť inak. Najprv si však stanovíme, že prístroj - napr. archiver - chceme časovať 3 rôznymi hodnotami, a to napr. 1 sekunda, 5 sekúnd a 10 sekúnd. Podstata riešenia spočíva v tom, že vloženému prístroju "archiver" nepridelíme žiadne časovanie. Aktivovať ho budeme z troch rôznych prístrojov "program" príkazom "send archiver". Až každý z týchto troch prístrojov "program" bude časovaný, a to práve hodnotami 1 sekunda, 5 sekúnd a 10 sekúnd. O tom, ktoré časovanie zvolíme, budeme rozhodovať za behu napr. pomocou premenných typu "boolean". Tieto 3 prístroje "program" by potom mohli vyzerať nasledovne:

program casovanie1;
  timer=1;
  begin
    if cas_1 then
      send archiver;
    end;
  end;
end_program;
      
program casovanie2;
  timer=5;
  begin
    if cas_2 then
      send archiver;
    end;
  end;
end_program;
      
program casovanie3;
  timer=10;
  begin
    if cas_3 then
      send archiver;
    end;
  end;
end_program;

 

Ako vidno, riešenie nie je príliš komplikované - pomocou premenných "cas_1", "cas_2" a "cas_3", ktoré sú typu "boolean" (a ktoré vhodne prepíname), rozhodujeme o tom, z ktorého prístroja "program" budeme aktivovať prístroj "archiver". A premenné časovanie prístroja za behu aplikácie máme na svete. Takýto spôsob riešenia však predpokladá, že prístroj chceme časovať síce rôznymi, ale pevne danými (a predom známymi) hodnotami. Dá sa však zabezpečiť i plynulá zmena hodnoty časovania za chodu aplikácie - je to však o malinko zložitejšie a tom až niekedy nabudúce.
Pre lepšie pochopenie (alebo otestovanie) si môžte stiahnuť demo, kde je aplikovaný hore uvedený príklad.

download:
seq-demo.zip - 1344 bytov