Test generator for battery cyclers.
Supported formats: Basytec, Neware, Digatron, JSON-LD.
Documentation: https://digibatt.github.io/bmgen
Examples: examples
The Python package is available on PyPI and can be installed using pip:
pip install bm-generator
The web version of the program can be started using the command:
bmgen-server
The required dependencies and the package itself can also be installed from the sources using pip:
pip install -e .[dev]
A working installation of Python >= 3.10 and pip is required. The web version also requires npm. To build the modules for the web version and the documentation, the provided build script can be used:
./build.sh
The documentation is built using the script
./build_docs.sh
This is a simple example that shows the basic structure of a program:
# import required functions and channel variables
from bmgen.function import *
from bmgen.channel import *
# set data recording interval
# registration format is only applied to BM programs
register(time=seconds(1), format=["my_custom_reg"])
# set safety limits
limit(V > 4.2, error(1))
limit(V < 2.5, error(1))
limit(I > 5, error(1))
limit(I < -5, error(1))
# specify test steps
charge(current=2.0, voltage=4.2, limits=[I < 0.2])
pause(hours=1)
discharge(current=1.5, limits=[V < 3.0])To see the test programs that are generated, expand the sections below.
Battery Manager
Command for this example: bmgen --target bm --format table examples/simple_program.py
| Step | Label | Operator | Value | Limit | Action | Registration |
|---|---|---|---|---|---|---|
| 1 | SET | my_custom_reg 1 s | ||||
| 2 | SET | > 4.2 V < 2.5 V > 5 A < -5 A | ERR 1 ERR 1 ERR 1 ERR 1 | |||
| 3 | CHA | 2.0 A 4.2 V | < 0.2 A | |||
| 4 | PAU | 90 min | ||||
| 5 | DCH | 1.5 A | < 3.0 V | |||
| 6 | STO |
Neware
Command for this example: bmgen --target neware --format table examples/simple_program.py
| Step Index | Step Name | Step Time (hh:mm:ss.ms) | Voltage (V) | Current (A) | Cutoff voltage (V) | Cutoff current (A) | Capacity (Ah) | Others |
|---|---|---|---|---|---|---|---|---|
| 1 | CCCV Chg | 4.2 | 2.0 | 0.2 | ||||
| 2 | Rest | 1:30:00.000 | ||||||
| 3 | CC DChg | 1.5 | 3.0 | |||||
| 4 | End |
Basytec
Command for this example: bmgen --target basytec --format table examples/simple_program.py
| Level | Label | Command | Parameter | Termination | Action | Registration | Comment | |
|---|---|---|---|---|---|---|---|---|
| 1 | Start | U>4.2V U<2.5V I>5A I<-5A | ||||||
| 2 | Charge | I=2.0A U=4.2V | I<0.2A | t=1s | ||||
| 3 | Pause | t>90min | t=1s | |||||
| 4 | Discharge | I=1.5A | U<3.0V | t=1s | ||||
| 5 | STOP | Stop |
The easiest way to get started is using the web version by running the command:
bmgen-server
The web interface can be accessed at http://localhost:5000
The program can also be used as a command line tool:
bmgen
The only required argument is the filename of the Python program to be translated. A dash ( - ) can be used to read from standard input.
The following options are supported:
Set the target language. Available values are bm, neware, and basytec. The default value is bm.
Set the target format. The supported formats depend on the target:
BM:
- text (default): Plain text file that can be pasted into the Battery Manager
- table: HTML table resembling the Battery Manager interface for test programs
Neware:
- xml (default): XML file that can be opened in the Neware client
- table: HTML table resembling the Neware interface for test programs
Basytec:
- text (default): Plain text PLN file that can be opened in the Basytec program
- table: HTML table resembling the Basytec interface for test programs
Name of the output file. If this option is not provided, the output is written to the terminal.
