So führen Sie Datenbankabfragen zur Automatisierung durch

Um den Grad der Automatisierung zu erhöhen, lassen sich zur Auftragsverteilung, Auslastung, Bearbeitungsstand, Stückzahlen und Rüstzustand in der PPS-Datenbank Abfragen mit entsprechenden Kriterien durchführen.
Dazu können Sie Select-Abfragen an die PPS-Datenbank richten.
In den nachfolgenden Beispielen, ist der an d.uid zugewiesene Wert die UID der Maschine.

Um die UID ausgehend vom Maschinennetzwerknamen zu ermitteln, können Sie Konvertierungsfunktionen benutzen oder die Funktion skrpps_02.skr_get_mc_list verwenden.
Siehe: Verschiedene Hilfsfunktionen für weitere performanceoptimierte Optionen.

Beispiel:

SELECT "BO_GUID" from skrpps_02.skr_get_mc_list('skr') where "MC_NAME"='McNetworkName';

Die Abfrage liefert Ihnen die UID der Maschine, wenn Sie für McNetworkName den Netzwerknamen Ihrer Maschinen einsetzen.

Aus der PPS-Datenbank können Sie ermitteln:

Abfrage über eine Batch-Datei, wann eine Maschine mit allen Tickets fertig ist

Im nachfolgenden Beispiel wird die Zeit abgefragt, wann die Maschine mit einer bestimmten UID mit allen Tickets fertig ist.

Kopieren Sie den Code in eine Batch Datei, setzen Sie die Variable Machine_UID auf einen Wert von einer Ihrer Maschinen und führen Sie den Code mit Administratorrechten aus. In der Variable DONE_TIME erhalten Sie das Ergebnis der Abfrage.

@echo off
setlocal enabledelayedexpansion

set "PgLatestRootPath=C:\Program Files\Stoll\skr3\PostgreSql\9.5.5-1\bin"
set "PgRootPath=!PgLatestRootPath!"
if not exist "!PgRootPath!" Set "PgRootPath=C:\Program Files\Stoll\skr3\PostgreSql\9.5.3-1\bin"

set "Machine_UID=56665454"
call :GetDoneTime !Machine_UID! DONE_TIME
echo DONE_TIME=!DONE_TIME!, ErrorLevel=!ErrorLevel!
goto :EOF

:GetDoneTime
    call :UndefErrorLevel
    set "MC_UID=%~1"
    set "ReturnDoneTimeValueRef=%~2"
    set "DataVal=NULL"
    set "PGPASSWORD=ppsfrontend"
    set "PGCLIENTENCODING=utf-8"

    set pd_SelCmd=SELECT max(t.endDate) FROM Ticket t JOIN Device d on t.device_id = d.id WHERE t.state in ('APPROVED','IN_PROGRESS', 'IN_ACTIVITY') AND d.uid='!MC_UID!';
    set pg_SelCall="!PgRootPath!\psql" -U ppsfrontend -h localhost -d pps
    set pg_cmd="echo !pd_SelCmd! | !pg_SelCall! || echo/ & echo/ & call echo NULL NULL %%^^^errorlevel%%"
    set "pg_cmd=!pg_cmd:)=^)!"
   
    REM Execute PG command and split up table at | and space. Resulting DataValue obtained from second column.
    REM Check for errors of call
    for /f "skip=2 tokens=1,2,3" %%i in ('!pg_cmd!') do (      
        REM Get value in first and second parameter from split - which is from third row
        set "DataVal=%%i %%j"
        REM If error happend, report it. Error code is obtained in 3rd parameter.
        if "!DataVal!"=="NULL NULL" (
            echo ## Postgres DB operation failed with ERROR: %%~k
            set "DataVal=NULL"
        ) else (
            REM Check if not valid
            if "!DataVal:~0,1!"=="(" set "DataVal=NULL"
        )
        goto GotDoneTime
    )
:GotDoneTime
    if not '!ReturnDoneTimeValueRef!'=='' set "!ReturnDoneTimeValueRef!=!DataVal!"
    if "!DataVal!"=="NULL" set "ERRORLEVEL=1" & exit /b 1
exit /b 0

