Aikataulutusmoduulin suorituskyvyn parantaminen

Muistio

Yhteisön eturyhmät ovat nyt siirtyneet Yammerista Microsoft Viva Engageen. Liity Viva Engage -yhteisöön ja osallistu uusimpiin keskusteluihin täyttämällä Pyydä käyttöoikeutta rahoitukseen ja toimintoihin Viva Engage -yhteisö -lomake ja valitse yhteisö, johon haluat liittyä.

Resurssin ajoitusmoduuli ajoittaa reitit suunniteltuja ja julkaistuja tuotantotilauksia varten.

JSS (job shop scheduling) -ongelma on erittäin monimutkainen kombinatorinen ongelma, jossa ratkaisuaika kasvaa eksponentiaalisesti päätöksen muuttujien määrän mukaan. Asiakkaat määrittävät usein tuotantoreittejä ja niihin liittyviä tietoja tavoilla, jotka luovat aikatauluongelmia, jotka eivät ole ratkaistavissa kohtuullisessa ajassa edes modernissa laitteistossa. Tässä artikkelissa kerrotaan aikataulutusmoduulista ja siitä, miten tietty asetus vaikuttaa suorituskykyyn.

Paranna aikataulujen suorituskykyä vähentämällä moduulin ratkaiseman ongelman monimutkaisuutta. Keskeisiä suorituskykyyn vaikuttavia tekijöitä ovat esimerkiksi seuraavat:

  • Reitit, joissa on useita työvaiheita
  • Reitit, joissa on samanaikaisia työvaiheita
  • Toiminnot, joissa on useampi kuin yksi resurssi
  • Työvaiheet, joissa on useita käytettäviä resursseja
  • Kiinteiden linkkien käyttö
  • Rajallisen kapasiteetin käyttö
  • Käytettyjen eri kalentereiden määrä
  • Työaikapaikkojen määrä päivässä kalenterissa
  • Reitin kokonaiskesto
  • Useiden ajoitusmoduulien suorittaminen samanaikaisesti

Ajoituksen perustyönkulun yleiskatsaus

Jos haluat tietää, miten määritetty asetus vaikuttaa suorituskykyyn, sinun on tiedettävä, miten prosessi kulkee moduulin sisällä ja sitä ympäröivässä X++-koodissa.

Aikataulutuksen perusprosessissa on kolme päävaihetta:

  • Tietojen lataaminen – X++ tietomallit muuntavat moduulin sisäiseksi tietomalliksi työpaikoina ja rajoitteina.
  • Scheduling – Moduuli käsittelee annetun mallin ja rajoitteet tuloksen luomiseksi. Se pyytää työaikatietoja ja olemassa olevia kapasiteetin varauksia X++:lta tarpeen mukaan.
  • Tallenna tiedot – X++-koodi käsittelee moduulin tuloksen työkapasiteetin varauspaikkojen muodossa, jotta kapasiteettivaraukset voidaan tallentaa ja töiden, toiminnon tai tilauksen alkamis- ja päättymisajat päivittää.

Tietojen lataaminen moduuliin

Ajoitusmoduuli käyttää abstraktimpaa tietomallia kuin toimitusketjunhallinta tietokanta, koska se on yleinen moduuli, joka käsittelee useita tietolähteitä. Reitityksen, toissijaisten toimintojen ja suoritusajan käsitteet käännetään moduulin paljastamaan yleiseen työ- ja rajoitemalliin. Mallin luontilogiikka sisältää merkittävän liiketoimintalogiikan, ja se vaihtelee lähdetietojen mukaan. Vastuullinen X++-luokka on WrkCtrScheduler, joka sisältää suunniteltujen tuotantotilausten, julkaistujen tuotantotilausten ja projektiennusteiden johdetut luokat.

Harkitse esimerkiksi seuraavassa taulukossa ja kuvassa näkyvää reittiä, joka on suhteellisen yksinkertainen.

Työv. Ei. Prioriteetti Asetusaika Ajoaika Jonotusaika jälkeen Resurssien määrä Seuraava
10 Ensisijainen 1.00 2.00 1 20
10 Toissijainen 1 1 20
20 Ensisijainen 3,00 1.00 3 0

Esimerkki rout-kaaviosta.

Kun lähetät tämän reitin moduuliin, se jakaa reitin kahdeksaan työpaikkaan seuraavassa kuvassa esitetyllä tavalla (suurenna se valitsemalla kuva).

Aikataulutusmoduulityöt

Kahden työn välinen vakiolinkki on FinishStart, mikä tarkoittaa sitä, että yhden työn päättymisaika on suoritettava ennen toisen työn alkamisaikaa. Asennuksen on tehtävä sama resurssi, joka myöhemmin käsittelee prosessin, joten niiden välillä on OnSameResource rajoituksia. Ensisijaisen ja toissijaisen toiminnon 10 töiden välillä on - StartStart ja FinishFinish -linkkejä, mikä tarkoittaa sitä, että töiden on sekä aloitettava että päätyttävä samanaikaisesti. Lisäksi on olemassa NotOnSameResource rajoituksia, jotka estävät saman resurssin käytön sekä ensisijaisessa että toissijaisessa toiminnossa.

Toiminnossa 20, jossa resurssien määräksi on määritetty 3, prosessityö jaetaan kolmeen erilliseen työhön, joissa kaikki työt on suoritettava täsmälleen samanaikaisesti. Tässä tapauksessa reittiryhmä on määritetty niin, että jonon kapasiteettia ei voi varata aikojen jälkeen, minkä vuoksi jonossa on sen jälkeen vain yksi työ.

Ajoitusmoduuli ymmärtää vain töiden käsitteet eikä tunnista toimintoja. Tämä rajoitus tarkoittaa sitä, että toiminnon ajoituksen aikana järjestelmä jakaa toiminnot työtehtäviin, vaikka nämä työt eivät säily tietokannassa.

Määritä kullekin työlle, mikä työn kapasiteetin vaatimus on (vaadittujen sekuntien määrä). Sen mukaan, miten resurssivaatimukset on määritetty, saatat myös lähettää kullekin työlle luettelon kaikista mahdollisista resursseista, joissa työ voisi suorittaa, ja mikä kapasiteettitarve kyseiselle resurssille on. Vaikka lähetätkin luettelon soveltuvista resursseista mallin luomisen aikana, moduuli varmistaa, että resurssimääritys pysyy voimassa koko työn keston ajan.

Moduulin sisäisten toimintojen aikatauluttaminen

Moduuliliittymän aikatauluttaminen

Jos haluat tietää, miten moduuli toimii sisäisesti, tarkista sen ulkoisesti paljastamia toimintoja. X++-koodissa tärkein liittymä WrkCtrSchedulerEngineInterface. Sen menetelmät käsitellään seuraavissa alikohdissa.

Yleinen moduuli

Tapa Tarkoitus
run Aikatauluttaa kaikki ladatut työt ja palauttaa virhekoodin.
getJobSchedulingSequenceResult Hakee aikataulutuksen tuloksen ja ensimmäisen virhetyön tietyn työ määrittämälle jaksolle.
validateJobCapacityReservations Vahvistaa kaikkien moduulin tallentamien töiden kapasiteetin varaukset.
setReservationsTimeStamp Lähettää aikaleiman moduuliin, joka on määritetty kaikissa moduulin välimuistissa ajoitettujen töiden uusissa kapasiteetin varauksissa.
addPropertyToGroupAggregation Lisää ominaisuuden etuliitteen ominaisuusjoukkoon, jota käytetään, kun kapasiteettia koostetaan.
addResource Lisää resurssin ajoitusmoduulin resurssipooliin.
addResourceGroup Lisää resurssiryhmän ajoitusmoduulin resurssiryhmäpooliin.
addResourceGroupMembership Lisää resurssin jäsenenä resurssiryhmään.
addOptimizationGoal Lisää aikataulutuksen optimointitavoitteen (keston tai prioriteetin).

Yksittäiset työt

Tapa Tarkoitus
addJobInfo Lisää työtietotietueen, joka ilmoittaa moduulille ajoitettavasta työstä.
addConstraintJobEndsAt Lisää rajoituksen, jonka mukaan työn on päätyttävä määritettynä päivänä ja aikana.
addConstraintJobStartsAt Lisää rajoituksen, jonka mukaan työn on alettava määritettynä päivänä ja aikana.
addConstraintMaxJobDays Määrittää rajoituksen, jonka mukaan työ voi kestää enintään määritetyn määrän päiviä.
addConstraintResourceRequirement Lisää rajoituksen, jonka mukaan työ aikataulutettava tietyssä resurssissa.
addJobBindPriority Lisää työn sidonnan prioriteetin (työ, rajoitustaso) parille. Jos prioriteetin arvo on suurempi, työmuuttujat sidotaan aikaisemmin. Työ käsitellään ennen töitä, joiden prioriteettiarvo on pienempi samassa järjestyksessä.
addJobCapacity Lisää kapasiteetin kuormituksen työlle (kuten pakollisen työn suorituspalvelun) riippumatta siitä, missä resurssissa työ suoritetaan.
addJobResourceCapacity Lisää resurssin resursseihin, joita voidaan käyttää työn suorittamiseen, ja ilmoittaa kapasiteetin, joka tarvitaan, kun sitä suoritetaan kyseisessä resurssissa.
addJobGoal Lisää työn tavoitetyypit tietylle rajoitustasolle (varhaisin päättymisaika tai myöhäisin alkamisaika).
addJobResourcePriority Lisää prioriteetin, jota käytetään, kun työ aikataulutetaan resurssille.
addJobResourceRuntime Määrittää työajan, joka on riippuvainen työn ajoitetusta resurssista.
addJobRuntime Määrittää työajan, joka on riippumaton resurssista, jolle työ ajoitetaan.
scheduleJobOnResourceGroup Merkitsee työn aikataulutettavaksi resurssiryhmätasolla.
setJobResourcePreemptionAllowed Määrittää, onko työn etuosto sallittu resurssin työlle (jos moduuli saa aikatauluttaa työn epäyhtenäiset kapasiteettipaikat).
setRequiredNumberOfResources Määrittää työn ajoittamiseen tarvittavien resurssien määrän (vain työvaiheiden ajoituksessa).

Töiden väliset rajoitukset

Tapa Tarkoitus
addJobLink Lisää linkin (kuten finish>start) kahden työn välille.
addConstraintEndsDelayed Määrittää rajoitteen, jonka mukaan työ ei voi päättyä ennen toisen työn päättymistä sekä jonkin verran viiveaikaa.
addConstraintJobListWorkingTimeIntersect Lisää rajoituksen, jonka mukaan töille varattujen kapasiteettipaikkojen on oltava töiden käyttämien kahden resurssin työaikojen leikkauskohdassa.
addConstraintJobOverlap Lisää rajoitteen, joka määrittää, miten työt jaksotetaan, kun tietty määrä kohdetta voidaan siirtää kahden resurssin välillä, kun ensimmäinen resurssi ei ole vielä käsitelty, jotta toinen resurssi voidaan aloittaa.
addConstraintNotOnSameResource Lisää rajoitteen, jonka mukaan kahta työpaikkaa ei pidä ajoittaa samalle resurssille.
addConstraintOnSameResource Lisää rajoituksen, jonka mukaan kahden työn on käytettävä samaa resurssia.
addJobSameReservations Lisää rajoituksen, jonka mukaan työn kapasiteetin varauksen on oltava samassa ajankohdassa kuin ensisijainen työ.
setPrimaryParallelJob Lisää tietoja siitä, mikä työ on ensisijainen työ samanaikaisten töiden joukossa.

Selvitys

Moduuli on mukautettuja heuristiikkoja sisältävä erityinen rajoitteiden ratkaisija. Selvitystoiminto perustuu kahteen pääelementtiin: muuttujiin ja rajoituksiin.

Muuttuva

Muuttuja vastaa mahdollisten arvojen toimialuetta. Ajoitusmoduulissa on kaksi muuttujatyyppiä:

  • DateTime-muuttuja – sisältää kaikkien päivämäärien ja aikojen toimialueen. Voit rajoittaa toimialuetta siirtämällä muuttujan ajan ala- ja ylärajat lähemmäs toisiaan.
  • Resurssimuuttuja – Käytettävissä olevien resurssien toimialue. Voit rajoittaa toimialuetta poistamalla resursseja luettelosta.

