Beachten Sie Folgendes, wenn Sie automatisierte Tools für die Werkstatt in Python erstellen

Motivation für diesen Artikel

Letztes Jahr habe ich meinen Job von einem Produktionsingenieur zu einem Datenanalyseunternehmen gewechselt, und ich habe mehr Möglichkeiten, Python zu schreiben. Derzeit arbeite ich an einem Projekt zur Entwicklung eines Vorverarbeitungswerkzeugs für maschinelles Lernen. Als ich auf meine Zeit als Produktionsingenieur zurückblickte, dachte ich, dass es verschiedene Aufgaben gibt, die automatisiert werden können. Basierend auf den Kenntnissen von Python, die nach einem Jobwechsel erworben wurden, und den Kenntnissen der Zeit der Produktionsingenieure werde ich das Material beschreiben, das bei der erneuten Arbeit am Produktionsstandort verwendet werden kann. Ich hoffe, es ist hilfreich für diejenigen, die mit ähnlichen Bedürfnissen konfrontiert sind. Dieser Artikel sieht gut aus, wenn Sie vorhandene Technologien kombinieren! Zunächst möchte ich darauf hinweisen, dass es technisch nichts Neues gibt.

Zu automatisierende Inhalte

Als ich als Produktionsingenieur arbeitete, hatte ich die Aufgabe, die Daten zu sammeln, die am Ende des Tages aus dem Prozess kamen </ b>. Speichern Sie die Protokolle und Prüfergebnisse der Fertigungsausrüstung für jedes Produkt als CSV-Datei und aggregieren Sie sie am Ende des Tages, um die Fortschrittsrate und die Fehlerrate des Tages zu überprüfen. In dem verantwortlichen Prozess, wie in der folgenden Abbildung gezeigt, waren die Spezifikationen so, dass jedes Mal, wenn ein Produkt hergestellt wurde, vier CSV ausgegeben wurden.

◎ Einstellwertprotokoll der Fertigungsanlagen ◎ Statusprotokoll der Fertigungsausrüstung ◎ Produktformdaten ◎ Beurteilungsergebnis berechnet aus Formdaten

Der Teil zur Beurteilung der Form wurde in Python erstellt, aber dies ist, was ich die Beurteilungsmethode angewiesen und den Programmierer der Abteilung Informationssystem gebeten habe, sie zu erstellen. Die oben genannten vier CSVs wurden jeden Tag zu einer Excel-Datei zusammengefasst. Mit anderen Worten, es war eine Sammlung von 4 x Produktionsdateien. Wenn wir ab dem Ende der Produktion an diesem Tag mit der Zusammenstellung beginnen, wird diese nachts fertiggestellt. Deshalb haben wir die Hersteller gebeten, sich zwischen den Produktionen zu versammeln. Natürlich muss diese Arbeit von niemandem ausgeführt werden. </ b> Ich wurde gebeten, dies in der Lückenzeit zu tun, aber Ich bedauere, dass ich mir nicht die Zeit hätte nehmen sollen, da es keine Arbeit ist, die dem Produkt einen Mehrwert verleiht. Ich hätte diese Zeit den Ideen zur Reduzierung von Fehlern widmen sollen (= Arbeit, die nur Menschen leisten können). </ b> Nun zeige ich Ihnen, wie Sie diese Aufgabe mit Ihrem aktuellen Wissen automatisieren können.

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318960/2a05f2d0-00a0-59ea-f834-ea13c344610e.png "width=90%>

Dinge, die Sie beim Erstellen von Automatisierungstools beachten sollten

Es gibt einige Dinge zu beachten, um automatisierte Tools in Python zu erstellen und in der Fertigung zu verwenden. Als Voraussetzung wird angenommen, dass der Produktionsingenieur (= ich) das Werkzeug erstellt und der Hersteller (= die Person, die das Produkt tatsächlich herstellt) es verwendet.

◎ Machen Sie es zu einem Formular, das von Personen ohne Programmierkenntnisse ausgeführt werden kann </ b>

Es ist am besten anzunehmen, dass nur wenige Leute, einschließlich Produktionsingenieure, Programmierkenntnisse in der Fertigung haben. Übergeben Sie das Tool in einem Formular, das mit nur einem Klick ausgeführt werden kann. Dies ist auch unter dem Gesichtspunkt besser, dass man sich nicht die Mühe des Herstellers machen muss. Wenn das Verhalten des Tools vom Python-Paket abhängt, ist es nicht zumutbar, "Bitte geben Sie 0.25.1 für Pandas und 3.0.0 für openpyxl ..." an. Es muss in einer Form übergeben werden, die ausgeführt werden kann, ohne eine Umgebung zu erstellen.

