Points à garder à l'esprit lors de la création d'outils automatisés pour l'atelier en Python

Motivation pour cet article

L'année dernière, j'ai changé de travail d'ingénieur de production à une entreprise d'analyse de données, et j'ai plus d'opportunités d'écrire Python. Actuellement, je travaille sur un projet de développement d'un outil de prétraitement pour l'apprentissage automatique. Pendant ce temps, en repensant à mon temps en tant qu'ingénieur de production, je pensais que diverses tâches pouvaient être automatisées </ b>. Sur la base de la connaissance de Python acquise après avoir changé de poste et de la connaissance de l'ère de l'ingénieur de production, je décrirai le matériau qui peut être utilisé lorsque vous travaillez à nouveau sur le site de fabrication. J'espère que cela sera utile pour ceux qui font face à des besoins similaires. Cet article a l'air bien si vous combinez les technologies existantes! Tout d'abord, je tiens à souligner qu'il n'y a rien de nouveau techniquement.

Contenu à automatiser

Lorsque je travaillais en tant qu'ingénieur de production, j'avais la tâche de collecter les données issues du processus en fin de journée </ b>. Enregistrez les journaux de l'équipement de fabrication et les résultats d'inspection pour chaque produit sous forme de fichier csv, et agrégez-les à la fin de la journée pour vérifier le taux de progression et le taux de défauts de la journée. Dans le processus en charge, comme le montre la figure ci-dessous, les spécifications étaient telles que quatre csv étaient sortis chaque fois qu'un produit était fabriqué.

◎ Journal des valeurs de réglage de l'équipement de fabrication ◎ Journal d'état des équipements de fabrication ◎ Données de forme du produit ◎ Résultat du jugement calculé à partir des données de forme

La partie permettant de juger la forme a été réalisée en Python, mais c'est ce que j'ai enseigné à la méthode de jugement et demandé au programmeur du service informatique de la créer. Les quatre csv ci-dessus ont été regroupés dans un seul fichier Excel chaque jour. En d'autres termes, il s'agissait d'une collection de 4 fichiers de production. Si nous commençons à assembler à partir de la fin de la production ce jour-là, il sera terminé la nuit, nous avons donc demandé aux fabricants de se rassembler entre les productions. Bien sûr, ce travail n’a pas besoin d’être fait par qui que ce soit. </ b> on m'a demandé de le faire dans le délai, mais je regrette de ne pas avoir pris le temps car ce n'est pas un travail qui ajoute de la valeur au produit. J'aurais dû avoir ce temps consacré à des idées pour réduire les défauts (= travail que seuls les gens peuvent faire). </ b> Maintenant, je vais vous montrer comment automatiser cette tâche avec vos connaissances actuelles.

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

Points à garder à l'esprit lors de la création d'outils d'automatisation

Il y a quelques points à garder à l'esprit pour créer des outils automatisés en Python et les utiliser dans l'atelier de fabrication. En principe, on suppose que l'ingénieur de production (= moi) crée l'outil et que le fabricant (= la personne qui fabrique réellement le produit) l'utilise.

◎ Faites-en un formulaire qui peut être exécuté par des personnes n'ayant aucune connaissance en programmation </ b>

Il est préférable de supposer que peu de personnes, y compris les ingénieurs de production, ont des connaissances en programmation dans l'atelier de fabrication. Passez l'outil sous une forme qui peut être exécutée d'un simple clic. C'est également mieux du point de vue de ne pas avoir à prendre la peine du fabricant. De plus, si le comportement de l'outil dépend du paquet Python, il est déraisonnable de demander "Veuillez mettre 0.25.1 pour les pandas et 3.0.0 pour openpyxl ...". Il doit être transmis sous une forme qui peut être exécutée sans créer d'environnement.

◎ N'écrivez pas les éléments susceptibles de changer quotidiennement dans le script Python </ b>

Par exemple, nous pouvons changer la destination de stockage des données pour la commodité du site. Dans ce cas, si vous écrivez le chemin du fichier dans le script Python, vous devrez réécrire le script Python à chaque fois qu'il y a un changement. S'il n'y a personne capable de lire et d'écrire Python, il ne sera pas possible de s'en occuper (= il sera appelé sur le site à chaque fois).

