Beste forumleden,
Momenteel ben ik voor een schoolopdracht (HBO Elektrotechniek) een Energie Management Systeem aan het maken.
Het systeem moet de stroom per fase monitoren en apparaten gaan afschakelen als de netaansluiting bijna overbelast raakt.
Toelichting
Hiervoor maak ik gebruik van Inepro Pro380 Mod energiemeters.
Deze energiemeters hebben een ModbusRTU interface.
Als controller heb ik voor nu een RaspberryPi gekozen.
Het maken van gebruikerinterface en de andere onderdelen gaat voorspoedig. Echter, het gaat niet lekker met het uitlezen van de energiemeter.
Voor de RaspberryPi heb ik een USB naar RS458 interface gekocht.
Terminal 22 (A) heb ik verbonden met de 485+ terminal van de Digitus USB adapter.
Terminal 23 (B) heb ik verbonden met de 485- terminal van de Digitus USB adapter.
Ik heb ze ook eens omgedraaid, maar dan krijg ik geen bericht meer.
Ik heb een terminating resistor (120Ω) geplaatst tussen terminal A en B van de energiemeter. En ook tussen de 485+ en 485- terminal van de USB-adapter.
Ik maak gebruik van de minimalmodbus module voor python.
Het lijkt gelukt om een verbinding tussen de raspberry pi en de energiemeter te maken. Als ik een bericht stuur komt er reactie. Maar ik krijg dan een foutmelding.
Ik voer het bestand modbustest.py uit via het commando:
python /var/www/html/modbustest.py
(Sudo is in mijn geval niet nodig, ik heb de gebruiker 'pi' de juiste rechten hiervoor gegeven.)
(Het python scriptje staat in de www directory van Apache2 omdat het straks vanuit een webpagina geactiveerd wordt.)
Dit is de inhoud van het modbustest.py bestand:
#!/usr/bin/env python3
import minimalmodbus
instrument = minimalmodbus.Instrument('/dev/ttyUSB0', 1, debug = True)
instrument.serial.baudrate = 9600
print(instrument)
voltage = instrument.read_register(5002, 3)
print(voltage)
Met bovenstaande code probeer ik dus register 5002 uit te lezen. (Spanning L1) (Zie pagina 27 van handleiding energiemeter)
De baudrate heb ik aangepast omdat ik die in de Inepro meter anders heb ingesteld.
Ik heb een afbeelding van de instellingen, maar die krijg ik niet geupload via google drive of Imgur. Daarom staat hij in de bijlage)
Dit is de foutmelding die ik krijg:
MinimalModbus debug mode. Create serial port /dev/ttyUSB0
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): '\x01\x03\x13\x8a\x00\x01\xa1d' (01 03 13 8A 00 01 A1 64)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1584449524523.44 ms, minimum silent period: 4.01 ms.
MinimalModbus debug mode. Response from instrument: '\x00\x01\x81\x04\x00' (00 01 81 04 00) (5 bytes), roundtrip time: 50.4 ms. Timeout for reading: 50.0 ms.
Traceback (most recent call last):
File "/var/www/html/modbustest.py", line 9, in <module>
voltage = instrument.read_register(5002, 3)
File "/home/pi/.local/lib/python2.7/site-packages/minimalmodbus.py", line 447, in read_register
payloadformat=_PAYLOADFORMAT_REGISTER,
File "/home/pi/.local/lib/python2.7/site-packages/minimalmodbus.py", line 1170, in _generic_command
payload_from_slave = self._perform_command(functioncode, payload_to_slave)
File "/home/pi/.local/lib/python2.7/site-packages/minimalmodbus.py", line 1244, in _perform_command
response, self.address, self.mode, functioncode
File "/home/pi/.local/lib/python2.7/site-packages/minimalmodbus.py", line 1756, in _extract_payload
raise InvalidResponseError(text)
minimalmodbus.InvalidResponseError: Checksum error in rtu mode: '\x04\x00' instead of '\xb00' . The response is: '\x00\x01\x81\x04\x00' (plain response: '\x00\x01\x81\x04\x00')
Vraag
Ik zie dat het antwoord dat de RaspberryPi ontvangt onjuist is. Maar ik kom er niet achter waardoor dit fout gaat. Het is voor mij lastig te vinden of ik het in de software, hardware(aansluiting) of ergens anders in moet zoeken. Het enige dat ik mij kan bedenken is dat er iets mis gaat met de Modbus ID's. Die van de energiemeter heb ik bewust op 1 gezet. Maar ik weet niet wat de ID van de RaspberryPi is. In de code heb ik 1 ingevuld, maar ik weet niet zeker of ik daarmee het ID voor de RaspberryPi instel, of het ID van de energiemeter aangeef. Wellicht dat dat een conflict veroozaakt?
Hoe kom ik er achter wat er fout gaat?
Bij voorbaat veel dank!
Tim