From b03a7cc1febe370f66df1402275da1064e9315a8 Mon Sep 17 00:00:00 2001 From: LongQi Date: Thu, 22 Oct 2020 21:52:52 +0800 Subject: [PATCH] init --- Pipfile | 12 ++++++++ Pipfile.lock | 36 ++++++++++++++++++++++++ app.py | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 app.py diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..a8b26f6 --- /dev/null +++ b/Pipfile @@ -0,0 +1,12 @@ +[[source]] +name = "pypi" +url = "https://pypi.org/simple" +verify_ssl = true + +[dev-packages] + +[packages] +minimalmodbus = "*" + +[requires] +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..7a1241b --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,36 @@ +{ + "_meta": { + "hash": { + "sha256": "d358730ee44b90784a6f9963013552670e5e6dec3c8d7bb5d885ce3e568ca43a" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.7" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "minimalmodbus": { + "hashes": [ + "sha256:5c55b1e26131e1f3b7fe55b950f8abb8a2396b77f73bc0a513cc3ef0051db526", + "sha256:ae979fa98887185d6ba9389e84038d49580a39241d969d098331ac225dd1b9ff" + ], + "index": "pypi", + "version": "==1.0.2" + }, + "pyserial": { + "hashes": [ + "sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627", + "sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8" + ], + "version": "==3.4" + } + }, + "develop": {} +} diff --git a/app.py b/app.py new file mode 100644 index 0000000..20a5328 --- /dev/null +++ b/app.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +''' +The app will try to start charging +and show the DC bus voltage, battery voltage and charging current +stop charging in 30 seconds +''' +from minimalmodbus import Instrument, MODE_RTU +import serial +import time + +VERSION = '0.1.0' +UNIT = 16 + +MODBUS_FC_READ_SINGLE_COIL = int("0x01", 16) +MODBUS_FC_READ_SINGLE_DISCRETE = int("0x02", 16) +MODBUS_FC_READ_HOLDING_REGISTERS = int("0x03", 16) +MODBUS_FC_READ_INPUT_REGISTERS = int("0x04", 16) +MODBUS_FC_WRITE_SINGLE_REGISTER = int("0x06", 16) + +enable_charger_address = 0 +dc_bus_voltage_adddress = 30 +batery_voltage_address = 32 +current_address = 31 + +def run(): + + import argparse + + parser = argparse.ArgumentParser(description='xnergy charger control demo') + + parser.add_argument('port', type=str, + help='The serial port(RS485) that connect to xnergy RCU') + + # parser.add_argument('-P', '--parallel', type=int, nargs='*', choices=(17, 18, 19), + # help='set to parallel mode, parameter is the unit id, can be used multiple times') + + parser.add_argument('-v', '--verbose', action='count', default=0, + help='verbose mode, show more information') + + args = parser.parse_args() + + instrument = Instrument(port=args.port, mode=MODE_RTU, slaveaddress=UNIT) + instrument.serial.baudrate = 9600 + # start charging + instrument.write_bit(registeraddress=enable_charger_address, value=1) + print('Start Charging, will stop charging in 30 seconds') + + counter = 0 + while True: + dc_bus_voltage = instrument.read_registers(registeraddress=dc_bus_voltage_adddress, number_of_registers=1, + functioncode=MODBUS_FC_READ_INPUT_REGISTERS) + batery_voltage = instrument.read_registers(registeraddress=batery_voltage_address, number_of_registers=1, + functioncode=MODBUS_FC_READ_INPUT_REGISTERS) + current = instrument.read_registers(registeraddress=current_address, number_of_registers=1, + functioncode=MODBUS_FC_READ_INPUT_REGISTERS) + + print( + str(counter) + ' ' + 'DC BUS voltage: ' + str(dc_bus_voltage) + ' ' + 'Battery voltage: ' + str(batery_voltage) + ' ' + 'Current: ' + str(current) + , end='\r', flush=True) + + counter += 1 + if counter > 30: + break + time.sleep(1) + print() + + # stop charging + instrument.write_bit(registeraddress=enable_charger_address, value=0) + print('Stop Charging') + + +if __name__ == "__main__": + run()