Advertisement
thorium90

ThreadSerialInput.py

Nov 3rd, 2011
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.82 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. ##########################################################################
  3. ##                          PYTHON SOURCES                              ##
  4. ##########################################################################
  5.  
  6. #   ___|  _)  | _)       _)                         ___|                    
  7. # \___ \   |  |  |   __|  |  |   |  __ `__ \       |       _ \    __|  __ \  
  8. #       |  |  |  |  (     |  |   |  |   |   |      |      (   |  |     |   |
  9. # _____/  _| _| _| \___| _| \__,_| _|  _|  _|     \____| \___/  _|     .__/  
  10. #                                                                     _|  
  11. #Code source libre de droit. Si vous utilisez mon code, merci à vous d'en préciser la source.
  12.  
  13. #@Date : 03/11/2011
  14. #@Auteur : Silicium Corp
  15.  
  16.  
  17. import serial          
  18. import time
  19. from threading import Thread
  20. import Queue
  21.  
  22. class ThreadSerialInput(Thread):                                        #Class de gestion d'un thread d'envoie de données sur le port série
  23.     isActif = False                                                     #permet de savoir si le thread est actif
  24.     protocoleSerie = 0                                                  #initialise la variable qui va contenir le protocole serie     
  25.     shareStack = 0
  26. #===============================================================
  27.     def __init__(self, stackToShare, serialProtocol) :                  #Constructeur du thread : attend un objet de type Queue() et un autre de type serial.Seial()
  28.         try :
  29.             self.shareStack = stackToShare                              #Récupération de l'instance de la stack (Input Serial Stack)
  30.             self.protocoleSerie = serialProtocol                        #Récupération de l'instance de la session Serial
  31.             Thread.__init__(self)                                       #Appel du construsteur propre à l'objet Thread
  32.         except BaseException as err :                                  
  33.             print("Erreur lors de la creation du thread :\n!!! %s !!!"%err)
  34.        
  35. #===============================================================
  36.     def run (self):                                                     #méthode principale de l'objet Thread() Contenu executer lors de l'appel à thread.start()    
  37.         self.isActif = True                                             #On définie le boolean isActif à true
  38.         while self.isActif :                                            #Tans que le boolean isActif est à true
  39.             try :
  40.                 self.protocoleSerie.write(self.shareStack.get(True,5))  #On envoie sur le canal serie les données présentes dans la stack. Grace à .get(True,5) la récupération des datas est blocante avec un timeOut à 5 secondes
  41.                 self.shareStack.task_done()                             #Chaque fin de timeOut précédent on indique au systeme que la tache d'ecoute de la stack et pour l'instant terminée
  42.             except:                                                    
  43.                 pass
  44.  
  45. #===============================================================
  46.     def kill (self):                                                    #Permet d'eteindre le thread
  47.         self.isActif = False                                            #Grace au timeout de la fonction self.shareStack.get(True, 5) on s'assure une vérification de l'etat self.isActif toutes les 5 secondes
  48. #===============================================================
  49.     def getIsActif (self):
  50.         return (self.isActif)                                           #Renvoie l'etat de l'activité du thread
  51. #===============================================================
  52.     def __del__(self) :
  53.         print ("- Thread Killed -")                                     #Indique juste que le thread est en fin de vie et que son destructeur a bien été appelé
  54. #===================================================================
  55. #====================    MAIN PRINCIPAL ============================
  56. #===================================================================
  57. if __name__ == "__main__":                                                 
  58.     print ("== Main ThreadSerialInput==\n")                             #Début du programme (permet de savoir qui à lancé le programme) joue le role de Main par defaut.
  59.     protocoleSerie = serial.Serial()                                    #Initialisation du protocole Série
  60.     protocoleSerie.baudrate = 9600                                      #Initialisation de la vitesse du protocole 9600 BPS (Bauds per seconds)
  61.     protocoleSerie.port = 2                                             #Initialisation du port usb/serie utilisé (2 = COM3)
  62.     stack = Queue.LifoQueue(32)                                         #Initialisation de la pile d'envoie, (Input Serial Stack) en mode LIFO (Last In, First Out) pour garder les elements dans l'ordre
  63.    
  64.     thrd = ThreadSerialInput(stack, protocoleSerie)                     #On envoie la stack et le protocole série au thread pour sa déclaration                                  
  65.                                            
  66.     try :
  67.         protocoleSerie.open()                                           #Ouverture du dialogue série
  68.         time.sleep(1.5)                                                 #On attend 1,5 secondes, le temps que le dialogue série s'etablisse définitivement           
  69.         thrd.start()                                                    #On active le thread   
  70.     except BaseException as err:
  71.         print("*** Erreur lors de la connexion serie :\n!!! %s !!!"%err)
  72.    
  73.     for i in range(10) :                                                #Micro test : on envoie la lettre "e" à 10 reprises, avec 0.5 seconde d'interval.
  74.         stack.put("e")                                                 
  75.         time.sleep(0.5)
  76.        
  77.    
  78.     thrd.kill()                                                         #Pour mettre fin au thread
  79.     stack.join()                                                        #On s'assure que la stack n'a pas encore quelques actions à finir
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement