Structarray auf Modbudbus

Curby

Level-1
Beiträge
29
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

Ich arbeite mit der Wago 880. Ich habe ein Struct, das ich in einem Array anlege und auf den Modbus lege. Das ganze sieht dann so aus:

m_Panel_config AT %MW4500: ARRAY[1..10] OF panelconfig;

In dem Struct sind verschiedene Word, Bools und auch ein String. Im Struct sind folgene Variablen drin:

aktuelle_szene: WORD := 1;
command: WORD :=0;
raum: WORD:=1;
neuer_raum: WORD;
offline: BOOL:=FALSE;
dummy: BOOL; (*damit offline = Wort lang ist*)
Passwort: STRING(10);

Über ein Pro-Face Panel greife ich jetzt auf Element[0] zu und ich kann auch auf jede Variable des Structs über Modbus zugreifen.

12288+4500 = 16788

aktuelle_szene -> MW16788
command -> MW16789
...
offline -A MW16793:X00
...

Und es funktioniert bestens. So wie ich das sehe, ist ein Struct 10 Wörter größ. Dann müsste das zweite struct im Array doch auf der Adresse 12288+4500+10 liegen. Dort passiert leider nichts. Kann mir da einer weiterhelfen?

mfg
Nils
 
Zuletzt bearbeitet:
Und es funktioniert bestens
Glaub ich nicht
ist ein Struct 10 Wörter größ


Modbus RTU arbeitet entweder mit Coil (1bit) oder Register(16bit)
Ein Struct wie du oben geschrieben hast, wird so nicht unterstützt.
Dein Struct musst du als Array of Word definieren
ungefähr so:
Code:
aktuelle_szene:            WORD := 1;
    command:                   WORD :=0;
    raum:                         WORD:=1;
    neuer_raum:                WORD;

    //offline:                       BOOL:=FALSE;   
    //dummy:                      BOOL; (*damit offline = Wort lang ist*)
// Die Bool Variablen als ein Word zusammenfassen so bekommst du 16 Bool in das Wort. Alternativ fasst Codesys jede Bool Variable in 1 Byte, so dass du nur // 2 Bool Variablen je Word hast.
Variable_Bool:WORD;

    //Passwort:                   STRING(10);
//Passwort = 10 Zeichen = 10 Byte =  5 Word
Passwort_Zeichen1_2:Word;
Passwort_Zeichen3_4:Word;
Passwort_Zeichen5_6:Word;
Passwort_Zeichen7_8:Word;
Passwort_Zeichen9_10:Word;
Damit ist dein Array 10 Worte gross
1. Wert = Adresse16788
10.Wert=Adresse 16797

Wenn du jetzt dieses Array als Array[1..10] of Word definierst erhälst du dein gewünschtes Ergebniss
Grüsse Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich hab mir jetzt mal die Größe eines Elementes des Arrays mit sizeof ausgeben lassen. Ein Element ist deutlich größer als von mir erwartet, aber ab der Startadresse eines beliebigen Elementes kann ich jede Variable des Structs wie erwartet adressieren. Hat ein Structelement einen Overhead am Ende des Adressbereiches?
 
Zurück
Oben