◎ Schreiben Sie keine Elemente, die sich wahrscheinlich täglich ändern, in das Python-Skript </ b>

Beispielsweise können wir das Datenspeicherungsziel ändern, um die Site zu vereinfachen. In diesem Fall müssen Sie das Python-Skript bei jeder Änderung neu schreiben, wenn Sie den Dateipfad in das Python-Skript schreiben. Wenn es keine Person gibt, die Python lesen und schreiben kann, ist es nicht möglich, damit umzugehen (= es wird jedes Mal auf die Site aufgerufen).

◎ Sie sollten denken, dass Sie das Paket nicht mit pip auf dem PC im Feld </ b> installieren können

Abhängig von den Regeln des Unternehmens oder der Fabrik wird das Netzwerk am Produktionsstandort häufig innerhalb der Linie oder innerhalb der Fabrik geschlossen und nicht mit der Außenseite verbunden. Da die Herstellungsbedingungen und die erfassten Daten erstklassige vertrauliche Angelegenheiten des Herstellers sind, denke ich, dass das Netzwerk in den meisten Fällen von außen physisch abgeschnitten ist, damit es nicht nach außen gelangt. Selbst wenn ich es jetzt mache, gehe ich zur Fabrik des Kunden, um die Daten zu sehen.

◎ Machen Sie Microsoft Office während des Betriebs problemlos nutzbar </ b>

Wenn Office am Produktionsstandort auf dem PC installiert ist, muss Office auch bei laufendem Tool problemlos verwendet werden kann (= friert nicht ein). Dies liegt daran, dass der Hersteller möglicherweise tägliche Berichte in Excel schreibt oder Excel, eine Sammlung früherer Daten, mit demselben PC überprüft. Wenn Sie Office während des Vorgangs nicht verwenden können, sinkt Ihr Ruf stark (lacht).

◎ Besteht nur aus OSS </ b>

Da der Produktionsingenieur (Nicht-Programmierer) das Automatisierungstool selbst erstellt, ist die Verwendung von OSS eine Voraussetzung. Wenn ein Produkt an einen Kunden geliefert wird, muss es möglicherweise nur mit OSS erstellt werden, da die Abteilung für Fertigungs- und Informationssysteme des Kunden es nach Übergabe des Tools so weit wie möglich warten möchte.

◎ Danach höre ich oft die Stimmen der Site (= Hersteller) </ b>

Ich habe etwas geschrieben, das alles enthält (lacht), aber da die Anforderungen je nach Site unterschiedlich sind, hören wir uns das genau an, bevor wir mit der Erstellung beginnen. Im Beispiel zum Aggregieren der oben genannten CSV-Dateien

● Verarbeitung für jedes Produkt (dh die Konsolidierung wird zur gleichen Zeit abgeschlossen, zu der die Produktion des Tages abgeschlossen ist) ● Stapelverarbeitung nach Produktionsende

Es gibt zwei mögliche Muster. Wir möchten diese detaillierten Spezifikationen im Voraus hören, um die Benutzerfreundlichkeit zu maximieren. Dieses Mal werden wir dies am Beispiel der "Verarbeitung für jedes Produkt" erläutern.

(Hinweis) Wenn das Beurteilungsergebnis kontinuierlich NG ist, muss die Leitung dringend als Prozessanomalie angehalten werden, sodass die Beurteilung selbst grundsätzlich für jedes Produkt durchgeführt wird.

Technologie, die für den Werkzeugbau verwendet werden kann

Die Technologien, die für jedes der oben genannten Elemente verwendet werden können, sind aufgelistet.

