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

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

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
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
kiaralle
User
Beiträge: 68
Registriert: Donnerstag 19. August 2021, 19:11

Danke für deine Erklärung.
Das öffnet wieder kleine Fensterchen im Hirn :-)
Antworten