◎ Vous devez penser que vous ne pouvez pas installer le package en utilisant pip sur le PC sur le terrain </ b>

Selon les règles de l'entreprise ou de l'usine, le réseau du site de fabrication est souvent fermé à l'intérieur de la ligne ou à l'intérieur de l'usine et non connecté à l'extérieur. Étant donné que les conditions de fabrication et les données acquises sont des questions confidentielles de premier ordre du fabricant, je pense que dans la plupart des cas, le réseau est physiquement coupé de l'extérieur afin qu'il ne soit pas divulgué vers l'extérieur. Même dans le cas que je fais maintenant, je vais à l'usine du client pour voir les données.

◎ Rendre Microsoft Office utilisable sans problème pendant le fonctionnement </ b>

Si Office est installé sur le PC sur le site de fabrication, il est nécessaire qu'Office puisse être utilisé (= ne se fige pas) sans problème, même lorsque l'outil est en cours d'exécution. En effet, le fabricant peut écrire des rapports quotidiens dans Excel ou vérifier Excel, qui est une collection de données antérieures, en utilisant le même PC. Si vous ne pouvez pas utiliser Office pendant le processus, votre réputation diminuera fortement (rires).

◎ Se compose d'OSS uniquement </ b>

Étant donné que l'ingénieur de production (non-programmeur) crée lui-même l'outil d'automatisation, l'utilisation d'OSS est une condition préalable. De plus, lors de la livraison d'un produit à un client, il peut être nécessaire de le créer uniquement avec OSS car le service de fabrication et des systèmes d'information du client souhaite le maintenir autant que possible après la remise de l'outil.

◎ Après ça, j'écoute souvent les voix du site (= constructeur) </ b>

J'ai écrit quelque chose qui comprend tout (rires), mais comme les demandes diffèrent selon chaque site, écoutons attentivement avant de commencer la création. Par exemple, dans l'exemple d'agrégation des fichiers csv ci-dessus,

● Traitement pour chaque produit (c'est-à-dire que la consolidation est terminée en même temps que la production du jour est terminée) ● Traitement par lots une fois la production terminée

Il existe deux modèles possibles. Nous aimerions connaître ces spécifications détaillées à l'avance pour maximiser la convivialité. Cette fois, nous expliquerons en prenant comme exemple le «traitement pour chaque produit».

(Remarque) Si le résultat du jugement est NG en permanence, il est nécessaire d'arrêter la ligne de toute urgence en tant qu'anomalie du processus, de sorte que le jugement lui-même est essentiellement effectué pour chaque produit.

Technologie pouvant être utilisée pour la fabrication d'outils

Les technologies qui peuvent être utilisées pour chacun des éléments ci-dessus sont répertoriées.

Points à retenir contre-mesure Bibliothèque à utiliser
Faites-en un formulaire qui peut être exécuté par des personnes n'ayant aucune connaissance en programmation ・ Rendre le script Python exe
・ Les outils sont fournis sous forme de fichiers batch
PyInstaller
N'écrivez pas d'éléments susceptibles de changer quotidiennement dans les scripts Python Les éléments susceptibles de changer sont des arguments de ligne de commande (sys).Utilisez argv) ou format pour lire à partir du fichier de paramètres sys
Vous devez penser que vous ne pouvez pas installer le package sur votre PC sur le terrain en utilisant pip Transformez un script Python en un exe PyInstaller
Rendre Microsoft Office utilisable sans problèmes pendant le fonctionnement (Exemple) Mesures pour une utilisation stable d'Excel pendant le traitement
Si vous souhaitez travailler avec Excel pendant une longue période (par exemple, écrire beaucoup de texte), il est préférable d'utiliser VBScript au lieu de Python.
openpyxl
(Lieux où le temps de traitement est court)
Assurez-vous que le traitement est terminé lorsque la production est terminée (sur demande) Processus par produit watchdog

Laissez-moi vous expliquer un peu plus en détail. ◎ Correspondance pour "en faire un formulaire pouvant être exécuté par des personnes n'ayant aucune connaissance en programmation" </ b> Ceci est possible en exécutant le script Python créé à l'aide d'une bibliothèque appelée PyInstaller. En convertissant en exe, il n'est pas nécessaire de créer un environnement sur le site de fabrication (une image de l'environnement étant incluse dans l'exe). De plus, en fournissant l'exe sous forme de fichier batch, l'utilisateur peut utiliser l'outil en double-cliquant simplement sur le fichier batch.

Le site que j'ai utilisé comme référence ● Créer un fichier exe avec PyInstallerCréer un fichier de commandes

◎ Correspondance avec "Ne pas écrire d'éléments susceptibles de changer quotidiennement dans les scripts Python" </ b> Pour les éléments susceptibles de changer, utilisez des arguments de ligne de commande (décrits dans le fichier de commandes) ou créez un fichier de paramètres distinct et lisez-le à partir de là. Ce faisant, même s'il y a une partie que vous souhaitez modifier dans le champ, vous pouvez simplement réécrire le fichier de commandes avec un éditeur de texte, afin que même les personnes qui ne connaissent pas Python puissent le gérer.

Le site que j'ai utilisé comme référence Comment gérer les arguments de ligne de commande en Python

◎ Contre-mesures pour "Il vaut mieux penser que vous ne pouvez pas installer le package en utilisant pip sur le PC sur le terrain" </ b> Identique à la première mesure ci-dessus

◎ Prise en charge de "rendre Microsoft Office utilisable sans problème pendant le fonctionnement" </ b> Lorsque vous travaillez avec des fichiers Excel en Python, je pense que la norme est d'utiliser une bibliothèque appelée openpyxl. Cependant, dans le passé, en travaillant sur l'agrégation de plusieurs feuilles à l'aide d'openpyxl, je ne pouvais pas utiliser un autre fichier Excel qui n'avait rien à voir avec lui (je n'ai pas trouvé la cause). Donc, cette fois, j'ai décidé d'utiliser VBScript au lieu de Python pour la partie où csv est agrégé. C'est une bonne idée de s'assurer que Microsoft Office peut être utilisé sans problème pendant que l'outil est en cours d'exécution, pas seulement Excel.

◎ Mesures pour «s'assurer que le traitement est terminé lorsque la production est terminée» </ b> Nous surveillerons le dossier dans lequel les données de forme sont stockées avec une bibliothèque appelée watchdog et commencerons le traitement lorsque les données sont stockées. Ce faisant, l'utilisateur n'a besoin que de démarrer l'outil (= double-cliquer sur le fichier batch) avant le début de la production et d'arrêter le fichier batch (= Ctrl + C) lorsque la production du jour est terminée.

Le site que j'ai utilisé comme référence Exécution de la commande déclenchée par la mise à jour du fichier (version python)

En plus des sites ci-dessus Je me suis référé à "Laisser Python faire les choses ennuyeuses, la programmation de traitement automatisé que les non-programmeurs peuvent faire".

En fait, écrivez le code

Ci-dessous, sur la base des points ci-dessus, le code qui regroupe automatiquement plusieurs fichiers csv en un seul fichier Excel est décrit. S'il vous plaît, pensez-y comme un mémo après cela. ..

Contenu de l'opération

J'ai pensé au traitement comme indiqué dans la figure ci-dessous. Pensez au produit comme allant de gauche à droite et au processus allant de haut en bas.

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

Il y a 5 fichiers et 3 scripts.

Fichier: ◎ Sortie du journal des valeurs de réglage (csv) de l'équipement de fabrication ◎ Sortie du journal d'état (csv) de l'équipement de fabrication ◎ Sortie des données de forme (csv) de la machine de mesure de forme ◎ Résultat du jugement (csv) calculé sur la base des données de forme ◎ Excel qui agrège 4 csv

Ces fichiers sont enregistrés dans des dossiers séparés.

scénario: ◎integration.py 【rôle】 Contrôlez le flux de traitement 【mouvement】 -Surveiller le dossier dans lequel les données de forme sont enregistrées et juger de la forme lorsqu'un fichier est généré. (= Exécuter ShapeJudgment.py) -Une fois le résultat du jugement enregistré, exécutez excel_merge.vbs qui agrège csv. ・ Après l'agrégation, déplacez csv vers "Dossier agrégé"