Punkte, die man sich merken sollte Gegenmaßnahme Bibliothek zu verwenden
Machen Sie es zu einem Formular, das von Personen ohne Programmierkenntnisse ausgeführt werden kann ・ Python-Skript exe machen
・ Tools werden als Batch-Dateien bereitgestellt
PyInstaller
Schreiben Sie keine Elemente, die sich wahrscheinlich täglich ändern, in Python-Skripte Elemente, die sich wahrscheinlich ändern, sind Befehlszeilenargumente (sys)..Verwenden Sie argv) oder format, um aus der Einstellungsdatei zu lesen sys
Sie sollten denken, dass Sie das Paket nicht mit pip auf Ihrem PC vor Ort installieren können Machen Sie aus einem Python-Skript eine Exe PyInstaller
Machen Sie Microsoft Office während des Betriebs problemlos nutzbar (Beispiel) Maßnahmen zur stabilen Verwendung von Excel während der Verarbeitung
Wenn Sie längere Zeit mit Excel arbeiten möchten (z. B. viel Text schreiben), ist es besser, VBScript anstelle von Python zu verwenden.
openpyxl
(Orte, an denen die Bearbeitungszeit kurz ist)
Stellen Sie sicher, dass die Verarbeitung abgeschlossen ist, wenn die Produktion abgeschlossen ist (auf Anfrage). Prozess nach Produkt watchdog

Lassen Sie mich etwas näher erläutern. ◎ Korrespondenz zu "Machen Sie es zu einem Formular, das von Personen ohne Programmierkenntnisse ausgeführt werden kann" </ b> Dies ist möglich, indem Sie das erstellte Python-Skript mit einer Bibliothek namens PyInstaller ausführen. Durch die Konvertierung in exe ist es nicht erforderlich, am Produktionsstandort eine Umgebung zu erstellen (ein Bild der Umgebung, die in der exe enthalten ist). Durch die Bereitstellung der exe als Batchdatei kann der Benutzer das Tool einfach durch Doppelklicken auf die Batchdatei verwenden.

Die Seite, die ich als Referenz verwendet habe ● Exe-Datei mit PyInstaller erstellenBatchdatei erstellen

◎ Korrespondenz zu "Schreiben Sie keine Elemente, die sich wahrscheinlich täglich ändern, in Python-Skripten" </ b> Verwenden Sie für Elemente, die sich wahrscheinlich ändern, Befehlszeilenargumente (in der Batchdatei beschrieben) oder erstellen Sie eine separate Einstellungsdatei und lesen Sie sie von dort aus. Auf diese Weise können Sie die Batchdatei auch mit einem Texteditor neu schreiben, selbst wenn ein Teil im Feld geändert werden soll, sodass auch Personen, die keine Python-Kenntnisse haben, damit umgehen können.

Die Seite, die ich als Referenz verwendet habe Umgang mit Befehlszeilenargumenten in Python

◎ Gegenmaßnahmen für "Es ist besser zu glauben, dass Sie keine Pakete mit pip auf dem PC im Feld installieren können" </ b> Gleich wie die erste Maßnahme oben

◎ Unterstützung für "Microsoft Office während des Betriebs problemlos verwenden können" </ b> Bei der Arbeit mit Excel-Dateien in Python wird standardmäßig eine Bibliothek namens openpyxl verwendet. Während ich in der Vergangenheit daran arbeitete, mehrere Blätter mit openpyxl zu aggregieren, konnte ich keine andere Excel-Datei betreiben, die nichts damit zu tun hatte (ich habe die Ursache nicht herausgefunden). Deshalb habe ich mich dieses Mal entschieden, VBScript anstelle von Python für den Teil zu verwenden, in dem csv aggregiert ist. Stellen Sie sicher, dass Microsoft Office problemlos ausgeführt werden kann, während das Tool ausgeführt wird, und nicht nur Excel.

◎ Maßnahmen zur "Sicherstellung, dass die Verarbeitung abgeschlossen ist, wenn die Produktion beendet ist" </ b> Wir überwachen den Ordner, in dem die Formdaten gespeichert sind, mit einer Bibliothek namens watchdog und beginnen mit der Verarbeitung, wenn die Daten gespeichert werden. Auf diese Weise muss der Benutzer das Tool nur vor Produktionsbeginn starten (= Doppelklick auf die Batch-Datei) und die Batch-Datei (= Strg + C) stoppen, wenn die Produktion des Tages abgeschlossen ist.

Die Seite, die ich als Referenz verwendet habe Befehlsausführung ausgelöst durch Dateiaktualisierung (Python-Version)

Zusätzlich zu den oben genannten Websites Ich bezog mich auf "Lassen Sie Python die langweiligen Dinge tun, die automatisierte Verarbeitungsprogrammierung, die Nicht-Programmierer ausführen können".

Schreiben Sie tatsächlich den Code

Im Folgenden werde ich basierend auf den obigen Punkten den Code schreiben, der automatisch mehrere CSV-Dateien in einer Excel-Datei zusammenfasst. Bitte denken Sie danach an ein Memo. ..

Betriebsinhalt

Ich habe über die Verarbeitung nachgedacht, wie in der folgenden Abbildung gezeigt. Stellen Sie sich das Produkt als von links nach rechts fließend vor und den Prozess von oben nach unten.

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318960/4e656889-2ff8-a2ff-5b64-fbb43c845b76.png "width=90%>

Es gibt 5 Dateien und 3 Skripte.

Datei: ◎ Ausgabewertprotokoll (CSV), das von der Fertigungsanlage ausgegeben wird ◎ Statusprotokoll (CSV), das von der Fertigungsanlage ausgegeben wird ◎ Formdaten (CSV), die vom Formmessgerät ausgegeben werden ◎ Beurteilungsergebnis (csv) berechnet anhand von Formdaten ◎ Excel, das 4 CSV aggregiert

Jede dieser Dateien wird in einem separaten Ordner gespeichert.

Skript: ◎integration.py 【Rolle】 Steuern Sie den Verarbeitungsfluss 【Bewegung】

  • Überwachen Sie den Ordner, in dem die Formdaten gespeichert sind, und beurteilen Sie die Form, wenn eine Datei generiert wird. (= ShapeJudgement.py ausführen)
  • Wenn das Beurteilungsergebnis gespeichert ist, führen Sie excel_merge.vbs aus, das csv aggregiert. ・ Verschieben Sie csv nach der Aggregation in den "Aggregierten Ordner".

◎ShapeJudgment.py 【Rolle】 OK / NG-Beurteilung basierend auf Formdaten 【Bewegung】 Formdaten lesen und Beurteilungsergebnis speichern (Hinweis) Da das Bewertungsergebnis in direktem Zusammenhang mit der Qualität steht, wird der vom Experten der Abteilung Informationssystem erstellte Code verwendet.

◎excel_merge.vbs 【Rolle】 Aggregieren Sie CSV-Dateien zu einer Excel-Datei 【Bewegung】 Lesen Sie die CSV-Datei und fügen Sie sie als Excel-Datei hinzu    Die Befehlszeilenargumente der Batchdatei, die dem Benutzer schließlich zur Verfügung gestellt werden, lauten wie folgt. Es ist kompliziert, aber ...

Besonders verwirrend ist, wenn Sie ShapeJudgement.py in Integration.py ausführen und sys.argv [1], sys.argv [4], sys.argv [5] als Befehlszeilenargumente übergeben. Innerhalb von ShapeJudgement.py entsprechen sie sys.argv [0], sys.argv [1], sys.argv [2]. Mit den Befehlszeilenargumenten müssen Sie keinen bestimmten Pfad in Ihr Python-Skript schreiben. Wenn Sie den Pfad ändern möchten, müssen Sie nur die Batchdatei bearbeiten. </ b>

Inhalt Position in Batch-Datei integration.Korrespondenz in py ShapeJudgment.Korrespondenz in py
integration.exe Pfad
(integration.py konvertiert zu exe)
0. Argument sys.argv[0] -
ShapeJudgment.exe path (ShapeJudgement).py konvertiert zu exe) 1. Argument sys.argv[1] sys.argv[0]
In dem Ordner, in dem das "Einstellwertprotokoll" gespeichert ist
Pfad
2. Argument sys.argv[2] -
In dem Ordner, in dem das "Gerätestatusprotokoll" gespeichert ist
Pfad
3. Argument sys.argv[3] -
In dem Ordner, in dem "Formdaten" gespeichert sind
Pfad
4. Argument sys.argv[4] sys.argv[1]
Der Pfad des Ordners, in dem das "Beurteilungsergebnis" gespeichert ist 5. Argument sys.argv[5] sys.argv[2]
Pfad zu dem Ordner, in dem die "aggregierte Excel-Datei" gespeichert ist 6. Argument sys.argv[6] -
excel_merge.vbs Pfad 7. Argument sys.argv[7] -

Der Verarbeitungsablauf ist wie folgt. Für jedes Produkt werden 10 Schritte ausgeführt. Wir gehen davon aus, dass die für 10 Schritte erforderliche Zeit für die Taktzeit (Fließintervall) des Produkts ausreichend kurz ist. Wenn die Taktzeit kurz ist, fließt das nächste Produkt während der Verarbeitung. Ich denke, Sie müssen eine Verarbeitungsmethode entwickeln. </ b>

