TIA SCL: WORD in 16 Bit lange STRUCT schreiben

danube

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag liebe Gemeinde! Ich versuche mittels SCL ein Eingangswort an eine 16 Bit lange Struktur in einem FB zu übertragen. Hat jemand eine Idee, wie ich das bewerkstelligen kann?

Eingesetzt wird TIA Prof v12 SP1.

Besten Dank!
Thomas
 
Wenn ich das jetzt richtig verstehe und das mit TIA noch funktioniert, musst du in der SCL-Hilfe mal nach "AT" suchen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie sieht die Struktur aus? Array?? Bool ? word? byte?? Ich gehe mal davon aus, dass du deine Bausteine optimiert lassen willst?
Dann mal ein Beispiel:
Code:
Meine_Struktur_Bool_0 := Mein_Eingangswort.x0;
Meine_Struktur_Bool_1 := Mein_Eingangswort.x1;
.
.
 
AT geht nur mit nicht-optimierten Bausteinen... dies ist nicht zu empfehlen. Warum? Frag HelleBarde... er hat schon viele nützliche Sache Performance und Laufzeit geschrieben... :) Wird übrigens von big S. auch nicht empfohlen...
 
Ich habe einen FB, in dessem Static-Bereich ich eine UDT mit 16 Bit aufrufe.
Die Aufgabe ist nun, ein Eingangswort (welches ich von einem angeschlossenen Frequenzumrichter erhalte) in diese Struktur zu schreiben, um die verschiedenen Zustände anschließend im Programmteil auszuwerten.

Im Anschluss geht das Spielchen wieder rückwärts, ich schreibe also verschiedene Befehle wiederum in eine 16 Bit lange UDT, welche ich im Static-Bereich aufrufe. Den Inhalt dieser 16 Bit beabsichtige ich anschließend als Ausgangswort an die Peripherie zu übertragen.
 
AT geht nur mit nicht-optimierten Bausteinen... dies ist nicht zu empfehlen. Warum? Frag HelleBarde... er hat schon viele nützliche Sache Performance und Laufzeit geschrieben... :) Wird übrigens von big S. auch nicht empfohlen...

Ihr tut immer so, als ob die SPS dann nicht mehr laufen würde. Klar kann man das machen, wenn man insgesamt mit der Zykluszeit zurecht kommt. Es ist ja nicht so, dass die SPS dann Schneckenlangsam wird.
 
Hallo Thomas,

.. ein Eingangswort (welches ich von einem angeschlossenen Frequenzumrichter erhalte) in diese Struktur zu schreiben..
Diese Daten vom FU liegen doch sicherlich in einem DB? Kannst du in diesem DB nicht einfach den selben UDT verwenden? Das würde die Sache in SCL wesentlich vereinfachen.


Gruß, Onkel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,

Diese Daten vom FU liegen doch sicherlich in einem DB? Kannst du in diesem DB nicht einfach den selben UDT verwenden? Das würde die Sache in SCL wesentlich vereinfachen.


Gruß, Onkel

Hallo Onkel. Die Daten erhalte ich erst mal auf den in der Konfiguration parametrierten Eingängen. Hierfür sind 4 Worte vorgesehen, wobei mein Interesse nur dem ersten Wort gilt. In gewisser Weise zielt mein Versuch ja nun darauf ab, diese Informationen DB-tauglich zu gestalten.

Das Einlesen des Eingangswortes habe ich bereits geschafft, auch das Kopieren des Wortes in eine WORD-Variable ist kein Problem. Lediglich am Transferieren des Wortes in die 16 Bit lange STRUCT schaffe ich nicht... :cry:
 
hallo danube,
schau dir meinen Beitrag #3 an. Da habe ich dir einen Lösungsansatz gegeben...
Ansonsten....In einem anderen Beitrag gabs dasselbe Problem... Mein Lösungsvorschlag wurde dann umgesetzt KLICK
 
hallo danube,
schau dir meinen Beitrag #3 an. Da habe ich dir einen Lösungsansatz gegeben...
Ansonsten....In einem anderen Beitrag gabs dasselbe Problem... Mein Lösungsvorschlag wurde dann umgesetzt KLICK

