Modul EnqueueDataOnTrigger

Modul pro spuštění čašovače na základě odeslání triggeru snímači a následné přeposlání dat.

!!!Důležité!!! tento modul musí být na levelu spolu s modulem ScannerTrigger

Parametry modulu EnqueueDataOnTrigger

Timeout: hodnota časovače po jejímž vypršení dojde k blokaci podle všech BlockDefinic

Parametry modulu ScannerTrigger

ManualTriggerActivationKey: klávesa pro manuální triggerování a následné odeslání dat na snímače IOPortWaitStates: Hodnota TTL, kterou když modul dostane, dojde k odeslání dat na snímače Data: Data, která se mají odeslat snímači v případě triggeru TargetPorts: Čísla portů (z coreového modulu Terminal), na která se v případě triggeru odešlou data

Pro programátory - Popis funkce a logiky modulu EnqueueDataOnTrigger ve spojitosti s modulem ScannerTrigger

V modulu EnqueueDataOnTrigger je nadefinována třída EnqueueDataOnTriggerMessage s prázdným konstruktorem. Tato třída se používá pro komunikaci mezi moduly EnqueueDataOnTrigger a ScannerTrigger a je zároveň spouštěčem logiky modulu EnqueueDataOnTrigger. Tato zpráva je odeslána z modulu ScannerTrigger po odeslání dat na snímače po nadefinovaném triggeru (nějaký TTL signál nastavený v parametru IOPortWaitStates ScannerTrigger). Komunikace je zprostředkována třídou Session.Messenger (jednoduchý popis této funkce je níže). Po odeslání message z modulu ScannerTrigger dojde k zaznamenání message v modulu EnqueueDataOnTrigger a zavolání metody StartTimerAndUnblock, která spustí časovač (m_timer.Interval je hodnota parametru Timeout) a odblokuje pracoviště. Dále když dojdou nějaké data, dojde ke kontrole, zda se jedná o Command (SGMLState.NotHandled => data zpracuje nějaký další modul na levelu). Když dojdou data typu SerialNo dojde k zařazení těchto dat do fronty (Session.SetNextData(data)). Pokud dojdou jakákoli jiná data, tak dojde k blokaci pracoviště, zalogování a nastavení SGMLState - Fail a Handled

Pro implementátory - Popis funkce a logiky modulu EnqueueDataOnTrigger ve spojitosti s modulem ScannerTrigger

Moduly ScannerTrigger a EnqueueDataOnTrigger se dají na stejný level ve skriptu! Nastavit parametry obou modulů (jak jsou popsány v kapitole Parametry modulu ...). Když dojde TTL s hodnotou rovno hodnotě v parametru IOPortWaitStates, tak dojde k odeslání dat na snímače a ke spuštění časovače s délkou intervalu podle parametru Timeout. - Pokud dojdou data typu command, tak tyto data modul EnqueueDataOnTrigger propustí dál na daném levelu. - Pokud dojdou data jiná než SerialNo nebo Command, tak dojde k zahlášení chybové zprávy a k blokaci. - Pokud nedojdou data v nadefinovanem intervalu, tak dojde k zablokovani podle stavů nadefinovaných v coreovém modulu IOPortBlockerService. - Pokud dojdou data v nadefinovaném intervalu a jsou typu SerialNo, tak se tyto data znovu zařadí do bufferu dat (tzn. na dalším levelu je může zpracovat nějaký další modul)

Pro programátory - popis jednoduchého použití Messengeru

1.Nadefinujete si třídu, která bude fungovat jako zpráva (pokud zpráva funguje pouze jako event, tak se nemusí deklarovat žádné property třídy ani parametry konstruktoru). 2. V modulu, z kama chcete poslat zprávu - Session.Messenger.Send(new ClassNameMessage()); - pozn. někdy je celkem sranda dosáhnout stavu, že modul danou classu vidí (všelijaké dědění a někdy se to musí ohýbat) 3. V modulu, kde chcete zachytávat danou message - Session.Messenger.Register(this, (m) => OnClassNameMessageSentMethod()); - v metodě OnClassNameMessageSentMethod už můžete dělat, co chcete :)