bestellen Veranstaltung Ziel
(Befehlszeilenargument für Batchdatei)
0 integration.mit py
Beginnen Sie mit der Überwachung des Ordners, in dem die Formdaten gespeichert sind
1 Produkte fließen in den Prozess ein
2 Das Produkt wird von der Produktionsanlage verarbeitet
3 Das Einstellwertprotokoll wird gespeichert sys.argv[2]
Gerätestatusprotokoll wird gespeichert sys.argv[3]
4 Messen Sie das Produkt mit einem Formmessgerät
5 Formdaten werden gespeichert sys.argv[4]
6 integration.Formurteil von py.py wird ausgeführt
7 Das Bewertungsergebnis wird gespeichert sys.argv[5]
8 integration.Von py
excel_merge.vbs wird ausgeführt
9 Die aggregierte Excel-Datei
Gerettet
sys.argv[6]
10 integration.mit py
Verschieben Sie die aggregierte CSV in einen anderen Ordner
Im übergeordneten Ordner jedes Befehlszeilenarguments
11 Zurück zu 1
(Das nächste Produkt fließt)

Codebeispiel

Hier ist der Code, der die Bewegung tatsächlich bestätigt hat.

Ausführungsumgebung Betriebssystem: Windows 10 Home Version 1909 Python  3.7.6 watchdog 0.10.2 openpyxl  3.0.0

■ Skript, das den Verarbeitungsablauf steuert </ b>

integration.py


#Importieren Sie die erforderlichen Bibliotheken
import datetime
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
import subprocess
import sys
import os
import openpyxl
import shutil
import pathlib


