TIA ungültige Zuweisung von Variablen in SCL

uweschwarz

Level-2
Beiträge
119
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich arbeite mit einer S7 1500 und TIA V17.
Ich bin dabei die Kommunikation zu 18 Profibusteilnehmer gleichen Typs zu organisieren. Die Verbindung steht und die Empfangs- und Sendedaten sind mittels Datentyp als Variable verfügbar.
Die Kommunikation ist vom Lieferanten des PB Teilnehmers so organisiert, dass es bei den Empfangsdaten neben einem statischen Bereich auch einen dynamischen Speicherbereich von 6 Bytes gibt. Statisch ist in diesem Sinne unabhängig von der Formulierung der Sende-Anforderung und dynamisch abhängig von der Formulierung in einem bestimmten Teil der Sendeanforderung.
Abhängig von einer Befehls-ID werden unterschiedliche Daten gesendet. Bei ID1 z.B. der Status, bei ID2 ein Koeffizienten, usw. Insgesamt interessieren mich 4 bestimmte IDs (der vorhandenen 8).
Hierfür habe ich einen Datentyp vereinbart, der alle aktuellen Empfangsdaten enthält, einen Datentypen der neben den statischen Empfangsdaten auch 4 Arrays von 6 Byte für die dynamischen Empfangsdaten enthält.
Das ist die Struktur: Bis zum Array ist der statische Bereich, das Array ist der dynamische Bereich. Diesen Datentypen verwende ich in der Variablentabelle.
Struktur der Peripheriedaten:
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Int
Int
Int
Array[0..6] of Byte

Für die einzelnen Upload IDs habe ich spezifische Datentypen erstellt.
Struktur einer Upload ID:
Byte
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Int
Byte
Byte
Das sind 6 Byte, welche ich dann folgender Struktur verwende:
Struktur der vollständigen Empfangsdaten
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Bool
Int
Int
Int
"ADL_Upload ID000"
"ADL_Upload ID011"
"ADL_Upload ID100"
"ADL_Upload ID111"

Also jetzt nicht nur die statischen Daten sondern auch die dynamischen Daten jeweils der korrekten ID zugeordnet.
In einer Funktion möchte ich nun die Daten zuordnen.
Ich dachte es geht so:

"301_REC_ADL_G100x"."THIS"[0]."Upload ID000 Status3":= "REC_GE1001"."Upload Bytes";

"301_REC_ADL_G100x"."THIS"[0]."Upload ID000 Status3" = dynamischer Teil des 1. Profibusteilnehmers in einem Array DB mit 18 Elementen
"REC_GE1001"."Upload Bytes" = das ist das Array von 6 Bytes aus den Empfangsdaten auf der Peripherie. In Byte 6 wird die aktuelle ID gesendet. Anhand dieser kann ich entsprechend zuordnen.

Die Fehlermeldung lautet: ungültige Zuweisung

Ich vermute, dass ich den Array-DB nicht richtig verstanden habe. Vielleicht ist auch die ganze Idee nicht gut. Was meint ihr dazu?

Aber vielleicht ist es einfacher einen FB zur erstellen in dem ich das mapping organisiere und diesen einfach 18 mal aufzurufen ...
 
Zuletzt bearbeitet:
Aus deinem Beitrag werde ich ehrlich gesagt nicht schlau.
Hilfreich wäre es erstmal, zu wissen was für PB-Teilnehmer du abfragen möchtest und wie sie in der Hardware deklariert sind.
 
Du hast recht - mit diesen "Datenbereichen" konnte ich auch nichts anfangen - aber, ich denke, wir werden noch "erleuchtet" ...
 
@Larry Laffer Sorry, für meine verwirrenden Erklärungen. Die PB Teilnehmer sind Gleichspannungsgeneratoren.
@NBerger Das eine (erste) ist der gesamte Datensatz der mir vom PB Teilnehmer gesendet wird. Das Zweite die Variable, in der die letzten 6 Byte des gesamten Datensatzes (das array) gespeichert wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Zur Erkärung des allgemeinen Unverständnisses:
Im TIA wird grundsätzlich symbolisch prorammiert.
In einer Liste/Tabelle sollten dann mindestens die Variablennamen und Datentypen stehen.
Ohne die Variablennamen ist jegliche Zuordnung zum Scheitern verurteilt.

Die "ungültige Zuweisung" wird sich wahrscheinlich ergeben wenn du versucht einen "höheren" Datentyp (z.B. Int; Real;...) einem Bool zuzuweisen.

Versuch mal etwas Klarheit zu schaffen... Hilf und dir zu helfen... ;)
 
1673958748129.png
Die Bytes 1-8 sind in ihrer Datenstruktur immer gleich. Also in Byte 1 beutet das Bit 0 immer das gleiche. Die Bytes 9-14 sind in ihrer Datenstruktur veränderlich.

Abhängig von der Beschaltung der Bits 5,6 und 7 des Command Byte 1
1673959069591.png
ändert sich die Struktur der 6 Upload Bytes.
1673958940199.png
Interessant sind die Upload-ID 000,011,100,101.

Aufgabenstellung:
Alle Upload-IDs im Command Byte 1 nacheinander an den Slave senden und die Antworten korrekt einsortieren für 18 Busteilnehmer, so dass für jeden Bussteilnehmer die Daten "immer" (Abtastrate erstmal egal) aktuell sind.

Ich hoffe es ist jetzt verständlicher.
 
Erstelle UDTs die zu die Upload-IDs passen.
Erstelle pro Gerät mehrere Datenbereiche deklariert durch die UDTs.
Dann pro Gerät durch laufen:
Setze den gewünschte Upload-ID.
Checken dass BYTE 6 passt mit die gewünschte Upload-ID.
Wenn beide passen, kopieren von die Roh-Bytes in die entsprechender Datenbereich mittels BLKMOV.
Nächste Upload-ID setzen usw..

Timeout wenn ein Upload-ID gesetzt ist und nach eine Zeit die entsprechender BYTE 6 nicht zurück kommt.
 
Ja genau. Die Datenstrukturen zuerst richtig deklarieren.
Dann mit Serialize/Deserialize die Daten kopieren abhängig von welche ID gefordet bzw. zurückgesendet werden.

N.B. dein ADL_Upload_ID000 stimmt nicht überein mit die Datenstruktur in Beitrag #10 !
 
Probier so:
Code:
  b00 : BOOL ; // n.u.
  b01 : BOOL ; // n.u.
  b02 : BOOL ; // n.u.
  b03 : BOOL ; // n.u.
  b04 : BOOL ; // n.u.
  b05 : BOOL ; // n.u.
  b06 : BOOL ; // n.u.
  b07 : BOOL ; // n.u.
  b10 : BOOL ; // n.u.
  b11 : BOOL ; // n.u.
  b12_mains_on : BOOL ;
  b13_ramp_enabled : BOOL ;
  b14_active_mode : BOOL ; // kombinier mit b15_active_mode
  b15_active_mode : BOOL ; // kombinier mit b14_active_mode
  b16_puls_status : BOOL ;
  b17_puls_enabled : BOOL ;
Hard_arch_counter : INT ;
Byte_5 : BYTE ; // n.u.
Upload_ID : BYTE ;

edit: In STEP7 Classic / S7-300/400 beim neuen Datentyp oder erneuten Struktur startet die neue Daten auf eine gerade Byte. Deswegen gibt es Probleme wenn man versucht eine Platzhalter BYTE gefolgt von eine reihe von BOOLS zu deklarieren. Dann startet die BOOLs nicht auf Byte 1 sondern auf Byte 2 (wenn man zählt 0-1-2-3..).
Bin nicht sicher wie es sicht verhält wenn es um TIA / S7-1500 und optimierte Daten handelt.
 
Zuletzt bearbeitet:
Zurück
Oben