Comments (7)
Can you enable the debugging-feature in the minimalmodbus
librabry?
As far as I see there is no feature to do it from the command line by now. But you could patch it in the code:
In https://github.com/rosswarren/epevermodbus/blob/main/epevermodbus/driver.py#L43 add a line self.debug=True
(See: https://github.com/pyhys/minimalmodbus/blob/master/minimalmodbus.py#L124 )
Please provide the output afterwards.
from epevermodbus.
Hi, thank you very much for your response!
I added this line after Line43 (self.debug=True
) and also on Line124 in minimalmodbus.py, I enabled debug (debug: bool = True
), and here is the output:
$ epevermodbus --portname /dev/ttyUSB0 --slaveaddress 1
MinimalModbus debug mode. Create serial port /dev/ttyUSB0
Real Time Data
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 04 31 00 00 01 3F 36 (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 1995926.43 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: 01 04 31 00 00 01 3F (7 bytes), roundtrip time: 0.0 ms. Timeout for reading: 0.0 ms.
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 04 31 00 00 01 3F 36 (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 200.67 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: 01 04 31 00 00 01 3F (7 bytes), roundtrip time: 0.0 ms. Timeout for reading: 0.0 ms.
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 04 31 00 00 01 3F 36 (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 200.62 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: 01 04 31 00 00 01 3F (7 bytes), roundtrip time: 0.0 ms. Timeout for reading: 0.0 ms.
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 04 31 00 00 01 3F 36 (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 200.56 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: 01 04 31 00 00 01 3F (7 bytes), roundtrip time: 0.0 ms. Timeout for reading: 0.0 ms.
MinimalModbus debug mode. Will write to instrument (expecting 7 bytes back): 01 04 31 00 00 01 3F 36 (8 bytes)
MinimalModbus debug mode. Clearing serial buffers for port /dev/ttyUSB0
MinimalModbus debug mode. No sleep required before write. Time since previous read: 200.52 ms, minimum silent period: 1.75 ms.
MinimalModbus debug mode. Response from instrument: 01 04 31 00 00 01 3F (7 bytes), roundtrip time: 0.0 ms. Timeout for reading: 0.0 ms.
Traceback (most recent call last):
File "/home/george/venvs/testare/bin/epevermodbus", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/epevermodbus/command_line.py", line 60, in main
print(f"Solar voltage: {controller.get_solar_voltage()}V")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/epevermodbus/driver.py", line 75, in get_solar_voltage
return self.retriable_read_register(0x3100, 2, 4)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/retrying.py", line 56, in wrapped_f
return Retrying(*dargs, **dkw).call(f, *args, **kw)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/retrying.py", line 266, in call
raise attempt.get()
^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/retrying.py", line 301, in get
six.reraise(self.value[0], self.value[1], self.value[2])
File "/home/george/venvs/testare/lib/python3.11/site-packages/six.py", line 719, in reraise
raise value
File "/home/george/venvs/testare/lib/python3.11/site-packages/retrying.py", line 251, in call
attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/epevermodbus/driver.py", line 49, in retriable_read_register
return self.read_register(
^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/minimalmodbus.py", line 484, in read_register
returnvalue = self._generic_command(
^^^^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/minimalmodbus.py", line 1276, in _generic_command
payload_from_slave = self._perform_command(functioncode, payload_to_slave)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/minimalmodbus.py", line 1359, in _perform_command
payload_from_slave = _extract_payload(
^^^^^^^^^^^^^^^^^
File "/home/george/venvs/testare/lib/python3.11/site-packages/minimalmodbus.py", line 1904, in _extract_payload
raise InvalidResponseError(text)
minimalmodbus.InvalidResponseError: Checksum error in rtu mode: b'\x01?' instead of b'I?' . The response is: b'\x01\x041\x00\x00\x01?' (plain response: b'\x01\x041\x00\x00\x01?')
I am using a Foiled Twisted Pair Cat5e cable, After cutting the cable, I left out only wires 4(blue) and 6(green). and on the other end of the USB to RS485 converter, I placed to A (D+) the green wire and to B (D-) de blue wire. I was inspired by Adam Welch's video about making a custom cable for communicating with your Epever Tracer (https://www.youtube.com/watch?v=r3LrWeYYtnQ&t=188s&ab_channel=AdamWelch)
from epevermodbus.
My guess is, that it is not an issue with your cable, but with the RS485 transceiver: Your transceiver has local echo enabled. So every word written on the bus is also received. This is generally not a bad thing. But we need to tell minimalmodbus
that it should handle that for us.
After your self.debug = True
please insert another line with self.handle_local_echo = True
. Then minimalmodbus
should ignore what we are sending.
(I am sure there is a way to do it in the Linux serial stack, too. But I am always confused which flags to set on the line discipline...)
from epevermodbus.
After inserting a new line with self.handle_local_echo = True
in driver.py
I get the same output.
from epevermodbus.
Sorry for the delay. (I was on some vacation.) But this riddle still bothers me:
I still suspect that this is a problem in handling the local echo, since MinimalModbus
receives back what it has send - but just one byte less.
A few more ideas:
- Do you have the option to capture what is actually going on "on the wire"? e.g. with another RS485 transceiver/cable or a logic analyzer?
- Let's try a few more options on
Minimalmodbus
:
2.1) Afterself.handle_local_echo = True
setself.precalculate_read_size = False
. Let's see if this already changes something. But I do not think that this will do the trick.
2.2) Afterself.precalculate_read_size = False
add another "self.serial.timeout = 1.0`. This will lead to very long timeouts for each transaction. But maybe something here is very slow and we thus do not capture the whole transmission from the bus.
from epevermodbus.
from epevermodbus.
Great to hear this solved the problem. Good to know that is is a problem of the cable or a combination of cable and how Minimalmodbus
tries to use it.
Feel free to close the issue when it is resolved for you.
from epevermodbus.
Related Issues (17)
- syntax error on raspberry pi 4 HOT 2
- Write battery parameters HOT 13
- Add temperature limit readings HOT 1
- Fix command-line tool solar power call, possibly use native power readings, add battery power. HOT 9
- Add switches to command line tool (filters, load control, etc.) HOT 1
- Testing local changes HOT 3
- Automated testing / test harness HOT 1
- Are the retries necessary? HOT 4
- Negative temperature readings HOT 3
- Incorrect Battery Type HOT 1
- Req: Write Coils for Load On/Off Switching HOT 4
- Unsupported battery type? HOT 6
- write other parameters HOT 1
- Read / Set controller clock HOT 3
- feature output
- Change EPEVER slave address HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from epevermodbus.