TIA Der S7-1200 unter den Rock geschaut

Zuviel Werbung?
-> Hier kostenlos registrieren
Ansonsten muss noch jede verfügbare Anweisung einmal in allen verschiedenen Varianten aufrufen und den Aufbau dokumentieren

denkst du es macht Sinn einen SCL-Varianten-Generator dafür zu entwickeln - um wirklich alle Kombinationen abzudecken

und hast du schon mal das AWL-Zeug der 1500 angeschaut - moeglichweise siehst du da ja noch besser wie diese "IL"-Code aufgebaut ist
 
Bei der 1500er habe ich mir das noch überhaupt nicht angeschaut, ganz einfach aus dem Grunde weil ich noch keine zur Analyse auf dem Tisch hatte. Ich habe nur gehört, dass angeblich der reine Code-Blob beim Upload auch ohne Bausteinschutz o.ä. verschlüsselt sein soll. D.h. wenn ein und derselbe Baustein mehrmals hochgeladen wird, soll der Blob komplett unterschiedlich sein. Vielleicht kann man ihn ja im Rohformat aus den TIA-Projektdateien auslesen. Aber das Format ist leider auch noch nicht verstanden, im Gegensatz zu dem was über das Netzwerk wandert.

Ich vermute aber aufgrund von einigen MC7plus Anweisungen, dass die AWL-Anweisungen der 1500 auf der gleichen Ebene wie die anderen MC7plus-Anweisungen die aus FUP/SCL generiert werden, arbeiten. D.h. AWL ist keine Ebene darunter wie es bei der S7 war.
Aber vermuten ist nicht wissen. Es könnte ja mal jemand mit Zugriff auf eine 1500 testen, ob dieser Code-Blob wirklich verschlüsselt ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
denkst du es macht Sinn einen SCL-Varianten-Generator dafür zu entwickeln - um wirklich alle Kombinationen abzudecken

und zu dieser Idee?

Es könnte ja mal jemand mit Zugriff auf eine 1500 testen, ob dieser Code-Blob wirklich verschlüsselt ist.

hast du ein Standard-Projekt zum runterladen und zur besseren Vergleichbarkeit, und davon dann ein Wireshark-Log beim Download auf die SPS? und die Projektdatei?
 
hast du ein Standard-Projekt zum runterladen und zur besseren Vergleichbarkeit, und davon dann ein Wireshark-Log beim Download auf die SPS? und die Projektdatei?
Den Punkt habe ich gerade geklärt indem ich mir einfach den Upload zu Plcsim abgegriffen habe.
Der Code-Block ist verschlüsselt :(
Ich weiß nicht was Siemens dazu verwendet. Von den Bezeichnungen her könnte man auf etwas wie AES oder DES (zumindest symmetrisch) schließen. Auf jeden Fall für den Teil wird kein extra Schlüssel ausgehandelt, oder es wird mit den Parametern die für die Session verwendet werden kombiniert. Wir brauchen mal einen Krypto-Experten...
 
denkst du es macht Sinn einen SCL-Varianten-Generator dafür zu entwickeln - um wirklich alle Kombinationen abzudecken

Das wäre nur sinnvoll, wenn man den Übersetzungsvorgang und den Upload auch automatisieren könnte. Und dazu stellt einem das TIA-Portal (noch) nichts zur Verfügung. Und die Daten aus Wireshark müsste man ebenfalls automatisch extrahieren und dann damit kombinieren. Sicher möglich, aber vom Aufwand her das zu automatisieren steht es einer händischen Lösung in nichts nach.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
[h=1]TIA Portal Openness: Introduction and Demo Application[/h]https://support.industry.siemens.com/cs/document/108716692/tia-portal-openness%3A-introduction-and-demo-application?dti=0&lc=en-KW
https://support.industry.siemens.co...TIA_Openness_GettingStartedAndDemo_V14_en.pdf

aus dem PDF

For the XML import of blocks to a controller an “enable file” is required. This filehas to be copied to the directory of your program.In addition, to the XML import and for the use of imported blocks (open,compile, download,...) you require a “usage file”. Copy this file to the TIA Portalinstallation directory “... > Siemens > Automation > Portal V14 > Public API” orto a sub-directory of this file

Compiling elementsThe device can be compiled with TIA Portal Openness

Generating block from sourceWhen a source is selected you can generate a block from the source with “PLC >Source files > Generate blocks from external source”.

könnte brauchbar sein fuer Source genieren, kompilieren, download, Online-upload, disassemble Vergleiche - vielleicht sogar voll automatisiert
 
Zuletzt bearbeitet:
Wie ich jetzt herausgefunden habe, wird der Code in der Steuerung nicht als reiner Quelltext abgelegt, sondern das Ergebnis des Übersetzungsvorgangs in Form eines Syntaxbaums im XML-Format. Beim Herunterladen von der Steuerung wird dieser Syntaxbaum wieder in Code übersetzt.

Um auf mein Beispiel von der ersten Seite zurückzukommen, wird die SCL-Anweisung:
Code:
"MW2" := 26214;
dann als Teil im Syntaxbaum des gesamten Bausteins folgendermaßen abgelegt:
Code:
<Statement
    UId="114"
    SI="STAss">
    <Expression
        UId="111"
        SI="ExprPrimD">
        <SymVa
            UId="164"
            SI="VarAbs"
            SyId="7"/>
    </Expression>
    <BL/>
    <OpAs
        UId="69"/>
    <BL/>
    <Expression
        UId="65"
        SI="ExprPrimC">
        <Const
            TE="26214"
            UId="173"
            SI="ConstDInt"
            SyId="15"/>
    </Expression>
    <FiSt/>
</Statement>

Kommentare im Quelltext landen dann ebenfalls als Element in diesem Baum.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Testprogramm:
Code:
FUNCTION "TestFC99" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      inInt1 : Int;
      inInt2 : Int;
   END_VAR

   VAR_OUTPUT 
      outInt1 : Int;
   END_VAR


BEGIN
	// Dieses ist der erste Kommentar in Zeile 1
	#outInt1 := #inInt1 + #inInt2;
	// Ein Kommentar nach der Anweisung in Zeile 3
	(* Dieses ist ein Blockkommentar ab Zeile 4
	Im Blockkommentar Zeile 5 der Code: #outInt1 := #inInt1 + #inInt2;
	*)
END_FUNCTION

Die Informationen dazu im Anhang. Es gibt noch weitere zugehörige Datensätze mit Debuginformationen. Da tauchen dann auch alte Bekannte wie der SAC wieder auf.

Um an das Symbol der Symbol-ID aus dem SCL-Codebaum zu kommen, müssen zwei weitere Datensätze durchgegangen werden. Wahrscheinlich ist das darum auch alles so extrem langsam.
 

Anhänge

  • test-fc99-in-in-out-mit-xml.txt
    11,2 KB · Aufrufe: 20
Zuletzt bearbeitet:
@Thomas

Die Steuerung compiliert den Code dann selbst oder interpretiert die den etwa?? Dann würde das doch Zykluszeittechnisch niemals hinhauen.
 
Die Steuerung compiliert den Code dann selbst oder interpretiert die den etwa?? Dann würde das doch Zykluszeittechnisch niemals hinhauen.

Nein, der Binärkomponente wird separat übertragen, das ist der Teil welchen ich im 1. Post beschrieben habe.
Diese weiteren Informationen liegen wahrscheinlich nur auf der Steuerung herum, ohne dass sie von dieser verwendet werden. Zumindest ist das meine Vermutung aus dem was ich sehe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe noch etwas zur Speicherbelegung bei optimierten Datenbausteinen nachgeforscht. Dass die Daten der Speichergröße der Variablen nach sortiert abgelegt wurden hat Siemens ja schon im Programmierleitfaden gezeigt. Aber man kann ja mal nachschauen ob das auch stimmt. Stimmt soweit, gibt also eigentlich nichts neues.

Ich habe mir einen Datenbaustein mit diversen Variablen angelegt, und diesen mit verschiedenen Optionen übersetzt und in die CPU geladen (1200 FW4.2). Als Optionen habe ich einmal die nicht-optimierte Variante, dann einmal optimiert mit allen Variablen ohne Remanenz, und optimiert mit alternierend remanent/nicht remanent verwendet.

Aufbau der "Test-DBs", die Nummern der Variablennamen finden sich in den Speicherkästchen wieder:
DB-aufbau.jpg

Die Speicherbelegung bei "nicht optimiert" ist so wie sie auch im TIA Portal angezeigt wird:
DB-nicht-optimiert.jpg

In der "optimierten" Variante werden die Variablen nach Größe sortiert abgelegt, spart in diesem Fall sagenhafte 6 Bytes:
DB-optimiert-nichts-remanent.png

Werden einzelne Variablen remanent geschaltet, so landen diese in einem separaten Speicherbereich getrennt von den nicht-remanenten:
DB-optimiert-remanenz-alternierend.jpg

Für den ersten großen freigebliebenen Block habe ich noch keine Erklärung.
 
Diesen Bool-Type der ein ganzes Byte benötigt besitzt eine eigene Datentypkennung, diesen habe ich bei der 1200 zumindest in einem Global-DB noch nicht gesehen.

Bei der 1500 gibt es das, aber da habe ich mangels Test-Hardware keine Möglichkeit das Verhalten dort zu analysieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Laut Programmierleitfaden wird auf der 1200 ja anders optimiert als auf der 1500.

Auf der 1200 wird Speicheroptimiert abgelegt, heisst jedes Bool ist auch nur ein Bit gross und auf der 1500 Zugriffszeitoptimiert, jedes Bool wird jetzt ein Byte gross.
 
Ich konnte es mal an einer S7-1500 testen. Dort nehmen in optimierten DBs die Bools wirklich ein Byte ein.

Datenbaustein "optimiert":
S71500-DB-optimiert-nichts-remanent.jpg

Datenbaustein "optimiert" mit alternierender Remanenz:
S71500-DB-optimiert-remanenz-alternierend.jpg

Bei vielen Bools schlägt das beim Speicherbedarf schon recht ordentlich zu Buche.
 
Zurück
Oben