:UndefErrorLevel
REM Undefine ERRORLEVEL, otherwise !ERRORLEVEL! keeps last set value. The ERRORLEVEL system value is not the same as !ERRORLEVEL!
set "ERRORLEVEL="
exit /b 0

Beispielausgabe:

D:\PPS\PpsJBossServer\PpsServerInstallScripts>GetDoneTimeByUID.bat
DONE_TIME=2017-07-18 13:57:33.818, ErrorLevel=0

Spezielle Stillstandszeiten abfragen:

Stillstandszeiten mit folgenden Daten:

  • Maschinen im Fehlerfall
  • Sonstige Stillstände
  • Gesamtlaufzeit
  • Maschinen mit SKR-ID 1530603103 und 1530627696
  • Zeitraum 2018-08-26 12:00 bis 2018-09-01 12:00

Diese Informationen lassen sich über eine individualisierte Stopp-Statistik ermitteln.
Mit Erzeugen einer Secondary DB und Auslösen eines individualisierten Reports.
Testweise geht das mit dem pgAdmin Tool, jedoch nicht mit temporären Tabellen, die automatisch gelöscht werden. Im Beispiel wird die Tabelle mydb verwendet, die nach Testabschluss im Schema report_01 wieder gelöscht werden muss.

    79
    Secondary DB tables erzeugen.

SELECT * FROM skrpps_02.skr_create_secundary_db_tables('report_01'::text ,'mydb'::text,'eUnlogged'::skrpps_02.e_sec_tabletype ,'skr'::text,ARRAY[1457359086, 1457359088],'2018-08-26 12:00'::timestamp,'2018-09-01 12:00'::timestamp,'999999','999'::interval);

    80
    Individuelle Stopp-Statistik generieren.
  • Mit Rechenoperationen Spalten addieren oder subtrahieren, um das gewünschte Ergebnis zu erhalten.
  • Zudem erhalten die neuen Ergebnisspalten eigene Namen (ERROR_STOP_DURATION und OTHER_STOP_DURATION).
  • Die Tabelle wird aufsteigend über die erste Spalte (Name der Maschine) sortiert.

SELECT skrpps_02.skr_mcid2mcname( "AGG_MC_ID",'skr') AS "AGG_MC_NAME"
, "AGG_MC_ID",
("STOP_DURATION" - "ENGAGING_DURATION" - "PIECE_COUNTER_ZERO_DURATION" - "PROGRAMMING_DURATION" - "OFF_DURATION" - "BOOT_DURATION" - "NO_DATA_DURATION" - "MCSTATE_UNKNOWN_DURATION"
) AS "ERROR_STOP_DURATION",
("ENGAGING_DURATION" + "PIECE_COUNTER_ZERO_DURATION" + "PROGRAMMING_DURATION" + "OFF_DURATION" + "BOOT_DURATION" + "NO_DATA_DURATION" + "MCSTATE_UNKNOWN_DURATION") AS "OTHER_STOP_DURATION",
"RUN_DURATION"
FROM  skrpps_02.eval_stop_statistic
(
'report_01' -- __sSchema text
,'mydb' -- _sTable_Prefix text
,Array['AGG_MC_ID'] -- _aSortorder text[]
 
,true -- _bGroupByMachine boolean
,false -- _bGroupByShift boolean
,false -- _bGroupByUserName boolean
,false -- _bGroupByPattern boolean
,false -- _bGroupBySeq boolean
,false -- _bGroupByTicketUid boolean
,false -- _bGroupByTicketProductionId boolean
,false -- _bGroupByTicketProductionSub1Id boolean
,false -- _bGroupByTicketProductionSub2Id boolean
,false -- _bGroupByTicketCustomerId boolean
,false -- _bGroupByTicketArticleId boolean
,NULL -- _aFilterShift integer[]
,NULL -- _aFilterUsername text[]
,NULL -- _aFilterPattern text[]
,NULL -- _aFilterSeq text[]
,NULL -- _aFilterTicketUid bigint[]
,NULL -- _aFilterTicketProductionId text[]
,NULL -- _aFilterTicketProductionsub1Id text[]
,NULL -- _aFilterTicketProductionsub2Id text[]
,NULL -- _aFilterTicketCustomerId text[]
,NULL -- _aFilterTicketArticleid text[]
,NULL -- _aFilterUserState Smallint[]
,NULL -- _aFilterSintralState Smallint[]
) where "OVERALL_DURATION" <> "NO_DATA_DURATION" order by 1 asc

