misdoro / electronic_load_px100 Goto Github PK
View Code? Open in Web Editor NEW150W Electronic load / Battery discharge capacity tester PX-100 v2.70 protocol and control software.
License: GNU General Public License v3.0
150W Electronic load / Battery discharge capacity tester PX-100 v2.70 protocol and control software.
License: GNU General Public License v3.0
Although clearly designed for PX100, this works with an ATorch DL24 when paired over Bluetooth.
Perhaps the description or title can include that?
Hi, unfortunately despite many attempts I keep getting the message 'This app can't run on your PC'. Windows 10 Home 32bit 20H2, 19042.844. Maybe you have an idea how to solve this, thank you! Greetings / Rafael
With pandas 2.0 and newer:
AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?
Resulting in a crash when connecting to the load via bt.
See stackoverflow for more details:
https://stackoverflow.com/questions/75956209/error-dataframe-object-has-no-attribute-append
As a quick fix (proved to be working) the following can be done but shouldn't according to stackoverflow:
in data_store.py line 21
self.data = self.data.append(row, ignore_index=True)
changed to
self.data = self.data._append(row, ignore_index=True)
Edit: Seems to crash again for similar reason but in main.py when doing internal resistance measurement.
However the same fix does not work here.
Здравствуйте, Михаил. Продавец Electronic_load_px100 дал ссылку на ваше ПО. Хочу попробовать его (ПО), но не могу запустить, так как командная строка в винде, а тем более в питон - густые сумерки. Вроде походил, почитал, попробовал, но никак. Win7х64 python-3.8.6-amd64. Программа ddt4all, тоже на питоне, работает.
Просьба, если не затруднит, посоветуйте что и как сделать.
Thank you very much for this great project! I was wondering if it is possible to add external temp sensor logging? I have a DL24P electronic load tester - please let me know if there is anything I can do to help / test!
Thanks again!
Any suggestion as to how to troubleshoot?
Hello,
I get a crash when starting the script.
I use python 3.8 on windows 10 and followed your instructions.
The load is conected at COM4 (USB-Serial CH340 at 3V3)
C:\Users\Stefan\Downloads\Electronic_load_px100-master>py -3 main.py
C:\Users\Stefan\AppData\Roaming\Python\Python38\site-packages\visa.py:13: FutureWarning: The visa module provided by PyVISA is being deprecated. You can replace import visa
by import pyvisa as visa
to achieve the same effect.
The reason for the deprecation is the possible conflict with the visa package provided by the https://github.com/visa-sdk/visa-python which can result in hard to debug situations.
warnings.warn(
swcccv_reset
Detecting instruments...
ASRL1::INSTR
SerialInstrument at ASRL1::INSTR
probe
no answer
ko
ASRL4::INSTR
SerialInstrument at ASRL4::INSTR
probe
found PX100
readAll
Traceback (most recent call last):
File "C:\Users\Stefan\Downloads\Electronic_load_px100-master\instr_thread.py", line 40, in run
self.signals.data_row.emit(self.instr.readAll())
File "C:\Users\Stefan\Downloads\Electronic_load_px100-master\instruments\px100.py", line 121, in readAll
self.__clear_device()
File "C:\Users\Stefan\Downloads\Electronic_load_px100-master\instruments\px100.py", line 220, in __clear_device
self.device.clear()
File "C:\Users\Stefan\AppData\Roaming\Python\Python38\site-packages\pyvisa\resources\resource.py", line 397, in clear
self.visalib.clear(self.session)
File "C:\Users\Stefan\AppData\Roaming\Python\Python38\site-packages\pyvisa_py\highlevel.py", line 191, in clear
return self.handle_return_value(session, sess.clear())
File "C:\Users\Stefan\AppData\Roaming\Python\Python38\site-packages\pyvisa\highlevel.py", line 251, in handle_return_value
raise errors.VisaIOError(rv)
pyvisa.errors.VisaIOError: VI_ERROR_NSUP_OPER (-1073807257): The given session or object reference does not support this operation.
C:\Users\Stefan\Downloads\Electronic_load_px100-master>
I need to change the windows regional settings to using a point, otherwise the program can only set integer numbers. Obviously a input to float conversion issue.
Михаил, добрый день!
По Вашей рекомендации с Youtube, зарегистрировался здесь, чтобы выяснить некоторые подробности и если возможно, попросить о некоторых добавлениях к возможностям программы.
Здрвствуйте!
Можно узнать об алгоритме измерения внутреннего сопротивления?
Хоть в двух словах.
Не ради интереса спрашиваю.
Во всех китайских девайсах заложен "корявый" алгоритм определения внутреннего сопротивления, измеряемого на постоянном токе. Результаты - просто жуть.
Однако есть методика измерения, описанная в стандартах (например в ГОСТ). И в стандартах измерение на постоянном токе считается более точным, по сравнению с переменным током.
Если интересует - дам и ссылки на стандарты, можно и обсудить... в питоне ничего не понимаю. но в Си - подобное делал.
Может получиться уникальная функция, которой не видел ни у кого.
When changing the setting for the current scale (default 10), the chosen value is used until the next redraw.
On each redraw it reverts to 10A, which makes the current plot pretty useless when using a low current.
I'd try to fix this myself, but I'm just getting into PyQT myself so have no idea where to start. Yet...
I try run logger but get error:
python main.py
Detecting instruments...
ASRL/dev/ttyUSB0::INSTR
SerialInstrument at ASRL/dev/ttyUSB0::INSTR
probe
found PX100
readAll
readAll
readAll
readAll
common /home/admin home /home/admin sel /home/admin
swcccv_reset
{'is_on': 0.0, 'voltage': 3.966, 'current': 0.0, 'time': datetime.time(0, 6, 39), 'cap_ah': 0.11, 'cap_wh': 0.0, 'temp': 29.0, 'set_current': 1.0, 'set_voltage': 3.0, 'set_timer': datetime.time(0, 0)}
Traceback (most recent call last):
File "/mnt/usb/DL24_BLE_Logger-main/Electronic_load_px100/main.py", line 34, in data_callback
self.datastore.append(data)
File "/mnt/usb/DL24_BLE_Logger-main/Electronic_load_px100/data_store.py", line 21, in append
self.data = self.data.append(row, ignore_index=True)
^^^^^^^^^^^^^^^^
File "/home/admin/.local/lib/python3.11/site-packages/pandas/core/generic.py", line 6202, in __getattr__
return object.__getattribute__(self, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?
{'is_on': 0.0, 'voltage': 3.966, 'current': 0.0, 'time': datetime.time(0, 6, 39), 'cap_ah': 0.11, 'cap_wh': 0.0, 'temp': 29.0, 'set_current': 1.0, 'set_voltage': 3.0, 'set_timer': datetime.time(0, 0)}
Traceback (most recent call last):
File "/mnt/usb/DL24_Logger-main/Electronic_load_px100/main.py", line 34, in data_callback
self.datastore.append(data)
File "/mnt/usb/DL24_Logger-main/Electronic_load_px100/data_store.py", line 21, in append
self.data = self.data.append(row, ignore_index=True)
^^^^^^^^^^^^^^^^
File "/home/admin/.local/lib/python3.11/site-packages/pandas/core/generic.py", line 6202, in __getattr__
return object.__getattribute__(self, name)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'DataFrame' object has no attribute 'append'. Did you mean: '_append'?
Aborted (core dumped)
https://stackoverflow.com/questions/75956209/error-dataframe-object-has-no-attribute-append
I try replace self.datastore.append(data)
to self.datastore._append(data)
get error
$ python main.py
Detecting instruments...
common /home/upya4ko home /home/upya4ko sel /home/upya4ko
swcccv_reset
ASRL/dev/ttyUSB0::INSTR
SerialInstrument at ASRL/dev/ttyUSB0::INSTR
probe
<class 'pyvisa.errors.VisaIOError'>
('VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.',)
VI_ERROR_TMO (-1073807339): Timeout expired before operation completed.
error reading bytes
no answer
ko
No instruments found
I'm having trouble getting this to run under Rasbian, Python v3.7.3. I'm no programmer by any means, any ideas on a fix?
Traceback (most recent call last): File "./main.py", line 56, in <module> Main() File "./main.py", line 21, in __init__ GUI(self) File "/home/pi/Load/gui/gui.py", line 209, in __init__ self.window = MainWindow() File "/home/pi/Load/gui/gui.py", line 42, in __init__ uic.loadUi('gui/main.ui', self) File "/usr/lib/python3/dist-packages/PyQt5/uic/__init__.py", line 226, in loadUi return DynamicUILoader(package).loadUi(uifile, baseinstance, resource_suffix) File "/usr/lib/python3/dist-packages/PyQt5/uic/Loader/loader.py", line 72, in loadUi return self.parse(filename, resource_suffix, basedir) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 1021, in parse actor(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 828, in createUserInterface self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 273, in createWidget self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 503, in createLayout self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 546, in handleItem self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 273, in createWidget self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 273, in createWidget self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 503, in createLayout self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 546, in handleItem self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 503, in createLayout self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 546, in handleItem self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 273, in createWidget self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 503, in createLayout self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 546, in handleItem self.traverseWidgetTree(elem) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 806, in traverseWidgetTree handler(self, child) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 264, in createWidget self.stack.push(self.setupObject(widget_class, parent, elem)) File "/usr/lib/python3/dist-packages/PyQt5/uic/uiparser.py", line 230, in setupObject self.wprops.setProperties(obj, branch) File "/usr/lib/python3/dist-packages/PyQt5/uic/properties.py", line 415, in setProperties prop_value = self.convert(prop, widget) File "/usr/lib/python3/dist-packages/PyQt5/uic/properties.py", line 378, in convert return func(prop[0], **args) File "/usr/lib/python3/dist-packages/PyQt5/uic/properties.py", line 129, in _enum return self._pyEnumMember(prop.text) File "/usr/lib/python3/dist-packages/PyQt5/uic/properties.py", line 117, in _pyEnumMember return getattr(scope, membername) AttributeError: type object 'QAbstractSpinBox' has no attribute 'AdaptiveDecimalStepType'
Hi Mikhail,
Is there a way to make the software log direct to a CSV file?
I ran a couple of load tests which ran for longer then 24hrs and the program crashed and I had no record of the tests, I'm using a very basic laptop so I'm not sure if it was a out of memory issue but it would be good it does crash I have the data.
Thanks,
Chris
The control frame looks like: 0xB1 0xB2 CMD D1 D2 0xB3 0xB4
Are you sure?
My experiments show:
0xB1 0xB2 CMD D1 D2 0xB6
Hi,
I got the ACOOLOO 180W Load (DL24P) variant from amazon https://www.amazon.de/gp/product/B098FCZJJF/
So far the logging and internal resistance measurements is working fine, however I'm unable to en/disable the load via the gui, only pressing the button on the load itsself is working.
Also some small things I like to mention:
Questions:
Request:
I'm really liking your project - it makes this capacity tester at least 200% more useful! Great work!
Приветствую, Михаил!
Спасибо за отличный продукт! Удобный интерфейс и хороший функционал.
Я установил версию 64 бит под Windows 7 64 бит. Софт без проблем запустился, нашёл данные в Bluetooth и начал строить график. Но задержки обмена данными и реакции на элементы интерфейса достигают 5 - 15 секунд. Я попробовал версию x86 - та же проблема. Ноут EEE PC 1215n, загрузка процессора и памяти небольшая. Нагрузка DL24 150W
https://a.aliexpress.com/_AZoI6B
Другое приложение на ПК работает без задержек, но сильно уступает вашему софту.
Hello misdoro, I am looking forward to trying your software but maybe you can help me with a simple issue with my unit first as you know these PX100 loads well.
I have just had a PX100 load delivered but cannot seem to get the cursor to position under the "I=" current setting symbol so that I can change it to "V=" to set voltage. There seems to be nothing in the tiny leaflet that came with the unit to tell me how to do this. Going by the instructions on the sellers listing it looks as though just short pressing the top right hand "set" button repetitively should rotate the cursor position under the "I=", then the digits to set the value for current & voltage.
On this unit short pressing the "set" button only rotates the cursor under and allows to set the last 3x digits (0.00) for current ... I can't seem to be able to place the cursor under "I=" to change to the voltage setting??? Do you think this is a fault in the unit or is it me not pressing the correct key combination? .......all other menu's and buttons seem to function normally (e.g. long press "set" takes me into the setup menu and I can edit all the settings there and the rest of the buttons function normally, the voltmeter on the unit reads very accurately etc.).
Just can't get the cursor to position under the "I=" ..... what do you think? ... Thanks in advance for any help you can give.
Woops nearly forgot ... it's board version 2.81 ... software v2.45 ... :)
Hi!
While measuring a cell, it should have done every 50 mV a measurement. Hoewever it seemd to miss some results, although I heard the beep from the measurement (current change).
They are not included in the list or in the csv file. I attached the log file from some measurements.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.