Step 7 Datentyp in Struktur integrieren

EPaulo

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

ich möchte in eine Temporäre Struktur ein Datentyp ANY einfügen. Aber ich bekomme einen Fehler.
Ist das grundsätzlich nicht möglich oder mach ich was falsch?
Die Struktur habe ich Angelegt weil ich sie versenden Möchte, Im ersten Teil (Kopfteil) habe ich BOOL, INT, STRING usw. und nun benötige ich noch das ANY das sind dann die Daten die von aussen angelegt werden können und die müssen nicht eine spezielle Struktur haben.
Kann mir jemand weiterhelfen?

Danke im Voraus
 
Soweit ich weiss ist das nicht möglich. Ich hab das auch schon gebraucht und habe mich dann damit beholfen einen udt zu bauen "Any_Pointer"
Code:
TYPE "ANY_POINTER"
VERSION : 0.1




  STRUCT 	
   SyntaxID : BYTE ;	
   Bereichstyp : BYTE ;	
   Anzahl_Werte : INT ;	
   DB_Nr : INT ;	
   Startadresse : DWORD ;	
  END_STRUCT ;	
END_TYPE

den kann man dann an einer baustein schnittstelle überlagern. Und hat so alle teile die man braucht in einer struktur und kann die dann an strukturen binden in der bausteinschnittstelle oder einer einem DB etc.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich möchte in eine Temporäre Struktur ein Datentyp ANY einfügen. Aber ich bekomme einen Fehler.
Ist das grundsätzlich nicht möglich oder mach ich was falsch?
ANY in einem STRUCT scheint grundsätzlich nicht möglich zu sein - warum? weiß ich nicht. Mir fällt kein Grund dagegen ein.
Wenn der ANY das erste Strukturelement ist, dann kann man sich in SCL mit einem AT behelfen.

Die Struktur habe ich Angelegt weil ich sie versenden Möchte [...] und nun benötige ich noch das ANY das sind dann die Daten die von aussen angelegt werden können und die müssen nicht eine spezielle Struktur haben.
Das klingt aber, als ob Du nicht wirklich den Datentyp ANY meinst. Vielleicht erklärst Du mal genauer, was für Daten Du wie versenden willst. (es macht selten Sinn, Pointer zu versenden)
Daten die keine spezielle Struktur haben könnte man als ARRAY OF BYTE deklarieren.

Harald
 
Ich benötige ANY weil ich keine Vorgaben mache. es sollen alle möglichen Datengrößen, Datentypen und formen angelegt werden können.

Wie kann man in AWL 2 unterschiedliche Strukturen aneinander reihen ? Das könnte mir eventuell auch weiterhelfen.
 
Mir ist nicht zweifelsfrei klargeworden was Du nun senden willst. Hast Du mal 2 Beispiele wie Dein Sendetelegramm aussehen soll, wenn Du zwei verschiedene Datengrößen/typen sendest? Kannst Du vielleicht die Sache mit dem ANY ein bisschen ausführlicher erklären?

Falls Du tatsächlich den ANY senden würdest: Was würde es dem Empfänger nützen, wenn er eine Nachricht bekäme, daß die Daten die er erwartet in Deiner SPS in DB123.DBB100...DBB103 liegen?
Irgendwo müsste noch vor dem Senden der ANY aufgelöst werden und durch die vom ANY adressierten Daten (mit verschiedener Größe) ersetzt werden. Dadurch ändert sich die Länge Deiner Sendedaten. Deshalb können die Sendedaten nicht durch nur eine Struktur erklärt werden. (höchstens als STRING)
Muß der ANY Bestandteil der Struktur sein? Kannst Du nicht 2 getrennte Datenbereiche handeln: eine Struktur "Standarddaten" + einen ANY "Extradaten"? Kannst Du vielleicht da, wo Du die Struktur und den ANY verheiraten willst, nicht gleich den ANY auflösen und durch die adressierten Daten ersetzen?

Wer/was bestimmt eigentlich, was in dem ANY drinsteht? Kann derjenige Programmteil nicht auch gleich die Daten als String oder Byte-Array mit Längenangabe mitliefern?

Nächstes Problem: Falls Du tatsächlich "alle mögliche Datengrößen und Datentypen" senden würdest: Woran kann der Daten-Empfänger erkennen, was da mitgesendet wurde und wie groß die Nachricht ist?

Wie kann man in AWL 2 unterschiedliche Strukturen aneinander reihen ?
Man kann in DB oder TEMP einfach mehrere Strukturen hintereinander anlegen, gerne auch mit ANY dazwischen. Will man die hintereinanderliegenden Strukturen symbolisch als eine Einheit behandeln, dann kann man eine zusammenfassende "Überstruktur" um die Teilstrukturen legen - aber nicht, wenn eine Teilstruktur ein ANY ist.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gebe dir recht das dies zu einem Problem führen würde.
Aber im gründe soll es so sein das der Baustein die Daten senden soll

Im Grunde wird an jeden Baustein ein ID vergeben, diese muss vorher mit dem Programmierer des Zielrechner abgesprochen werden. Dann Werden die Daten am Any Eingang angelegt und am Eingang mit der Länge wird angegeben wie lange die zu senden Daten zusätzlich sammeln wir im Kopf Bereich noch einige andere Stationäre Daten und wollen anschließend alles senden. Ein Stop bit will der Empfänger der Telegramm nicht haben, er möchte im Kopfteil wissen wie lange das jeweilige Telegramm ist.

Daher auch mein Problem das ich meine Kopfstruktur und meine zu senden Daten (ANY) gerne in einem Telegramm senden würde und hierzu müsste ich beide zusammenführen.

Edgar
 
Daher auch mein Problem das ich meine Kopfstruktur und meine zu senden Daten (ANY) gerne in einem Telegramm senden würde und hierzu müsste ich beide zusammenführen.
Richtig, aber in die zusammengeführte Sendedaten-Struktur kommt nicht der ANY sondern die Daten, auf die der ANY zeigt.
Da könntest Du für den variablen Teil der Sendedaten-Struktur ein Byte- oder Char-Array für die maximal nötige Länge vorsehen, und mit Hilfe der Längenangabe aus dem ANY die tatsächliche Länge der Gesamtstruktur dem Sendeprogrammteil mitteilen.

Harald
 
Soweit ich weiss ist das nicht möglich. Ich hab das auch schon gebraucht und habe mich dann damit beholfen einen udt zu bauen "Any_Pointer"
Code:
TYPE "ANY_POINTER"
VERSION : 0.1

  STRUCT     
   SyntaxID : BYTE ;    
   Bereichstyp : BYTE ;    
   Anzahl_Werte : INT ;    
   DB_Nr : INT ;    
   Startadresse : DWORD ;    
  END_STRUCT ;    
END_TYPE

den kann man dann an einer baustein schnittstelle überlagern. Und hat so alle teile die man braucht in einer struktur und kann die dann an strukturen binden in der bausteinschnittstelle oder einer einem DB etc.

mfG René


Hi,

ich mache das fast genauso. Ich habe einen FC der mir einen ANY in ein UDT zerlegt, welches ich dann Speicher und wenn ich den ANY erneute brauche bau ich ihn mir an der passenden Stelle aus dem UDT wieder zusammen. Würder daher auch empfehlen in dein UDT ein UDT für ANY einzufügen und das zu übergeben.
 
Zurück
Oben