Hallo zusammen, da meine Frage in die gleiche Richtung geht, knüpfe ich mal an das Thema an. Ich möchte gerne einen Temperatursensor über Modbus auslesen. Zur Verfügung steht ein RS485 -> USB Adapter (
http://www.dx.com/de/p/usb-to-rs485-ada ... A3QChDN3YQ), genutzt wird ein Windows-System. Der Sensor hat standardmäßig folgende Einstellungen:
Slave Adresse: 1
Baudrate: 19200
keine Parität
2 Stoppbits
Der Temperaturwert befindet sich in Register 2, Länge 2 Wörter. Function Code müsste 4 für read input register sein. Nach Anschließen des USB Sticks erscheint er als COM-Port15. Folgendes Skript habe ich aus dem Tutorial zusammengestellt:
Code: Alles auswählen
import minimalmodbus
import serial
instrument = minimalmodbus.Instrument('COM15', 1) # port name, slave address (in decimal)
instrument.serial.stopbits = 2 # aendern der stopbits
instrument.debug = True
temperature = instrument.read_register(2, 2) # Registernumber, number of decimals
print (temperature)
Mit dem aktivierten Debuging ergibt sich folgende Meldung:
Code: Alles auswählen
Traceback (most recent call last):
File "C:\Python33\Lib\site-packages\test.py", line 79, in <module>
temperature = instrument.read_register(2, 2) # Registernumber, number of decimals
File "C:\Python33\Lib\site-packages\minimalmodbus.py", line 254, in read_register
return self._genericCommand(functioncode, registeraddress, numberOfDecimals=numberOfDecimals, signed=signed)
File "C:\Python33\Lib\site-packages\minimalmodbus.py", line 693, in _genericCommand
payloadFromSlave = self._performCommand(functioncode, payloadToSlave)
File "C:\Python33\Lib\site-packages\minimalmodbus.py", line 791, in _performCommand
response = self._communicate(message, number_of_bytes_to_read)
File "C:\Python33\Lib\site-packages\minimalmodbus.py", line 848, in _communicate
format(number_of_bytes_to_read, message))
ValueError: zero length field name in format
Leider werd ich daraus nicht wirklich schlau. Den COM-Port habe ich auch schon über den Geräte Manager mit den Parametern belegt. Kann mir jemand auf die Sprünge helfen?
Vielen Dank und liebe Grüße
edit: Danke fürs Setzen des Quelltextes in Python Code. Ein Fehler ist mir selbst grade aufgefallen: Ich habe das Skript mit der 2.7 Version von Python ausgeführt. Wechsel ich in die Konsole und führe das ganze mit Python 3.3 aus, kommt die folgende Meldung:
Traceback (most recent call last):
File "C:\Python33\Lib\site-packages\test.py", line 76, in <module>
instrument = minimalmodbus.Instrument('COM15', 1) # port name, slave address
(in decimal)
File "C:\Python33\Lib\site-packages\minimalmodbus.py", line 108, in __init__
self.serial = _SERIALPORTS[port] = serial.Serial(port=port, baudrate=BAUDRAT
E, parity=PARITY, bytesize=BYTESIZE, stopbits=STOPBITS, timeout=TIMEOUT)
File "C:\Python33\Lib\site-packages\serial\serialwin32.py", line 38, in __init
__
SerialBase.__init__(self, *args, **kwargs)
File "C:\Python33\Lib\site-packages\serial\serialutil.py", line 282, in __init
__
self.open()
File "C:\Python33\Lib\site-packages\serial\serialwin32.py", line 66, in open
raise SerialException("could not open port %r: %r" % (self.portstr, ctypes.W
inError()))
serial.serialutil.SerialException: could not open port 'COM15': PermissionError(
13, 'Zugriff verweigert', None, 5)
Hab die CMD als Administrator ausgeführt, aber das war noch nicht der richtige Schritt.