TIA UDT für E/A Deklaration - Ein Byte wird übersprungen

DCDCDC

Level-3
Beiträge
1.812
Reaktionspunkte
379
Zuviel Werbung?
-> Hier kostenlos registrieren
Eckdaten:
TIA V18 Update 1
CPU 1217C DC/DC/DC

Hallo zusammen,

ich erstelle gerade UDTs für eine Netzkomponente (Anschluss ist via Profibus) um darüber dann einheitlich Zugriff haben zu können (Stichwort Standardisierung/Bibliothek).

Der HW-Aufbau für die Eingänge ist wie folgt:
Byte01_ControlSignal_NoError Bool
Byte01_ControlSignal_Ready Bool
Byte01_ControlSignal_ResultOverallOk Bool
Byte01_ControlSignal_ResultOverallNok Bool
Byte01_ControlSignal_ResultDepthOk Bool
Byte01_ControlSignal_SpareBit05 Bool
Byte01_ControlSignal_SpareBit06 Bool
Byte01_ControlSignal_SpareBit07 Bool
Byte02_ResultProgramNumber Byte
Byte03_ResultProgramType Byte
Word01_ResultCode Word
DWord01_ResultTorque1 DWord
DWord02_ResultTorque2 DWord
DWord03_ResultAngle DWord
DWord04_ResultDepth DWord
DWord05_ExecutionTime DWord
DWord06_CycleNumber DWord

Parametriert ist ab Adresse 300(.0)

In der Variablentabelle sieht das jetzt so aus:

Screenshot 2023-06-14 140822.png

Ich komme nicht ganz drauf warum nach dem letzten deklarierten Byte (Byte 302), das Word erst bei Byte 304 anfängt und nicht bei Byte 303.

Byte 303 ist auch nicht seperat deklariert und dementsprechend "frei":
Screenshot 2023-06-14 141054.png

Wo ist mein Denkfehler? Hat das was mit High-Low Byte zu tun? Wie kann ich's beheben?

Danke im Voraus!
 
Bist du sicher dass das Gerät eine neue Variabel mit neue Datentyp auf eine ungerade Byte startet ?
Was ist das für eine Gerät genau ?
Solche dummheiten habe ich vorher gesehen, aber ist selten.
 
Bist du sicher dass das Gerät eine neue Variabel mit neue Datentyp auf eine ungerade Byte startet ?
Was ist das für eine Gerät genau ?
Solche dummheiten habe ich vorher gesehen, aber ist selten.

Die erste Frage verstehe ich nicht so ganz, in der Hardware ist alles ohne Lücke definiert:
Screenshot 2023-06-14 142628.png

Gerät: Weber Schraubautomat Prozesssteuerung C30S
 
TIA legt WORD Variablen automatisch auf gerade Adressen. Wenn also davor noch ein ungerader, freier Adressbereich liegt, wird dieser einfach übersprungen

Anhang anzeigen 69488
Also müsste ich daraus zwei Bytes basteln und die hinteher wieder zusammenschubsen weil Siemens es nicht gebacken bekommt automatische Adressbereiche sauber zu vergeben? Wozu dient diese practice gerade Anfangsadressen für Wörter zu verwenden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gerät: Weber Schraubautomat Prozesssteuerung C30S
Hast du ein Link, gerne zum Handbuch ?

Wenn das Gerät zu die Siemens-Konventionen nicht einhaltet, dann kannst du die schön formatierte UDT nicht direkt verwenden.
Eine Lösung wäre ein Paar Byte-Arrays für die E/A zu konfigurieren. Eine DB mit die gewünschte Formatierung konfigurieren.
Dann mit Serialize/Deserialize die Daten von die Byte-Arrays in die DB kopieren.
Ich denke du musst mehrmals Serialize/Deserialize verwenden um die Daten 'ausschneiden' zu können wo es eine Lücke gibts.
 
Hast du ein Link, gerne zum Handbuch ?

Wenn das Gerät zu die Siemens-Konventionen nicht einhaltet, dann kannst du die schön formatierte UDT nicht direkt verwenden.
Eine Lösung wäre ein Paar Byte-Arrays für die E/A zu konfigurieren. Eine DB mit die gewünschte Formatierung konfigurieren.
Dann mit Serialize/Deserialize die Daten von die Byte-Arrays in die DB kopieren.
Ich denke du musst mehrmals Serialize/Deserialize verwenden um die Daten 'ausschneiden' zu können wo es eine Lücke gibts.
Weber stellt online nur eine GSDML und eine USB Treiber Software zur Verfügung, keine Beispiele und auch keine Handbücher.

Ich trenn das Wort einfach auf zwei Bytes auf und schubs die später temporär wieder zusammen
 
Die erste Frage verstehe ich nicht so ganz, in der Hardware ist alles ohne Lücke definiert:
TIA erlaubt dass man einzelne E/A Variabeln auf ungerade Bytes startet. Aber in ein UDT wird immer auf gerade Byte nummer gestartet wenn eine neue Datentyp eingesetz wird. Ist halt so.
(mir gefällt es irgendwie dass man mit gerade Bytes arbeitet).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
TIA erlaubt dass man einzelne E/A Variabeln auf ungerade Bytes startet. Aber in ein UDT wird immer auf gerade Byte nummer gestartet wenn eine neue Datentyp eingesetz wird. Ist halt so.
(mir gefällt es irgendwie dass man mit gerade Bytes arbeitet).
Ja.. ich hab jetzt einfach in der Hardware das Byte 303 weggelassen (ist jetzt eben eine Lücke) aber somit passen E/As der Hardware zu deklarierten E/As der UDT
 
Ja.. ich hab jetzt einfach in der Hardware das Byte 303 weggelassen (ist jetzt eben eine Lücke) aber somit passen E/As der Hardware zu deklarierten E/As der UDT
Bist du sicher dass es auch so funktioniert in das Weber Gerät ?
Werden die E/A Variabeln einzeln konfiguriert, oder kommen sie gepackt in eine fest definierte Format ?

Anders gefragt, ist das Weber Gerät eine 'intelligente' PN Teilnehmer, eine I-Device ? In den Fall kann man die E/A Transfer Bereiche anpassen. Wenn möglich ein GSDML aus der I-Device exportieren lassen und in die IO-Controller importieren. Dann ist man sicher dass die Kommunikation auf beide Seiten passen.
Oder ist es ein Gerät mit eine fest definierte E/A Konfiguration ? In den Fall hat man ein GSDML für das Gerät, und darin typisch 1 oder eine geringe Anzahl von fest definierte konfigurationen zur Verfügung.
 
Ach, ich sehe jetzt es ist ein Profibus Gerät, kein Profinet.
In den Fall ist es 'intelligente' DP-Slave und GSD anstatt GSDML.
Die Fragen sind aber dieselbe, wie die eventuelle Lösung (serialize/deserialize).
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab die schon vorher definierten E/As so belassen und einfach nur in eine UDT gepackt, d.h. es sollte alles weiterhin so funktionieren.. ich "räume" gerade nur das Programm auf inkl. Schönheitsoperationen. Es hat schon mal in dem Umfang funktioniert.. hab jetzt einfach nur die E/A Deklaration in eine schöne UDT gepackt
 
Zurück
Oben