Step 7 Sympolische Adressierung in SCL FCxxx über UDTxxx

MoChri

Level-2
Beiträge
25
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich komm einfach nicht drauf wie ich in einem SCL erstellten FC die Adressen wie z.b.: DB100.DBX1.0 Sympolisch eingeben kann. Bei den vorhandenen DB´s im Bausteinordner gehts ja aber wenn ich UDT`s habe und die DB´s werden von der CPU automatisch erzeugt kann ich die Adresse nur Absolut eingeben warum?


Wenn ich den UDT in der VAR_TEMP bekannt gehts zwar aber die Daten sind dann Temp und bleiben nicht erhalten.

Gibts da ne lösung in SCL den nicht vorhanden DB im Bausteinordner auch Sympolisch anzusprechen über UDT deklaration?


Gruss MoChri
 
Deine Frage ist zwar nicht so wirklich klar gestellt aber mal ein Versuch zu antworten.

DBs werden nicht von der CPU automatisch erzeugt. Bzw das geht schon, dann ist aber natürlich kein Symbolischer Zugriff möglich. Nicht nur bei SCL.

Wenn du einen Globalen DB hast der UDTs beinhaltet dann ist der Zugriff in SCL im Normalfall in dieser Art:
Code:
  "Testdb".DB_VAR.bool1 := "testdb".DB_VAR.bool2;

Wenn die DBs und UDTs als Quelle reinkommen ist es zwingend dass diese übersetzt werden bevor der SCL(oder jeder andere) Baustein übersetzt wird. Ansonsten ist das Symbol natürlich nicht bekannt! woher auch?

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Symbolisch ansprechen kann man nur Variablen, die zur Compilierzeit vorhanden sind oder deren symbolische Struktur erklärt ist. Zur Laufzeit erstellte DB sind grundsätzlich unstrukturiert (einfach ARRAY OF BYTE), Variablen in diesen DB können nicht symbolisch angesprochen werden - nicht in SCL und auch nicht in AWL. UDT belegen keinen Speicher, deshalb kann den Symbolen keine Adresse zugeordnet werden - erst wenn eine Instanz des UDT in einem DB oder TEMP angelegt wird, dann können den Symbolen Adressen zugeordnet werden.

Warum ist es denn notwendig, den DB erst zur Laufzeit in der CPU zu erzeugen? Ist Dein Ladespeicher zu klein? Im Arbeitsspeicher muß sowieso genug Platz für den DB vorhanden sein. Erstelle den DB auch im offline-Projekt und alles ist easy.

Alternativ könntest Du Deinem FC einen UDT als Parameter übergeben, dann kennt der FC die symbolische Struktur der übergebenen Daten.

Harald
 
Hmm habe ich mich mal wieder falsch ausgedrück...

Wenn ich im Bausteinordner einen UDT definiere z.B.: UDT 100 und den in der Sympolik zum DB100 zweise z.b.: Global_DB /DB 100 /UDT 100 /Datenbaustein für Globale Datensignale und dann in AWL es Sympolisch eingebe wie...

Code:
U "Global_DB".SYS.Stoerungen
= ""Global_DB".SYS.Fehler

Dann funktioniert das ja auch ohne das der DB100 im Bausteinordner vorhanden ist.

In SCL wenn ich schreibe

Code:
"Global_DB".SYS.Fehler:="Global_DB".SYS.Stoerungen;

dann erkennt er die sympolische zuweisung nicht warum?

DBs werden nicht von der CPU automatisch erzeugt. Bzw das geht schon, dann ist aber natürlich kein Symbolischer Zugriff möglich.

Das automatisch erstellen ist falsch beschrieben ich erstelle den DB100 mit den SFC22 und lösche alle Bits mit SFC21 bei Neustart / wiederanlauf und der zugriff geht da auch sympolisch da ich dies wie oben beschrieben schon ewig in AWL verwende.

Hat jetzt jemand eine idee wie das in SCL geht?

gruss Christian
 
Warum ist es denn notwendig, den DB erst zur Laufzeit in der CPU zu erzeugen? Ist Dein Ladespeicher zu klein? Im Arbeitsspeicher muß sowieso genug Platz für den DB vorhanden sein. Erstelle den DB auch im offline-Projekt und alles ist easy

Ich will mich nicht immer äussern warum das notwendig ist....ich brauch das einfach um nicht immer überall was ändern zu müssen wenn sich in der Struktur was ändert da dann der DB100.DBX 2.0 plötzlich DB100.DBX 40.5 ist aber die Sympolik bleibt gleich!!!

Ich denke hier sind erfahrene benutzer oder? Da das wohl in AWL möglich ist Sympolisch zu programmieren mit den UDT und aber den Erstellten CPU DB dann benützen zu können ohne das jemand mekert. Propierts das mal aus oder soll ich euch ein Beispielprogramm senden?? wo es den DB100 im Bausteinortner bei STEP 7 nicht gibt??

Gruss Christian
 
Beispiel:

Ja habe gerade ein Projekt erstellt aber wie kann ich die ZIP datei hochladen?? oder Ich sende es per Mail wer wills haben??
ONLINE.JPG
 
Wie spricht man in deinem Programm denn eine allfällige zweiten Struktur UDT vom Typ Hilfsmerker an?

Muss sagen, ist ein interessantes Verhalten von Step7 in deinem Programm. Kann mir aber nicht vorstellen, dass das so von Siemens geplant war.

Denn eigentlich kann Step7 ja nicht wissen, dass in deinem DB direkt an erster Stelle eine Struktur vom UDType "Hilfsmerker" kommt.

mfG René
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Schön langsam weis ich nicht mehr was das hier sein soll....ja natürlich habe ich den DB100 zu UDT100 in der sympolik eingefügt, und das hat einen sinn den will ich jetzt nicht mehr erklären. Was macht ihr beruflich? Ich arbeite seit 1996 täglich mit SPS und SINUMERIK und da kann man teilweis nur so arbeiten da alle AchsDB von der CPU erstellt werden und ich sie nicht von hand machen kann!!!!!

Daher die Frage warum geht das in AWL und in SCL NICHT...

SO hat jetzt jemand eine Lösung oder sonst vergessen wir das hier es hat keinen Sinn da ihr nicht mal wisst das es in AWL geht....

gruss
 
Soll ich euch mal ein Programm senden was in einer 840DSL inkl. Grundprogramm drin ist? Da werdt ihr noch viele mehr sachen sehen die ihr nicht kennt wie mir scheint. Das GP macht sogar Siemens und wird so ausgeliefert !!!

:D
 
Ich verstehe dein Wut nicht. Die gestellte Fragen sind nicht bös gestellt.
Du hast ein Grund für was du machst. Nur gut.

Das erstellen von ein DB mit SFC21 ist ein absolute addressierung.
Es besteht den Gefahr das durch ein Programmierfehler den erstellte DB nicht mit den Symbolische Definition passt.
Deswegen soll es in den meisten 'normalen' Fällen vermeidet werden.

Ich glaube das vielleicht kannst du den DB in SCL definieren, und mit ein 'direktive' spezifizieren das es nicht in den SPS gelinkt werden soll.
Muss den hilfe checken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe probiert ob man es so machen kann:

Code:
DATA_BLOCK "HM"

{unlinked := 'true' }

    STRUCT
        data : "SPEICHER" ;
    END_STRUCT
BEGIN

END_DATA_BLOCK

Leider wird den Attribute unlinked nicht in den kompilierte DB gesetzt.
 
Daher die Frage warum geht das in AWL und in SCL NICHT...

Kurz und bündig: Weil es keine offizielle Funktion in AWL ist und man nicht davon augehen sollte dass dies auch im nächsten Servicepack immernoch funktioniert.
Es ist schlicht zufall dass es in AWL funktioniert. Und Zufälle werden nicht zwingend nach SCL portiert, sondern eher nach bekanntwerden eliminiert.

mfG René
 
SO NOCHMAL:

Ich habe keine Wut nur warum wird hir immer alles hinterfragt obs einen sinn hat oder das ist nicht gut usw.
Das Programm muss ich eh selbst machen und ich muss gewährleisten das der UDT stimmt logisch ist eigentlich so üblich.

Ich glaube das vielleicht kannst du den DB in SCL definieren, und mit ein 'direktive' spezifizieren das es nicht in den SPS gelinkt werden soll.
Muss den hilfe checken.

Hilfe habe ich genug gecheckt sonnst hätte ich hir nicht gepostet....

So Beitrag geschlossen hat keinen sinn denk ich mal.!

Gruss Christian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurz und bündig: Weil es keine offizielle Funktion in AWL ist und man nicht davon augehen sollte dass dies auch im nächsten Servicepack immernoch funktioniert.
Es ist schlicht zufall dass es in AWL funktioniert. Und Zufälle werden nicht zwingend nach SCL portiert, sondern eher nach bekanntwerden eliminiert.

mfG René

Das ist sicher von Siemens gewollt da man sonst auf keinen DB in der Sinumerik zugreifen KANN !!! Weil da werden alle DB in der CPU erstellt laut den Maschinendaten und in STEP 7 V5.5 als UDT geführt !!!!

Also das funktioniert auch schon seit 1996 ! Weil da habe ich meine erste Sinumerik FMNC/810D/840D Inbetrieb genohmen

Gruss
 
Ich habe keine Wut nur warum wird hir immer alles hinterfragt obs einen sinn hat oder das ist nicht gut usw.
Das heisst 'Interesse', und 'Warum sollen wir unseren Zeit verschwenden wenn wir den Hintergrund nicht versteht'.

Das Programm muss ich eh selbst machen und ich muss gewährleisten das der UDT stimmt logisch ist eigentlich so üblich.
Wenn man Symbolisch programmiert und besonders UDTs verwendet, wird vieles automatisch gecheckt, ohne das man selbst was checken muss. Es ist nicht 'üblig' das der Programmierer alle Addressen selber checken muss. Das Sinumerik so funktioniert zeit 1996 ist eine Sonderfall.

So Beitrag geschlossen hat keinen sinn denk ich mal.!
Ich merke ein bisschen Wut.

Ruhig mann.
 
Hab die Frage an den Siemens support gesendet braucht euch nicht mehr den Kopf zerbrechen darüber.

Sorry wenn ich mit [WUT] rüber komm habe nur nicht verstanden warum ich so viel Kritik bekomme wegen Sinnhaftigkeit und das keine gute Programmierung ist oder Lösung. Wollte nur eine einfache Antwort wie man das macht da ich in SCL noch nicht sehr sattelfest bin.

Danke trotzdem für eure mühe
Gruss Christian
 
Zurück
Oben