Domů Nápověda Vyhledávání Přihlásit Registrovat
Novinky:               PROSÍME VŠECHNY UŽIVATELE, PŘED POUŽITÍM DISKUSÍ ČTĚTE MÍSTNÍ PRAVIDLA! ZDE ...!


+  Diskuse Elektrika.cz
|-+  HYBRIDNÍ zóna
| |-+  Firemní podpora
| | |-+  TECO - Foxtrot chytré instalace. ODBORNÍCI radí spotřebitelům!
| | | |-+  Technická podpora výrobce TECO Kolín radí odborníkům
| | | | |-+  Jak v Mosaicu generovat náhodná čísla?
0 uživatelů a 1 Host prohlíží toto téma. « předchozí další »
Stran: [1] Dolů Poslední příspěvky Tisk

Upozornění!
Odpovědi na témata nejsou právně závazné!
Na elektrickém zařízení smí pracovat pouze osoba s příslušnou kvalifikací dle nařízení vlády 194/2022 Sb. Podrobnosti zde!

Autor Téma: Jak v Mosaicu generovat náhodná čísla?  (Přečteno 9038 krát)
Crossi
« kdy: 26.08.2013, 21:47 »

Má někdo zkušenosti s naprogramování m generátoru náhodných čísel v Mosaicu?
Asi se mi budou hodit všechny nápady jaký vás napadnou.
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Slavomír Skopalík
*
Offline Offline



« Odpověď #1 kdy: 26.08.2013, 22:04 »

Pokud to neni opravdu nutne, tak se pouzivaji generatory psedonahodnych cisel. Tj. zvenku se tvari jako nahodne, ale jejich posloupnost je predem dana.
Maji tu vyhodu, ze v pripade chyby v programu, je mozne cely proces otestovat.
Mezi nejjednodusi patri posuvny register + XOR hradlo z nekterych z poslednich bitu.

Kratke pojednani treba zde:
http://www.kemt.fei.tuke.sk/predmety/KEMT414_AK/_materialy/Cvicenia/kryp_4.pdf

http://en.wikipedia.org/wiki/Random_number_generation

Ukazka kodu (netestoval jsem to):

m_w = <choose-initializer>;    /* must not be zero */
m_z = <choose-initializer>;    /* must not be zero */
 
uint get_random()
{
    m_z = 36969 * (m_z & 65535) + (m_z >> 16);
    m_w = 18000 * (m_w & 65535) + (m_w >> 16);
    return (m_z << 16) + m_w;  /* 32-bit result */
}

Zajisteni opravdu nahodneho generatoru je velmi slozite bez specialniho HW.
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Milan Bydžovský
*
Offline Offline




« Odpověď #2 kdy: 27.08.2013, 13:13 »

Pokud stačí psedonáhodné číslo, zde je kód přepsaný z Cčka do ST, který lze v PLC využít. Funkce r4_uniform_01 vrací čísla s rovnoměrným rozdělením. Funkční blok r4_normal_01 vrací čísla s pseudonormální m rozdělením, stejně jako r4_normal, který má navíc parametr pro střední hodnotu a odchylku.

Kód:
FUNCTION r4_uniform_01 : REAL
(*
  R4_UNIFORM_01 returns a unit pseudorandom R4.

  This routine implements the recursion

    seed = 16807 * seed mod ( 2**31 - 1 )
    r4_uniform_01 = seed / ( 2**31 - 1 )

  The integer arithmetic never requires more than 32 bits,
  including a sign bit.

  If the initial seed is 12345, then the first three computations are

    Input     Output      R4_UNIFORM_01
    SEED      SEED

       12345   207482415  0.096616
   207482415  1790989824  0.833995
  1790989824  2035175616  0.947702
*)
  VAR_INPUT
    init_seed : BOOL;
  END_VAR
  VAR
    k : DINT;
  END_VAR
  VAR_IN_OUT
    seed : DINT;
  END_VAR
  VAR_EXTERNAL
    AT %SL52 : DINT;
  END_VAR

  if init_seed then
    seed := %SL52;
  end_if;

  k := seed / 127773;

  seed := 16807 * ( seed - k * 127773 ) - k * 2836;

  IF  seed < 0 THEN
    seed := seed + 2147483647;
  END_IF;
//
//  Although SEED can be represented exactly as a 32 bit integer,
//  it generally cannot be represented exactly as a 32 bit real number!
//
  r4_uniform_01 := DINT_TO_REAL(seed) * 4.656612875E-10;

END_FUNCTION

FUNCTION_BLOCK r4_normal_01
(*
  R4_NORMAL_01 returns a unit pseudonormal R4.

  The standard normal probability distribution function (PDF) has
  mean 0 and standard deviation 1.

  The Box-Muller method is used, which is efficient, but
  generates two values at a time.

*)

  VAR_IN_OUT
    seed : DINT;
  END_VAR
  VAR CONSTANT
    PI : REAL := 3.141592653589793;
  END_VAR
  VAR
    used   : DINT := -1;
    seed2  : DINT;
    y      : REAL;
    r1, r2 : REAL;
  END_VAR
  VAR_OUTPUT
    x : REAL;
  END_VAR

  IF ( used = -1 ) THEN
    used := 0;
  END_IF;
//
//  If we've used an even number of values so far, generate two more, return one,
//  and save one.
//
  IF used MOD 2 = 0 THEN
    r1 := r4_uniform_01 ( false, seed );


    seed2 := seed;
    r2 := r4_uniform_01 ( false, seed2 );

    x := sqrt ( -2.0 * log ( r1 ) ) * cos ( 2.0 * PI * r2 );
    y := sqrt ( -2.0 * log ( r1 ) ) * sin ( 2.0 * PI * r2 );
//
//  Otherwise, return the second, saved, value and the corresponding
//  value of SEED.
//
  ELSE
    x := y;
    seed := seed2;
  END_IF;

  used := used + 1;

END_FUNCTION_BLOCK


FUNCTION_BLOCK r4_normal
(*

  R4_NORMAL returns a scaled pseudonormal R4.

  The normal probability distribution function (PDF) is sampled,
  with mean A and standard deviation B.

*)
  VAR
    i_r4_normal_01 : r4_normal_01;
  END_VAR

  VAR_INPUT
    a : REAL;
    b : REAL;
  END_VAR
  VAR_IN_OUT
    seed : DINT;
  END_VAR
  VAR_OUTPUT
    x : REAL;
  END_VAR

  i_r4_normal_01(seed := seed);
  x := a + b * i_r4_normal_01.x;

END_FUNCTION_BLOCK
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Crossi
« Odpověď #3 kdy: 28.08.2013, 00:05 »

Zatím děkuji za inspiraci pokusím se to použít.
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Erhard Mareček
*
Offline Offline



« Odpověď #4 kdy: 04.09.2013, 10:01 »

Použil jsem tohle:

Random                : UDINT;

Random := MOD(Random*214013 + 2531011, 16777216);     // Random generator

Odzkoušeno.
Pravidla diskusí   Nahlásit moderátorovi   Stěžovat si na moderátora   Zaznamenáno
Stran: [1] Nahoru Poslední příspěvky Tisk 
« předchozí další »
SLEDUJTE PODOBNÁ TÉMATA ZDE!

