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