Hab ich gesehen und ich stimme Dir zu, damit wird es funktionieren. Um allerdings auf die Eingänge zuzugreifen, ist der PEEK Befehl zu verwenden. Vielen Dank!

Allerdings finde ich diesen wenig praktikabel, sobald sich die Anzahl der auszuwertenden Informationen erhöht. Deshalb frage ich mich (und Euch), ob es hier keinen kompakten Dreizeiler gibt, der die Aufgabe für mich übernimmt (unabhängig der zu übertragenden Datenmenge)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfacher gehts dann schon, wenn du in dem DB von dem FU gleich eine Struktur mit den Bits anlegst und das Wort da rein schreibst so wie Onkel Dagobert das geschrieben hat.
 
Aus der Hilfe, schon gesehn? Vllt hilfts..

SCL
#myWord := PEEK_WORD(area:=16#84, dbNumber:=1, byteOffset:=#myInt);
//...
#myBool:=PEEK_BOOL(area:=16#84, dbNumber:=1, byteOffset:=#myByteOffset, bitOffset:=#myBitOffset);
//...
POKE(area:=16#84,dbNumber:=1,byteOffset:=#myInt,value:=12);
//...
 
Aus der Hilfe, schon gesehn? Vllt hilfts..

PEEKen tu ich schon, und zwar folgendermaßen:
Code:
#tmpW := PEEK_WORD(area := 81, dbNumber := 0, byteOffset := #II_EA);
Der Anwender kann auf II_EA die Peripherie-Eingangsadresse parametrieren und ich schreibe dann dessen erstes Eingangswort auf meine temporäre tmpW Variable. Damit ist der erste Teil bereits geschafft.

Jetzt scheitere ich nur noch daran, den als WORD formatierten Inhalt meiner tmpW Variable in die 16 bit lange UDT reinzudrücken... Im Moment versuche ich mich mit MOVE_BLK_VARIANT...

Falls gar nix Anderes geht, muss ich wohl einen globalen DB verwenden und das Wort reinpoken, was allerdings schade wäre, da ich an einem Standard programmiere und zusätzliche Bausteine grundsätzlich zu vermeiden wäre. Gutes altes (versautes) AWL...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@xperia: Bitte schön :)

@danube

...und dem Zweifel, dass die Optimierung vorteilhaft ist.

Was früher ging, geht mit der Optimierung zum Teil nicht... Aber dann würde ich weiter auf der 300er statt auf der 1500er programmieren... Es gibt aber viele tolle Sachen... und die "Optimierung" hat seine Vorteile und Vorzüge. Nur gehen gewisse Sachen, aber dafür viele neue andere.

Aber sollte es nicht so gehen?

ddaa.PNG
 
@xperia: Bitte schön :)

@danube



Was früher ging, geht mit der Optimierung zum Teil nicht... Aber dann würde ich weiter auf der 300er statt auf der 1500er programmieren... Es gibt aber viele tolle Sachen... und die "Optimierung" hat seine Vorteile und Vorzüge. Nur gehen gewisse Sachen, aber dafür viele neue andere.

Aber sollte es nicht so gehen?

Anhang anzeigen 22604

Na super, biste ja wieder bei der alten Sch…. und auch noch Absolut ohne Symbolik. Ich denke in TIA ist nun alles besser und einfacher! :?
 
Na super, biste ja wieder bei der alten Sch…. und auch noch Absolut ohne Symbolik. Ich denke in TIA ist nun alles besser und einfacher! :???:

Da der Themenstarter mit nicht-optimierten Bausteinen arbeiten will, ist es wie früher... er wollte es so... wenn TIA "besser und einfacher" sein soll, dann sollte es man auch so nutzen wie vorgesehen und nicht wieder auf nicht-optimierte Bausteine umschalten. Dann hast du, wie du schon sagst, den ..

In diesem Sinne... umschalten auf optimierte Bausteine, dann gibt es nur noch Symbolik und keine absoluten Adressen... Einge geeignete Struktur des DBs sich überlegen, die Möglichkeiten prüfen, wie man die Daten da rein bekommt, und alles wird gut :) Gute Nacht :=)
 
Zurück
Oben