-> Hier kostenlos registrieren
SIOS
siehe Beispiel 2. So ungefähr hab ich mir das vorgestellt. Nur das hier Quell und Zieldatenstruktur unterschiedlich sind und bei halt die Datenstruktur zum Zeitpunkt der Programmierung noch unbekannt ist...
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Dann macht man da übicherweise ein ARRAY OF xxx und kann dann mit einer simplen indirekten Adressierung umeinanderkopieren, egal wie die Struktur intern genau aussieht. Das ist in SCL dann ein Einzeiler. Nicht so kompliziert denken und programmieren!Alle Parameter sind in einer Struktur (natürlich PLCD) gespeichert.
Danke für die ausführliche Antwort.Sind die zu kopierenden Daten jedes mal von einem anderen PLC-Datentyp oder Struktur?
Wenn ja, und Du es so allgemein wie möglich halten willst, sehe ich nur die Möglichkeit die Daten per Variant zu übergeben und dann per Serialize ein Array of Byte zu erzeugen. Dieses Array deklarierst Du als temp. Die Länge solltest Du so groß wählen, wie die Daten sind. Ist das Array zu groß, werden die Quelldaten trotzdem kopiert. Musst halt abwägen wie groß die Daten max sind. Wenn 1. Element der Datenstruktur ein String ist, steht aktuelle Stringlänge im Byte 0 des tem Array of Byte. Dann weisst ja, wie viele Bytes davon Du als String auswerten musst.... Um dann alle Daten komplett in die Zieldatenstruktur zu kopieren, kann mittels Deserialize das Array of Byte in die Zieldaten kopiert werden.... Serialize und Deserialzebesitzen zusätzlich Diagnosestatus. Damit kannst entsprechend reagieren, wenn Daten zu klein oder zu groß sind. Prinzipiell solltest aber das temp Array of Byte zu groß wählen, dann sollte Alles so klappen wie Du es willst.
Weitere Kriterien wären:
Soll symbolisch rein programmiert werden, optimiert?
Ist AWL / Any Pointer "erlaubt"?
Sonstige Vorgaben, Styleguides etc...?
Sollte es rein symbolisch, optimiert, SCL, ohne Any etc. sein, ist obige Beschreibung die einzigste mir bekannte Möglichkeit. Mir wäre auch nicht bekannt, dass es der Variant Poiunter hergibt, auf dessen Elemente einzeln zuzugreifen....
Ist immer die Frage, ob sowas Sinn macht? Ansonsten, wenn die Anzahl der Datestrukturen nicht allzu groß ist, wäre vlt. eine Ausimplementierung mit den einzelenen Datentypen sinnvoller. Wie gesagt, diese Serialize und Deserialize Anweisungen sind laufzeittechnisch mehr als nicht optimal.
Den Vorschlag hab ich nicht verstanden. Wenn ich am Eingang ein Array [0..100] of Byte anlege, kann ich doch nicht eine Struktur "PLCD_Parameter" übergeben, auch wenn dieser nur 50 Byte groß sein sollte. Oder wie sollte ich deinen Vorschlag verstehen?Dann macht man da übicherweise ein ARRAY OF xxx und kann dann mit einer simplen indirekten Adressierung umeinanderkopieren, egal wie die Struktur intern genau aussieht. Das ist in SCL dann ein Einzeiler. Nicht so kompliziert denken und programmieren!
Richtig, im jeweiligen Projekt schon, aber nicht mir, der jetzt gerade den Baustein dazu vorbereitet. Verstehe nicht ganz, worauf du hinaus willst.Dann sind aber doch die Artikelparameter im Projekt bekannt... Oder kopierst Du die anonym um? Was ist PLCD?
Nen Array of UDT...Den Vorschlag hab ich nicht verstanden. Wenn ich am Eingang ein Array [0..100] of Byte anlege, kann ich doch nicht eine Struktur "PLCD_Parameter" übergeben, auch wenn dieser nur 50 Byte groß sein sollte. Oder wie sollte ich deinen Vorschlag verstehen?
Wenn Ihr dann doch in jedem Projekt dem UDT den gleichen Namen gebt “Artikel“, dann steht da in einem Projekt Name:String(30), Artikelnummer:Byte drin, im nächsten dann Name:String(50), Artikel:Int, Typ:INT. Zum Beispiel. Jetzt programmierst Du mit Artikel.Name Deine Funktion aus und forderst am Baustein den UDT an.Richtig, im jeweiligen Projekt schon, aber nicht mir, der jetzt gerade den Baustein dazu vorbereitet. Verstehe nicht ganz, worauf du hinaus willst.
PLCD bedeutet, wie @hucki schon sagte, PLC-Datentyp. Hier zu finden:
Anhang anzeigen 58238
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen