Skip to main content

BK-8500-Electronic-Load python library

Project description

Python library for the BK Precision 8500 SERIES DC ELECTRONIC LOADS

Models 8500, 8502, 8510, 8512, 8514, 8518, 8520, 8522, 8524 & 8526

Protocol found at https://bkpmedia.s3.amazonaws.com/downloads/manuals/en-us/85xx_manual.pdf in the “Command details” section.

Command Line Interface

I added some command line interface utilities that use python’s “-m” module switch.

Requirements

  • pyserial>=3.4

  • continuous-threading>=2.0.0

Send Command

Send a command to a serial port and wait for a response.

python -m pybk8500.send_cmd "COM1" 9600 "Command Status" --address 1
# will send the command down a serial port and wait for a response

The command ID can be the string NAME or integer ID.

# cmd_id as str
python -m pybk8500.send_cmd "COM1" 9600 "Command Status" --address 1

# cmd_id as hex
python -m pybk8500.send_cmd "COM1" 9600 0x12 --address 1

# cmd_id as decimal
python -m pybk8500.send_cmd "COM1" 9600 18 --address 1

Parser

The parser is used to parse incoming messages. It can be used with to parse single messages, parse messages with an iterator, or parse using a callback function.

Parse Iterator Example

Use a for loop to iterate through parsed messages.

import pybk8500

with open('saved_messages.txt', 'rb') as f:
    p = pybk8500.Parser()

    for msg in p.parse_iter(f.read()):
        print(msg.NAME)
        for field, value in msg.fields().items():
            print('\t{} = {}'.format(field, value))

Parse Callback Example

Use a callback function to handle parsed messages. This is useful for GUI’s with a serial port.

import sys
import pybk8500

def print_error(error):
    print('{}: {}'.format(type(error).__name__, str(error)), file=sys.stderr)

def print_msg(msg):
    print(msg.NAME)
    for field, value in msg.fields().items():
        print('\t{} = {}'.format(field, value))

p = pybk8500.Parser()
p.error = print_error

with open('saved_messages.txt', 'rb') as f:
    p.parse(f.read(), print_msg)

Parse Single Message Example

Parse a single message at a time.

import sys
import pybk8500

def print_error(error):
    print('{}: {}'.format(type(error).__name__, str(error)), file=sys.stderr)


with open('saved_messages.txt', 'rb') as f:
    p = pybk8500.Parser()

    byts = f.read()
    while True:
        msg, error, byts = self.parse_msg(byts)
        if msg is not None:
            print(msg.NAME)
            for field, value in msg.fields().items():
                print('\t{} = {}'.format(field, value))
        elif error is not None:
            print_error(error)
        else:
            break

Commands

Generate commands and send them down a serial port

Requirements

  • pyserial

pip install pyserial

Use Commands

Create and use command easily.

Commands can be found at https://bkpmedia.s3.amazonaws.com/downloads/manuals/en-us/85xx_manual.pdf in the “Command details” section.

import pybk8500
import serial

ser = serial.Serial('COM1', 9600)

cmd = pybk8500.SetRemoteOperation(address=1, operation='Remote')
ser.write(bytes(cmd))

# Most commands have a value alias
cmd = pybk8500.SetRemoteOperation(address=1, value='Remote')
ser.write(bytes(cmd))

Commands are bytearrays which can be used as bytes. When you change a value a flag is set to indicate that the checksum must be recalculated. Calling bytes(cmd) will recalculate the checksum before converting to bytes.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pybk8500-0.2.0.tar.gz (24.7 kB view hashes)

Uploaded Source

Built Distribution

pybk8500-0.2.0-py3-none-any.whl (50.2 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page