TIA UDT aus Bools beschreiben

d Martin

Level-2
Beiträge
70
Reaktionspunkte
25
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe so zu meinem Problem noch nichts direkt gefunden.
Ich habe einen UDT der nur aus Bools besteht (kein Array)

In einem optimierten globalen DB hab ich jetzt eine UDT Variable hinzugefügt.
Jetzt wollte ich die einzelnen Bools des UDT beschreiben.
Das funtionkiert beim ersten Bool des UDTs problemlos.
Sobald ich aber das zweite oder ein anders Bool der UDT-Variable beschreiben will bekomme ich beim Übersetzen folgende Fehlermeldung.

"Eine Bitadresse ungleich Null können Sie nur bei Bit-Zugriffen verwenden. Beim Zugriff auf Daten größerer Breite muss die Bitadresse gleich Null sein."

Wenn einen Ausgangsbereich mit einer solchen UDT-Variable belege hab ich das Problem nicht.

Ich verstehe die Fehlermeldung so halbwegs. Aber wofür mach ich meinen UDT wenn so was nicht funktioniert.
Bisher hattte ich noch nie Probleme mit UDTs hatte aber auch noch keine mit nur Bool. Verwende TIA V15.1
 
Moin d Martin,

kannst Du zu dem Problem mal Screenshots machen (vom Datentyp, vom DB und vom CODE)? So ganz verstehe ich Deine Beschreibung nämlich nicht.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier Screenshoots vom UDT im DB und dann der zuweisung.
Soblad eine andere als die erste Zeile nicht auskommentiert ist bekomme ich die Fehlermeldung.

Es ist nicht das Problem, dass ich es nicht anders lösen könnte, ich versteh aber nicht wirklich warum es so nicht funktioniert.


UDT im DB.jpgudt.jpgzuweisung UDT.jpg
 
Worum handelt es sich denn bei "Autom".ON etc? Sind dies auch nur Bool Variablen?
Mich wundert ein wenig, warum rechts in der Beobachtungstabelle nur "Mode" steht, aber nicht die Variable. Bei mir siehts zumindest anders aus, wenn ich so einen Zugriff beobachte, steht dort die ganze Variable. (Nutze aber auch V17...)
 
Ja das sind alles Bool-Variablen. das war die Offline-Ansicht. in der Online-ansicht sieht man, dass es Bool Variablen sind.

Um das ganze nochmal anders zu beschreiben. Wenn ich einen UDT Anlege sollte ich auch jedes UDT-Element einzeln Beschreiben können, ganz egal wie der UDT aussieht.
Das ist hier leider nicht der Fall, bei meinem UDT der aus 8 Bool Elementen besteht. Aber wenn ich einen Ausgangsbereich mit dem UDT belege funktioniert es.

udt bool.jpgudt bool offline.jpg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
das sieht mir aus wie ein Bug des SCL-Compilers. Frage mal den Siemens Support. (Oder ist TIA V15.1 schon aus dem kostenlosen Support rausgefallen?)

Wenn Du den UDT hier mal als SCL-Quelltext postest, dann könnte evtl. mal jemand testen, ob das Problem auch bei TIA V16 oder V17 noch besteht.

Harald
 
Ich habe mir mal schnell was in mein TIA V15.1 Upd5 getippt. Bei einer 15xx CPU läßt sich das Schreiben auf alle Bools des UDT problemlos ohne Compiler-Fehlermeldung übersetzen.

Für welche CPU ist Dein Programm?
Ist der DB "optimiert"? Ist der DB übersetzt?
Ist der Code in einem FC oder FB? Ist der Baustein "optimiert"?

Harald
 
das sieht mir aus wie ein Bug des SCL-Compilers.
Hab es auch schon mit FUP propbiert, es kommt die gleiche Fehlermeldung.

Code:
TYPE "Comp_Mode"
TITLE = Modus an erweiterte Komponenten
VERSION : 0.1
   STRUCT
      Auto_ON : Bool;
      Hand_ON : Bool;
      Referenzfahrt : Bool;
      Leerfahren : Bool;
      Nachlauf : Bool;
      Reset : Bool;
      Error : Bool;
      E_Stop : Bool;
   END_STRUCT;

END_TYPE

Passt das so?

Den Siemens Support hab ich noch nicht kontaktiert. Hatte gedacht hier bekomme ich vlt. eine schnelle Erklärung.
Auf jeden Fall auch schonmal vielenDank für die schnellen Reaktionen hier im Forum.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für welche CPU ist Dein Programm?
Ist der DB "optimiert"? Ist der DB übersetzt?
Ist der Code in einem FC oder FB? Ist der Baustein "optimiert"?
Bneutze TIA V15.1 Upd6

CPU 1512SP-1 PN
Ja alles optimiert und übersetzt.

Hab es auf einer 1214C ausprobiert, da hat es auch funktioniert, keine Fehlermeldung.

Scheint sich tatsächlich um ein Bug zu handeln und somit auf jeden Fall ein Fall für Siemens.
 
Moin d Martin,

gaaanz doofe Frage:
Hast Du mehrere iDevices projektiert bzw. hast Du die Variablen für weitere iDevices schon angelegt? Sind sie im selben Projekt?

Ich muss nämlich zu meiner Schande gestehen, dass ich mir auch ein unerklärliches Phänomen eingehandelt habe und da auch der SIEMENS Support nicht helfen konnte.

