CODESYS - das IEC 61131-3 Programmiersystem

Willkommen im offiziellen CODESYS - Forum von 3S-Smart Software Solutions | A member of the CODESYS Group
Deutsche Version English version russian version 
Aktuelle Zeit: Mo Okt 15, 2018 8:15 pm

Alle Zeiten sind UTC




Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Adresse vordefinieren
BeitragVerfasst: Do Jul 12, 2018 3:12 pm 
Offline

Registriert: Mo Aug 14, 2006 10:19 am
Beiträge: 51
Hallo,
Man hat ja ab und zu mehrere Arrays, die Daten enthalten und zu gegebener Zeit als File weggeschrieben werden sollen.
Um dies nicht für jedes Array extra codieren zu müssen, möchte ich die zugehörigen Parameter in einem Array definieren.
Dafür vermisse ich die Möglichkeit eine Array-Adresse "indirekt" mit einem Namen im Programm zu bestimmen.

Code:
TYPE Struct_Filetransfer :
STRUCT                  
        Filename : STRING;
   ARRAY_Name:  STRING;
   Adresse_Array: POINTER TO ARRAY[0..1] OF BYTE; // hier soll die Adresse vom zugehörigen ARRAY stehen.
END_STRUCT

VAR
  my_array: ARRAY[1..10] of Struct_Filetransfer := [
                (Filename:='File1',Array_Name:='Array_1',   << und hier ??? >>    ) ,
                (Filename:='File2',Array_Name:='Array_2',   << und hier ??? >>    ) ,
          ...
          ... ] ;
end_var

...
...

Auch zur Laufzeit kann ich nicht erkennen, wie ich mit dem Array-Namen  die Adresse bestimmen kann:

my_array[1].Adresse_Array := ADR(my_array[1].Array_Name);   // ist ja definitiv falsch



Gibt's da in Codesys (3) eine Lösung ??

_________________
Vielen Dank
grauerwolf


Nach oben
   
 Betreff des Beitrags: Re: Adresse vordefinieren
BeitragVerfasst: Do Jul 26, 2018 11:29 am 
Offline

Registriert: Mi Nov 23, 2016 1:33 pm
Beiträge: 66
Hallo,

willst du im Array die Adresse des Arrays sichern?

Grüße


Nach oben
   
 Betreff des Beitrags: Re: Adresse vordefinieren
BeitragVerfasst: Mi Okt 03, 2018 2:40 pm 
Offline

Registriert: Mo Aug 14, 2006 10:19 am
Beiträge: 51
Uups, hat meine Antwort lange gedauert. War aber zwischendurch mal verhindert.

Zitat:
willst du im Array die Adresse des Arrays sichern?


Ich möchte mal mein Codebeispiel vielleicht "sprechender" gestalten:
Code:
TYPE Struct_Filetransfer :
STRUCT                 
   Filename : STRING;        // kompletter lokaler Filenamen. In dieses File will ich das Array speichern
   ARRAY_Name:  STRING;  // dient nur der Info
   Adresse_Array: POINTER TO ARRAY[0..1] OF BYTE; // hier soll die Adresse von EINEM Daten-ARRAY stehen.
END_STRUCT

VAR

  Datensammel_Array_1: ARRAY[1..10] of WORD;  // hier drin liegen gesammelte Daten
  Datensammel_Array_1: ARRAY[1..100] of Byte;  // und hier noch andere Daten

  // und nachfolgend will ich die Datemsammlungen definieren und die Arrays einem Filenamen zuordnen
  my_array: ARRAY[1..10] of Struct_Filetransfer := [
                (Filename:='File1',Array_Name:='Datensammel_Array_1',   << und hier ??? >>    ) ,
                (Filename:='File2',Array_Name:='Datensammel_Array_2',   << und hier ??? >>    ) ,
          ...
          ... ] ;
end_var


Diese Zuordnung "Datenarray" zu "File" habe ich bisher immer händisch programmiert. Ich möchte aber eine Prozedur oder Funktion bauen, die es mir erlaubt, in einem Programm nur "my_array" zu definieren und schon werden die Datenarrays gespeichert (da gehört noch dazu, wann so ein Datenarray voll ist usw.).

Das Problem ist, das sowas nicht zulässig ist:
...
Filename:='File2',Array_Name:='Datensammel_Array_2', ADR( Datensammel_Array_2));
...

Da andere Programmiersprachen solche von mir gewünschten Konstrukte ab und zu beherrschen, kann es durchaus sein, das es eine Lösung gibt - ich sie aber nicht finde.

Grüße

_________________
Vielen Dank

grauerwolf


Nach oben
   
 Betreff des Beitrags: Re: Adresse vordefinieren
BeitragVerfasst: Do Okt 04, 2018 6:23 pm 
Offline

Registriert: Mi Nov 23, 2016 1:33 pm
Beiträge: 66
Hallo Wolf,

doch, das geht, du musst dein struct ändern

Code:
TYPE filetransfer :
STRUCT
Filename : STRING;        // kompletter lokaler Filenamen. In dieses File will ich das Array speichern
   ARRAY_Name:  STRING;  // dient nur der Info
   Adresse_Array: POINTER TO BYTE; // hier soll die Adresse von EINEM Daten-ARRAY stehen.
END_STRUCT
END_TYPE


Pointer to Byte kann auch die Adresse eines Arrays aufnehmen und der indexoperator darauf ist zulässig:

Code:
VAR
   test:ARRAY[0..10]OF BYTE;
   test1:ARRAY[0..10]OF BYTE;
   testp:POINTER TO BYTE:=ADR(test);
   byte1:BYTE;
   
   my_array: ARRAY[0..10] OF filetransfer := [
                (Filename:='File1',Array_Name:='Datensammel_Array_1', Adresse_Array:=ADR(test)   ) ,
                (Filename:='File2',Array_Name:='Datensammel_Array_2',    Adresse_Array:=ADR(test)   )] ;
END_VAR

byte1:= my_array[0].Adresse_Array[0];

Du solltest nur noch die länge des arrays mit in deiner strucktur ablegen.

Code:
TYPE filetransfer :
STRUCT
Filename : STRING;        // kompletter lokaler Filenamen. In dieses File will ich das Array speichern
   ARRAY_Name:  STRING;  // dient nur der Info
   Adresse_Array: POINTER TO BYTE; // hier soll die Adresse von EINEM Daten-ARRAY stehen.
   array_size:UDINT;
END_STRUCT
END_TYPE

VAR
   test:ARRAY[0..10]OF BYTE;
   test1:ARRAY[0..10]OF WORD;
   testp:POINTER TO BYTE:=ADR(test);
   byte1:BYTE;
   
   my_array: ARRAY[0..10] OF filetransfer := [
                (Filename:='File1',Array_Name:='Datensammel_Array_1', Adresse_Array:=ADR(test) ,array_size := SIZEOF(test)  ) ,
                (Filename:='File2',Array_Name:='Datensammel_Array_2',    Adresse_Array:=ADR(test) ,array_size := SIZEOF(test1)    )] ;
END_VAR



Dann macht es richtig Spaß...


Grüße Stefan


Nach oben
   
 Betreff des Beitrags: Re: Adresse vordefinieren
BeitragVerfasst: Fr Okt 05, 2018 7:45 am 
Offline

Registriert: Mo Aug 14, 2006 10:19 am
Beiträge: 51
Hallo Stefan,

Zitat:
Dann macht es richtig Spaß...


wie sich doch die Ansichten gleichen.
Muss ich sofort ausprobieren ...

Vielen Dank
Thomas

_________________
Vielen Dank

grauerwolf


Nach oben
   
 Betreff des Beitrags: Re: Adresse vordefinieren
BeitragVerfasst: Fr Okt 05, 2018 8:01 am 
Offline

Registriert: Mi Nov 23, 2016 1:33 pm
Beiträge: 66
Hallo Wolf,

Erfolg?


Grüße Stefan


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de