Variablen lesen und schreiben

Rund um die Software von Revolution Pi
Post Reply
Heron
Posts: 40
Joined: 13 Jul 2017, 15:30

Variablen lesen und schreiben

Post by Heron »

Hallo,

eine Frage zu den Variablen, Speziell zu den Unterschieden zwischen den Input- und Output Variablen (zBsp. im Modbus Slave Bereich).

InVars: Die kann ich über ModBus abfragen und auch schreiben. Über piTest kann ich die lesen - aber nicht schreiben.

OutVars: Die kann ich über Modbus abfragen, aber nicht schreiben; Über piTest kann ich lesen und auch schreiben.


Frage: Warum kann ich die InVars mit piTest nicht beschreiben?
Gibt es einen Variablenbereich den ich, am liebsten frei konfigurieren kann und, mit piTest lesen und schreiben kann?

Gruß,
Heron
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: Variablen lesen und schreiben

Post by volker »

piTest ist ein Hilfsprogramm zum schnellen Testen. Die Treiberaufrufe über C oder Python sind unabhängig von irgendwelchen Bereichen nutzbar. (Siehe dazu Tutorials, wie man auf das Prozessabbild zugreifen kann). Dort kannst Du mit seek auf einen beliebigen Offset im PA gehen und dann entweder read oder write auf dieses Byte (oder auch mehrere) ausführen.
Allerdings macht es keinen wirklichen Sinn auf einen Input zu schreiben, der von PiControl einem anderen Hardwaremodul (oder einem virtuellen Modul) zugeordnet ist. PiControl würde nämlich diesen Input sofort wieder mit dem real vorhandenen Eingangswert überschreiben. Genau das passiert auch bei piTest, mit dem Du durchaus schon den Schreibvorgang durchführen kannst. Allerdings liest du dann direkt danach wieder den Wert, der real an den Eingängen anliegt und nicht den, den Du grade reingeschrieben hast. Eigentlich logisch, oder?

Bei einem Ausgang ist dies anders: Der wird durch die Anwendersoftware gesetzt und verbleibt genau so im Prozessabbild, bis er von dieser oder einer anderen Anwendersoftware umgesetzt wird. Natürlich kann man den zustand eines solchen Bytes auch wieder aus dem Prozessabbild einlesen.

Der Zugriff von außen über Modbus auf den RevPi als Slave ist eine ganz andere Sache. Das hat zunächst mal mit piTest gar nichts zu tun. Das Modbus Slave Modul nimmt Anfragen eines externen Modbus Master entgegen und beantwortet sie so, wie in Modbus definiert. Dabei stellt unser Modul allerdings nur Register (16 bit breit) zur Verfügung. Hierbei wird ein Slave mit seiner Anfrage "read input registers" immer auf die AUSGÄNGE des Prozessabbildes zurückgreifen, da die Bezeichnung im PA (Ausgang / Eingang) immer aus der Sicht einer Steuerung zu sehen sind. Werte die der Revpi nach außen abgibt sind Ausgänge, während Werte, die er einliest immer Eingänge sind. Ein Modbus Master würde mit "write output registers" über Modbus Werte in den RevPi Core schreiben, daher geht das in die Inputbereiche des virtuellen Moduls im PA.

Das klingt irgendwie um 3 Ecken, ist aber streng logisch so, wie es in der Steuerungswelt üblich ist. Wenn eine Steuerung (wie der RevPi Core) als Modbus Slave fungiert, dann werden eben Ausgänge zu Eingängen in Modbus und Eingänge zu Ausgängen...

Nun zu Deiner Frage: ist es möglich eigene Bereiche zu definieren?
Ja, das geht. Wenn Du unbedingt Speicher aus dem PA als normalen Variablenspeicher nutzen willst, der über piTest gelesen und beschrieben wird, dann nehme halt einen Offset, der definitiv nicht über piCtory einem Device zugeordnet ist. Dazu kannst Du auch piTest -d aufrufen und dort nachprüfen, welche Devices welchen Speicherbereich im PA nutzen.
Wir empfehlen dies aber ausdrücklich NICHT! Wenn Du nämlich irgendwann deine Konfiguration änderst, dann könnte es sein, dass PiCtory Dir ausgerechnet in die von Dir gewählten Bereiche Module im PA anordnet. Du solltest für ein solches Vorhaben Dir Dein eigenes "virtuelles Modul" definieren, eine RAP-Datei dafür anlegen und das Modul in den Modulkatalog aufnehmen. Dann kannst Du das Modul im PiCtory ganz einfach in Deine Konfiguration einfügen und schon ist der Bereich für Deine Software reserviert. Wie das geht beschreibt Dirk in dem Tutorial dazu an einem Beispiel (Zeitschaltuhr).
Unser RevPi Motto: Don't just claim it - make it!
Heron
Posts: 40
Joined: 13 Jul 2017, 15:30

Re: Variablen lesen und schreiben

Post by Heron »

Hallo Volker,

Du hast Recht. Manchmal sieht man den Wald vor lauter Bäumen nicht....

Ich hatte wohl noch den Modbus Master dran hängen, der überschrieb mir das Ganze wieder...

Ich habe die RAP Dateien auch entdeckt. Sieht aus, als wäre das die Lösung für mein Problem. Es gibt dort auch Bereiche für DWORD's.
Gibt es irgendwo eine Liste, welche Datentypen möglich sind?


Gruß,
Heron
User avatar
volker
Posts: 1046
Joined: 09 Nov 2016, 15:41

Re: Variablen lesen und schreiben

Post by volker »

siehe indiesem Tutorial, Abschnitt E.2. Es sind die in der EN61131-3 definierten elementaren Datentypen für die Programmiersprache ST (structured text):
https://en.wikipedia.org/wiki/IEC_61131-3
Sie sollten alle erlaubt sein. Da unser PiCtory programmierer im Urlaub ist, kann ich es aber nicht definitiv bestätigen (hab selber noch nie alle mal duchprobiert...)
Unser RevPi Motto: Don't just claim it - make it!
Post Reply