Modbus: Deklaration eines Pointers mit mehreren auszulesenden Adressen

L

Luk-11

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich in FUP den Block ETHERNET_MODBUSMASTER_TCP verwende, gibt es eine Variable ptREAD_DATA. Hier muss ich spezifizieren in welchem Adressbereich die ausgelesenen Daten gespeichert werden sollen.
Ich möchte einen Block von 100 Variablen aus meinem Slave auslesen. Deshalb habe ich ein Array definiert:
Code:
myInData: ARRAY[0..99] OF INT;
Ich möchte, dass dieser Block von 100 Variablen vom Typ INT in meinem Master im Adressbereich 12388 aufwärts gespeichert wird. Ich habe deshalb in einem separaten init-Programm in ST folgende Deklaration geschrieben:
Code:
myInData[0] := 12388;
FOR idx := 1 TO 99 DO
    myInData[idx] := myInData[idx-1]+1;
Ich bin mir nicht sicher wo genau das Problem liegt, erhalte beim Übersetzen aber die Fehlermeldung: "Unzulässiger Typ für Eingang 'ptREAD_DATA" von 'ETHERNET_MODBUSMASTER_TCP': Kann 'ARRAY[0..99] OF WORD' nicht in 'POINTER TO BYTE' konvertieren"
Die Variable myInData habe ich dabei dem Eingang ptREAD_DATA zugewiesen. Hat eine Adresse einen bestimmten Datentyp? Ich dachte ich könnte die Adresse ganz einfach über eine Zahl (INT) ansprechen, so wie ich es getan habe.
 
okay. Das Problem ist behoben. Ich habe an ptREAD_DATA jetzt als Eingang
Code:
ADR(myInData)
angehängt und das separate Programm zur Initialisierung wieder gelöscht. Eigentlich ist es merkwürdig, dass es so funktioniert: Ich habe die Adressen, an denen die einzelnen Elemente von myInData gespeichert werden sollen, ja gar nicht festgelegt. Ich nehme also an, dass diese Elemente einfach irgendwo gespeichert werden und ich über ADR(myInData) dann diese Adressen ermittel.

Das Programm wird so zwar fehlerfrei übersetzt, aber eigentlich möchte ich die Adressen, an denen die Elemente von myInData liegen, selbst festlegen.
Als Zwischenlösung habe ich daran gedacht einzelne Variablen anzulegen, z.B.:
Code:
firstElementOfMyInData AT %MW0: INT

Und dann würde ich über einen WORD_TO_INT Block myInData[0] der Variablen firstElementOfMyInData zuweisen. Nun weiß ich, dass dieser Wert bei Adresse %MW0 = 12388 gespeichert ist. Allerdings erscheint mir das nicht gerade als klügster Weg, weil ich meine Variablen so ja doppelt speichere.
 
Zuletzt bearbeitet von einem Moderator:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast es doch inzwischen fast:

Code:
myInData AT %MW100 : ARRAY[0..99] OF INT;
Gruß

PS: MW0 = 12288; MW100 = 12388
PSS: DATENTYP in INT geändert
 
Zuletzt bearbeitet:
Zurück
Oben