Rajoitus

Muuttujat rajoittavat muuttujia, mikä rajoittaa niiden toimialueita. Se riippuu myös muuttujista, joten se aktivoituu, kun muuttujat muuttuvat. Rajoituksen levittämisprosessi tapahtuu, kun rajoitus suorittaa päätoimintoaan ja raportoi takaisin päälogiikkaan, jos se onnistuu.

Muuttujaa pidetään sidottuna, kun sitä ei voi rajoittaa enempää. DateTime-muuttujan kohdalla tämä ehto tarkoittaa, että ylä- ja alarajat ovat samat. Resurssimuuttujan kohdalla se tarkoittaa, että sillä on vain yksi käytettävissä oleva resurssi. Kun kaikki muuttujat sidotaan, ratkaisu on löytynyt.

Rajoitustasot

Kun ajoitus on osa materiaalivaatimusten suunnittelun (MRP) kattavuusvaihetta, järjestelmä ajoittaa tilaukset taaksepäin vaatimuspäivästä. Jos järjestelmä ei kuitenkaan löydä aikataulua, joka alkaa tänään tai myöhemmin ja päättyy ennen vaatimuspäivämäärää, se muuttaa ajoitussuunnan eteenpäin tästä päivästä eteenpäin.

Järjestelmä järjestää tasojen rajoitteet tämän pääliiketoimintasäännön käsittelyä varten. Jos järjestelmä ei löydä ratkaisua käytettäessä korkeimman tason rajoitteita, se pudottaa kaikki kyseisen tason rajoitteet ja yrittää alempaa tasoa. Käytännössä tämä prosessi tarkoittaa sitä, että jos käytät ajoittamista taaksepäin, malli sisältää tason 1, jossa on viimeisimmän alkamisajan tavoitteet, joille on annettu enimmäisajan rajoite (vaatimuspäivämäärä), ja tason 0, jolla työtavoitteet ovat aikaisimman päättymisajan ja jolle annetaan tämän päivän pienin alkamisajan rajoite.

Algoritmi

Moduulin algoritmin päävaiheet:

  1. Etsi järjestys (työketjut), jotka voidaan ratkaista erikseen.
  2. Yritä löytää jakson alkuperäinen ratkaisu korkeimmalla rajoitetasolla.
    1. Lajittele työt järjestyksessä työn tavoitteen ja prioriteettien perusteella, jotta järjestelmä voi löytää aloitustyön.
    2. Käy läpi seuraavan jakson työt:
      1. Kaikkien levitettävien rajoitusten etsiminen ja levittämisen suorittaminen.
      2. Jos kaikki työn muuttujat sidotaan, löydetään ratkaisu tähän työhön.
      3. Jos jotakin muuttujaa ei voi sitoa rikkomatta rajoituksia, voit palauttaa muuttujan sidonnan, kokeilla eri arvoa toimialueella (resurssimuuttujalle) ja suorittaa rajoitteen välittämisen uudelleen.
  3. Jos ratkaisua ei löydy, poista kaikki nykyisen rajoitetason rajoitukset, alenna rajoitetasoa (jos alempia tasoja on käytettävissä) ja yritä hakea ratkaisua uudelleen uudella rajoitejoukolla.
  4. Jos löydät toteuttamiskelpoisen ratkaisun, aloita optimointivaihe, jossa yritetään löytää parempi ratkaisu, kunnes optimoinnin aikakatkaisu saavutetaan tai kaikki resurssiyhdistelmät on käytetty loppuun.

Rajoituksien ratkaisija ei ota huomioon ajoitusalgoritmin erityispiirteitä. "Taikuutta" tapahtuu erilaisten rajoitusten määritelmässä ja yhdistelmässä.

Työaikojen määrittäminen

Suuri osa moduulin (sisäisistä) rajoituksista hallitsee resurssin työaikaa ja kapasiteettia. Käytännössä tehtävänä on käyttää resurssin työajan ajanjaksoja tietystä kohdasta tiettyyn suuntaan ja löytää tarpeeksi pitkä aikaväli, johon työn vaatimat kapasiteetit (aika) mahtuu.

Sitä varten moduulin on tiedettävä resurssin työajat. Toisin kuin päämallitiedot, työajat ovat laiska ladattuja, mikä tarkoittaa, että ne ladataan moduuliin tarpeen mukaan. Tämä johtuu siitä, että kalenterin toimitusketjunhallinta on usein työaikoja hyvin pitkäksi aikaa ja että kalentereita on yleensä paljon, joten tiedot ovat melko suuria esiladattavaksi.

Moduuli pyytää kalenteritietoja lohkoina käynnistämällä X++-luokan menetelmän WrkCtrSchedulingInteropDataProvider.getWorkingTimes. Pyyntö koskee tietyn kalenteritunnuksen tiettyä aikaväliä. Sen mukaan, mikä on palvelimen välimuistin tila toimitusketjunhallintaissa, kukin näistä pyynnöistä voi päätyä useisiin tietokantakutsuihin, mikä vie paljon aikaa (suhteessa pelkkään laskenta-aikaan). Jos kalenteri sisältää hyvin yksityiskohtaisia työaikamäärityksiä, joissa on useita työaikavälejä päivässä, tämä monimutkaisuus lisää lataamiseen kuluvaa aikaa.

Kun ajoitusmoduuli lataa työaikatiedot, se säilyttää nämä tiedot kyseisen kalenterin sisäisessä välimuistissa. Tämä säilytys tarkoittaa sitä, että jos muut työt tai resurssit käyttävät samaa kalenteria, seuraavat haut voidaan suorittaa nopeasti muistista. Yksi yleinen syy huonoon suorituskykyyn on se, että kullekin resurssille käytetään erillistä kalenteritunnusta, koska kutakin kalenteria koskevia tietoja pyydetään, vaikka kalenterien sisältö voi olla sama.

Rajallinen kapasiteetti

Kun käytät rajallista kapasiteettia, järjestelmä jakaa ja lyhentää kalenterista tehtyjä työaikoja olemassa olevien kapasiteettivarausten perusteella. Sama WrkCtrSchedulingInteropDataProvider luokka hakee nämä varaukset sekä kalenterit, mutta se käyttää -menetelmää getCapacityReservations . Pääsuunnittelun aikana ajoitettaessa järjestelmä huomioi tietyn pääsuunnitelman varaukset. Jos otat asetuksen käyttöön Pääsuunnittelun parametrit -sivulla, järjestelmä sisältää myös varauksia kiinteistä tuotantotilauksista. Tuotantotilauksen ajoituksella voit halutessasi sisällyttää varauksia olemassa olevista suunnitelluista tilauksista, vaikka tämä ei ole yhtä yleistä kuin päinvastoin.

Ajoittaminen kestää kauemmin, kun käytät rajallista kapasiteettia useista syistä:

  • Kapasiteetin tietojen noutaminen tietokannasta on hidasta. Kapasiteetin tietojen palvelinpuolen välimuistitallennus ei yleensä ole yhtä hyvä kuin työajat, koska niitä ei jaeta resurssien kesken, kuten kalenterit yleensä ovat.
  • Työaikajaksojen määrä, jotka tulee käydä läpi, kasvaa jakojen vuoksi. Järjestelmän on yleensä tutkittava lähtö- ja saapumisaikoja pidemmän aikaa, ennen kuin se voi löytää ratkaisun.
  • Kun ajoitus on valmis, järjestelmän on tarkistettava ristiriitaiset varaukset (katso lisätietoja "Rinnakkainen aikataulutusmoduulien suorittaminen" -osasta).

Resurssiyhdistelmien tutkiminen

Jos työnjakso sisältää vain vakiolinkit FinishStart , mikä tarkoittaa, että se muodostaa yksinkertaisen ketjun ilman haaroja, järjestelmä voi saavuttaa optimaalisen tuloksen (yhdessä järjestyksessä, ei tilauksissa) etsimällä parhaan ratkaisun ensimmäiseen työhön ja siirtymällä sitten parhaan ratkaisun löytämiseksi seuraavalle työlle. Paras ratkaisu työlle on löytää resurssi, joka voi saada työn alkamis- ja päättymispäivän, joka on lähimpänä työn tavoitetta (eteenpäin ajoituksessa tämä tarkoittaa, että työn päättymispäivä saadaan mahdollisimman aikaisessa vaiheessa) noudattaen kuitenkin rajoituksia.

Rinnakkaisia töitä käytettäessä ratkaisun löytämiseen voi sisältyä eri resurssiyhdistelmien tutkiminen. Mahdollisten resurssiyhdistelmien määrä saadaan yhdistettyjen rinnakkaisten töiden käytettävien resurssien määrästä. Kun määrität tilauksen taaksepäin vaatimuspäivämäärästä, voi kestää jonkin aikaa, ennen kuin logiikka ymmärtää, ettei ole olemassa ratkaisua ongelmaan, joka sovittaa rinnakkaistyöt tämän päivän päivämäärää edeltäviksi. Logiikan on tarkistettava kaikki yhdistelmät, koska joillakin resursseilla voi olla suurempi tehokkuus tai eri kalenteri, joka voi antaa tuloksen. Tämä ehto tarkoittaa sitä, että jos et aseta aikakatkaisurajaa, prosessi kestää kauan, ennen kuin suuntaa muutetaan eteenpäin.

Tämä yhdistelmälogiikka tarkoittaa myös sitä, että soveltuvien resurssien lisääminen voi hidastaa moduulin suorittamista. Jos suorituskykyongelmia ilmenee, kun käytössä on rinnakkaisia toimintoja ja ajoituksia loputtoman kapasiteetin kanssa, voit osittain korjata ongelman antamalla reititystyökalun tehdä päätöksen siitä, mitä resurssia tulee käyttää, ja määrittämällä sitten resurssin suoraan toiminnolle (koska moduuli päätyy useimmiten aina saman resurssin poimimiseen, joten lopputulos on sama).

Kun määrität kahden työn välisen linkkityypin kovaksi, varmistat, että yhden työn valmistumisen ja seuraavan työn alkamisen välillä ei ole aikaeroa. Tämä tila on hyödyllinen tilanteissa, joissa metalli kuumennetaan yhdessä työssä ja käsitellään seuraavassa, eikä työpaikkojen välinen jäähdytys ole toivottavaa.

Käyttämällä vakiomuotoisia pehmeitä linkkejä ja eteenpäin ajoittamalla, jos reititys muodostaa yksinkertaisen ketjun ilman haaroja, voit saada aikaan ratkaisun ensimmäiseen työhön, joka täyttää omat rajoitteensa, ja siirtymällä sitten ketjun läpi välittämällä loppuajan edellisestä työstä seuraavaan työhön. Jos nykyinen työ ei löydä kapasiteettia, järjestelmä siirtää aloitusaikaa kauemmaksi ilman, että edellisten töiden myötä olisi seurauksia. Tämä toiminto saattaa aiheuttaa aukkoja töiden välille. Kuitenkin käyttämällä vaikeita linkkejä (etenkin käytettäessä rajallista kapasiteettia) samassa skenaariossa se, että yksi ketjussa myöhemmin oleva työ ei löydä kapasiteettia, tarkoittaa sitä, että kaikki aiemmat ajoitetut työt on "vedettävä" yksi kerrallaan, ja siten ne ajoitetaan uudelleen useita kertoja. Erityisesti tilanteissa, joissa useiden resurssien kuormitus on suuri, kovat linkit voivat aiheuttaa ketjureaktion, jossa työt vaikuttavat toisiinsa ja useita iteraatioita on suoritettava ennen kuin tulos vakautetaan toteuttamiskelpoiseen aikatauluun.

Ajoitusmoduulien suorittaminen samanaikaisesti

Kun suoritat ajoitukset osana pääsuunnittelun suoritusta, jossa käytät aputoimintoja, kaikki pääsuunnittelun apuketjut voivat myös poimia tuotantotilauksen ajoitustehtävät. Tämä lähestymistapa tarkoittaa, että samanaikaisesti voidaan käyttää useita ajoitusmoottoreita. Vaikka monilukulukeminen tarjoaa merkittävän suorituskykyedun, se tuo myös joitakin toiminnallisia haittapuolia aikataulujen määrittämiseen.

MRP-järjestelmässä järjestelmä ajoittaa kaikki tuotantotilaukset tietylle materiaalilaskulle (BOM) vaatimuspäivämäärän järjestyksessä. Tämä sarja tarkoittaa sitä, että järjestelmä ajoittaa nämä tilaukset ensin aikaisimman vaatimuspäivämäärän mukaan, joten niillä on suurin mahdollisuus saada käytettävissä olevaa resurssikapasiteettia. Kun useat moottorit poimivat suunnittelemattomien tilausten luettelosta, järjestystä ei kuitenkaan taata, koska yksi moduuli saattaa valmistua toista moduulia nopeammin.

Kun aikataulutat rajallista kapasiteettia ja useita moduuliesiintymiä, kilpailutilanne voi ilmetä, jos yrität ajoittaa tilauksia, jotka käyttävät samoja resursseja samaan aikaan. Pääsuunnitelmien historiasivun Aikatauluristiriidat-kentässä näkyy kilpailuolosuhteiden määrä. Ristiriidan ratkaisulogiikka noudattaa seuraavia vaiheita:

  1. Ajoita tilaus (lukitsematta) ja hae kapasiteetin varaukset.
  2. Tee lukitus.
  3. Tarkista, onko ajoituksille olemassa uusia kapasiteettivarauksia ajanjaksolla.
    • Jos ei, kirjoita kapasiteetti ja avaa lukitus.
    • Jos kyllä, vapauta lukitus ja aikatauluta tilaus uudelleen alusta alkaen.

Kun ajoitetaan useita moduuliesiintymiä, tulos ei ole täysin deterministinen, koska se riippuu kunkin säikeen tarkasta ajoituksesta.

Työvaiheen aikataulutuksen suorituskyky

Toiminnan ajoittaminen, jota kutsutaan myös karkeaksi kapasiteetin suunnitteluksi, voi olla vaikeampaa ratkaista moduulin näkökulmasta, jos rajallista kapasiteettia käytetään, koska tarvitaan enemmän tietoja toteutettavuuden määrittämiseksi.

Resurssiryhmän kapasiteetti määrittää, mitkä resurssit ja kuinka monta resurssia on resurssiryhmän jäseninä. Itse resurssiryhmällä ei ole kapasiteettia – vain kun ryhmän resursseilla on kapasiteettia. Koska resurssiryhmän jäsenyys voi vaihdella ajan mittaan, kapasiteetti on laskettava päivittäin.

Työvaiheiden aikatauluttamisessa resurssiryhmän kalenteria käytetään määrittämään kunkin työvaiheen aloitus- ja päättymisaika. Tämä kalenteri asettaa rajoituksen sille, kuinka kauan voit ajoittaa toimintoja yhdelle yhdelle resurssiryhmälle yhden päivän aikana. Toisin kuin tiettyjen resurssien kalenterissa, resurssiryhmän kalenterin tehokkuustiedot ohitetaan, koska ne tarkoittavat vain avautumistunteja, ei todellista kapasiteettia.

Jos esimerkiksi resurssiryhmän työaika tiettynä päivämääränä on 8.00–16.00, yksi toiminto ei voi kuormittaa resurssiryhmää enemmän kuin mihin mahtuu kahdeksaan tuntiin, riippumatta siitä, kuinka paljon kapasiteettia resurssiryhmällä on yhteensä käytettävissä kyseisenä päivänä. Käytettävissä oleva kapasiteetti voi kuitenkin rajoittaa kuormitusta edelleen.

Töiden ajoituskuormitus kaikille resurssiryhmän resursseille tiettynä päivänä otetaan huomioon, kun lasket käytettävissä olevaa kapasiteettia kyseiselle päivälle. Laskenta tehdään seuraavasti kunkin päivän osalta:

Käytettävissä oleva resurssiryhmän kapasiteetti = ryhmän resurssien kapasiteetti kalenterin perusteella − Ryhmän resurssien ajoitettu kuormitus − Ryhmän resurssien ajoitettu kuormitus − Resurssiryhmän ajoitetut toiminnot

Reititystoiminnon Resurssivaatimukset-välilehdessä voit määrittää resurssivaatimukset käyttämällä joko tiettyä resurssia (jolloin toiminto on ajoitettu käyttämällä kyseistä resurssia), resurssiryhmää, resurssityyppiä tai vähintään yhtä toimintoa, taitoa, kurssia tai varmennetta. Kaikkien näiden vaihtoehtojen käyttö on joustavaa reitityskehityksen kannalta, mutta se vaikeuttaa moottorin ajoittamista, koska kapasiteetti on otettava huomioon ominaisuutta kohti (abstrakti nimi, jota käytetään moduulissa ominaisuuksien, taitojen ja niin edelleen).

Resurssiryhmän kapasiteetti ominaisuutta varten on kapasiteetin summa kaikille resurssiryhmän resursseille, joilla on kyseinen ominaisuus. Jos ryhmän resurssilla on ominaisuus, moduuli ottaa huomioon tarvittavan kapasiteetin tason.

Toimintojen ajoituksessa resurssiryhmän tietyn ominaisuuden käytettävissä olevaa kapasiteettia vähennetään, kun siihen ladataan toiminto, joka edellyttää kyseistä ominaisuutta. Jos toiminto vaatii useamman kuin yhden ominaisuuden, kaikkien vaadittujen ominaisuuksien kapasiteettia vähennetään.

Kunkin päivän osalta tarvitaan seuraava laskenta:

Ominaisuuden käytettävissä oleva kapasiteetti = ominaisuuden kapasiteetti − Resurssiryhmässä olevien resurssien työn ajoitettu kuormitus, joka sisältyy resurssiryhmään − Toiminnot ajoitettu kuormitus resursseille, joilla on tietty ominaisuus ja jotka sisältyvät resurssiryhmään − Resurssiryhmän ajoitettu kuormitus, joka edellyttää tiettyä ominaisuutta

Jos tietyllä resurssilla on kuormitus, moduuli ottaa sen huomioon laskiessaan resurssiryhmän käytettävissä olevaa kapasiteettia ominaisuutta kohden, koska kuormitus vähentää sen osuutta ryhmän kapasiteettiin riippumatta siitä, onko kuormitus tarkoitettu kyseiselle ominaisuudelle. Jos resurssiryhmätasolla on kuormitusta, moduuli ottaa sen huomioon laskettaessa resurssiryhmän käytettävissä olevaa kapasiteettia ominaisuutta kohti vain, jos lataus on peräisin toiminnosta, joka edellyttää kyseistä ominaisuutta.

Tämä logiikka koskee kutakin ominaisuustyyppiä, joten toimintojen ajoittaminen rajalliseen kapasiteettiin edellyttää merkittävän tietomäärän lataamista.

MRP-suorituskyvyn parantaminen

Seuraava tekninen konferenssivideo tarjoaa vinkkejä pääsuunnittelun suorituskyvyn parantamiseen, kun käytät MRP:tä vanhentuneen pääsuunnittelumoduulin kanssa: Ohjeet! MRP on hidas!

Ajoitusmoduulin syötteen ja tuloksen näyttäminen

Saat tarkat tiedot aikataulutusprosessin syötteestä ja tuloksista ottamalla kirjaamisen käyttöön siirtymällä kohtaan Organisaation hallinnan>>määritysAjoituksen>ohjaamon jäljitys.

Valitse tällä sivulla Toiminto-ruudussa Ota kirjaaminen käyttöön ja suorita sitten tuotantotilauksen ajoitus. Kun se on valmis palaa Aikataulutuksen jäljityscockpit -sivulle ja valitse Poista lokiin kirjaus käytöstä toimintoruudussa. Päivitä sivu, niin ruudukkoon tulee uusi viiva. Valitse uusi rivi ja valitse sitten toimintoruudusta Lataa . Tämä toiminto antaa sinulle .zip pakatun kansion, joka sisältää seuraavat tiedostot:

  • Log.txt – Tässä lokitiedostossa kuvataan moduulin vaiheet. Se on yksityiskohtainen ja voi olla hankala, mutta kun kokeilet reititysasetuksia suorituskykyongelmien ratkaisemiseksi, etsi ensimmäisen ja viimeisen rivin aikaero. Tämä ero näyttää tarkan aikatauluttajan käyttämän ajan.
  • XmlModel.xml – Tämä tiedosto sisältää mallin, joka on muodostettu X++:ssa ja jossa moduuli toimii. Tiedostossa käytetty JobId vastaa työt (RecId tai ReqRouteJob) sisältävää lähdetaulukon ProdRouteJob-ominaisuuden. Tarkista tässä tiedostossa, että päivämäärät ovat kohteessa ConstraintJobStartsAt ja ConstraintJobEndsAt ovat odotetut, JobGoal ominaisuus on määritetty oikein ja työt liittyvät toisiinsa rajoitusten JobLink vuoksi.
  • XmlSlots.xml – Tämä tiedosto sisältää kaikki moduulin pyytämät työajat ja kapasiteettivaraukset. Moduuli pyytää kalenterin työaikoja ja varauksia vain ajanjaksoille, jolloin se yrittää sijoittaa töitä (ja ylimääräisen puskurin), joten jos tiedosto sisältää aikoja hyvin paljon tulevaisuudessa, se voi olla merkki ongelmasta määrityksessä. Solmut ResourceProperty näyttävät kuhunkin resurssiin liittyvät resurssiryhmän ja ominaisuudet sekä asianmukaiset ajanjaksot.
  • Result.xml – Tämä tiedosto sisältää ajoituksen suorituksen tuloksen.

Jäljitystoiminto lisää merkittävästi suorituskykykuormitusta, joten käytä sitä vain tiettyjen tilausten ajoittelun tutkimiseen hallitusti. Jos otat sen käyttöön pääsuunnittelun aikana, se saavuttaa nopeasti kokorajan ja pysähtyy.

Suorituskyvyn vianmääritys

Kuten edellisistä osioista näkyy, jotkin ajoitusmoduulin asennuksen ja käytön ongelmat voivat aiheuttaa suorituskykyongelmia. Seuraavan tarkistusluettelon avulla voit tehdä näiden ongelmien vianmäärityksen. Katso kaikkia pisteitä, koska se on usein useiden tekijöiden yhdistelmä, joka johtaa ongelmiin.

Vinkki

Seuraavassa taulukossa on yhteenveto yleisimmistä töiden ajoituksen suorituskykyongelmista ja niiden suositelluista ratkaisuista. Linkkien avulla voit siirtyä kunkin alueen yksityiskohtaisiin ohjeisiin.

Ongelma Suositus Yksityiskohdat
Ajoitusta ei tarvita MRP:n aikana Määritä kapasiteetin aika-aita nollaksi tai käytä vakiotuotannon liidiaikaa Ajoitus osana MRP:ä
Liian monta soveltuvaa resurssia Määritä tietty resurssi toiminnolle reitityssuunnittelun aikana Monia soveltuvia resursseja
Rinnakkaiset toiminnot hidastavat ajoittamista Malliparit virtuaaliresursseina tai eivät sisällä muita kuin pullonkaulatoimintoja Rinnakkaiset toiminnot
Resurssimäärä suurempi kuin yksi Tarkista, tarvitaanko toiminnolle todella useita resursseja Resurssimäärä
Rajallinen kapasiteetin yleiskuormitys Pullonkaulavaihtoehdon ja erillisen kapasiteetin aika-aidan käyttö pullonkaularesursseille Rajallinen kapasiteetti
Kovat linkit vaikeuttavat ajoittamista Käytä vaikeita linkkejä vain, kun se on ehdottoman välttämätöntä Kiinteät linkit
Kalenterin erottaminen resurssia kohden Käytä kalentereita resurssien välillä mahdollisimman paljon Kalenterit
Monta ajanjaksoa kalenteripäivää kohti Minimoi työaikapaikkojen määrä (esimerkiksi ohita viiden minuutin taukomallinnus) Ajanjaksot
Aikataulutuksen aikakatkaisut puuttuvat tai suuret Ota molemmat aikakatkaisuasetukset käyttöön; määritä enimmäisaikatauluksi noin 30 sekuntia Aikakatkaisut