Hinweis:
Mit dem mitgelieferten Excel-Programm (StollReportFromSkrToExcel.xlsb) können Sie die Basisfiltereinstellungen einfach konfigurieren und die Select-Abfrage kopieren.
So greifen Sie über ODBC auf die Datenbank zu

Beispielergebnis der Abfrage

So führen Sie einen Auftrag ohne eine XML-Datei zu erzeugen direkt der Datenbank zu

Anstatt die Auftragsdaten in eine XML-Datei zu schreiben und diese in den D:\ERP\Input Ordner zu legen, können Sie den Auftrag direkt über eine Datenbankverbindung zur pps Datenbank in die ticket_queue einfügen.

Der nachfolgende Insert fügt einen Auftrag mit minimalem Datensatz für die Auto-Produktion in die ticket_queue ein. Gedacht ist er zum Nachladen eines Jacquards bei einer Individualproduktion mit Losgröße 1. Andere Auftragsvarianten sind gleichermaßen möglich.

Über die Beispiel Excel-Datei D:\PPS\ODBC_Examples\Excel\StollPpsTicketExportViaODBC.xlsm, können Sie sich weitere Anwendungen erarbeiten.

Dazu ist eine ODBC-Verbindung zur pps- und nicht zur skr-Datenbank notwendig.
Die Strickzeit (estimated_order_duration) wird in Millisekunden übergeben.
20 min sind daher als 20*60*1000=1200000 einzutragen.

INSERT INTO "ticket_queue" (
    ticket_number,
    ticket_type,
    pattern_subdirectory,
    pattern_file_name,
    total_num_of_executions,
    estimated_order_duration,
    custom_xml, machine_list_xml,
    order_description,
    pattern_preload_condition_xml
)
Values (
    '145609_bandage_2154879',
    'AUTO_PRODUCTION',
    'production\Spring2019',
    'CMSADF-3 KW.bandage_2154879.zip',
    1,
    1200000,
    '<STOLL:CUSTOM xmlns="http://schemas.custom.com/ticketing/ticket/v0.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.custom.com/ticketing/ticket/v0.3 CustomTicket.xsd"/>',
    '<STOLL:MACHINE_LIST>
        <STOLL:MACHINE Name="312_ADF-3KW" BoIgnore="1" Pieces="1"/>
    </STOLL:MACHINE_LIST>',
    'Ticket created by Sapas',
    '<STOLL:PATTERN_PRELOAD_CONDITION>
        <STOLL:ERASE_ALL State="false"/>
        <STOLL:ERASE_ALL_YARNCARRIERPOS State="false"/>
        <STOLL:ERASE_ALL_SEQYARNCARRIERPOS State="false"/>
        <STOLL:LOAD_PAT_CONTAINER_COMP SIN="false" JAC="true" SET="false"/>
    </STOLL:PATTERN_PRELOAD_CONDITION>'
)

Produzierte Teile in der noch laufenden, ticketbasierten Produktion ermitteln

Sie möchten ermitteln, wie viele Teile der laufenden Produktion an den Maschinen schon produziert wurden?

Mit nachfolgender Abfrage der PPS Datenbank, erhalten Sie Auskunft über die Produktion:

  • wie viele Teile
  • von wie vielen Maschinen
  • auf welchen Maschinen
  • welches Ticket
  • welcher Auftrag
  • wie viele nicht abgeschlossene Tickets

SELECT d.name AS device_name, executionsdone, numberofexecutions, t.name AS ticket_name, ordernumber AS order_name, patternfilename FROM Ticket t JOIN Device d on device_id=d.id JOIN Orders o ON o.id = t.order_id WHERE o.type in ('GENERAL','AUTO_PRODUCTION', 'GUIDED_PRODUCTION') and t.state ='IN_PROGRESS' order by order_name