Skip to content
Snippets Groups Projects
Commit 0ee9c8ed authored by Benjamin Koch's avatar Benjamin Koch
Browse files

convert Modbus test script to pymodbus (instead of modbus-tk)

parent e7a1c578
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python
# -*- coding: utf_8 -*-
# based on https://github.com/pymodbus-dev/pymodbus/blob/dev/examples/client_sync.py
import logging
import time
import sys
import pymodbus
from pymodbus.exceptions import ModbusException
from pymodbus.client import ModbusSerialClient
from pymodbus.file_message import FileRecord
PORT = '/dev/ttyUSB0'
DEVICE_ADDR = 1
logger = logging.getLogger()
logger.setLevel(logging.INFO)
log_handler = logging.StreamHandler(sys.stdout)
#log_handler.setFormatter(logging.Formatter("%(asctime)s\t%(levelname)s\t%(module)s.%(funcName)s\t%(threadName)s\t%(message)s"))
logger.addHandler(log_handler)
def main():
try:
client = ModbusSerialClient(
port=PORT,
timeout=0.2,
# Common optional paramers:
# framer=ModbusRtuFramer,
# timeout=10,
# retries=3,
# retry_on_empty=False,
# close_comm_on_error=False,
# strict=True,
baudrate=19200,
parity="E",
)
client.connect()
logger.info("connected")
x = client.read_holding_registers(address=1, count=1, slave=DEVICE_ADDR)
logger.info("holding reg 1: %s: %r", x, x.registers)
x = client.read_file_record([
# documentation says tuple of: Reference type, File number, Record Number, Record Length
# but actually an object is expected:
FileRecord(file_number=0, record_number=0, record_length=7),
FileRecord(file_number=0, record_number=1, record_length=5),
FileRecord(file_number=0, record_number=2, record_length=3),
], slave=DEVICE_ADDR)
logger.info("file 0: %s:", x)
for r in x.records:
logger.info(" %s: %r", r, r.record_data)
logger.info("Bootloader state partition:")
x = client.read_file_record([
FileRecord(file_number=1, record_number=int(0x6000/2), record_length=20),
], slave=DEVICE_ADDR)
logger.info("file 1 @ bootloader state partition: %s:", x)
for r in x.records:
logger.info(" %s: %r", r, r.record_data)
toggle = True
while True:
logger.info(client.write_coil(address=0, value=toggle, slave=DEVICE_ADDR))
toggle = not toggle
x = client.read_discrete_inputs(address=0, count=5, slave=DEVICE_ADDR)
logger.info("read_discrete_inputs: %s: %r", x, x.bits)
x = client.read_input_registers(address=0, count=25, slave=DEVICE_ADDR)
logger.info("read_input_registers: %s: %r", x, x.registers)
time.sleep(0.1)
except ModbusException as exc:
logger.error("%s", exc)
if __name__ == "__main__":
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment