- Beiträge
- 9.080
- Reaktionspunkte
- 2.222
-> Hier kostenlos registrieren
Die Ausgang NDR (new data received) auf die Receive_P2P Baustein meldet wenn die Daten bereit sind.
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.
Du hast wieder mal recht HeinrichWenn man ohnehin das VerOdern vorzeitig abbrechen möchte, dann kann man sich das VerOdern doch eigentlich ganz ersparen.
//AWL mit Array-Adressierung (nur mit optimiertem DB?)
// For #i := 50 TO 1 BY -1 DO
L 50
LOR: + -1 //weil Array[0..49]
T #i
L 0.0
L "MyDB".RealArray[#i]
<>R
SPB MEND //Wert <> 0.0 gefunden!
L #i
+ 1 //weil Array[0..49]
LOOP LOR
L 0.0
MEND: T "MyDB".rResult
warum lädst du hier L 0 verstehe ich nicht!L 0 MEND: T "MyDB".dwResult
Damit man (das Ergebnis der Prüfung) sehen kann, dass kein einziger Eintrag mit einem Wert <> 0 gefunden wurde bzw. dass alle 50 Einträge = 0 sind.warum lädst du hier L 0 verstehe ich nicht!
Danke für die Zeitmessungen. Könntest Du evtl. auch mal SCL mit nicht optimiertem Speicher messen?Mit 50 Real Werten:
AWL optimiert ~8µs
SCL optimiert ~10µs
AWL nicht optimiert ~17µs
+ 1
addieren.Also bei der 1500 werden alle Programmiersprachen direkt in Maschinencode übersetzt. Es dürfte also egal sein, welche Sprache verwendet wird, man sollte deshalb auf Übersichtlichkeit setzen, in Deinem Fall bei 50 Array Elementen addieren in Schleife mit Arrayindex in SCL.
Laut den Personen welche die Firmware analysiert haben, ist der übersetzte Code für eine virtuelle Maschine die innerhalb einer Sandbox auf den SPS Betriebssystem läuft. Also mindestens 3 Ebenen dazwischen was üblich unter "Maschinencode" verstanden wird.
Ich meine das war hier im Forum bei Erscheinen auch schon verlinkt worden:Oder liege ich mit diesem Verständnis noch ca. 3 (oder mehr?) Ebenen neben dem, was Du gemeint hast?![]()
Ahhh ja. Das Bemühen, den Hackern der PLCs das Leben nicht unnötig leicht zu machen - das hattest Du gemeint.Ich meine das ...
Warum Siemens das jetzt gemacht hat, weiss ich auch nicht. Jedenfalls ist das aber m.M. einer der ganz wenigen wirklichen Vorteile vom TIA. Im Gegensatz zu den zig NachteilenAch, das wußte ich noch gar nicht. Welche Kunden/Programmierer verlangen denn, daß AWL nur für die S7-1500 noch weiterentwickelt wird/wurde?? Können/wollen die kein SCL oder ist SCL nicht effizient genug?
Da trau ich dem Frieden perse nichtEin Vergleich eines REAL-Wertes auf "gleich 0.0" ist kein Problem. Der Wert 0.0 ist im REAL-Format exakt darstellbar. Problematisch ist höchstens, ob ein Analogeingangswert oder das Ergebnis einer Berechnung exakt 0.0 ergibt. Hier im Thema kommt die 0.0 allerdings durch Kommunikationsausfall als Ersatzwert zustande (alle Bits = 0 ist DW#16#00000000 = REAL#0.0). Da ist der Vergleich auf "gleich 0.0" praktikabel.
Irgendwo stand mal in einer Siemens Anleitung, dass bei den 1200 und 1500 SPSen der Code direkt übersetzt wird im Gegensatz zu den 300 / 400, wo FUP und KOP zuerst in AWL und dann in Maschinencode übersetzt werden.Woher hast du denn die Information über den "Maschinencode"? Laut den Personen welche die Firmware analysiert haben, ist der übersetzte Code für eine virtuelle Maschine die innerhalb einer Sandbox auf den SPS Betriebssystem läuft. Also mindestens 3 Ebenen dazwischen was üblich unter "Maschinencode" verstanden wird. Bei Codesys sieht das anders aus.
Nein, Thomas redet davon, was da im Inneren einer Hardware-SPS abläuft.Ich spreche hier von Hardware SPS, Du scheinst laut den Begriffen virtuelle Maschine und Sandbox von einer Software-SPS zu reden
Jeder Testcode war sein eigener FC, also wurde der Bausteinaufruf mit gemessen.Hast Du den Testcode jeweils in FC verpackt und bei der Zeitmessung auch den Baustein-Aufruf mitgemessen? Wurde da das Array aus einem DB an den Baustein übergeben? Als INPUT oder IN_OUT? All das kann großen Einfluß auf die Ausführungszeit des eigentlichen Codes haben.
Interessant wären auch Vergleiche mit verschiedenen SCL-Compiler-Einstellungen, z.B. ob der erzeugte Code beobachtbar sein soll, oder ENO setzen, oder ARRAY-Grenzen prüfen, oder simulierbar oder welche Optionen es da gibt. Oder welchen Einfluß es hat, wenn man in der Schleife Werte aus einem Global-DB oder aus TEMP oder STAT addiert.
Das kam von mir, und ich habe mir versprochen.Irgendwie sehe ich keinen Faktor 10 zwischen "optimiert" und "Standard" Speicher![]()
Ich habe die Verdacht dass dies erledigt das Problem ohne dass man die AWL oder SCL code superoptimieren muss.Die Ausgang NDR (new data received) auf die Receive_P2P Baustein meldet wenn die Daten bereit sind.
Nochmal kurz Off Topic
Jeder Testcode war sein eigener FC, also wurde der Bausteinaufruf mit gemessen.
Bis auf deinen Baustein, der absolut auf die Arrayelemente zugegriffen hat, wurden das Array als Input übergeben.
Ich bezweifle einen großen Unterschied, da das Array, meines Wissens ohnehin als Pointer übergeben wird.
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