Datentyp und initialisieren

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
jr1
User
Beiträge: 6
Registriert: Sonntag 23. November 2025, 20:01

Hallo,

ich habe einen Knoten im Kopf und komme nicht weiter.....

In meinem Code, Thema pymodbus, wird bei reads ein Returnwert zurückgegeben, der den Status als auch die Werte beinhaltet.


Für Tests und Simulation wollte ich mir nun diesen Returnwert "selber" erzeugen, weil ich an dieser Stelle keinen Zugriff auf Modbus etc habe.
Aber wie erzeuge ich die "strutur", in C gedacht ?

Mein Versuch:
int anzsens = 5 ## demo

rr.registers = [0 * i for i in range(anzsens)]


funktioniert nicht, weil rr noch nicht existiert. Das macht Sinn.
Aber structs gibt es doch in python nicht...?
Ich muss erst rr anlegen....aber wie, damit ich dann das Array anhängen kann?

Kann es sein, das die Konstruktion abhängig von python3 Versionen ist ?

Vielen Dank für einen Hinweis.
Und ja, selber die Lösung suchen schult mehr, aber....z.Z. geht es um den Inhalt.

Danke

JR
Benutzeravatar
__blackjack__
User
Beiträge: 14413
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@jr1: Ich verstehe die Frage nicht so wirklich. Natürlich muss man Objekte die man verwenden will vor der Verwendung erstellen. Was soll `rr` denn sein? Wie sähe das denn in C als ``struct`` aus? Python's Verbunddatentyp ist die Klasse. So eine würde man wahrscheinlich schreiben. Die sollte natürlich mehr als nur ein Attribut haben, denn das ist in der Regel nicht sinnvoll.

Falls diese Zuweisung zur Initialisierung gehört, dann steht die nicht ausserhalb der Klasse im Code, sondern in der `__init__()`-Methode.

Randbemerkung: Namen sollten keine komischen Abkürzungen enthalten, oder gar nur daraus bestehen. `anzsens` kann man ja noch erraten, dass das wahrscheinlich `sensorenanzahl` heissen soll, aber bei `rr` hört's dann auf. Vielleicht würde man die Frage auch schon besser verstehen, wenn man an dem Namen erkennen könnte, was dieses Objekt für eine Bedeutung im Programm haben soll.

Echter Code wäre auch nett, denn ``int anzsens = 5 ## demo`` ist ein Syntaxfehler. Den Typ würde man hier aber auch gar nicht angeben, denn das der Wert 5 vom Typ `int` ist, wissen sowohl Menschen als auch der Rechner.

``[0 * i for i in range(anzsens)]`` ist ziemlich umständlich ausgedrückt vom Ergebnis her ja einfach nur ``[0] * anzsens``.
“The city's central computer told you? R2D2, you know better than to trust a strange computer!” — C3PO
Benutzeravatar
DeaD_EyE
User
Beiträge: 1352
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Wieso beschäftigen sich jetzt auf einmal wieder so viele mit ModBus?
Wenn ich Morgen wieder auf der Arbeit bin, kann ich mal Beispielcode für die Logo 8.3 von Siemens posten.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Sirius3
User
Beiträge: 18418
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann übersetze ich mal die Frage. In einem Programm werden per pymodbus Register per read_coils gelesen: https://pymodbus.readthedocs.io/en/late ... e-handling
Der Rückgabewert ist ein pymodbus.pdu.ModbusPDU-Objekt.
Das kann dann natürlich auch selbst erzeugt werden:

Code: Alles auswählen

rr = pymodbus.pdu.ModbusPDU(registers=[0] * anzsens)
Antworten