Sekvenční vychystávání
From PlcWiki
(→Důležité produkční soubory sekvenčního kernelu) |
|||
(25 intermediate revisions not shown) | |||
Line 1: | Line 1: | ||
- | '''Úvod''' | + | == '''Úvod''' == |
+ | |||
Sekvenční vychystávání je způsob přípravy dílů pro kokpit často ještě v momentu kdy výroba samotného kokpitu nebyla na výrobní lince zahájena. V SAS se používá buď sekvenční vychystávání, což znamená přípravu dílů do palet na základě produkčních dat přijatých do kernelu. Každá paleta obsahuje díly pro více kokpitů. Druhý způsob přípravy dílů je založen na tzv. tablet kitting metodě, kdy se připravují boxy pro konkrétní kokpity a pro data se používá aplikace na tabletu. Tento článek pojednává sekvenčním vychystávání tak, jak je implementováno na linkách SAS například v Saarlouis, Boleslavi či Wolfsburgu. | Sekvenční vychystávání je způsob přípravy dílů pro kokpit často ještě v momentu kdy výroba samotného kokpitu nebyla na výrobní lince zahájena. V SAS se používá buď sekvenční vychystávání, což znamená přípravu dílů do palet na základě produkčních dat přijatých do kernelu. Každá paleta obsahuje díly pro více kokpitů. Druhý způsob přípravy dílů je založen na tzv. tablet kitting metodě, kdy se připravují boxy pro konkrétní kokpity a pro data se používá aplikace na tabletu. Tento článek pojednává sekvenčním vychystávání tak, jak je implementováno na linkách SAS například v Saarlouis, Boleslavi či Wolfsburgu. | ||
Line 5: | Line 6: | ||
- | '''Dataflow''' | + | |
+ | == '''Dataflow''' == | ||
+ | |||
[[File:slsdataflow_small.png]] | [[File:slsdataflow_small.png]] | ||
- | Data | + | Data přijatá z JISu (či jiného zdroje) putují skrz dataflow do hlavního kernelu. V rámci dataflow existuje odbočka, která přísluší sekvenčnímu kernelu plc_skrnl. Z důvodu přehlednosti se používá druhé instance kernelu jako kernelu pro sekvenční vychystávání, ale i klasický kernel obsahuje sekvenční vychystávání a může pracovat v tomto režimu. |
- | |||
- | Kernel přijímá data tak, jak přicházejí do systému. Postupně v sekvenci připravuje díly a řadí je do palet. To - do jaké palety jaký díl | + | == '''Kernel a jeho konfigurace''' == |
+ | |||
+ | |||
+ | Kernel přijímá data tak, jak přicházejí do systému. Postupně v sekvenci připravuje díly a řadí je do palet. To - do jaké palety jaký díl přijde se řídí pomocí konfiguračního souboru splan. | ||
[[File:splan.png]] | [[File:splan.png]] | ||
- | Výše je ukázka takové konfigurace převzatá ze | + | Výše je ukázka takové konfigurace převzatá ze závodu SAS SLS. |
<xml> | <xml> | ||
Line 33: | Line 38: | ||
Toto je parametr odpovídající za to, zda se budou díly na paletě po jejím zkompletování ještě skenovat pro kontrolu. Při nastavení na '''Yes''' musí pracovník pro zkompletování palety vzít scanner a postupně naskenovat všechny díly. Právě pro správné přiřazení skenování ke konkrétní paletě, je v konfiguraci obsažen i SelectPattern a ReplacePattern, který ze skenování vezme konkrétní část určenou k porovnávání. | Toto je parametr odpovídající za to, zda se budou díly na paletě po jejím zkompletování ještě skenovat pro kontrolu. Při nastavení na '''Yes''' musí pracovník pro zkompletování palety vzít scanner a postupně naskenovat všechny díly. Právě pro správné přiřazení skenování ke konkrétní paletě, je v konfiguraci obsažen i SelectPattern a ReplacePattern, který ze skenování vezme konkrétní část určenou k porovnávání. | ||
+ | SelectPattern '''musí mít shodu s celým vstupem''', jinak nefunguje korektně ReplacePattern. | ||
<xml> | <xml> | ||
SelectPattern[0] = ^_((BM5T|CM5T|F1ET|G1ET)-10849-\w{2}).*$ | SelectPattern[0] = ^_((BM5T|CM5T|F1ET|G1ET)-10849-\w{2}).*$ | ||
- | ReplacePattern[0] = | + | ReplacePattern[0] = |
</xml> | </xml> | ||
+ | |||
+ | Další parametr v kunfiguraci je | ||
+ | |||
+ | <xml> | ||
+ | AutomaticPrintWhenReady = No | ||
+ | </xml> | ||
+ | |||
+ | Ten určuje, zda pracovník na sekvenční stanici musí naskenovat barcode pro paletu (např. PLCPALS2) aby ji započal vychystávát. Pokud je tento parametr nastaven na Yes, tak je paleta připravena k naplnění okamžitě, jak se v kernelu naplní všechny pozice. Důsledek toho je, že se rovnou vytiskne soupiska vychystávaných dílů (ta se jinak tiskne v momentě, kdy pracovník naskenuje barcode pro paletu). | ||
+ | |||
+ | <xml> | ||
+ | Printer = presequencing_printer2 | ||
+ | </xml> | ||
+ | |||
+ | Tento parametr udává tiskárnu, na které se bude tisknout průvodka k paletě (pracovní ve skutečnosti vychystává díly na základě průvodky, na obrazovku v podstatě nekouká). Tiskárna musí být definována v '''CUPS'''u na všech sekvenčních stanicích. Funguje to tak, že všechny stanice připojené k sekvenčnímu kernelu zobrazují to samé a v momentě, kdy má dojít k tisku, se začnou sápat po tiskárně - první, které se to podaří, bude fyzicky tisknout. Proto musí být tiskárna definována na všech, nikdy není jistota, od kuď se vlastně bude tisknout, může to být jakákoliv sekvenční stanice připojená ke konkrétnímu skernelu. | ||
+ | |||
+ | Jednou z nejdůležitějších součástí konfigurace je i výčet dílů pro danou paletu | ||
+ | |||
+ | <xml> | ||
+ | BM5T 10849 FU:<>BM5T - F | ||
+ | BM5T 10849 GU:<>BM5T - G | ||
+ | BM5T 10849 H+:<>BM5T - H | ||
+ | BM5T 10849 L+:<>BM5T - L | ||
+ | BM5T 10849 BA+:<>BM5T - BA+ | ||
+ | </xml> | ||
+ | |||
+ | Ten funguje stejně jako PartDistribution. Pokud kernel najde v datech auta příslušný díl (na základě prvního sloupce) převede jej na číslo dílu (druhý sloupec) a tuto informaci použije pro porovnání se skenováním ze stanice. Tam pracovník musí (při nastavení PickingPartCheck = Yes) naskenovat všechny díly, které vyskládal do palety. Skenování se přiřadí na základě SelectPatternu a následně se část naskenovaného barcodu převádí na PartNumber pomocí standardní PartDistribution. '''První shoda''' (Bez ohledu na pozici. Může být problém pokud v PartDitribution je více záznamů které se mohou shodovat ...) vygeneruje PartNumber (údaj z druhého sloupce) a tato data jsou porovnána s daty vygenerovanými v kernelu. Pokud vzájemně souhlasí, je to OK a díl zezelená. Pokud pracovník omylem naskenuje něco jiného či třeba přeskočí pozici, musí naskenovat '''PLCSPCBRK''' a začít kontrolovat znova od začátku. Lze použít i autorizovaný barcod, který funguje jako responsible confirmation a pracovníkovi umožní upravit chybnou pozici (v takovém případě nemusí skenovat vše od začátku). | ||
+ | |||
+ | Generování sequence.dat se provádí takto: | ||
+ | Pokud se v datech nalezne díl z splan.cfg (první sloupec), převede se na cleverpart (druhý sloupec v splan.cfg). Cleverpart se potom hledá v PartDistribution (POZOR mezery se berou v potaz), bez ohledu na operaci - kdekoliv. Pokud nalezne, použije definovaný barkód z PartDistribution pro poslední sloupec v sequence.dat. | ||
+ | |||
+ | V základu platí logika, že co kokpit to pozice na paletě. V případě, že ve výčtu dílů budou některé chybět a žádný z patternů nebude sedět na obdržená data z kernelu. Může to produkovat prázdné pozice na platě. Viz tento screen obrazovky sekvenčního klienta | ||
+ | |||
+ | [[File:conditionsmissing.png]] | ||
+ | |||
+ | Vyhnout se tomu dá pomocí uvedení podmínek, které definují které kokpity se mají na paletu vychystávat. | ||
+ | |||
+ | <xml> | ||
+ | Condition = DA05 | ||
+ | Condition = INDI|UKRA | ||
+ | Condition = !INDI | ||
+ | </xml> | ||
+ | |||
+ | Pouze ty kokpity, které vyhovují podmínkám se budou na paletu vychystávat. Ostatní se neberou v potaz a nebudou vytvářet ani prázdné pozice. Pro definování podmínky lze užít regulární výraz. Například toto | ||
+ | |||
+ | <xml> | ||
+ | Condition = (?!^.*INDI.*$|^.*UKRA.*$)^.*$ | ||
+ | </xml> | ||
+ | |||
+ | je to samé jako toto | ||
+ | |||
+ | <xml> | ||
+ | Condition = !INDI | ||
+ | Condition = !UKRA | ||
+ | </xml> | ||
+ | |||
+ | == '''Důležité produkční soubory sekvenčního kernelu''' == | ||
+ | |||
+ | Jsou situovány ve standardním /usr/local/plc/var adresáři. Jedná se o soubory | ||
+ | <xml> | ||
+ | pallet.dat | ||
+ | sequence.dat | ||
+ | supply.dat | ||
+ | </xml> | ||
+ | |||
+ | Struktura sequence.dat | ||
+ | |||
+ | 1. číslo kokpitu | ||
+ | |||
+ | 2. podmínka | ||
+ | |||
+ | 3. paleta | ||
+ | |||
+ | 4. paleta v řadě | ||
+ | |||
+ | 5. číslo použito pro součet kokpitů na paletě. Pouze první díl na pozici má význam (při pickingParchecku) a při počítání. Zbytek má 0 a je jen pro informaci. | ||
+ | |||
+ | 6. sekvenční číslo | ||
+ | |||
+ | == '''Barvy sekvenčního klienta''' == | ||
+ | |||
+ | |||
+ | [[File:seqclient.png]] | ||
+ | |||
+ | Horní okna klienta jsou určeny pro palety, každé okono znamená jeden typ palety definovaný jako pozice v kernelu. Celkem se používá pět barev pro zvýraznění stavu palety. | ||
+ | |||
+ | |||
+ | '''modrá''' - založená paleta v kernelu, kam stále přibývají data | ||
+ | |||
+ | '''zelená''' - připravená k vychystávání, kernel naplnil všechny pozice | ||
+ | |||
+ | '''fialová''' - aktálně vychystávaná, tedy paleta ke které je vytištěna průvodka a pracovník aktuálně fyzicky plní jednotlivé pozice | ||
+ | |||
+ | '''bílá''' - fyzicky hotová paleta, všechny díly jsou na svých pozicích | ||
+ | |||
+ | '''šedá''' - z palety jsou na produkční lince postupně odebírány díly (číslo v závorce postupně klesá) | ||
+ | |||
+ | |||
+ | Číslo v pravém horním rohu u okna palety označuje aktuální zásobu dílů na lince, jinými slovy je součten všech dílu na bílých a šedých paletách. Pokud je zásoba dílů kriticky nízká (5 a méně dílů) číslo zčervená. | ||
+ | |||
+ | |||
+ | == '''Vybírání dílů z palety''' == | ||
+ | Klienti na lince vybírají díly z palety '''pro konkrétní produkt'''. Před vybíráním z palety je nutno načíst ID palety. Vybírání se poté omezí na otevřenou paletu. Pořadí palet není kontrolováno. | ||
+ | |||
+ | '''Výjimkou je''' WorkPlace.AlienSeqWPID. Při použití tohoto parametru není třeba otevírat paletu, vybírá se z jakékoliv. | ||
+ | |||
+ | Spojení se sekvenčním kernelem je zajištěno níže uvedenými parametry. | ||
+ | |||
+ | line.SeqServer = plcpamkrnl | ||
+ | line.SeqServerPort = 6799 | ||
+ | |||
+ | Výběr dílů se děje dvěma možnými způsoby: | ||
+ | |||
+ | '''a) Operací PartCheck''' | ||
+ | |||
+ | Splněním konkrétní operace na pracovišti se odebere jeden kus dané pozice z aktuálně otevřené (šedá) palety pro otevřený produkt. Při výběru se kontroluje i číslo dílu. Po vybrání všech pozic je třeba otevřít další paletu naskenováním jejího ID. | ||
+ | |||
+ | operation.sequencing.seqwpid = seznam pozic na paletě oddělený čárkami | ||
+ | |||
+ | '''b) Načtením produktu na pracovišti''' | ||
+ | |||
+ | Po načtení produktu na pracovišti se z aktuálně otevřené (šedá) palety odebere jeden kus dané pozice. Po vybrání všech pozic je třeba otevřít další paletu naskenováním jejího ID. | ||
+ | |||
+ | WorkPlace.AlienSeqWPID = seznam pozic na paletě oddělený čárkami | ||
+ | WorkPlace.SeqWPID = seznam pozic na paletě oddělený čárkami | ||
+ | Workplace.PalletSelect = defines the begining of a string of a palette number |
Current revision as of 08:11, 1 April 2019
Contents |
Úvod
Sekvenční vychystávání je způsob přípravy dílů pro kokpit často ještě v momentu kdy výroba samotného kokpitu nebyla na výrobní lince zahájena. V SAS se používá buď sekvenční vychystávání, což znamená přípravu dílů do palet na základě produkčních dat přijatých do kernelu. Každá paleta obsahuje díly pro více kokpitů. Druhý způsob přípravy dílů je založen na tzv. tablet kitting metodě, kdy se připravují boxy pro konkrétní kokpity a pro data se používá aplikace na tabletu. Tento článek pojednává sekvenčním vychystávání tak, jak je implementováno na linkách SAS například v Saarlouis, Boleslavi či Wolfsburgu.
Dataflow
Data přijatá z JISu (či jiného zdroje) putují skrz dataflow do hlavního kernelu. V rámci dataflow existuje odbočka, která přísluší sekvenčnímu kernelu plc_skrnl. Z důvodu přehlednosti se používá druhé instance kernelu jako kernelu pro sekvenční vychystávání, ale i klasický kernel obsahuje sekvenční vychystávání a může pracovat v tomto režimu.
Kernel a jeho konfigurace
Kernel přijímá data tak, jak přicházejí do systému. Postupně v sekvenci připravuje díly a řadí je do palet. To - do jaké palety jaký díl přijde se řídí pomocí konfiguračního souboru splan.
Výše je ukázka takové konfigurace převzatá ze závodu SAS SLS.
WPID = S2 Name = Clusters MaxPalletItems = 24
Toto jsou základní údaje: identifikátor a název palety. Počet dílů na paletě.
PickingPartCheck = Yes
Toto je parametr odpovídající za to, zda se budou díly na paletě po jejím zkompletování ještě skenovat pro kontrolu. Při nastavení na Yes musí pracovník pro zkompletování palety vzít scanner a postupně naskenovat všechny díly. Právě pro správné přiřazení skenování ke konkrétní paletě, je v konfiguraci obsažen i SelectPattern a ReplacePattern, který ze skenování vezme konkrétní část určenou k porovnávání. SelectPattern musí mít shodu s celým vstupem, jinak nefunguje korektně ReplacePattern.
SelectPattern[0] = ^_((BM5T|CM5T|F1ET|G1ET)-10849-\w{2}).*$ ReplacePattern[0] =
Další parametr v kunfiguraci je
AutomaticPrintWhenReady = No
Ten určuje, zda pracovník na sekvenční stanici musí naskenovat barcode pro paletu (např. PLCPALS2) aby ji započal vychystávát. Pokud je tento parametr nastaven na Yes, tak je paleta připravena k naplnění okamžitě, jak se v kernelu naplní všechny pozice. Důsledek toho je, že se rovnou vytiskne soupiska vychystávaných dílů (ta se jinak tiskne v momentě, kdy pracovník naskenuje barcode pro paletu).
Printer = presequencing_printer2
Tento parametr udává tiskárnu, na které se bude tisknout průvodka k paletě (pracovní ve skutečnosti vychystává díly na základě průvodky, na obrazovku v podstatě nekouká). Tiskárna musí být definována v CUPSu na všech sekvenčních stanicích. Funguje to tak, že všechny stanice připojené k sekvenčnímu kernelu zobrazují to samé a v momentě, kdy má dojít k tisku, se začnou sápat po tiskárně - první, které se to podaří, bude fyzicky tisknout. Proto musí být tiskárna definována na všech, nikdy není jistota, od kuď se vlastně bude tisknout, může to být jakákoliv sekvenční stanice připojená ke konkrétnímu skernelu.
Jednou z nejdůležitějších součástí konfigurace je i výčet dílů pro danou paletu
BM5T 10849 FU:<>BM5T - F BM5T 10849 GU:<>BM5T - G BM5T 10849 H+:<>BM5T - H BM5T 10849 L+:<>BM5T - L BM5T 10849 BA+:<>BM5T - BA+
Ten funguje stejně jako PartDistribution. Pokud kernel najde v datech auta příslušný díl (na základě prvního sloupce) převede jej na číslo dílu (druhý sloupec) a tuto informaci použije pro porovnání se skenováním ze stanice. Tam pracovník musí (při nastavení PickingPartCheck = Yes) naskenovat všechny díly, které vyskládal do palety. Skenování se přiřadí na základě SelectPatternu a následně se část naskenovaného barcodu převádí na PartNumber pomocí standardní PartDistribution. První shoda (Bez ohledu na pozici. Může být problém pokud v PartDitribution je více záznamů které se mohou shodovat ...) vygeneruje PartNumber (údaj z druhého sloupce) a tato data jsou porovnána s daty vygenerovanými v kernelu. Pokud vzájemně souhlasí, je to OK a díl zezelená. Pokud pracovník omylem naskenuje něco jiného či třeba přeskočí pozici, musí naskenovat PLCSPCBRK a začít kontrolovat znova od začátku. Lze použít i autorizovaný barcod, který funguje jako responsible confirmation a pracovníkovi umožní upravit chybnou pozici (v takovém případě nemusí skenovat vše od začátku).
Generování sequence.dat se provádí takto: Pokud se v datech nalezne díl z splan.cfg (první sloupec), převede se na cleverpart (druhý sloupec v splan.cfg). Cleverpart se potom hledá v PartDistribution (POZOR mezery se berou v potaz), bez ohledu na operaci - kdekoliv. Pokud nalezne, použije definovaný barkód z PartDistribution pro poslední sloupec v sequence.dat.
V základu platí logika, že co kokpit to pozice na paletě. V případě, že ve výčtu dílů budou některé chybět a žádný z patternů nebude sedět na obdržená data z kernelu. Může to produkovat prázdné pozice na platě. Viz tento screen obrazovky sekvenčního klienta
Vyhnout se tomu dá pomocí uvedení podmínek, které definují které kokpity se mají na paletu vychystávat.
Condition = DA05 Condition = INDI|UKRA Condition = !INDI
Pouze ty kokpity, které vyhovují podmínkám se budou na paletu vychystávat. Ostatní se neberou v potaz a nebudou vytvářet ani prázdné pozice. Pro definování podmínky lze užít regulární výraz. Například toto
Condition = (?!^.*INDI.*$|^.*UKRA.*$)^.*$
je to samé jako toto
Condition = !INDI Condition = !UKRA
Důležité produkční soubory sekvenčního kernelu
Jsou situovány ve standardním /usr/local/plc/var adresáři. Jedná se o soubory
pallet.dat sequence.dat supply.dat
Struktura sequence.dat
1. číslo kokpitu
2. podmínka
3. paleta
4. paleta v řadě
5. číslo použito pro součet kokpitů na paletě. Pouze první díl na pozici má význam (při pickingParchecku) a při počítání. Zbytek má 0 a je jen pro informaci.
6. sekvenční číslo
Barvy sekvenčního klienta
Horní okna klienta jsou určeny pro palety, každé okono znamená jeden typ palety definovaný jako pozice v kernelu. Celkem se používá pět barev pro zvýraznění stavu palety.
modrá - založená paleta v kernelu, kam stále přibývají data
zelená - připravená k vychystávání, kernel naplnil všechny pozice
fialová - aktálně vychystávaná, tedy paleta ke které je vytištěna průvodka a pracovník aktuálně fyzicky plní jednotlivé pozice
bílá - fyzicky hotová paleta, všechny díly jsou na svých pozicích
šedá - z palety jsou na produkční lince postupně odebírány díly (číslo v závorce postupně klesá)
Číslo v pravém horním rohu u okna palety označuje aktuální zásobu dílů na lince, jinými slovy je součten všech dílu na bílých a šedých paletách. Pokud je zásoba dílů kriticky nízká (5 a méně dílů) číslo zčervená.
Vybírání dílů z palety
Klienti na lince vybírají díly z palety pro konkrétní produkt. Před vybíráním z palety je nutno načíst ID palety. Vybírání se poté omezí na otevřenou paletu. Pořadí palet není kontrolováno.
Výjimkou je WorkPlace.AlienSeqWPID. Při použití tohoto parametru není třeba otevírat paletu, vybírá se z jakékoliv.
Spojení se sekvenčním kernelem je zajištěno níže uvedenými parametry.
line.SeqServer = plcpamkrnl line.SeqServerPort = 6799
Výběr dílů se děje dvěma možnými způsoby:
a) Operací PartCheck
Splněním konkrétní operace na pracovišti se odebere jeden kus dané pozice z aktuálně otevřené (šedá) palety pro otevřený produkt. Při výběru se kontroluje i číslo dílu. Po vybrání všech pozic je třeba otevřít další paletu naskenováním jejího ID.
operation.sequencing.seqwpid = seznam pozic na paletě oddělený čárkami
b) Načtením produktu na pracovišti
Po načtení produktu na pracovišti se z aktuálně otevřené (šedá) palety odebere jeden kus dané pozice. Po vybrání všech pozic je třeba otevřít další paletu naskenováním jejího ID.
WorkPlace.AlienSeqWPID = seznam pozic na paletě oddělený čárkami WorkPlace.SeqWPID = seznam pozic na paletě oddělený čárkami Workplace.PalletSelect = defines the begining of a string of a palette number