Ich habe ein iDevice projektiert, zweimal kopiert und dann mit dem ersten programmiert und Tests durchgeführt. Dabei habe ich vergessen, die E/A-Adressen der kopieren iDevices zu ändern. Damit funktionierte ein BitToggle z.B. nicht im "ersten Anlauf" ... das Bit musste ich immer zweimal setzen, damit es funktionierte. Auf die Weise findet man die E/A-Adresse auch nicht so einfach in der QVL.

Vielleicht hast Du solch einen oder ähnlichen Projektierungsfehler auch gemacht? Zumindest geht es bei Dir ja auch um eine iDevice-Kommunikation?

VG

MFreiberger
 
Ja ich hab auch eine I-Device Kommunikation mit zwei S7-1214C Die Habe ich separat angelegt und nichts kopiert.

Die Daten sollen dann erst später in einem weiteren Schritt an die I-Devices übergeben werden. Das funktioniert auch.
Mein eigentliches Problem liegt ja schon davor. Ich will ja nur mein UDT in einem golbalen DB beschreiben.
Sollte eigentlich keinen Einfluss haben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch mit Deinem UDT "Comp_Mode" funktioniert das Übersetzen mit meinem TIA V15.1 Upd5 ohne Fehlermeldung.
projektierte CPU 1512C-1PN
DB und FC "optimiert", FC in SCL

Bezieht sich die Fehlermeldung auf den Schreibzugriff (die Zuweisung) oder vielleicht auf den Operanden rechts vom := ?
Versuche mal
Code:
"Mode".to_I_Device.Reset := #tempWord.%X1;
"Mode".to_I_Device.Error := TRUE;

Harald
 
Bezieht sich die Fehlermeldung auf den Schreibzugriff (die Zuweisung) oder vielleicht auf den Operanden rechts vom := ?

Habs getestet, ist der Schreibzugriff.

Bin gerade leider auch noch anderweitig beschäftigt.
Das Problem hat gerade nur die 2. Priorität. Werde hier aber auf dem laufenden halten, wenn sich was neues ergibt.

d Martin
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Fehlermeldung ist weiter oben schon mal erwähnt.
"Eine Bitadresse ungleich Null können Sie nur bei Bit-Zugriffen verwenden. Beim Zugriff auf Daten größerer Breite muss die Bitadresse gleich Null sein."
Hier trotzdem noch ein Screenshoot.

Anfrage an Siemens ist inzwischen raus, aber bisher noch keine Rückmeldung.
Fehlermeldung.jpg
 
Duck-und-weg, falls ZU weit hergeholt, aber ...

Ist "Reset" (wohlgemerkt als ganzes Wort) vielleicht ein Schlüsselbegriff o.ä., der bei falscher Verwendung zu einer völlig unpassenden Fehlermeldung führt?

Ich komme deswegen drauf, weil bei HMI-Scripten ein Variablenname "RemanentValue" oder "REMOTE_VALUE" fälschlicherweise wie ein Scriptkommentar eingefärbt wird, weil er mit "REM" beginnt und dies in VisualBasic ein Schlüsselwort zur Kommentareinleitung darstellt.


Gruß, Fred
 
Probiere mal das ganze im selben Projekt in der selben Steuerung aber in einem ANDEREN FC nach zu bilden. Den FC dabei NICHT kopieren, sondern neu anlegen.

Hatte auch mal so ein ähnliches Problem wo der extakt selbe Code in einem neuen FC auf einmal keine Fehlermeldung mehr gebracht hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Fehlermeldung ist weiter oben schon mal erwähnt.
"Eine Bitadresse ungleich Null können Sie nur bei Bit-Zugriffen verwenden. Beim Zugriff auf Daten größerer Breite muss die Bitadresse gleich Null sein."
Hier trotzdem noch ein Screenshoot.
Der Screenshot ist hilfreich, weil er gibt uns weitere Informationen:
- es handelt sich nicht um einen FC sondern einen FB, meine Nachfrage in #7 hattest Du nicht beantwortet
- der Fehler wird im SCL-Editor nicht als Fehler markiert, sondern kommt erst beim Übersetzen des Bausteins

Bei mir funktioniert das Übersetzen aber auch in einem FB fehlerlos.

Probiere mal ein Übersetzen "Software (komplett übersetzen)"

Harald
 
In die letzten Zeilen stehen
"Mode_2" := "Mode".to_I_Device ;
"Mode_3" := "Mode".to_I_Device ;
"Mode_2" und "Mode_3" sind Pointer nach BOOL Adressen, aber "Mode".to_I_Device ist ein Struktur, geht das so ?

Die Fehlermeldung verstehe ich aber nicht. Ist Ägyptisch für mich.
 
Ich vermute, "Mode_2" und "Mode_3" sind PLC-Variablen, wo die A-Adressen von iDevices als dieser UDT deklariert sind. Das macht Sinn.

Die Fehlermeldung verstehe ich aber nicht. Ist Ägyptisch für mich.
Das klingt so, als ob der Compiler aus den Bitzugriffen in das UDT-Byte einen Pointer auf das UDT-Byte mit Anfangsadresse des Bits bildet, z.B. beim zweiten Bit auf DBBn.1, und das ist unzulässig! Der Pointer muß DBXn.1 sein.

Harald
 
Zuletzt bearbeitet:
Zurück
Oben