Skip to end of metadata
Go to start of metadata

Syfte

Ta fram data på orklas installationer för att kontrollera så att deras inställningar är rätt och att systemet används på rätt sätt.

Table of Contents

 

Instruktion

Lista på alla orklainstallationer

För att få en uppdaterad lista så är det enklast att logga in på orklas definitionsserver (300009 på server 10.195.18.13). I den listan står det också vilken Orkla-server som installationen finns på.

För varje orkla installation

  1. Logga in på installationen med en WPF-klient i OfficeTools. (Viktigt att det är en WPF-klient och inte en silverlight-klient. Detta gäller även installationer som inte är migrerade!)
  2. Vänta tills allt data är laddat och synkindikatorn har blivit grön eller blå/grön
  3. Öppna upp konsollen för pythonscript.
    1.  klicka på området till höger om synkindikatorn och sen på "Console"

  4. Kopiera in följande script i textfältet med rubriken "Python"

    Data health script
    import System
    from System import *
    import clr
    clr.ImportExtensions(System.Linq)
    from DataRepositoryShared import *                              #RSEntityTypes
    from System.Collections.Generic import *                        #List etc
    from System.Windows.Media import Color                          #Color
    #from GSAB.RSProduction.Framework.UI.GSColors import GSColors    #GSColors
    from GSAB.RSProduction.Data.Client.Model import *               #OEEDataItem etc
    from GSAB.RSProduction.Framework.Data.Model import *            #ReportDataItem etc
    from System.Dynamic import *
    from GSAB.RSProduction.Utils import *
    from System.Windows import *
    from Microsoft.Win32 import *
    from System.IO import *
    from System.Text import *
     
    def FindAllReasonsWithoutCategory(folder,summerizedObject):
         
        summerizedObject.VisitedFolders.Add(folder)
         
        summerizedObject.NumberOfReasons += folder.StopReasons.Except(summerizedObject.CalculatedReasons).Count()
         
        summerizedObject.NumberOfReasonsWithNoCategory += folder.StopReasons.Except(summerizedObject.CalculatedReasons).Where(lambda x:x.InterruptReasonCategories.Where(lambda x:x.Key.StartsWith("INTERRUPT_REASON_EXTENSION_DRILLDOWN_")).Count() == 0).Count()
         
        summerizedObject.CalculatedReasons.AddRange(folder.StopReasons)
         
        for subFolder in folder.StopReasonScheduleChilds:
            if summerizedObject.VisitedFolders.Contains(subFolder) == False:
                FindAllReasonsWithoutCategory(subFolder,summerizedObject)
         
     
    returnData = List[Object]()
     
     
    producingUnits = _environment.Model.GetItems(RSEntityTypes.RSProducingUnit)
     
     
    startDate = DateTime.Now.Date.AddDays(-30)
     
    installations = _environment.Model.GetItems(Guid("d5b1cad4-42b9-4e4a-8bf4-57a57cb601b3"))
    installation = None
    if installations.Count > 1:
        installation = installations.FirstOrDefault(lambda x:x.InstallationID > 300000)
    else:
     installation = installations.FirstOrDefault()
     
    while startDate < RSDateTime.Now.Date:
         
        for p in producingUnits:
             
            dataItem = ExpandoObject()
             
            oeeItem = RSOEEDataItem.GetRSOEEDataItem(p,startDate,startDate.AddDays(1))
             
            dataItem.Date = startDate
            dataItem.ProducingUnit = p.ToString()
            dataItem.Site = installation.Name
            dataItem.InstallationNumber = installation.InstallationID
            dataItem.ReasonsWithoutCategory = 1
            dataItem.NumberOfReasonsTotal = 1
             
             
            if p.ProducingUnitConfiguration != None and p.ProducingUnitConfiguration.StopReasonSchedule != None:
                 
                sumObject = ExpandoObject()
                 
                sumObject.VisitedFolders = List[Object]()
                sumObject.CalculatedReasons = List[Object]()
                sumObject.NumberOfReasonsWithNoCategory = 0
                sumObject.NumberOfReasons = 0
                 
                FindAllReasonsWithoutCategory(p.ProducingUnitConfiguration.StopReasonSchedule,sumObject)    
                 
                dataItem.ReasonsWithoutCategory = sumObject.NumberOfReasonsWithNoCategory
                dataItem.NumberOfReasonsTotal = sumObject.NumberOfReasons
             
                uncategorizedSum = 0.0
                 
                stopsInInterval = RSStopItem.GetRSStopItemsInProductionIntervals(oeeItem.ProductionIntervals)
                 
                for stop in stopsInInterval.Where(lambda x:x.Category == None and x.IsMicroStop == False).ToList():
                     
                    uncategorizedSum += stop.Duration
                 
                totalOnOrder = 0.0
                 
                for workTime in oeeItem.CalculatedWorkTimes:
                    totalOnOrder += workTime.ProducedUnits_Scheduled_data
                 
                dataItem.Approved = p.Approved
                dataItem.UncategorizedStopTime = Math.Round(uncategorizedSum,1)
                dataItem.TotalStopTime = Math.Round(oeeItem.TotalStopTimeDuration_data,1)
                dataItem.ProducedOutsideSchedule = Math.Round(oeeItem.ProducedUnits_Total_data -oeeItem.ProducedUnits_Scheduled_data,0)
                dataItem.ProducedTotal1 = Math.Round(oeeItem.ProducedUnits_Total_data,0)
                dataItem.ProducedOutsideOrder = Math.Round(oeeItem.ProducedUnits_Scheduled_data - totalOnOrder,0)
                dataItem.ProducedTotal2 = Math.Round(oeeItem.ProducedUnits_Total_data,0)
                dataItem.ScheduledTimeWithoutOrder = Math.Round(oeeItem.NoWorkTimeStopDuration_data,1)
                dataItem.TotalScheduledTime = Math.Round(oeeItem.ScheduledDuration_data,0)
                 
                returnData.Add(dataItem)
             
        startDate = startDate.AddDays(1)
    returnData
     
    dataString = ""
     
    for item in returnData:
        if dataString != "":
            dataString += "\n"
             
        dataString += item.Date.ToString("yyyy-MM-dd") +";"
        dataString += item.ProducingUnit.ToString() +";"
        dataString += item.Site.ToString() +";"
        dataString += item.InstallationNumber.ToString() +";"
        dataString += item.ReasonsWithoutCategory.ToString() +";"
        dataString += item.NumberOfReasonsTotal.ToString() +";"
        dataString += item.Approved.ToString() +";"
        dataString += item.UncategorizedStopTime.ToString() +";"
        dataString += item.TotalStopTime.ToString() +";"
        dataString += item.ProducedOutsideSchedule.ToString() +";"
        dataString += item.ProducedTotal1.ToString() +";"
        dataString += item.ProducedOutsideOrder.ToString() +";"
        dataString += item.ProducedTotal2.ToString() +";"
        dataString += item.ScheduledTimeWithoutOrder.ToString() +";"
        dataString += item.TotalScheduledTime.ToString() +";"
         
     
    save = SaveFileDialog()
     
    save.FileName = installation.InstallationID.ToString() + "-DataHealthExport.csv";
     
    save.Filter = "CSV File | *.csv";
     
    if save.ShowDialog():
     
        writer = StreamWriter(save.OpenFile(), Encoding.UTF8);
     
        writer.Write(dataString)
     
        writer.Dispose();
     
        writer.Close();



  5. Tryck på "Kör-knappen" (Play) så körs scriptet.
  6. När skriptet är klart så öppnas en "Spara fil till disk" ruta. (OBS detta steg kan ta en stund på större installationer)
  7. Samla alla filer som skapas i en och samma katalog

När alla filer för alla orkla installationer är skapade

  1. Öppna upp excelmallen Orkla_DataHealth_Template.xls och spara som Orkla_DataHealth_{Dagens Datum}.xlsx

  2. Öppna upp filerna som har exporteras från installationerna och klistra in innehållet i dessa filer i mallen med start på kolumn A rad 2 för första filen.



  • No labels