From ca74d8073b7a55364cf1b14814c1266a99dc3568 Mon Sep 17 00:00:00 2001 From: schen Date: Wed, 17 Jun 2026 14:22:05 +0000 Subject: [PATCH] initial import --- plclink/__init__.py | 1 + plclink/cli.py | 14 ++++++++++++++ plclink/registers.py | 13 +++++++++++++ requirements.txt | 3 +++ 4 files changed, 31 insertions(+) create mode 100644 plclink/__init__.py create mode 100644 plclink/cli.py create mode 100644 plclink/registers.py create mode 100644 requirements.txt diff --git a/plclink/__init__.py b/plclink/__init__.py new file mode 100644 index 0000000..df12433 --- /dev/null +++ b/plclink/__init__.py @@ -0,0 +1 @@ +__version__ = "0.4.2" diff --git a/plclink/cli.py b/plclink/cli.py new file mode 100644 index 0000000..78139a5 --- /dev/null +++ b/plclink/cli.py @@ -0,0 +1,14 @@ +import click +from .registers import load_map + +@click.command() +@click.argument("workbook") +@click.option("--site", default="default") +def main(workbook, site): + """Generate a staged point list from the master workbook.""" + rmap = load_map(workbook, site) + for reg in rmap: + click.echo(f"{reg.addr:>6} {reg.tag:<24} {reg.kind}") + +if __name__ == "__main__": + main() diff --git a/plclink/registers.py b/plclink/registers.py new file mode 100644 index 0000000..1de2ca9 --- /dev/null +++ b/plclink/registers.py @@ -0,0 +1,13 @@ +from collections import namedtuple +Reg = namedtuple("Reg", "addr tag kind") + +def load_map(path, site): + import openpyxl + wb = openpyxl.load_workbook(path, read_only=True) + sheet = wb[site] if site in wb.sheetnames else wb.active + out = [] + for row in sheet.iter_rows(min_row=2, values_only=True): + if not row or row[0] is None: + continue + out.append(Reg(int(row[0]), str(row[1]), str(row[2] or "HR"))) + return out diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..cb74a04 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pymodbus==3.6.8 +openpyxl==3.1.2 +click==8.1.7