Seite 1 von 1

Parameter an laufendes Skript übergeben. Ist das möglich?

Verfasst: Sonntag 7. Januar 2024, 18:24
von kiaralle
Hallo,

gibt es eine Möglichkeit an ein laufendes Skript einen Parameter zu übergeben?
Also einen Parameter, der zum Beispiel die Kommunikation über RS485 kurzzeitig einstellt,
damit ein anderes Skript auf diese Schnittstelle sicher zugreifen kann?

Ich möchte ab und zu ein Holding-Register am Wechselrichter umschreiben.
Das Hauptskript greift aber ständig und kontinuierlich darauf zu.

Einzige Möglichkeit, mit meinem begrenzten Wissen, wäre die Parameter in eine Datei abzulegen und das Haupt-Skript schaut da ab und zu nach und schreibt diese Register um.

Das umschrieben mit meinem Test-Skript funktioniert, wird aber durch die Zugriffe das anderen Skriptes gestört.

Code: Alles auswählen

from pymodbus.client import ModbusSerialClient
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("adresse", type=int, help="Inverter Adresse")
parser.add_argument("register", type=int, help="Holding-Register")
parser.add_argument("value", type=int, help="Value")


args = parser.parse_args()


inverter_adresse = args.adresse
modbusregister = args.register
modbusvalue = args.value

client = ModbusSerialClient(
    port="/dev/ttyUSB0",
    startbit=1,
    databits=8,
    parity="N",
    stopbits=2,
    errorcheck="crc",
    baudrate=9600,
    method="RTU",
    timeout=5
)

client.connect()
result = client.read_holding_registers(modbusregister, 1, inverter_adresse)  # Power-Mess
print(result.registers)

schreiben = client.write_register(modbusregister, modbusvalue,  inverter_adresse)

client.close()

Gruß Ralf

Re: Parameter an laufendes Skript übergeben. Ist das möglich?

Verfasst: Sonntag 7. Januar 2024, 18:40
von __deets__
Halte ich fuer ein ziemliche bescheidenes vorgehen, besser waere es, dein Hauptskript so zu bauen, dass es diese Funktion auch beherrscht. Das verlagert das Problem aber natuerlich nur, du musst natuerlich immer noch einwirken auf dein Programm. Das macht man mit Interprozesskommunikation. Da gibt es viele Moeglichkeiten, zB kann man mit nanomsg oder zeromq einen socket oeffenen, ueber den man Anweisungen erhaelt. Und in diese Sockets kann an zB mit nanocat schreiben, oder ein Python-Skript bauen, das ein Kommando absetzt. Alternativ auch einfach normale Unix domain sockets. Das ist nicht viel anders als dein Datei-Vorgehen, nur, das keine bloede Datei rumliegt. Aber du liest auch Anweisungen aus einem geoeffneten Filedeskriptor.

Re: Parameter an laufendes Skript übergeben. Ist das möglich?

Verfasst: Sonntag 7. Januar 2024, 18:50
von kiaralle
Danke für deine Erklärung.
Das öffnet wieder kleine Fensterchen im Hirn :-)