Hi
welche CPU Familie möchtest du denn?
Bei einer 300/400 kann man ganz einfach abfragen ob DBx.DBDy <> 0 ist, denn eine DINT#0 hat man ja nur dann, wenn alle bits Null sind. Das kann man in allen fünf Sprachen ohne Aufstand hinbekommen. Und dann hat das Portal auch nix zu meckern, denn wenn du auf dein DBx.DBDy eine Varaible gelegt hast, dann ist ja alles symbolisch.
Bei einer 1200/1500 ist das nicht so einfach. Ist dein DBx standard, dann geht es so wie bei 300/400. Dafür wirst du aber mit deutlich langsameren Bitzugriffen belohnt. In irgendeinem Thread habe ich schon mal meine Messergebnisse dargestellt. Fazit: Lesen dauert 3 mal so lange und schreiben dauert 6 mal solange wie bei einem optimierten Baustein.
Bei einem optimierten Baustein, kann man nicht mit DBx.DBDy zugreifen. Da muss man jedes Bit einzeln adressieren. Das ist bei weitem nicht so schlecht wie es sich auf den ersten Blick anhört.
Es kommt drauf an, was in deinem Programm überwiegt. Wenn jemand 32 Bools deklariert, dann sollte man meinen er braucht auch 32 Bools.
Nehmen wir mal ein der Zugriff dauert einen Takt -- es ist völlig egal wieviele µs so ein Takt dauert.
32 Bools schreiben und 32 Bools lesen dauert in einem optimierten Baustein 64 Takte. Un zusätzlich willst du die 32 Bools auf Null vergleichen, das sind nochmals 32 Zugriffe und 32 or in SCL oder Kontakte in KOP oder ein OR mit 32 inputs in FUP. Das dauert 32 Takte
macht zusammen 96 Takte bei einem optimierten Baustein.
Jetzt kommen die AWL Trickser und schalten den Baustein auf standard. Damit verlangsamen sich alle Zugriffe. Für den Vergleich muss man nur einmal Lesen. Das Lesen eines Standard-DWORD dauert bei der 1500 etwa 8 mal so lange wie das eines optimierten DWORD (hat mir RUNTIME verraten). Wie lange der Vergleich selbst dauert ... keine Ahnung, sagen wir mal einen Takt. Bei der 1200 scheint es keinen so großen Unterschied zu machen, aber es macht einen.
Dann haben wir zusammen: Schreiben 6 * 32 + Lesen 3 * 32 + Vergleich 8+1 = 297 Takte.
Oops das ist deutlich langsamer als bei optimierten DB mit nur 96 Takten! Und ich gehe davon aus, dass man mehr als 3 Zugriffe im Zyklus hat.
Was lerne ich daraus? Die Trickserei mit AWL ist schlecht für die Performance. All das Wissen der letzten 10 Jahre mit Step7 V3 bis V5 -- all die tollen Tricks im Berger Buch -- für die Katz. Für AWL Programmierer brechen schlechte Zeiten an.
'n schönen Tach auch
HB