IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

Interfacage PYTHON , communication RS 485 et EXCEL


Sujet :

Interfaçage autre langage Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Interfacage PYTHON , communication RS 485 et EXCEL
    Bonjour,

    Dans le cadre d'un projet je suis amené à récupérer des données de 2 équipements en modbus RS485 et d'utiliser excel pour en faire l'acquisition (pour tracer des courbes par la suite)
    Excel communique déjà avec 2 autres équipements en liaison série RS232, avec des données acquise par l'intermédiaire d'un logiciel propriétaire de ces autres équipements par l'intermédiaire d'un serveur DDE.

    N'étant pas informaticien mais automaticien, j'ai cherché une solution à mon problème et je me suis penché sur le langage python avec lequel j'arrive à récupérer les informations en modbus avec un convertisseur USB/ RS485.
    J'arrive à écrire ces données dans un fichier excel "fermé".

    Et ensuite depuis excel j'arrive depuis une fonction en VBA à lire dans ce fichier excel "fermé".

    Mon problème est lorsque mon programme python tourne, ainsi que le programme VBA Excel, il arrive un moment ou les 2 applis se téléscopent, et mon appli python plante car elle n'a pas acces au fichier excel "fermé" (vu que l'appli en VBA doit être en train de lire).

    Puis je gérer l'interruption faite dans python et relancé le programme python automatiquement ?

    Avez vous une autre solution pour résoudre ce problème ? à l'origine je cherchait à faire un serveur DDE en python, mais il ne semble pas que ce soit réalisable.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    #IMPORTS
     
    import minimalmodbus
    import serial
    import time
     
    from openpyxl import load_workbook
     
    #CONFIGURATION DE L'EQUIPEMENT 1 : VARIATEUR 
     
    ins = minimalmodbus.Instrument('COM5', 1, 'rtu') 
    ins.debug = True 
    ins.serial.baudrate = 9600 
    ins.serial.bytesize = 8
    ins.serial.parity = serial.PARITY_NONE
    ins.serial.stopbits = 1
    ins.serial.timeout = 1
     
    #CONFIGURATION DE L'EQUIPEMENT 2 : TRANSMETTEUR DE TEMPERATURE
     
    ins2 = minimalmodbus.Instrument('COM5', 2, 'rtu') 
    ins2.debug = True 
    ins2.serial.baudrate = 9600 
    ins2.serial.bytesize = 8
    ins2.serial.parity = serial.PARITY_NONE
    ins2.serial.stopbits = 1
    ins2.serial.timeout = 1
     
    #EXECUTION DES REQUETES DE LECTURES
     
    while True:
     
    	values = ins.read_registers(registeraddress=2911, number_of_registers=2, functioncode=3)
     
    	time.sleep(0.3)
     
    	value2 = ins2.read_registers(registeraddress=1001, number_of_registers=1, functioncode=3)
     
    	# EXTRACTION DES DONNEES
    	vitesse = values[0]
    	couple = values[1]
    	temp = value2[0]
     
    	#MISE A L'ECHELLE DES DONNEES
    	couplech=(couple / 10)
    	tempech=(temp /10)
     
    	# RENVOI DES VALEURS DANS LE PROMPT
    	print('vitesse =', vitesse, 'tr/min')	
    	print('couple =', couplech, 'Nm')
    	print('temperature =',tempech,'°C')
     
    	#ECRITURE DES DONNEES DANS UN FICHIER EXCEL
    	wb = load_workbook(filename = 'BDD_MODBUS.xlsx')
    	ws1 = wb.active
    	ws1['A1'] = vitesse
    	ws1['B1'] = couplech
    	ws1['C1'] = tempech
     
    	wb.save(filename = 'BDD_MODBUS.xlsx')
     
    	time.sleep(0.3)
    Je vous remercie

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par mickaelkael30 Voir le message
    Puis je gérer l'interruption faite dans python et relancé le programme python automatiquement ?
    C'est ce à quoi sert la gestion d'exception via try...except...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour la réponse sur la gestion d'exception,

    J'ai maintenant un autre soucis, j'utilise effectivement le fichier BDD_MODBUS comme une table d'échange pour récupérer les données de mon application PYTHON vers un autre fichier EXCEL.

    Maintenant que je n'ai plus d'erreur de type "PermissionError:" J'ai une nouvelle erreur avec le message suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Traceback (most recent call last):
      File "modbus2.py", line 61, in <module>
        wb = load_workbook(filename = 'BDD_MODBUS.xlsx')
      File "C:\Python37\lib\site-packages\openpyxl-3.0.2-py3.7.egg\openpyxl\reader\excel.py", line 314, in load_workbook
      File "C:\Python37\lib\site-packages\openpyxl-3.0.2-py3.7.egg\openpyxl\reader\excel.py", line 273, in read
      File "C:\Python37\lib\site-packages\openpyxl-3.0.2-py3.7.egg\openpyxl\reader\excel.py", line 134, in read_manifest
      File "C:\Python37\lib\zipfile.py", line 1431, in read
        with self.open(name, "r", pwd) as fp:
      File "C:\Python37\lib\zipfile.py", line 1470, in open
        zinfo = self.getinfo(name)
      File "C:\Python37\lib\zipfile.py", line 1398, in getinfo
        'There is no item named %r in the archive' % name)
    KeyError: "There is no item named '[Content_Types].xml' in the archive"
    Je comprend donc qu'il doit y avoir un moment ou les applications arrivent à corrompre mon fichier excel BDD_MODBUS.xlsx

    Le but étant de récupérer des données depuis une application python vers excel, pouvez vous m'orienter vers une solution pérenne ?

    Faut il traiter cette nouvelle erreur dans PYTHON et recréer un fichier xlsx à partir de PYTHON ?

    Faut il passer par une autre type d'interface entre PYTHON et EXCEL ? ( base de donnée ? fichier CSV ? page web ? )

    Merci par avance

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par mickaelkael30 Voir le message
    Le but étant de récupérer des données depuis une application python vers excel, pouvez vous m'orienter vers une solution pérenne ?
    Séparez les problèmes: stockez les données qui arrivent du capteur dans un fichier CSV en mode append.
    Puis si vous voulez les visualiser depuis EXCEL, vous chargez le CSV.

    Après réfléchissez un peu, avec le temps vous allez avoir un tas de données et un fichier CSV qui deviendra "gros" et qui contiendra des données que vous voudrez préserver ou pas. Prendre (ou pas) en compte tous ces besoins "autour", c'est ce qui fera qu'une solution sera plus "pérenne" qu'une autre. C'est ce qui à trait à la conception de votre application. Pour çà Python ne peut rien pour vous.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2019
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2019
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci pour la réponse, mais j'ai du mal me faire comprendre sur le fonctionnement de l'application:
    Le besoin : Récupéré 3 variables en modbus RS485 , les lires dans un fichier excel ouvert dans lequel un script VBA fait deja de l'acquisition d'autres données.

    Projet tel que réalisé actuellement
    -J'ai une application python qui lis 3 variables en modbus RS 485, cette meme application renvois ces 3 variables dans 3 cases excel, (toujours les meme cases, donc ce fichier "tampon" ne grossi pas )
    -Le code VBA du fichier excel "d'acquisition" viens lire cycliquement les 3 variables dans le fichier tampon précédemment d'écrit.

    Je vais creusé la piste du CSV, et voir si ca marche

    Merci

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par mickaelkael30 Voir le message
    Merci pour la réponse, mais j'ai du mal me faire comprendre sur le fonctionnement de l'application:
    Le besoin : Récupéré 3 variables en modbus RS485 , les lires dans un fichier excel ouvert dans lequel un script VBA fait deja de l'acquisition d'autres données.
    Si le fichier est "petit", autant utiliser l'atomicité du rename.
    Le VBA lit toto.xlsx, le code python crée un toto.xlsx_new qu'il renomme en toto.xlsx lorsqu'il l'aura fermé/terminé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [XL-2010] Interfacage PYTHON et communication RS485 MODBUS
    Par mickaelkael30 dans le forum Excel
    Réponses: 5
    Dernier message: 05/11/2019, 19h21
  2. Communication entre deux fichiers excel dont l'un reste ferme
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 21/03/2008, 12h19
  3. Communication entre deux fichiers Excel
    Par typiquement dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/03/2008, 14h38
  4. Communication entre deux fichiers excel
    Par deubelte dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/10/2007, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo