Bonjour,
Je souhaite piloter une étuve à distance (régulateur C3030). La communication se fait par Modbus ( RS485). Je n'arrive pas à communiquer...
J'utilise un convertisseur RS4856 to USB (USB-RS485-WE-5000-BT) , mon système d'exploitation est windows 10 et les paramètres semblent correctement spécifiés...
Voici le code
et voici la réponse en retour :
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 # -*- coding: utf-8 -*- import minimalmodbus import numpy as np import serial import time #Use Modbus RTU communication, normalement par défaut # minimalmodbus.MODE_RTU = 'rtu' #Définition des caractéristiques de l'instrument port='COM6' # A définir en fonction de l'installation PC #Pour trouver le numéro du port aller dans gestionnaire de périphérique Adresse_XUE112=9 # valeur par défaut 09 # Lien entre variable et adresse (hexa) # Temperature mesurée -> 01 en 1/10 de °C 1234 pour 123.4 # Consigne de température -> 02 idem # Teamperature maximale -> 0A entier en °C # Definission de l'instrument et des caractéristique de la comm print ('\n Définition des caractéristique de la Comunication : \n') Etuve_XUE112 = minimalmodbus.Instrument(port, Adresse_XUE112) # port name, slave address (in decimal) # In some cases (mostly on Windows) the serial port must be closed after each call # On implèmente ce changement dans les carcatéristiques de la comm Etuve_XUE112.close_port_after_each_call = True Etuve_XUE112.serial.timeout = 0.05 Etuve_XUE112.debug = True Etuve_XUE112.serial.baudrate = 9600 Etuve_XUE112.mode = minimalmodbus.MODE_RTU # permet d'afficher les réglages de la comm print(Etuve_XUE112) print ('\n') ## Read temperature (PV = ProcessValue) ## temperature = Etuve_XUE112.read_register(1, 1) # Register number, number of decimals time.sleep(0.1) print(temperature) # Change temperature setpoint (SP) ## NEW_TEMPERATURE = 95 # On écrit la nouvelle consigne de température Etuve_XUE112.write_register(2, NEW_TEMPERATURE, 1) # Registernumber, value, number of →decimals for storage #lecture et affichage de la nouvelle consigne time.sleep(0.1) temperature_2 = Etuve_XUE112.read_register(2, 1) time.sleep(0.1) print(temperature_2) try: print(Etuve_XUE112.read_register(4143)) except IOError: print("Failed to read from instrument")
Est ce que quelqu'un peut m'aider à trouver la source du problème??
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 Définition des caractéristique de la Comunication : minimalmodbus.Instrument<id=0x1f99b7c5700, address=9, mode=rtu, close_port_after_each_call=True, precalculate_read_size=True, clear_buffers_before_each_transaction=True, handle_local_echo=False, debug=True, serial=Serial<id=0x1f99b786670, open=True>(port='COM6', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=0.05, xonxoff=False, rtscts=False, dsrdtr=False)> MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 09 03 00 09 00 01 55 40 (8 bytes) MinimalModbus debug mode. Clearing serial buffers for port COM6 MinimalModbus debug mode. No sleep required before write. Time since previous read: 767532.00 ms, minimum silent period: 4.01 ms. MinimalModbus debug mode. Closing port COM6 MinimalModbus debug mode. Response from instrument: 00 (1 bytes), roundtrip time: 0.1 ms. Timeout for reading: 50.0 ms. Traceback (most recent call last): File "C:\Users\Stephane\.spyder-py3\Communication\Com_ModBus_Etuve_XUE112 - Test.py", line 68, in <module> temperature = Etuve_XUE112.read_register(9, 0) # Register number, number of decimals File "C:\Users\Stephane\anaconda3\lib\site-packages\minimalmodbus.py", line 480, in read_register returnvalue = self._generic_command( File "C:\Users\Stephane\anaconda3\lib\site-packages\minimalmodbus.py", line 1245, in _generic_command payload_from_slave = self._perform_command(functioncode, payload_to_slave) File "C:\Users\Stephane\anaconda3\lib\site-packages\minimalmodbus.py", line 1329, in _perform_command payload_from_slave = _extract_payload( File "C:\Users\Stephane\anaconda3\lib\site-packages\minimalmodbus.py", line 1808, in _extract_payload raise InvalidResponseError( InvalidResponseError: Too short Modbus RTU response (minimum length 4 bytes). Response: '\x00'
Merci
Partager