TIA Adresse in AWL generieren

--alex--

Level-2
Beiträge
107
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

im Einsatz habe ich eine S7-300er CPU und TIA v16

Ich muss jetzt aus einer Fremdsteuerung über Modbus-TCP Daten auslesen.
Der Testaufbau ist gemacht und funktioniert auch prinzipiell.

Mein Problem liegt jetzt daran dass ich ziemlich viele Werte lesen muss und diese liegen bzgl. der Modbus-Adressen komplett verstreut am Client.
Jetzt habe ich mir eine DB mit mehrdimensionalen Arrays erstellt wo die Adressinformationen stehen.
Adresse, Länge, Speicheradresse.

Folgende Werte stehen dann in zB in diesem DB:
- 8831
- 1
- 110

Das heißt ich möchte Register 408831 mit der Länge 1 auslesen und in einen DB an die Adresse 110 speichern.

Übergabe von Adresse und Länge funktioniert schon einmal.
Mit der Generierung der Speicheradresse habe ich noch so meine Probleme.

Die muss folgendermaßen an den FB übergeben werden

P#DB100.DBX110.0 BYTE 2

(Der Input ist als any deklariert)

DB100 ist bekannt
DBX110.0 soll aus meinem DB (Speicheradresse) erstellt werden
BYTE 2 (ergibt sich aus Länge x 2)
Die Werte (110 bzw. 2) liegen mir bereits als int Variablen (x1, bzw. x2) vor.


Kann mir jemand verraten wie ich die Eingabe "P#DB100.DBX110.0 BYTE 2" in AWL generieren kann?

Mein optimistischer Ansatz mit:

P#DB100.DBX[#x1].0 BYTE [#x2]

hat natürlich nicht geklappt.


Stehe momentan komplett auf dem Schlauch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch in TIA gibt es im Informationssystem ein Kapitel über die Struktur des Zeiger-Datentyps ANY: Suchen nach "any" --> gleich eines der ersten Fundstellen: ANY (S7-300, S7-400, S7-1500)
Du müsstest eine ANY-Variable anlegen (z.B. in TEMP) und dann alle 10 Bytes der ANY-Struktur mit den nötigen Werten füllen. siehe auch Forumssuche nach "any basteln", da kannst Du z.B. das finden:
Beispiel-Programmcode für das Basteln eines ANY in AWL für die Zieladresse "DB2.DBX(IntWert).0 BYTE 8"

Harald
 
Zurück
Oben