Projet Recuperation de nombre de cycle sur presses

Vous souhaitez développer un projet mais vous manquez de temps, de compétences ? Présentez votre projet ici pour trouver des participants...

Modérateur : Francois

Répondre
ThorGnole63
Messages : 2
Enregistré le : dim. 29 avr. 2018 18:58

Projet Recuperation de nombre de cycle sur presses

Message par ThorGnole63 » ven. 25 mai 2018 11:09

Bonjour je suis en train de mettre en place un systeme de recuperation de nombre de cycle sur presse en vu de suivre la production.

Le principe : Les presses renvoie un top fin de cycle au raspberry, le raspberry enregistre dans un fichier par presse le top (un "1) et horodate ledit top. Le fichier les sauvegardé toutes les 5 minutes. A cause de la longueur d'installation, je n'envoie pas directement le 3v3 sur les presses mais du 12V et je recupere le top en 3v3 par un relais a proximité du raspberry. Le top du relais est exploité par l'intermédiaire d'interruption programme (déclenchement sur GPIO.RISING). 1 interuption par presse (16 presses). Proframmation en python.

Un top me declenche l'interruption et cette interruption horodate et ouvre/ferme le fichier correspondant a la presse si l'archivage n'est pas en cours.
Pour l'archivage toutes les 5 minutes, j'ai mis en place un thread dédié comme ca on s'en occupe plus. (ca marche impeccable)

Par contre j'ai des problèmes de rebonds récurrents mais intermitents, c'est à dire pas à chaque fn de cycle , sur la presse p12, j'enregistre le top et 6secondes apres j'ai un deuxieme top alors qu'un cycle moyen est d'environ 50secondes. J'ai vérifié en mettant d'autres relais plus gros et donc moins sensibles a des micro coupures, les relais restent collés, MAIS les rebonds apparaissent quand meme. J'ai mis dans les interruptions une mémoire qui interdit de refaire le travail tant que l'entree correspondantes n'est pas repassée a 0. Ce qui vérifie que l'entrée correspondante repasse bien par 0 vu que l'interruption est relancée en intégralitée : du coup j'ai 2 questions:

- Serait ce un faux contact intermittent sur l'entree du raspberry ? Que prendre pour connecter de maniere fiable le connecteur GPIO ? (cable en nappe + bornier ou Dupond ?) (j'ai virée une nappe pour du Dupond et ca à amélioré un peu)
- Y a t il un nombre d'interruption maxi en Python ? Je vous envoie le code par la meme occasion.

grosso modo j'obtiens ca sur le moniteur du Thonny IDE: (pas fait de capture d'ecran mais ca ressemble a ca)

p122018-05-25 11:05:30
p172018-05-25 11:05:34
p192018-05-25 11:06:08
p122018-05-25 11:06:55 <---- ok tps de cycle environ 25s
p122018-05-25 11:07:00 <---- rebond apres 5s
p192018-05-25 11:07:03
...etc...


Merci de m'avoir lu malgré la longueur.

Code : Tout sélectionner

#!/usr/bin/python

from tkinter import *
from threading import Thread


import RPi.GPIO as GPIO
import time
import datetime
import smtplib
import threading
import os

from time import strftime

Encours_Archivage=0
test12 = 0
test04 = 0
test17 = 0
test19 = 0

def Tempo_Archivage(count=1):
    
#    for x in range(count):
     while 1:   
        time.sleep(300)
        Archivage()
       

def Archivage():
    Encours_Archivage=1
    print("Archivage")
    date = strftime('%y%m%d%H%M')
    os.rename('/home/pi/Partage/p02.txt','/home/pi/Partage/p02_' + date + '.txt')
    os.rename('/home/pi/Partage/p04.txt','/home/pi/Partage/p04_' + date + '.txt')
    os.rename('/home/pi/Partage/p08.txt','/home/pi/Partage/p08_' + date + '.txt')
    os.rename('/home/pi/Partage/p09.txt','/home/pi/Partage/p09_' + date + '.txt')
    os.rename('/home/pi/Partage/p10.txt','/home/pi/Partage/p10_' + date + '.txt')
    os.rename('/home/pi/Partage/p12.txt','/home/pi/Partage/p12_' + date + '.txt')
    os.rename('/home/pi/Partage/p14.txt','/home/pi/Partage/p14_' + date + '.txt')
    os.rename('/home/pi/Partage/p15.txt','/home/pi/Partage/p15_' + date + '.txt')
    os.rename('/home/pi/Partage/p17.txt','/home/pi/Partage/p17_' + date + '.txt')
    os.rename('/home/pi/Partage/p18.txt','/home/pi/Partage/p18_' + date + '.txt')
    os.rename('/home/pi/Partage/p19.txt','/home/pi/Partage/p19_' + date + '.txt')
    os.rename('/home/pi/Partage/p20.txt','/home/pi/Partage/p20_' + date + '.txt')

    fichier= open("/home/pi/Partage/p02.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p04.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p08.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p09.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p10.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p12.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p14.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p15.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p17.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p18.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p19.txt" , "a")
    fichier.close()
    fichier= open("/home/pi/Partage/p20.txt" , "a")
    fichier.close()
    print("Fin Archivage")
    Encours_Archivage=0
	


def cb_p02(channel):
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p02" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p02.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()


def cb_p04(channel):
    global test04
    global Encours_Archivage
    if Encours_Archivage ==0:
        if test04 ==0:
            now = datetime.datetime.now()
            heure = now.strftime('%Y-%m-%d %H:%M:%S')
            s="p04" + heure
            print(s)
            fwrite= open('/home/pi/Partage/p04.txt','a')
            fwrite.write(heure)
            fwrite.write("\t1\n")
            fwrite.close()
            test04=1
 
def cb_p08(channel):
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p08" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p08.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()
  
def cb_p09(channel): 
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p09" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p09.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()
  
def cb_p10(channel):  
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p10" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p10.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()

def cb_p12(channel):
    global test12
    global Encours_Archivage
    if Encours_Archivage ==0:
        if test12 == 0:
            now = datetime.datetime.now()
            heure = now.strftime('%Y-%m-%d %H:%M:%S')
            s="p12" + heure
            print(s)
            fwrite= open('/home/pi/Partage/p12.txt','a')
            fwrite.write(heure)
            fwrite.write("\t1\n")
            fwrite.close()
            test12 = 1

def cb_p14(channel):  
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p14" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p14.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()  

def cb_p15(channel): 
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p15" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p15.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()  
      
def cb_p17(channel):
    global test17
    global Encours_Archivage
    if Encours_Archivage ==0:
        now = datetime.datetime.now()
        heure = now.strftime('%Y-%m-%d %H:%M:%S')
        s="p17" + heure
        print(s)
        fwrite= open('/home/pi/Partage/p17.txt','a')
        fwrite.write(heure)
        fwrite.write("\t1\n")
        fwrite.close()
        test17 = 1
  
def cb_p18(channel):  
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p18" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p18.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()  

def cb_p19(channel):
    global test19
    global Encours_Archivage
    if Encours_Archivage ==0:
        now = datetime.datetime.now()
        heure = now.strftime('%Y-%m-%d %H:%M:%S')
        s="p19" + heure
        print(s)
        fwrite= open('/home/pi/Partage/p19.txt','a')
        fwrite.write(heure)
        fwrite.write("\t1\n")
        fwrite.close()
        test19 = 1
  
def cb_p20(channel):
    now = datetime.datetime.now()
    heure = now.strftime('%Y-%m-%d %H:%M:%S')
    s="p20" + heure
    print(s)
    fwrite= open('/home/pi/Partage/p20.txt','a')
    fwrite.write(heure)
    fwrite.write("\t1\n")
    fwrite.close()
    
 
#mode numerotation brochage : BCM = num electronique carte ou BOARD = num serigraphie connecteur 
GPIO.setmode(GPIO.BOARD)

#initialiser broches
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(21, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(22, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

#lire etat entree 
#callback selon n° presses
# presse remise dans le bon ordre le 21/05/2018

#GPIO.add_event_detect(11, GPIO.RISING, callback=cb_p02, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(12, GPIO.RISING, callback=cb_p04, bouncetime=200)
time.sleep (0.1)
#GPIO.add_event_detect(13, GPIO.RISING, callback=cb_p08, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(15, GPIO.RISING, callback=cb_p09, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(16, GPIO.RISING, callback=cb_p10, bouncetime=200)                      
time.sleep (0.1)
GPIO.add_event_detect(18, GPIO.RISING, callback=cb_p20, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(19, GPIO.RISING, callback=cb_p15, bouncetime=200)
time.sleep (0.1)
#GPIO.add_event_detect(21, GPIO.RISING, callback=cb_p14, bouncetime=200)
#time.sleep (0.1)
GPIO.add_event_detect(22, GPIO.RISING, callback=cb_p17, bouncetime=3000)
time.sleep (0.1)
GPIO.add_event_detect(23, GPIO.RISING, callback=cb_p18, bouncetime=200)
time.sleep (0.1)
GPIO.add_event_detect(24, GPIO.RISING, callback=cb_p19, bouncetime=3000)
time.sleep (0.1)
GPIO.add_event_detect(26, GPIO.RISING, callback=cb_p12, bouncetime=3000)
time.sleep (0.1)

thread =Thread(target=Tempo_Archivage)
thread.start()

while 1:
     
    if GPIO.input(22) ==0:
        test17 = 0
    
    if GPIO.input(24) ==0:
        test19 = 0
    
    if GPIO.input(26) ==0:
        test12 = 0

    if GPIO.input(12) ==0:
        test04 = 0

Répondre

Retourner vers « Projets »