◎ShapeJudgment.py 【rôle】 Jugement OK / NG basé sur les données de forme 【mouvement】 Lire les données de forme et enregistrer le résultat du jugement (Note) Le résultat du jugement étant directement lié à la qualité, le code créé par l'expert du service des systèmes d'information est utilisé.

◎excel_merge.vbs 【rôle】 Regroupez les fichiers csv dans un seul fichier Excel 【mouvement】 Lisez le fichier csv et ajoutez-le en tant que feuille de fichier Excel    Les arguments de ligne de commande du fichier de commandes finalement fourni à l'utilisateur sont les suivants. C'est compliqué, mais ...

L'endroit où vous exécutez ShapeJudgment.py dans integration.py, en passant sys.argv [1], sys.argv [4], sys.argv [5] comme arguments de ligne de commande, est particulièrement déroutant. Dans ShapeJudgment.py, ils correspondent à sys.argv [0], sys.argv [1], sys.argv [2]. En utilisant les arguments de ligne de commande , vous n'avez pas besoin d'écrire un chemin spécifique dans votre script Python, et si vous souhaitez changer le chemin, vous n'avez qu'à modifier le fichier de commandes. </ b>

Contenu Position dans le fichier batch integration.Correspondance en py ShapeJudgment.Correspondance en py
integration.chemin exe
(integration.py converti en exe)
0ème argument sys.argv[0] -
ShapeJudgment.chemin exe (ShapeJudgment).py converti en exe) 1er argument sys.argv[1] sys.argv[0]
Dans le dossier où est enregistré le "journal des valeurs de réglage"
chemin
2ème argument sys.argv[2] -
Dans le dossier où est enregistré le "journal d'état de l'appareil"
chemin
3e argument sys.argv[3] -
Dans le dossier où les "données de forme" sont enregistrées
chemin
4ème argument sys.argv[4] sys.argv[1]
Le chemin du dossier dans lequel le "résultat du jugement" est enregistré 5ème argument sys.argv[5] sys.argv[2]
Chemin vers le dossier dans lequel le "fichier Excel agrégé" est enregistré 6ème argument sys.argv[6] -
excel_merge.chemin vbs 7ème argument sys.argv[7] -

Le flux de traitement est le suivant. 10 étapes sont effectuées pour chaque produit. Nous partirons de l'hypothèse que le temps nécessaire pour 10 étapes est suffisamment court pour le temps de contact (intervalle d'écoulement) du produit. Si le temps de contact est court, le prochain produit coulera pendant le traitement, je pense donc que vous devez concevoir une méthode de traitement. </ b>

commande un événement Destination
(Argument de ligne de commande de fichier batch)
0 integration.avec py
Commencez à surveiller le dossier dans lequel les données de forme sont enregistrées
1 Les produits entrent dans le processus
2 Le produit est traité par l'équipement de fabrication
3 Le journal des valeurs de réglage est enregistré sys.argv[2]
Le journal d'état de l'appareil est enregistré sys.argv[3]
4 Mesurer le produit avec une machine à mesurer la forme
5 Les données de forme sont enregistrées sys.argv[4]
6 integration.Jugement de forme de py.py est exécuté
7 Le résultat du jugement est enregistré sys.argv[5]
8 integration.De py
excel_merge.vbs est exécuté
9 Le fichier Excel agrégé
Enregistré
sys.argv[6]
10 integration.avec py
Déplacer le csv agrégé vers un autre dossier
Dans le dossier parent de chaque argument de ligne de commande
11 Retour à 1
(Le prochain produit coulera)

Exemple de code

Voici le code qui a confirmé le mouvement.

Environnement d'exécution Système d'exploitation: Windows 10 Home version 1909 Python  3.7.6 watchdog 0.10.2 openpyxl  3.0.0

■ Script qui contrôle le flux de traitement </ b>

integration.py


#Importer les bibliothèques requises
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 et exceller_merge.Classe qui exécute vbs
class Execute(FileSystemEventHandler):
    def __init__(self, path):
        self.path = path

    def _run_command(self):

        '''
ShapeJudgment sur l'argument de ligne de commande.chemin py (sys.argv[1]),
Le chemin du dossier dans lequel les "données de forme" sont enregistrées (sys.argv[4]),
Le chemin du dossier dans lequel le "résultat du jugement" est enregistré (sys.argv[5])
Spécifiez ShapeJudgment.Exécutez exe
        '''
        command = [sys.argv[1],sys.argv[4],sys.argv[5]]
        subprocess.run(command, shell=True)

        '''
Excel agrégé (sys.argv[6]"Date +_S'il n'y a pas de nom "agrégé")
Généralement fabriqué lorsque le premier produit de la journée coule
        '''
        if not os.path.isfile(
                os.path.join(sys.argv[6], datetime.date.today().strftime('%Y-%m-%d') + "_Agrégation.xlsx")):
            wb = openpyxl.Workbook()
            wb.save(os.path.join(sys.argv[6], datetime.date.today().strftime('%Y-%m-%d')) + "_Agrégation.xlsx")

        '''
Chaque csv (sys.argv[2] ~ sys.argv[5]) Pour exécuter VBScript
Excel agrégé est sys.argv[6]"Date +_Enregistré comme "agrégat"
        '''
        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'))+"_Agrégation.xlsx"]

        subprocess.run(command, shell = True)
        
        '''
Emplacement de stockage de chaque système csv.argv[2] ~ sys.argv[5]Créer si le parent n'a pas de dossier «agrégé»
Et déplacez le csv qui a été agrégé dans le dossier «agrégé»
S'il y a déjà un fichier du même nom dans le dossier "Agrégé", transmettez-le
        '''
        for i in range(2, 6):
            if not os.path.isdir(os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Agrégé")):
                os.mkdir(os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Agrégé"))
            try:
                shutil.move(sys.argv[i] + "\\" + os.listdir(sys.argv[i])[0],
                            os.path.join(pathlib.Path(sys.argv[i]).parents[0], "Agrégé"))
            except shutil.Error:
                pass

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

'''
Données de forme du dispositif d'inspection(csv)Fonction pour surveiller le dossier où
La méthode de la classe Execute est exécutée lorsqu'un nouveau fichier est créé
La cible de surveillance est le dossier (sys) dans lequel les «données de forme» sont enregistrées..argv[4])
Ctrl+Continuez à surveiller jusqu'à ce que C soit appuyé
'''
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()

■ Script pour enregistrer le jugement OK / NG basé sur les données de forme </ b>

ShapeJudgment.py


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

#Une fonction qui enregistre le résultat du jugement en fonction des données de forme
def main():

    '''
Lire les données de forme (en supposant qu'il n'y a toujours qu'un seul fichier csv à la fois)
Passer s'il n'y a pas de fichier
    sys.argv[1]Est le chemin du dossier dans lequel les données de forme sont enregistrées
    '''
    try:
        shape_df = pd.read_csv(os.path.join(sys.argv[1] , glob.glob("*.csv")[0]))
    except IndexError:
        pass
    else:

        '''
L'algorithme de jugement fonctionne ...
C'est une partie qui est directement liée à la qualité, donc après avoir spécifié la méthode de jugement
Faire rédiger par un expert du service informatique
        '''

        ''' 
résultat du jugement(judgment_df)sauvegarder
        sys.argv[2]Est le chemin du dossier pour enregistrer le résultat du jugement
Le nom du fichier est "Résultat du jugement"_Données de forme.csv」
        '''
        judgment_df.to_csv(os.path.join(sys.argv[2], "résultat du jugement_"+glob.glob("*.csv")[0]))

if __name__ == '__main__':
    main()

■ Un script qui regroupe quatre fichiers csv en un seul fichier Excel </ b>

excel_merge.vbs


'--------------------------------------------------------------------------------------
'
'Combinez les fichiers csv sortis de l'appareil dans un fichier Excel pour chaque feuille
'			
'	
'Attention N'ouvrez pas le fichier Excel à agréger lors de l'exécution du script.
'Déverrouillez les fichiers Excel à agréger avant d'exécuter le script (pas en lecture seule).
'Ne placez rien d'autre que le fichier csv dans le dossier de destination de sortie de l'équipement de fabrication et de l'équipement d'inspection.
'Si ce script se termine anormalement, arrêtez manuellement le processus Excel.
'        
'
'--------------------------------------------------------------------------------------
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) :Journal des valeurs de réglage de l'équipement de fabrication(csv)Chemin du dossier
'sys.argv[3] = WScript.Arguments(1) :Journal d'état de l'équipement de fabrication(csv)Chemin du dossier
'sys.argv[4] = WScript.Arguments(2) :Données de forme du dispositif d'inspection(csv)Chemin du dossier
'sys.argv[5] = WScript.Arguments(3) :Résultat du jugement du dispositif d'inspection(csv)Chemin du dossier
'sys.argv[6] = WScript.Arguments(4) :Le chemin du fichier Excel qui agrège le csv ci-dessus

'Ouvrez un objet Excel
Set Excel = CreateObject("Excel.Application")

'Paramètres d'affichage d'Excel (si ce paramètre est défini, Excel ne s'ouvrira ni ne se fermera pendant le traitement)
Excel.Visible = False
Excel.DisplayAlerts = False
Excel.ScreenUpdating = False


 'Charger le classeur à agréger
