TIA Datenbaustein ansprechen?

spirit

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

ich habe in einen DB30 einige Fehlermeldungen geschrieben.

Adresse: %DB30.DBX0.0
Datentyp: Array [0..7] of Word


Nun wollte ich mit einem Schlag über 4x Move-Befehle nullen - TIA macht mir hier aber einen Strich durch die Rechnung!

TIA bringt folgende Warnung --> Die Adresse wird nicht durch eine Variable belegt


Unbenannt.JPG


Frage:

Welche Möglichkeit habe ich hier zu Nullen? :confused:


Lieben Dank ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja, es ist eine Warnung, also sprich sofern der DB "nicht optimiert" ist, wird es wie gewohnt seinen Dienst tun.
Wobei er bei DBX0.0 an der Stelle, bzw. deiner Konstellation, eigentlich auch schon meckern sollte ...

Die bei Step7 so geliebten Schweinereien werden von TIA jetzt halt angemeckert, wobei es dann eh besser wäre, die Störmeldungen ganz normal als BOOL zu deklarieren, mit ordentlichen Symbol, und im HMI absolut anzubinden.
 
Wenn du einen Array-DB angelegt hast, dann siehe Bild:


Schnappschuss (2016-09-06 10.48.21).jpg

PS: Ich sehe gerade, ich habe eine Array of DWord angelegt, das geht genauso mit einem Array of Word!
 
Adresse: %DB30.DBX0.0
Datentyp: Array [0..7] of Word
Wo ist nun das Array dass du beschrieben hattest?

Einen Struct_of_Bit kannst du symbolisch eigentlich nur über Umwege nullen.
Der einfachste Weg: Eine leere Kopie der Strukutr ablegen und mit einem einzelnen Move umkopieren.
Alle anderen Wege (z.B. an FB übergeben und dort mit AT) die ich kenne sind eher umständlich.

Hast du auch Kommentare bei deinen Meldungen?
Wenn deinem Variablen "Meldung_1000 bis Meldung_x" heißen und keinen eigenen Kommentar brauchen, dann würde sich ein ARRAY[1000..x]_of_Bool auch anbieten.
Dann ginge die Schleife oder der FILL-Befehl.

Sonst einfach tippen, wenn du in FUP programmierst kannst du ja trotzdem ein AWL-Netzwerk einfügen. Dann wäre dass auch nicht so viel Arbeit.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo ist nun das Array dass du beschrieben hattest?

Einen Struct_of_Bit kannst du symbolisch eigentlich nur über Umwege nullen.
Der einfachste Weg: Eine leere Kopie der Strukutr ablegen und mit einem einzelnen Move umkopieren.
Alle anderen Wege (z.B. an FB übergeben und dort mit AT) die ich kenne sind eher umständlich.

Hast du auch Kommentare bei deinen Meldungen?
Wenn deinem Variablen "Meldung_1000 bis Meldung_x" heißen und keinen eigenen Kommentar brauchen, dann würde sich ein ARRAY[1000..x]_of_Bool auch anbieten.
Dann ginge die Schleife oder der FILL-Befehl.

Sonst einfach tippen, wenn du in FUP programmierst kannst du ja trotzdem ein AWL-Netzwerk einfügen. Dann wäre dass auch nicht so viel Arbeit.

AWL klappt ja nicht, weil S7-1200!

Ja, habe auch Kommentare hinter den einzelnen Meldungen.

Das Array, das ich beschrieben hatte, steht unter den HMI-Variablen:


Unbenannt.JPG
 
Nimm enfach das erste Structelement mit der Maus und ziehe es in deinen SCL-Baustein.
Dort dann die Zahl in den ecckigen Klammern durch dieZählvariable (bei mit I) ersetzen.

Du kannst auch die die ganze Struktur nochmals als INOUT definieren und dann übergeben. (Besser wäre hier aber einen Datentyp anzulegen und diesen im DB und in der Schnittstelle des FC/FB zu nutzen.)
Dann ziehst du das 1. Element au der INOUT-Deklaration in den Code.
 
Nimm enfach das erste Structelement mit der Maus und ziehe es in deinen SCL-Baustein.
Dort dann die Zahl in den ecckigen Klammern durch dieZählvariable (bei mit I) ersetzen.

Aber da bekomme ich ja eben einen Fehler (rot unterstrichen) - oder habe ich dich falsch verstanden? :confused:


Unbenannt.JPG


Blödes TIA ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nimm enfach das erste Structelement mit der Maus und ziehe es in deinen SCL-Baustein.
Dort dann die Zahl in den ecckigen Klammern durch dieZählvariable (bei mit I) ersetzen
@Ralle: Jetzt dämmert mir was Spirit uns sagen will...

In der SPS hat Spirit einen Struct_of_Bool
nur mein DB hat als Datentyp ein "Struct":
Anhang anzeigen 33884
... doch Harald - sieht dann wie folgt aus:
Anhang anzeigen 33885
Das Ganze bis Nr_1127!

Auf der HMI hat Spirit dann das ARRAY von dem gesprochen wurde.
Das Array, das ich beschrieben hatte, steht unter den HMI-Variablen:
Anhang anzeigen 33886
Da wir also kein Array auf der SPS haben, können wir die Array-Befehle vergessen.

@Spirit: Eine bessere Beschreibung am Anfang hättte nicht geschadet!
Wenn man deinen Eingangspost liest muss man eigentlich davon ausgehen dass das Array auf der SPS ist.

Ich nehme nun auch an dass du die Daten schon von der SPS aus und nicht vom HMI löschen willst.
Welche Möglichkeiten fallen mir nun ein um einen Struct_Of_Bool zu löschen
  • Gleichen leeren Struct drüberkopieren
  • An FB übergeben mittels AT (sofern die 1200 AT kann)
  • kleine SCL-FC in dem man es einfach runtertippt

Das Erste ist wohl das einfachste.
 
Zuletzt bearbeitet:
@Ralle: Jetzt dämmert mir was Spirit uns sagen will...

In der SPS hat Spirit einen Struct_of_Bool



Auf der HMI hat Spirit dann das ARRAY von dem gesprochen wurde.

Da wir also kein Array auf der SPS haben, können wir die Array-Befehle vergessen.

@Spirit: Eine bessere Beschreibung am Anfang hättte nicht geschadet!
Wenn man deinen Eingangspost liest muss man eigentlich davon ausgehen dass das Array auf der SPS ist.

Ich nehme nun auch an dass du die Daten schon von der SPS aus und nicht vom HMI löschen willst.
Welche Möglichkeiten fallen mir nun ein um einen Struct_Of_Bool zu löschen
  • Gleichen leeren Struct drüberkopieren
  • An FB übergeben mittels AT (sofern die 1200 AT kann)
  • kleine SCL-FC in dem man es einfach runtertippt

Das Erste ist wohl das einfachste.

Ok, du hast recht RONIN - habe mich wirklich unklar (frauenuntypisch ;)) ausgedrückt!

Und ja, ich möchte die Daten von der SPS aus löchen.

--> Also könnte ich nun schließlich im gleichen DB nochmals so ein Struct_of_Bool anlegen und dieses dann per Move-Befehl auf das eigentliche Struct in selbigem DB kopieren, richtig?
 
--> Also könnte ich nun schließlich im gleichen DB nochmals so ein Struct_of_Bool anlegen und dieses dann per Move-Befehl auf das eigentliche Struct in selbigem DB kopieren, richtig?
Ja, einfach die bestehende Struktur per STRG+C /V (der Aufbau der beiden muss gleich sein) kopieren und dann mit MOVE die ganze Struktur umkopieren.
Du kannst die Kopie der Struktur zum Umkopieren auch sonst wo, z.B. im Stat/Temp des Basteins in dem du das Umkopieren durchführst, anlegen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich erstelle mir von solchen Strukturen, die ich öfters leeren muss, auch ein nichtremanentes (leeres bzw. Grundstellungs-) Abbild.
Entweder in einem Globalen DB oder im Static-Bereich eines IDB. (Meine mich zu erinnern, mal gelesen zu haben, das die S7-1200 auch den Temp-Bereich initialisiert. Das wäre dann zum Speichersparen am Idealsten, aber da verlass' ich mich lieber nicht drauf.)
Dann kann ich durch einfache Zuweisung die Struktur löschen bzw. die originale wieder herstellen:
Code:
Struct := Empty.Struct;
Die Struktur dann am besten als PLC-Datentyp (udt) angelegt, dann braucht man bei Erweiterungen der Struktur nur diesen Datentyp erweitern und muss sich nicht mehr um Löschschleifen u.ä. kümmern, da die immer mit angepaßt werden.

Struct leeren 1.jpg

Struct leeren 2.jpg

Insbesondere bei solch zusammengewürfelten Strukturen, wie im Screenshot, ist das Löschen für mich so am Einfachsten.

Nachteilig ist dafür, dass jemand in diesen Feldern Werte verändern könnte und damit ungewollte Zustände herbei führt.
Das kann man aber m.M.n. durch Veränderung des Programmcodes auch.
 
Zurück
Oben