Aikataulutuksen suorittaminen osana MRP:iä, kun sitä ei tarvita

Vaikka reittejä käytetään tuotannon valvontaan, kuten kustannuksiin ja raportointiin, niitä ei ehkä tarvitse huomioida MRP:n aikana. Joissakin tapauksissa suunnitteluun riittää, että käytössä on nimikkeelle määritetty tuotannon vakioläpimenoaika. Poista reititysajoituksen käytöstä määrittämällä kapasiteetin aika-aita nollaksi. Jos aikataulutusta tarvitaan, aseta kapasiteetin aika-aita huolellisesti, koska reittejä ei ehkä tarvitse ottaa huomioon MRP-peittoaika-aidan koko laajuudessa.

Jos tilausta ei ole ajoitettu MRP:n aikana, se on sen sijaan ajoitettava, kun suunniteltu tilaus vahvistuu. Tämän vuoksi vahvistusprosessi kestää kauemmin, joten tarvesuunnittelun aikana saatu suorituskykyhyöty voidaan menettää vahvistuksen aikana sen mukaan, kuinka monta ehdotettua suunniteltua tilausta vahvistetaan.

Reitti, jossa on tarpeettomia työvaiheita

Kun suunnittelet reittiä, vältä mallintamasta todellista maailmaa täsmälleen kaikkien tuotantoprosessin läpi käymiesi vaiheiden mukaisesti. Vaikka tämä lähestymistapa voi olla hyödyllinen joissakin tapauksissa, se ei haittaa suorituskykyä, koska moduulin malli kasvaa suuremmaksi (töiden ja rajoitusten osalta), ja lisää SQL-lausekkeita suoritetaan töiden ja kapasiteettivarausten lisäämiseksi ja päivittämiseksi. Lisäksi on olemassa se, että työn edistymisestä on lopulta raportoitava, mitä automaattiset kirjaukset voivat lieventää. Jos tietoja ei käytetä mihinkään, se aiheuttaa tarpeetonta kuormitusta.

Luo vain sellaiset toiminnot, joita tarvitaan vain ajoittelussa (yleensä pullonkaularesursseissa) tai kustannustarkoituksissa. Ryhmittele sen sijaan monet pienemmät erilliset toiminnot yhdeksi suuremmaksi toiminnoksi, joka edustaa prosessin suurempaa osaa.

Työvaiheessa useita käytettäviä resursseja

Toimintosuhteelle määritetyt resurssivaatimukset määrittävät toiminnon käytettävien resurssien määrän. Vaatimus voi olla joko tietty resurssi tai se voi perustua resurssin jäsenyyteen resurssiryhmässä tai ominaisuudessa.

Jos et käytä rajallista kapasiteettia aikatauluttamiseen ja kaikilla käytettävissä toiminnoilla on sama kalenteri ja tehokkuus, ajoitusmoduuli valitsee aina saman resurssin toiminnolle, mutta vasta sen jälkeen, kun se yrittää kaikkia käytettävissä olevia resursseja tarkistaakseen, onko niitä jokin, joka on parempi kuin muut. Tässä tapauksessa voit pienentää aikataulutuksen kuormitusta huomattavasti määrittämällä aina tietyn resurssin toiminnolle reitityssuunnittelun aikana.

Reitti, joissa on samanaikaisia työvaiheita

Rinnakkaiset toiminnot (ensisijainen/toissijainen) ovat tehokas työkalu mallintaa skenaarioita, kuten silloin, kun tiettyä tehtävää varten tarvitaan sekä konetta että operaattoria, mutta ne ovat myös monien suorituskykyongelmien lähde. Jos määrität vaatimuksen tietylle yksittäiselle resurssille sekä ensisijaiselle että toissijaielle toiminnolle, se ei yleensä ole ongelma. Mutta jos kummallekin työvaiheelle on monia mahdollisia resursseja, aikataulutuksen laskennallisen monimutkaisuus lisääntyy merkittävästi.

Rinnakkaisten toimintojen käyttämisen vaihtoehtona on joko mallintaa parit "virtuaalisiksi" resursseiksi (jotka edustavat sitten tiimiä, joka menee aina yhteen toimintoa varten) tai olla mallintamatta yhtä toiminnoista, jos se ei edusta pullonkaulaa.

Reititys, jonka resurssimäärä on suurempi kuin yksi

Jos toiminnon tarvitsemien resurssien määrä on suurempi kuin yksi, tulos on käytännössä sama kuin ensisijaisten/toissijaisten toimintojen käyttö, koska moduuliin lähetetään useita rinnakkaisia töitä. Tässä tapauksessa et kuitenkaan voi käyttää tiettyjä resurssimäärityksiä, koska toimintoa varten tarvitaan useampi kuin yksi resurssi.

Toissijainen työvaihe, jonka resurssikuormituksen määrä on suurempi kuin yksi, tarkoittaa, että jokaiselle ensisijaisen työvaiheen resurssille tarvitaan määritetty määrä toissijaisia resursseja. Jos ensisijaisen työvaiheen resurssien määrä on esimerkiksi kaksi ja toissijaisen työvaiheen resurssien määrä on kolme, toissijaiselle työvaiheelle tarvitaan yhteensä kuusi resurssia.

Liiallinen rajallisen kapasiteetin käyttö

Rajallisen kapasiteetin käyttäminen edellyttää, että moduuli lataa kapasiteettitietoja tietokannasta, mikä voi lisätä laskennallista kuormitusta erityisesti ympäristöissä, joissa resurssit varataan lähellä enimmäiskapasiteettia. Tämän seurauksena on tärkeää arvioida huolellisesti, onko resurssin todella käytettävä rajallista kapasiteettia vai ovatko ne ylivarattuja. Koska rajallisten kapasiteettiresurssien välillä voi olla ero siinä, kuinka tärkeitä ne eivät ole, käytä pullonkaula-asetusta resurssissa yhdessä suunnitelman erillisen arvon kanssa "Kapasiteetin aika-aita pullonkaulareille". Pullonkaulakonseptin avulla voidaan laskea yleistä rajallisen kapasiteetin aika-aitaa.

Reitin vakiolinkkityyppi on pehmeä, mikä tekee aikavälin yhden toiminnon viimeistelyajan ja seuraavan alun välillä. Jos sallit tämän aukon, se voi aiheuttaa sen, että tuotanto on käyttämättömänä, jos materiaaleja tai kapasiteettia ei ole käytettävissä jossakin toiminnoista. Tämä tilanne voi johtaa keskeneräisen työn kasvuun. Tämä ongelma ei tapahdu kovalevy-linkeillä, koska viimeistelyn ja aloituksen tulee olla linjassa täydellisesti. Kovien linkkien määrittäminen vaikeuttaa kuitenkin ajoitusongelmaa, koska järjestelmän on laskettava työaika ja kapasiteetin leikkauspisteet toimintojen kahdelle resurssille. Jos aikatauluun liittyy myös rinnakkaisia operaatioita, tämä vaatimus lisää merkittävästi laskenta-aikaa. Jos kahden työvaiheen resursseilla on eri kalenterit, joilla ei ole lainkaan päällekkäisyyksiä, ongelmaa ei voida ratkaista.

Käytä vaikeita linkkejä vain, kun se on ehdottoman välttämätöntä, ja harkitse huolellisesti, onko se tarpeen jokaiselle reitin toiminnolle.

Jos haluat vähentää keskeneräistä työtä ilman kovien linkkien käyttämistä, ajoita järjestys kahdesti siten, että vaihdetaan vastakkaiseen suuntaan toisella syötöllä. Jos ensimmäinen aikataulu on suoritettu toimituspäivästä taaksepäin, toinen aikataulu tulee ajoitetusta alkamispäivästä eteenpäin. Tämä lähestymistapa pakkaa työt mahdollisimman paljon, jotta keskeneräinen työ pienennetään.

Jokaisella resurssilla erillinen kalenteri

Yksi tärkeimmistä ajoitusmoduulin tietolähteistä on kalenterin tiedot, joiden lataaminen tietokannasta voi olla kallista. Koska kalentereita luodaan mallien perusteella, voi tuntua houkuttelevalta luoda kalenteri kullekin resurssille ja säätää sitten tämän kalenterin tietoja, kun resurssilla on käyttökatkoja ja muita ongelmia. Tämä lähestymistapa kuitenkin rajoittaa huomattavasti moduulin kykyä tallentaa kalenteritiedot välimuistiin, koska sen on pyydettävä uusia tietoja kustakin resurssista. Tämä lähestymistapa voi aiheuttaa suorituskykyongelmia. Käytä kalentereita mahdollisimman paljon resurssien välillä ja hallitse käyttökatkojen muutoksia määrittämällä eri kalenteritunnus tietylle kaudelle.

Kalenteri suuri työn ajankohtien päiväkohtainen määrä

Koska moduuli toimii tarkastelemalla kapasiteetin ajanjaksoja yksi kerrallaan, on hyödyllistä minimoida aikapaikkojen määrä kalenteripäivää kohti. Harkitse esimerkiksi, onko tärkeää, että tulokseksi saatava aikataulu kuvastaa sitä, että työntekijät pitävät viiden minuutin tauon joka tunti.

Aikataulutuksen pitkät (tai puuttuvat) aikakatkaisut

Voit optimoida aikataulutusmoduulin suorituskyvyn käyttämällä parametrien aikataulutus -sivulla olevia parametreja . Määritä aina Scheduling timeout enabled - ja Scheduling optimization timeout - asetusten arvoksi Kyllä. Jos määrität asetukseksi Ei, ajoitus voi mahdollisesti toimia loputtomasti, jos useita asetuksia sisältävää reittiä ei ole mahdollista luoda.

Sarjakohtainen enimmäisajoitusaika -asetuksen arvo määrittää, kuinka monta sekuntia voidaan enintään yrittää löytää ratkaisu yhdelle jaksolle (useimmissa tapauksissa jakso vastaa yhtä tilausta). Täällä käytettävä arvo riippuu reitin ja asetusten monimutkaisuudesta, kuten rajallisesta kapasiteetista, mutta enintään noin 30 sekuntia on hyvä lähtökohta.

Optimointiyritysten aikakatkaisu -asetuksen arvo määrittää, kuinka monta sekuntia enintään etsitään ratkaisua, joka on parempi kuin alun perin löydetty ratkaisu. Tämä arvo vaikuttaa vain reitteihin, jotka käyttävät rinnakkaisia toimintoja, koska nämä toiminnot tekevät eri yhdistelmien testaamisesta tarpeellista.

Muistio

Aikakatkaisuille määrittämäsi arvot koskevat sekä julkaistujen tuotantotilausten ajoittamista että suunniteltuja tilauksia osana MRP:itä. Tämän seurauksena erittäin suurten arvojen asettaminen voi lisätä huomattavasti MRP:n suoritusaikaa, kun suoritetaan suunnitelmaa, joka sisältää useita suunniteltuja tuotantotilauksia.

Yleiset työn ajoitusvirheet

Seuraavassa taulukossa on luettelo tunnetuista töiden ajoitusvirheistä ja linkeistä tietoihin, joiden avulla voit ratkaista ne.

Virhesanoma Ratkaisu
Suunniteltu tuotantotilaus on ajoitettava, ennen kuin se voidaan vahvistaa Suunniteltu tuotantotilaus on ajoitettava, ennen kuin se voidaan vahvistaa
Tuotannon aikataulutus ei ota huomioon turvareunuksia Tuotannon aikataulutus ei ota huomioon turvareunuksia
Pääsuunnittelussa ajoitetaan enemmän ajoitusta kuin käytettävissä oleva kapasiteetti Pääsuunnittelussa ajoitetaan enemmän ajoitusta kuin käytettävissä oleva kapasiteetti
Kapasiteettia ei löytynyt tarpeeksi Kapasiteettia ei löytynyt tarpeeksi

Korjaa aikataulutusmoduulin virhe "Ei tarpeeksi kapasiteettia löytyi".
Viivearvoa ei päivitetä, kun suunnittelet suunniteltua tilausta uudelleen Viivearvoa ei päivitetä, kun suunnittelet suunniteltua tilausta uudelleen