Set merge_Workbook = Excel.Workbooks.Open(WScript.Arguments(4))


'Boucle par fichier
For i = 0 To 3 'Boucle par le nombre de fichiers csv à agréger

		'Obtenez une liste de fichiers dans chaque dossier (en supposant qu'il n'y ait qu'un seul fichier, mais pour le moment)
		'Créer un objet qui gère le système de fichiers
		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)
                'Obtenir un objet de feuille(En supposant qu'il n'y a qu'une seule feuille dans le fichier source de la copie)
                Set objSheet = objWorkbook.Sheets(1)
                'Obtenir un objet de feuille(En supposant qu'il n'y a qu'une seule feuille dans le fichier source de la copie)
                objSheet.Copy ,merge_Workbook.Sheets(merge_Workbook.Sheets.Count)
                'Le nom de la feuille est le nom de fichier du fichier csv (".csv"Supprimer)
                'merge_Workbook.Sheets(merge_Workbook.Sheets.Count).Name = replace(wkFile.Name,".csv","")
                'Fermer le fichier csv
            	objWorkbook.Close
            	Set objWorkbook = Nothing
        Next

Next

'Supprimer la feuille Sheet1 uniquement la première fois
If merge_Workbook.Sheets.Count < 6 Then
		'Supprimer en spécifiant Sheet1
		merge_Workbook.Sheets(1).Delete
End If

'Définir la première feuille comme feuille active
merge_Workbook.Sheets(1).Activate


'Écraser et enregistrer le classeur à agréger
merge_Workbook.Save

'Fermer le classeur à agréger
merge_Workbook.Close
Set merge_Workbook = Nothing

'Quitter Excel
Excel.ScreenUpdating = True
Excel.Quit
  
Set Excel = Nothing   

Si vous exécutez le code ci-dessus, les fichiers csv (4 x volume de production) seront regroupés dans un fichier Excel. Cette façon de résumer n'est pas très cool, mais ce n'est qu'un exemple (rires)

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

Comment créer un fichier batch

Ensuite, je vais vous expliquer comment créer un fichier batch. Le fichier batch est créé en deux étapes.

  1. Transformez un script Python en un exe
  2. Créez un fichier de commandes avec différents chemins comme arguments de ligne de commande

Tout d'abord, c'est la conversion exe de 1., mais elle se fait en utilisant le Pyinstaller mentionné ci-dessus. À l'invite de commandes, accédez au répertoire où se trouvent integration.py et ShapeJudgment.py, puis exécutez la commande suivante.

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

Puis

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

S'affiche, un dossier appelé dist est créé dans le même répertoire. Integration.py et ShapeJudgment.py ont été exécutés respectivement dans ce dossier. Contient integration.exe et ShapeJudgment.exe.

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

Ensuite, créez le fichier de commandes dans 2. Écrivez le contenu suivant dans un éditeur de texte tel que le Bloc-notes et enregistrez-le avec l'extension ".bat". La première ligne est un commentaire. Veuillez noter qu'il y a un espace demi-largeur entre chaque passage. De plus, ^ (carlet) est un symbole requis pour les sauts de ligne.

