TIA Bool Variablen im DB als Word ansprechen

ACDC

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Community,

das ist mein erster Thread hier, sollten Informationen fehlen reiche ich diese nach ;-)

Stellen gerade von Step 7 auf TIA um und ich soll für die erste Maschine ein Programm schreiben. Leider kennt sich bisher keiner richtig mit TIA aus und gehen dem aus dem Weg und nach langer Recherche habe ich nichts vernünftiges finden können, welches nicht in SCL geschrieben ist.
Daher möchte ich euch kurz mein Problem erläutern und hoffe auf eure Unterstützung.

Es handelt sich um eine S7-1200 Steuerung und die Software ist TIA V13.
Ich möchte einzelne Bits aus einem DB als Word ansprechen. Über Step 7 hat man zB. DB3.DBW0 geschrieben. Bei TIA kommt dann aber die Fehlermeldung "Die Adresse wird nicht durch eine Variable belegt", vssl aufgrund der rein symbolischen Adressierung und man im DB sämtliche Informationen dazwischen schieben könnte und das Word nicht mehr richtig definiert wird.

Bei Siemens gibt es anscheinend einen Baustein der die Bits zu einem Word umwandeln kann, leider lässt sich diese runter zuladende Datei nicht öffnen [https://support.industry.siemens.co...en-mit-dem-schlüsselwort-"at"?dti=0&lc=de-WW]. Auf der angegebenen Seite ganz unten die Zip-Datei "STEP7_TIA_Portal_AT_KeyWord.zip ( 1440 KB ) ".

Könnt ihr mir bitte weiterhelfen, ich bräuchte einen Lösungsansatz um das Problem lösen zu können und dieser soll nicht in SCL geschrieben sein (Vorgabe Kunde). Gibt es da einen Baustein oder einen Kniff?

Ich hoffe ihr habt mein Problem verstanden und könnt mir helfen.


Viele Grüße
 
Hallo Gleichstromer,

der Programmierleitfaden habe ich auch zur Hand, du meinst sicher das Kapitel 3.6.5 ? Wenn ich das richtig verstehe kann man auf diese Weise z.B. bei einem vorhandenen Word das einzelne Bit abfragen. Das heißt jeweils die kleineren Datentypen ansprechen. Ich möchte so zusagen das Gegenteil, d.h. mehrere Bits zu einem Word zusammenfassen. Geht das auch mit dem Slice-Zugriff?

Beispiel:
Name Datentyp
Störung 1 Bool
Störung 2 Bool
Störung 3 Bool
....
Störung 15 Bool


Un in einem FC möchte ich das Störungsword 1 abfragen als Datentyp Word.

Stehe vllt noch etwas auf dem Schlauch...
 
@ Turi,

diesen Gedanke hatte ich auch schon die einzelnen Bits in Merker umzuwandeln und dann das Merkerword abzufragen.
Allerdings wäre das bei großen DB´s viel Handarbeit. Handelt sich bei dem Vorlagenproject bereits um 128 Bits und es könnten weitaus mehr werden :-(
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ACDC,

warum machst du es denn nicht mit einen Slice Zugriff?

"STM1-16" = irgendein Word (Symbolisch)

STM1 = STM1-16.%X0
STM2 = STM1-16.%X1
STM3 = STM1-16.%X2
..
STM16 = STM1-16.%X15

Um nun abzufragen ob du eine Störung hast musst du nur das Word auf ungleich 0 vergleichen.


Wenn du mehr als 16 Bit abfragen willst kannst du es auch mit einen LWORD machen. Da hast du ganze 64 Bit zu Verfügung.

Stefan
 
Zuletzt bearbeitet:
Hallo ACDC,
warum machst du es denn nicht mit einen Slice Zugriff?
"STM1-16" = irgendein Word (Symbolisch)

STM1 = STM1-16.%X0
STM2 = STM1-16.%X1
STM3 = STM1-16.%X2
..
STM16 = STM1-16.%X15
Stefan hat's schon fast richtig. Der TE will ja nicht auf die Bits aus einem Word zugreifen, sondern vorhandene Bits in ein Word bekommen.

Code:
STM0-15.%X0 = STM0;
STM0-15.%X1 = STM1;
STM0-15.%X2 = STM2;
..
STM0-15.%X15 = STM15;
Danach kannst du mit dem WORD oder INT "STM0-15" weiterarbeiten.
 
Zuletzt bearbeitet:
In TIA heißt der Zugriff auf einzelne Bits SLICE-Zugriff.
warum machst du es denn nicht mit einen Slice Zugriff?
Mit Slice-Zugriff kann man die Bits in einem Word ansprechen aber nicht das Word, was (vielleicht) von den Bitvariablen belegt wird.

Um das Word anzusprechen, müßte man dafür sorgen
- daß das Bitfeld auf einer bekannten Word-Adresse liegt --> "optimierten Bausteinzugriff" ausschalten
- und daß das Bitfeld und das Word auf der selben Wordadresse liegen --> manuell kontrollieren oder als Struct oder Array of Bool deklarieren und mit AT mit einem Word zusammenlegen
- dann kann man auf die Word-Adresse zugreifen

Oder alle Bits einzeln in ein Word kopieren:
- nicht ganz sauber über Merker oder TEMP
- besser in eine Struktur
- oder per Slice in das Word kopieren
- oder per Wordverknüpfung in das Word verodern


Alternativ könnte man den Störmelde-Speicherbereich als Array of Word deklarieren und per Slice auf die einzelnen Meldebits zugreifen.
Bei nur 128 Meldungen könnte man auch das ganze Bit-Array auf ein Word-Array umkopieren ("optimierter Zugriff" muß Aus sein).


Wenn du mehr als 16 Bit abfragen willst kannst du es auch mit einen LWORD machen. Da hast du ganze 64 Bit zu Verfügung.
Die S7-1200 kennt kein LWORD.


Bei Siemens gibt es anscheinend einen Baustein der die Bits zu einem Word umwandeln kann, leider lässt sich diese runter zuladende Datei nicht öffnen [https://support.industry.siemens.co...en-mit-dem-schlüsselwort-"at"?dti=0&lc=de-WW]. Auf der angegebenen Seite ganz unten die Zip-Datei "STEP7_TIA_Portal_AT_KeyWord.zip ( 1440 KB ) ".
Mit der AT-Sicht bist Du schon auf dem richtigen Weg.
Was heißt, die Datei läßt sich nicht öffnen?
Um die Datei herunterzuladen muß man sich bei Siemens anmelden bzw. registrieren.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey,

Vielen Dank für die vielen und schnellen Rückmeldungen. Kann das leider erst Montag testen, werde dann Rückmeldung geben.

Mit dem AT Zugriff hab ich es auch versucht, konnte aber nur auf die Bits zugreifen und nicht das Word. Muss vielleicht ein fehler in der Deklaration sein. Habe den optimierten Baustein zugriff deaktiviert, den AT deklariert und wollte dann per Movebefehl in einen anderen Datenbaustein als Word schreiben? Im Move kann mann aber nicht auf das Word zugreifen...

@ Harald, bin bei Siemens registriert und angemeldet.

bis Montag :)
 
Für eine gemeinsame AT-Sicht muss man die einzelnen Bits z.B. in eine Struktur einbinden. Das hat dann aber den Nachteil, dass man an der Schnittstelle des Bausteins nur noch die Struktur sieht und nicht die einzelnen Bits.

Ohne Struktur/Array kann man die AT-Sicht nur für jedes Bit einzeln erstellen, nicht für mehrere gemeinsam.

In FBs muss man die Bausteinoptimierung auch nicht unbedingt abschalten. Wenn die Remanenzeinstellung für die Struktur auf "im IDB setzen" geändert wird, ist dort die AT-Sicht auch bei optimierten Bausteinen möglich.

Sieht dann z.B. so aus:

 
Vielen Dank an die Gruppe, konnte die Problematik auf diese weise lösen. Habe das im kleinen Stil getestet und funktioniert wie gewünscht. Werde das im laufe des Tages auf das ganze Projekt umsetzen.
 
Danke an die Gruppe, habe das im kleinen Stil getestet und werde das im laufe des Tages auf das ganze Projekt übertragen.
 
Oh da ist mir ein Fehler beim antworten passiert :-(

Also ich habe mir ein FB gebaut, mit der Input Deklaration wie ihn Hucki aufgezeigt hat mit der Structur und dem AT. Habe meinen Störungs-DB angepasst und die einzelnen Störungsbits in eine Structur gelegt welche ich im FB verarbeite und dann als Word im Störungs-DB ausgebe. Muss nun zwar die Ansteuerung der Störungsbits nochmal durchgehen, da die Namensdeklaration nun anders ist, aber für die Zukunft denke ich ist es eine gute Lösung.
 
Zurück
Oben