Příbuzné diskuse a články z Elektrika.cz

 Lze přecházet mezi FoxTool a Mosaic bez nutnosti výměny jednotek?
 Jak řešit dvojstisk/trojstisk tlačítka v prostředí Mosaic (strukturovaný text)?
 Ako pouzit Mosaic (SW) s CU2-01M jednotkou?
 Jak dostat NSlookUP do globalnich dat?
 Lze změnit podobu webového rozhraní projektu ve FoxToolu?
 Byl by zajem o utilitku pro sber dat z Foxtrotu?
 Co je to "0:[Xpro:Error] SYSGEN\ZAPOTOCI_PLC1$2.MAS (2806): unknown POU name"?
 Pracuje Mosaic správně s polem ukazatelů na BOOL?
 Proč v průzkumníku knihoven nelze načíst *.MJF soubory?
 Fóry foxtrotího fóra?
 jak funguje #def v Mosaicu?
 Jak nadefinovat C-RC-0003R v Mosaicu 2013.1 SP2 / 2013.3?
 Proc po kompilaci nefunguje odesilani hodnot?
 Dá se propojit program z Mosaicu s programem v Reliance?
 Jak správně použít funkci SunAzimuth?
 Existuje volná implementa m-busu do mosaicu?
 Je toto chyba v mosaic při určité definici vlastního typu proměnné ?
 Proč nelze vytvořit nový projekt v Mosaic 2014.1 RC3?
 Co u CP 1000 znamená error A3-00-3805?
 Existuje pro CP1000 mosaic detekce změny hodiny skutečného času?
 Jak nakonfigurovat modul GSM2-01 k CP-1000 v Mosaicu?
 Jak regulovat třícestný ventil v Mosaicu?
 Jak změnit konstantu LONG_CLICK_TIME v Mosaicu?
 Jak změnit hodnotu RGB_STEP a stmívání konkrétního světla přes web?
 Jak v nahradit v jazyce CFC void?
 Jak ve Web Maker zobrazit obrázek ze souboru?
 Jak nastavit sériový kanál CP1000 CH2 v Mosaicu?
 Jak se připojit k Mosaicu přes internet?
 Je nějak v CP1000 omezena paměť pro proměnné ukládané do Global Retain?
 Jak řešit chybu dialogu na panelu ID18?
 Jak obcházíte v CFC nemožnost přiř. polí do vstupních proměnn. funkčního bloku?
 Proč nelze přepínat do relátkového zobrazení v Mosaicu?
 Co znamená v Mosaicu chyba při překladu "nedostatek 'R' operandů"?
 Je v Mosaicu nějaká obdoba křížových referencí?
 Je možné definovat místo v paměti pro danou instanci?
 Obsahuje simulator PLC v Mosaicu take simulator webserveru ?
 Dělal někdo fb na komunikaci s meteostanici Netatmo?
 TECO: Nová verze Mosaicu ke stažení
 Jak ošetřit chybové stavy v PLC?
 Mohli byste mi prosím pomoci s vytvořením programu v jazyce ST?
 Proč nenajde Mosaic 2015.4 HW klíč ve Windows 10 a RDP spojeni?
 TECO: Nová verze Mosaicu 2015.4
 Bude Mosaic možné provozovat v prostředí Linux?
 Jak zabranit restartu Windows 10 64 build 10656 po zasunuti HW klice?
 Jak zvysit pocet svetel v LightsLib?
 Poskytne někdo jednoduché programy pro Tecomat?
 Kdo mi naprogramuje v Praze PLC Tecomat?
 Prečo od 24.3.2016 nefunguje komunikácia so serverom YahooWeather?
 Ako rozbehat CP-1000KEY2-01+Mosaic z různých komponent?
 Jaký je rozdíl v licencích na Mosaic?
 Ako aktivovať podsvietenie ID-31 pri zobrazení alarmu?
 Lze provozovat Mosaic na Windows server 2008/2012?
 Jak spravne nastavit kanal komunikace GSMLib?
 Proč Mosaic neukazuje v datové struktuře pro modul C-RQ-0600 hodnotu pro CO2?
 Jak simulovat přítomnost osob v MOSAIC?
 Lze do vlastní knihovny zahrnout POU "Program"?
 Jak vyřešit komunikaci GSM UC-1205 s CP-1001 připojenou na kanálu CH1 RS232?
 Existují knihovny pro řízení krokového motoru pro Foxtrot 1003?
 Potřebuji HW klíč když chci komunikovat přes ethernet v režimu UNI?
 Lze nejak zjistit, ze modul na R-Fox poslal novou hodnotu?
 Jakým způsobem se dá provádět zápis do proměnné v jazyce ST?
 Jak vytvořit set/reset proměnné v CFC?
 Jak v Mosaicu adresovat proměnné tak, aby panel Weintek s PLC komunikoval?
 Ako do podadresara v korenovom www zapisovat z vonka z PC?
 Lze u modulu C-IB-1800M nastavit úrovně vyhodnocení?
 Lze u modulu C-IB-1800M vyčíst hodnotu odporu smyčky?
 Jak přecházet pomocí stavu proměnné mezi stránkami - WebMaker?
 Jaké je správné vyhodnocení funkce "real_to_string()"?
 TECO vydalo novou verzi Mosaic 2018.2
 Jak "odchytit" stlačení tlačítka pro odeslání?
 Lze v mosaicu zakázat optimalizaci uživ. registrů? Či jiné řešení problému?
 Ako správne nastaviť a skompilovať Dataloger?
 Jak kombinovat program v .CFC s programem v .ST ?
 Jak ve Webmakeru vnořit do sebe dvě pole?
 Lze ve webmakeru vytvořit slidovací prvky? šoupátka pro ID 31-36?
 Jak je to s omezeními Mosaic Lite? Jsou zde rozdíly v kombinaci s Foxtrot 2?
 Jak lze v Mosaicu redefinovat promene?
 Jak rozchodit v Mosaicu synchronizaci času PLC přes NTP server??
 Jak se řeší v Mosaicu proporcionální řízení hlavice C-HC-0201F-E?
 Jak se vzdáleně připojit na PLC přes veřejnou IP?
 Jak odstranit error ID20 na YahooWeather?
 Existuje firma / programátor u koho lze objednat programování TECO?
 Je mozne u FB pouzit ve VAR_INPUT promenou typu ARRAY?
 Proč Mosaic ztrácí spojení s Foxtrotem v gigabit LAN na které běží streamování?
 Jak proměnné uložit do paměti PLC, změnit a obnovit?
 Jak udělat ve WebMakeru prohlížeč alarmů?
 Jak konvertovat ascii code znaku na string?
 Jak převést ascii cód znaku v usint na string ?
 Jak u MOSAIC funguje stažení programu z PLC?
 Jak odesílat data přes JSON nebo XML z Arduina nebo ESP32 na Foxtrot?
 Ako z prostredia Mosaic interpretovať namerané dáta online?
 Jak v Mosaicu počítat počet sepnutí výstupu?
 Dá se někde reportovat chyba v Mosaicu?
 Je možné sloučení projektu v PLC a Mosaic?

Příbuzné diskuse a články z Kutil.elektrika.cz

Aktuální slova (1)



Poháněno MySQL Poháněno PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Validní XHTML 1.0! Validní CSS!
+420 910 100 100
Stránka vytvořena za 0.05 sekund, 24 dotazů.