Dossier d'exécution.bat


@rem integration.fichier bat exe à exécuter
"integration.chemin exe" ^
 "ShapeJudgment.chemin exe"^
 "Chemin du dossier dans lequel le "journal des valeurs de réglage" est enregistré"^
 "Chemin d'accès au dossier dans lequel le "journal d'état de l'appareil" est enregistré"^
 "Chemin du dossier dans lequel les "données de forme" sont enregistrées"^
 "Le chemin du dossier dans lequel le "résultat du jugement" est enregistré"^
 "Chemin vers le dossier dans lequel le "fichier Excel agrégé" est enregistré"^
 "excel_merge.chemin vbs"

↓ Exemple de description
@rem integration.fichier bat exe à exécuter
"C:\Users\PycharmProjects\untitled2\dist\integration.exe" ^
"C:\Users\PycharmProjects\untitled2\dist\ShapeJudgment.exe"^
 "C:\Users\input\Journal de l'équipement de fabrication\Journal des valeurs de réglage de l'équipement de fabrication"^
 "C:\Users\input\Journal de l'équipement de fabrication\Journal d'état de l'équipement de fabrication"^
 "C:\Users\input\Journal du dispositif d'inspection\Données de forme du dispositif d'inspection"^
 "C:\Users\input\Journal du dispositif d'inspection\Résultat du jugement du dispositif d'inspection"^
 "C:\Users\output\Fichier Excel agrégé"^
 "C:\Users\VBS\excel_merge.vbs"

Les 3ème à 10ème lignes correspondent respectivement à sys.argv [1] ~ sys.argv [7] écrit dans integration.py.

Après tout, que dois-je mettre dans le PC sur le site de fabrication?

Divers fichiers sont sortis, mais les quatre fichiers suivants sont finalement mis dans le PC sur le site de fabrication. Bien entendu, modifiez le chemin écrit dans le fichier batch en fonction du PC du site de fabrication.

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

Demandez au fabricant de double-cliquer sur "fichier d'exécution.bat" avant le début de la production ce jour-là. Ensuite, chaque fois que le produit circule, les quatre fichiers csv sont automatiquement agrégés en un seul fichier Excel. Une fois la production terminée, appuyez sur "Ctrl + C" pour arrêter le fichier de commandes. À ce stade, l'agrégation dans le fichier Excel est terminée. </ b>

Le processus ci-dessus est un exemple, Il semble que la bibliothèque décrite ci-dessus puisse être utilisée pour diverses automatisations nécessaires sur le site de fabrication.

point important

Il y a quelques points à noter à propos de la méthode ci-dessus, je vais donc les décrire ici.

■ Le fichier exe peut devenir énorme Dans la conversion exe à l'aide de Pyinstaller, toutes les bibliothèques de l'environnement Python au moment de la création seront importées. Par conséquent, la taille du fichier devient énorme et le fonctionnement de l'exe peut ralentir. Pour éviter cela, il est préférable d'en faire un exe, sauf pour les bibliothèques inutilisées. L'article suivant sera utile pour savoir comment convertir en exe, sauf pour une bibliothèque spécifique. La taille d'un programme construit en Python a été gâchée lors de sa conversion en exe avec PyInstaller [juin 2019, solution ajoutée]

■ Impossible de vérifier les fichiers Excel agrégés pendant la production Si vous ouvrez un fichier Excel pendant l'opération d'écriture, une erreur d'écriture se produit. Donc, si vous souhaitez voir les fichiers Excel qui ont été agrégés pendant la production, vous devez les copier séparément et les ouvrir.

Impressions

De nos jours, les obstacles à la programmation ont considérablement diminué, donc je pense qu'il y aura plus d'opportunités pour les non-programmeurs d'utiliser la programmation pour automatiser leur travail. À ce moment-là, ce qui est plus important que les compétences en programmation peut être la capacité de communication à appréhender correctement les besoins du terrain et l’attitude à créer «des outils utilisables sur le terrain» </ b>.

Recommended Posts