Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 8 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 71

Thema: MC7-Code in AWL umzuwandeln

  1. #11
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi ronnie,

    Im Anhang findest du zwei Bausteine: einen FC800 und einen FC1 (der nachfolgende Code ist eingefärbt.

    Code FC1:
    Code:
    Netzwerk 1:
    L 1
    T MB 0
    L 1
    T MB 1
    L 1
    T MB 2
    L 1
    T MB 3
    Code FC800:
    Code:
    Netzwerk 1:
    L 1
    T MB 0
    Netzwerk 2:
    L 1
    T MB 1
    Netzwerk 3:
    L 1
    T MB 2
    Netzwerk 4:
    L 1
    T MB 3
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg FC.jpg (70,1 KB, 210x aufgerufen)

  2. #12
    Registriert seit
    09.05.2009
    Beiträge
    7
    Danke
    1
    Erhielt 3 Danke für 2 Beiträge

    Standard

    Didn't know about the .wld trick, just read up on it.

    I am using the following procedure:

    In the project directory find the subdir "ombstx\offline"

    In this folder you will find one "numbered" subfolder for each S7program in your project. In these program subfolders you will find 2 databases:
    Baustein.dbf
    Subblk.dbf
    Studied them with an appropriate viewer to get the grips on them. Interresting data is in memo fields in these databases. Some of these fields are in plain text and can be studied with viewers, others (that interrest us) contain binary data.

    The memo field of a database are stored in seperate files (*.dbt). The field in the dbf file only contains an id to an entry in the .dbt table http://www.clicketyclick.dk/database...ormat/dbf.html can tell you a lot about getting access to these fields.

    Each "Subblk" record entry contains memo fields "MC5CODE", "SSBPART", "ADDINFO". These contain the number of the associated memo block in the dbt file.

    Blocks in your s7blocks container have associated records in the Subblk database. There are one or more records per block, they differ in "SUBBLKTYP". So far I am pretty shure of the following:

    For FC x:
    entry with SUBBLKTYPE == 12 and BLKNUMBER == x has the number of the memoblok containing <the binary code> in field "MC5CODE"
    entry with SUBBLKTYPE == 5 and BLKNUMBER == x has the number of the memoblok containing <the interface description in plain text> in field "MC5CODE"

    For OB x:
    entry with SUBBLKTYPE == 8 and BLKNUMBER == x has the number of the memoblok containing <the binary code> in field "MC5CODE"
    entry with SUBBLKTYPE == 6 and BLKNUMBER == x has the number of the memoblok containing <the interface description in plain text> in field "MC5CODE"

    For FB x:
    entry with SUBBLKTYPE == 14 and BLKNUMBER == x has the number of the memoblok containing <the binary code> in field "MC5CODE"
    entry with SUBBLKTYPE == 4 and BLKNUMBER == x has the number of the memoblok containing <the interface description in plain text> in field "MC5CODE"

    In other memoblocks you can find things as network titles, block title, comments, etc.

  3. #13
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    No, I didn't know...
    All I found out was with the libnodave (upload of the blocks into files) and I read the files with a HEX-Editor!

    Sodele... und dann hab ich mal ein bisschen im Kopf der Datei ein bisschen herumgedoktort:

    Der Anfang der Aufbaus eines Bausteins:

    Code:
    70 70 // Bausteinstart
    01 // Baustein geschützt oder nicht???
    01 // ???
    XX // Erstellsprache
    YY // Bausteintyp
    ZZ ZZ // Bausteinnummer
    00 00 00 66 // Ladespeicherbereich
    00 00 00 00 // ???
    00 00 02 13 24 38 // letzte Code-Änderung
    04 00 BB 8B 24 37 // letzte Schnittstellen-Änderung
    00 0E // ??
    00 06 // ??
    00 00 // Länge Lokaldaten
    00 0A // Länge des MC7-Codes
    30 03 00 01 30 03 00 01 // Programmcode (hier 2x L  1)
    ... // Bausteinende
     
    Erstellsprache (XX):
    01 = AWL
    02 = KOP
    03 = FUP
    04 = SCL
    05 = DB
    06 = GRAPH
     
    Bausteintyp (YY): 
    08 = OB
    0A = DB
    0B = SDB
    0C = FC
    0D = SFC
    0E = FB
    0F = SFB 
     
    Zeit:
    BYTE: 01 02 03 04 05 06
          00 00 02 13 24 38 // letzte Code-Änderung
          04 00 BB 8B 24 37 // letzte Schnittstellen-Änderung
     
    01 - 04 Tageszeit (Millisekunde des Tages)
    05 - 06 Tage seit dem 01.01.1984
     
    letzte Code-Änderung:
    00 00 02 13 = 513 ms
    24 38       = 9272 Tage
     
    letzte Schnittstellen-Änderung:
    04 00 BB 8B = 67156875 ms = 18 h 39 min 16 sec 875 ms
    24 37       = 9271 Tage
    Und dann hab ich auch noch mal das Ende ein bisschen unter die Lupe genommen:

    Nach dem Programmcode kommt immer die 65 (HEX) als Einleitung zum Bausteinende.

    Dann die Baussteinschnittstelle (IN, OUT, IN_OUT, TEMP, RETURN) oder Netzwerkunterteilung (hab ich noch nicht herausgefunden), dann die jeweils 8 Zeichen Autor, Familie, Name und zu guter letzt die Versionsnummer und dann noch ein Schluss, den ich noch nicht entziffern konnte.

    Code:
    Versionsnummer (1 Byte):
     
    01 = V 0.1
    10 = V 1.0
     
    min: 00 = V 0.0
    max: FF = V 15.15
    Ich hoffe, dass ich mich verständlich ausgedrückt habe und das was ich gerade verzapft habe auch jemand versteht, ist ja auch schon 3 Uhr nachts...

    So und jetzt darf mal wieder jemand anderes was herausfinden...

    Und ich probier mal das Datenbankdingens aus...
    Geändert von Human (22.05.2009 um 07:52 Uhr) Grund: Änderung der Bausteinkopf-Definition

  4. #14
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Human Beitrag anzeigen
    So und jetzt darf mal wieder jemand anderes was herausfinden...

    Und ich probier mal das Datenbankdingens aus...
    Ich habe ein Testprogramm in Visual C# 2005 geschrieben mit dem sich die Datenbank-Dateien eines Step7-Projektes einlesen lassen.

    So ein paar Auswertungen habe ich drin, wie z.B.
    - Symbolik auslesen
    - Datenbausteine auslesen (inklusive Konvertieren/Export in eine CSV-Datei)
    - Auslesen der Variablendeklarationen und MC7-Hex Code von FCs / FBs

    Da das eine große Baustelle ist bitte bei Interesse eine PN an mich, dann schicke ich das Programm mit Quellcode zu.

    Andere Teile habe ich noch in Perl geschrieben weil man damit auch recht einfach dBase-Dateien einlesen kann. Z.B. um ein CPU-Passwort aus dem Projekt bzw. einer wld-Datei wieder in Klartext zu verwandeln.

  5. #15
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Kleiner Screenshot im Anhang...
    Angehängte Grafiken Angehängte Grafiken

  6. #16
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    Hört sich nicht schlecht an (Hast Post)!

    Aber ich dachte in dem Thread würde es darum gehen wie man den MC7-Code, der sich in einer CPU befindet wieder zurückzubilden in AWL bzw. den AWL-Code in ein Programm, das von der CPU nutzbar ist zu wandeln???

  7. #17
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard

    So, hab die letzten 30 Stunden nun fast ununterbrochen am Stück an dem Programm gebastelt, das sich da im Anhang befindet.

    Ganz kurz zur Funktion: Das Programm lädt aus einer S7-CPU über Ethernet die Bausteine herunter und generiert aus dem MC7-Code den passenden AWL-Code.

    1. IP eingeben
    2. Programme aus CPU lesen
    3. Doppelklick auf den gewünschten Baustein

    Geht bis jetzt nur mit einer Ethernet-CPU bzw. WinAC, ich hab dafür eine CPU 315 2PN/DP dafür im Einsatz (steht irgendwo im Haus rum)

    Was noch fehlt:
    - Netzwerkunterteilungen
    - Schnittstellenbeschreibung
    - Sprünge
    - Bausteinaufrufe

    Dann hab ich da noch ein paar kleine Ergänzungen in die MC7-Tabellen gemacht.

    Im Anhang ein Screenshot.

    @ Zottel
    Die Funktionen mit dem Upload der Programme funktioniert ja schon ganz gut, aber irgendwie hab ich bisher noch keine Funktion gefunden Bausteine wieder zurückzuschreiben bzw. wird es die in Zukunft geben?
    Angehängte Grafiken Angehängte Grafiken
    • Dateityp: jpg mc7.jpg (67,6 KB, 168x aufgerufen)
    Geändert von Human (05.06.2009 um 09:00 Uhr)

  8. Folgender Benutzer sagt Danke zu Human für den nützlichen Beitrag:

    DeltaMikeAir (13.10.2016)

  9. #18
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Human Beitrag anzeigen
    @ Zottel
    Die Funktionen mit dem Upload der Programme funktioniert ja schon ganz gut, aber irgendwie hab ich bisher noch keine Funktion gefunden Bausteine wieder zurückzuschreiben bzw. wird es die in Zukunft geben?
    Da mußt du mir erstmal sagen, welche Richtung du mit "upload" meinst?
    Beide Richtungen sind seit Jahren dabei:
    SPS -> Datei: testISO_TCP.exe --readout
    Datei -> SPS: testISO_TCPload.exe

    Vom "produktiven" Einsatz des zweiten Programms würde ich abraten. Bei den SDBs muß man m.W. eine bestimmte Reihenfolge einhalten. Es mögen auch andere Risiken und Nebenwirkungen möglich sein.

  10. #19
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    @Human: Das sieht doch schonmal gut aus!

    Was haltet ihr davon eine OP-Code Tabelle in einem allgemeingültigen Format aufzustellen?
    Ich denke da z.B. an eine XML oder CSV-Datei. Somit hätte man nur eine Datei die es zu pflegen gilt, und jeder könnte diese je nach Verwendung in sein eigenes Programm einlesen.

    Als Grundlage könnte man z.B. den Aufbau wie im Programm mc5decode machen:
    Code:
    struct symboltabelle
    {
      unsigned short code;    // MC5 Code
      unsigned short code1;   // MC5 Code (32 Bit)
      unsigned int   codelen; // Länge des MC5 Codes in Bits
      unsigned int   parlen;  // Länge der auf den code folenden Parameter un Bits
      unsigned int   cmask;   // Zum Ausmaskieren des Codeteils
      unsigned int   pmask;   // Zum Ausmaskieren des Parameterteils
      char         * operation; // Operation im Klartext
      char         * operand;   // Operand im Klartext;
      char         *(*printpar)(unsigned int parameter);
    };
    typedef struct symboltabelle symtab_t;
    Damit es sprachunabhängig ist, müsste man die Callbackfunktion für printpar noch umschreiben, z.B. in einem Formatstring à la printf.

  11. #20
    Registriert seit
    01.03.2007
    Beiträge
    262
    Danke
    26
    Erhielt 33 Danke für 28 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @ Zottel
    Jetzt wo du es sagst seh ich es auch, dass es die gibt...
    ...und hab mir die auch mal ein bisschen angeschaut und hab da keinen Plan was was da passiert...
    So eine einfache 3 Funktionen wie Upload-Funktionen, das sieht irgendwie kompliziert aus?

    @ Thomas
    Mich würde interessieren wie du da den CALL-Befehl oder Befehle der indirekten Addressierung reinkriegen willst!

Ähnliche Themen

  1. C++ Code
    Von rabit im Forum Hochsprachen - OPC
    Antworten: 9
    Letzter Beitrag: 03.01.2010, 10:42
  2. SCL code
    Von awl-scl im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 14.01.2008, 17:02
  3. Code erklären
    Von ottopaul im Forum HMI
    Antworten: 1
    Letzter Beitrag: 04.04.2007, 15:28
  4. AWL-code
    Von Anonymous im Forum Simatic
    Antworten: 29
    Letzter Beitrag: 09.11.2005, 16:48
  5. SMD Code Tabelle
    Von Josef Scholz im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 23.06.2003, 20:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •