TIA TIA V15 STRUCT to WORD

Floopy

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin moin,

ich habe schon ein wenig über dieses Thema im Forum gelesen, aber leider brachte es mir keine zufriedenstellende Lösung. Deshalb hoffe ich auch Eure Hilfe.

Folgendes Problem: Ich will eine 16 Bits-Struktur in einem Word umwandeln. Mit BLKMOV Variant meckert es. Ich bekomme stets die Fehlermeldung "der Zugriff auf einem optimierten Speicherbereich ist an dieser Stelle nicht zugelassen" Mit V13 ging's aber noch.

Hat jemand eine bessere Idee, wie ich zurecht komme? vorab Danke !

Flo
 
Persönlich habe ich mir ein paar FC gebastelt, die das bewerkstelligen.

Also
IN myStruct: Struct 16 Bits (B0 - B15) benannt
Out Word

Word.X0 := myStruct.B0 ;
Word.X1 := myStruct.B1 ;
usw ...

Eine intelligentere Möglichkeit um im optimierten Spektrum zu bleiben ist mir bisher noch nicht wirklich eingefallen :)

Mfg
Manuel
 
Ah, erklärt auch warum ich das (noch) nicht kannte, die obige Tour ziehe ich jetzt seit V11 so durch 99% der TIA Projekte.

Jene Anweisungen wurden bei V14 SP1 als Innovation angepriesen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

wenn ich meine Funktionsbaustein "Leerbox" einfügen und dann ga.. oder sc.. eingeben erscheint bei mir kein gather oder scatter?!:confused: Auch wenn ich in den Reitern "Anweisungen" nach diesen Funktionen suche finde ich diese nicht. Aktuell habe ich V15 upd 4, wurde es da wieder entfernt oder brauche ich ein zusätzliches Optionspaket?

Edit: meine FM ist 2.5, laut Siemens geht es erst ab FM2.1. Soweit so gut.
 
Zuletzt bearbeitet:
Hi,

S7-1500 -> 1512c

Edit: gelöst habe ich es so, wie ursprünglich MSB. Da ich aber gerne das Forum durchstöber und öfters auf interessante Punkte stoße, wollte ich dies mal bei mir ausprobieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin MSB,


IN myStruct: Struct 16 Bits (B0 - B15)


...dann kannst Du statt einer struct auch gleich ein array[0..15] of bool anlegen...


Dafür hatte ich mal eine Kleinigkeit geschrieben:
Code:
Input
Iab: Array[0..15] of bool

InOut
IOw: Word

Temp
i: int
Tw_mask: Word


FOR #i := 0 TO 15 DO
    #Tw_mask := SHL_WORD(IN := w#16#1, N := INT_TO_ULINT(#i));
    IF #Iab[#i] THEN
        #IOw := #IOw OR #Tw_mask;
    ELSE
        #IOw := #IOw AND (#Tw_mask XOR w#16#ffff);
    END_IF;
END_FOR;


Edit: Warum einfach, wenn es auch kompliziert geht.

VG

Mfreiberger
 
Was für eine CPU hast Du? Gather und Scatter gibt es nur für S7-1200 und S7-1500.
(Für S7-300/400 kann man sich die Funktionen relativ einfach selber programmieren.)

Harald

ich muss mal wieder feststellen, dass dieses Forum echt der Hammer ist! Habe gerade genau diese Funktion benötigt (Scatter) und bin hier fündig geworden (Dank hab ich schon abgegeben). In der Classic Welt ging diese Funktion noch mit BLKMOVE nach Bausteinkonvertierung ins TIA V16 stand ich dann vor dem Problem, das es so nicht mehr geht. Scatter war die Lösung.
 
In der Classic Welt ging diese Funktion noch mit BLKMOVE nach Bausteinkonvertierung ins TIA V16 stand ich dann vor dem Problem, das es so nicht mehr geht. Scatter war die Lösung.
Alternativ funktioniert auch mit einem AT überlagern auch im optimierten FB, sofern man die Remanenz der zu überlagernden Variable auf "im IDB setzen" einstellt.
;)
 
Zurück
Oben