# ShapeJudgment.py und übertreffen_merge.Klasse, die vbs ausführt
class Execute(FileSystemEventHandler):
    def __init__(self, path):
        self.path = path

    def _run_command(self):

        '''
ShapeJudgement im Befehlszeilenargument.py path (sys.argv[1]),
Der Pfad des Ordners, in dem "Formdaten" gespeichert sind (sys.argv[4]),
Der Pfad des Ordners, in dem das "Beurteilungsergebnis" gespeichert ist (sys.argv[5])
Geben Sie ShapeJudgement an.Führen Sie exe aus
        '''
        command = [sys.argv[1],sys.argv[4],sys.argv[5]]
        subprocess.run(command, shell=True)

        '''
Aggregiertes Excel (sys.argv[6]"Datum +_Wenn es keinen "aggregierten" Namen gibt)
Wird normalerweise hergestellt, wenn das erste Produkt des Tages fließt
        '''
        if not os.path.isfile(
                os.path.join(sys.argv[6], datetime.date.today().strftime('%Y-%m-%d') + "_Anhäufung.xlsx")):
            wb = openpyxl.Workbook()
            wb.save(os.path.join(sys.argv[6], datetime.date.today().strftime('%Y-%m-%d')) + "_Anhäufung.xlsx")

        '''
Jeder csv (sys.argv[2] ~ sys.argv[5]) Um VBScript auszuführen
Aggregiertes Excel ist sys.argv[6]"Datum +_Als "Aggregat" gespeichert
        '''
        command = [r"wscript",
                     sys.argv[7],sys.argv[2],
                     sys.argv[3], sys.argv[4],
                     sys.argv[5],os.path.join(sys.argv[6],datetime.date.today().strftime('%Y-%m-%d'))+"_Anhäufung.xlsx"]

        subprocess.run(command, shell = True)
        
        '''
Speicherort jedes CSV-Systems.argv[2] ~ sys.argv[5]Erstellen Sie, wenn der übergeordnete Ordner keinen "aggregierten" Ordner hat
Verschieben Sie die aggregierte CSV in den Ordner "aggregiert"
Wenn sich im Ordner "Aggregated" bereits eine gleichnamige Datei befindet, übergeben Sie diese
        '''
        for i in range(2, 6):
            if not os.path.isdir(os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Aggregiert")):
                os.mkdir(os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Aggregiert"))
            try:
                shutil.move(sys.argv[i] + "\\" + os.listdir(sys.argv[i])[0],
                            os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Aggregiert"))
            except shutil.Error:
                pass

    def on_created(self,event):
        self._run_command()

'''
Formdaten des Inspektionsgeräts(csv)Funktion zur Überwachung des Ordners wo
Die Methode in der Execute-Klasse wird ausgeführt, wenn eine neue Datei erstellt wird
Das Überwachungsziel ist der Ordner (sys), in dem "Formdaten" gespeichert werden..argv[4])
Ctrl+Überwachen Sie weiter, bis C gedrückt wird
'''
def watch_shape(path = sys.argv[4]):
    while True:
        event_handler = Execute(path)
        observer = Observer()
        observer.schedule(event_handler,path,recursive = True)
        observer.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            observer.stop()
        observer.join()


if __name__ == '__main__':
    watch_shape()

■ Skript zum Speichern der OK / NG-Beurteilung basierend auf Formdaten </ b>

ShapeJudgment.py


import pandas as pd
import numpy as np
import os
import sys
import glob

#Eine Funktion, die das Beurteilungsergebnis basierend auf den Formdaten speichert
def main():

    '''
Formdaten lesen (vorausgesetzt, es ist immer nur eine CSV-Datei gleichzeitig vorhanden)
Bestehen, wenn keine Datei vorhanden ist
    sys.argv[1]Ist der Pfad des Ordners, in dem die Formdaten gespeichert werden
    '''
    try:
        shape_df = pd.read_csv(os.path.join(sys.argv[1] , glob.glob("*.csv")[0]))
    except IndexError:
        pass
    else:

        '''
Der Beurteilungsalgorithmus funktioniert ...
Dies ist ein Teil, der in direktem Zusammenhang mit der Qualität steht, also nach Angabe der Beurteilungsmethode
Lassen Sie einen Experten in der Abteilung Informationssystem schreiben
        '''

        ''' 
Urteilsergebnis(judgment_df)sparen
        sys.argv[2]Ist der Pfad des Ordners, um das Beurteilungsergebnis zu speichern
Der Dateiname lautet "Bewertungsergebnis"._Formdaten.csv」
        '''
        judgment_df.to_csv(os.path.join(sys.argv[2], "Urteilsergebnis_"+glob.glob("*.csv")[0]))

if __name__ == '__main__':
    main()

■ Ein Skript, das vier CSV-Dateien zu einer Excel-Datei zusammenfasst </ b>

excel_merge.vbs


'--------------------------------------------------------------------------------------
'
'Kombinieren Sie die vom Gerät ausgegebenen CSV-Dateien zu einer Excel-Datei für jedes Blatt
'			
'	
'Achtung Öffnen Sie die zu aggregierende Excel-Datei nicht, während Sie das Skript ausführen.
'Entsperren Sie die zu aggregierenden Excel-Dateien, bevor Sie das Skript ausführen (nicht schreibgeschützt).
'Legen Sie nichts anderes als die CSV-Datei in den Ausgabezielordner der Fertigungs- und Inspektionsausrüstung.
'Wenn dieses Skript abnormal beendet wird, beenden Sie den Excel-Prozess manuell.
'        
'
'--------------------------------------------------------------------------------------
Option Explicit

Dim fileSystem
Dim targetFolder
Dim fileList
Dim Excel
Dim merge_Workbook
Dim objWorkbook
Dim objSheet
Dim wkFile
Dim i


'sys.argv[2] = WScript.Arguments(0) :Einstellungswertprotokoll für Fertigungsanlagen(csv)Ordnerpfad
'sys.argv[3] = WScript.Arguments(1) :Statusprotokoll der Fertigungsausrüstung(csv)Ordnerpfad
'sys.argv[4] = WScript.Arguments(2) :Formdaten des Inspektionsgeräts(csv)Ordnerpfad
'sys.argv[5] = WScript.Arguments(3) :Beurteilungsergebnis des Inspektionsgeräts(csv)Ordnerpfad
'sys.argv[6] = WScript.Arguments(4) :Der Pfad der Excel-Datei, in der die obige CSV zusammengefasst ist

'Öffnen Sie ein Excel-Objekt
Set Excel = CreateObject("Excel.Application")

'Excel-Anzeigeeinstellungen (Wenn diese Einstellung festgelegt ist, wird Excel während der Verarbeitung nicht geöffnet oder geschlossen.)
Excel.Visible = False
Excel.DisplayAlerts = False
Excel.ScreenUpdating = False


 'Laden Sie die zu aggregierende Arbeitsmappe
Set merge_Workbook = Excel.Workbooks.Open(WScript.Arguments(4))


'Schleife nach Datei
For i = 0 To 3 'Schleife nach der Anzahl der zu aggregierenden CSV-Dateien

		'Holen Sie sich eine Liste der Dateien in jedem Ordner (vorausgesetzt, es gibt nur eine Datei, aber vorerst)
		'Erstellen Sie ein Objekt, das das Dateisystem verwaltet
		Set fileSystem   = CreateObject("Scripting.FileSystemObject")
		Set targetFolder = fileSystem.getFolder(WScript.Arguments(i))
		Set fileList = targetFolder.Files
		
        For Each wkFile In fileList
        		Set objWorkbook = Excel.Workbooks.Open(WScript.Arguments(i) & "\" & wkFile.Name)
                'Blattobjekt abrufen(Angenommen, die Kopierquelldatei enthält nur ein Blatt.
                Set objSheet = objWorkbook.Sheets(1)
                'Blattobjekt abrufen(Angenommen, die Kopierquelldatei enthält nur ein Blatt.
                objSheet.Copy ,merge_Workbook.Sheets(merge_Workbook.Sheets.Count)
                'Der Blattname ist der Dateiname der CSV-Datei (".csv"Löschen)
                'merge_Workbook.Sheets(merge_Workbook.Sheets.Count).Name = replace(wkFile.Name,".csv","")
                'CSV-Datei schließen
            	objWorkbook.Close
            	Set objWorkbook = Nothing
        Next

Next

'Löschen Sie Sheet1 nur beim ersten Mal
If merge_Workbook.Sheets.Count < 6 Then
		'Löschen Sie durch Angabe von Sheet1
		merge_Workbook.Sheets(1).Delete
End If

'Legen Sie das erste Blatt als aktives Blatt fest
merge_Workbook.Sheets(1).Activate


'Überschreiben und speichern Sie die zu aggregierende Arbeitsmappe
merge_Workbook.Save

'Schließen Sie die zu aggregierende Arbeitsmappe
merge_Workbook.Close
Set merge_Workbook = Nothing

'Beenden Sie Excel
Excel.ScreenUpdating = True
Excel.Quit
  
Set Excel = Nothing   

Durch Ausführen des obigen Codes werden (4 x Anzahl der hergestellten Einheiten) CSV-Dateien zu einer Excel-Datei zusammengefasst. Diese Art der Zusammenfassung ist nicht ganz cool, aber nur ein Beispiel (lacht)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318960/39caf51f-6841-04f3-d8d6-883f73e6205a.png "width=90%>

So erstellen Sie eine Batchdatei

Als Nächstes werde ich erklären, wie eine Batchdatei erstellt wird. Die Batchdatei wird in zwei Schritten erstellt.

  1. Machen Sie aus einem Python-Skript eine Exe
  2. Erstellen Sie eine Batchdatei mit verschiedenen Pfaden als Befehlszeilenargumente

Zuallererst ist es die exe-Konvertierung von 1., aber es wird mit dem oben erwähnten Pyinstaller durchgeführt. Wechseln Sie an der Eingabeaufforderung in das Verzeichnis, in dem Integration.py und ShapeJudgement.py vorhanden sind, und führen Sie dann den folgenden Befehl aus.

$ pyinstaller integration.py --onefile
$ pyinstaller ShapeJudgment.py --onefile

Dann

44536 INFO: Building COLLECT COLLECT-00.toc completed successfully.

Wird angezeigt, wird im selben Verzeichnis ein Ordner namens dist erstellt. Integration.py und ShapeJudgement.py wurden jeweils in diesem Ordner ausgeführt. Enthält Integration.exe und ShapeJudgement.exe.

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318960/50eb0030-a9ad-2c1d-3156-4f96a16188e8.png "width=90%>

Erstellen Sie als Nächstes die Batchdatei in 2. Schreiben Sie den folgenden Inhalt in einen Texteditor wie Notepad und speichern Sie ihn mit der Erweiterung ".bat". Die erste Zeile ist ein Kommentar. Bitte beachten Sie, dass zwischen jedem Durchgang ein halber Abstand besteht. Außerdem ist ^ (Carlet) ein Symbol für Zeilenumbrüche.

Ausführungsdatei.bat


@rem integration.exe bat Datei auszuführen
"integration.exe Pfad" ^
 "ShapeJudgment.exe Pfad"^
 "Pfad des Ordners, in dem das "Einstellwertprotokoll" gespeichert ist"^
 "Pfad zu dem Ordner, in dem das "Gerätestatusprotokoll" gespeichert ist"^
 "Pfad des Ordners, in dem "Formdaten" gespeichert sind"^
 "Der Pfad des Ordners, in dem das "Beurteilungsergebnis" gespeichert ist"^
 "Pfad zu dem Ordner, in dem die "aggregierte Excel-Datei" gespeichert ist"^
 "excel_merge.vbs Pfad"

↓ Beschreibung Beispiel
@rem integration.exe bat Datei auszuführen
"C:\Users\PycharmProjects\untitled2\dist\integration.exe" ^
"C:\Users\PycharmProjects\untitled2\dist\ShapeJudgment.exe"^
 "C:\Users\input\Protokoll der Fertigungsausrüstung\Einstellungswertprotokoll für Fertigungsanlagen"^
 "C:\Users\input\Protokoll der Fertigungsausrüstung\Statusprotokoll der Fertigungsausrüstung"^
 "C:\Users\input\Prüfgeräteprotokoll\Formdaten des Inspektionsgeräts"^
 "C:\Users\input\Prüfgeräteprotokoll\Beurteilungsergebnis des Inspektionsgeräts"^
 "C:\Users\output\Aggregierte Excel-Datei"^
 "C:\Users\VBS\excel_merge.vbs"

Die 3. bis 10. Zeile entsprechen sys.argv [1] ~ sys.argv [7], geschrieben in integration.py.

Was soll ich am Produktionsstandort in den PC einbauen?

Es kamen verschiedene Dateien heraus, aber die folgenden vier Dateien werden schließlich am Produktionsstandort auf dem PC abgelegt. Ändern Sie natürlich den in die Batch-Datei geschriebenen Pfad entsprechend dem PC am Produktionsstandort.

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318960/93ebeba5-f3ae-c18a-eb85-78b8bb4b07f8.png "width=70%>

Bitten Sie den Hersteller, vor Produktionsbeginn an diesem Tag auf "Ausführungsdatei.bat" zu doppelklicken. Jedes Mal, wenn das Produkt fließt, werden die vier CSV-Dateien automatisch zu einer Excel-Datei zusammengefasst. Drücken Sie nach Abschluss der Produktion "Strg + C", um die Batchdatei zu stoppen. Zu diesem Zeitpunkt ist die Aggregation in die Excel-Datei abgeschlossen. </ b>

Der obige Prozess ist ein Beispiel, Es scheint, dass die oben beschriebene Bibliothek für verschiedene Automatisierungen verwendet werden kann, die am Fertigungsstandort benötigt werden.

wichtiger Punkt

Zu der oben genannten Methode sind einige Punkte zu beachten, daher werde ich sie hier beschreiben.

■ Die exe-Datei kann sehr groß werden Bei der exe-Konvertierung mit Pyinstaller werden alle Bibliotheken in der Python-Umgebung zum Zeitpunkt der Erstellung importiert. Daher wird die Dateigröße sehr groß und der Betrieb von exe kann sich verlangsamen. Um dies zu vermeiden, ist es besser, es zu einer Exe zu machen, außer für nicht verwendete Bibliotheken. Der folgende Artikel ist hilfreich für die Konvertierung in exe mit Ausnahme einer bestimmten Bibliothek. Die Größe wurde durcheinander gebracht, als das in Python erstellte Programm mit PyInstaller in exe konvertiert wurde [Juni 2019, Lösung hinzugefügt]

■ Aggregierte Excel-Dateien können während der Produktion nicht überprüft werden Wenn Sie während des Schreibvorgangs eine Excel-Datei öffnen, tritt ein Schreibfehler auf. Wenn Sie also die Excel-Dateien anzeigen möchten, die während der Produktion aggregiert wurden, müssen Sie sie separat kopieren und öffnen.

Impressionen

Heutzutage sind die Programmierhürden dramatisch gesunken, daher denke ich, dass Nicht-Programmierer mehr Möglichkeiten haben werden, ihre Arbeit mithilfe der Programmierung zu automatisieren. Zu diesem Zeitpunkt ist die Kommunikationsfähigkeit, um die Bedürfnisse des Feldes richtig zu erfassen, und die Einstellung, "Werkzeuge zu schaffen, die im Feld verwendet werden können" </ b>, wichtiger als Programmierkenntnisse.

Recommended Posts