TIA Freies Byte bei Verwendung von Datentypen

Eduard Schleich

Level-2
Beiträge
60
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin gerade beim anlegen eines Keyence Messtasters auf ein Fragezeichen gestoßen.

Hier die Daten:
Tia V18
DriveController 1507D
Keyence DL-PN1

Da ich 4 Messtaster an einem Keyence DL-PN1 angeschlossen wollte ich der Einfachheit halber die Belegung der Bits über einen UDT lösen.
Ich habe meinen UDT nach Handbuch bzw. Vorlage von Keyence angelegt. (siehe Bild UDT.png)

Die ersten 3 Byte sind mit "Standardsignalen" belegt. Ab dem 4 Byte wird per DINT der Messwert übertragen.
So hab ich es meiner Meinung nach auch angelegt.

Wenn ich nun den UDT in meiner Symbolik verwende dann entsteht ein Abstand von 1 Byte zwischen den "Standardsignalen" und dem Messwert. (siehe Bild Symbolik.png)
Eigentlich sollte der Messwert ab ED451 beginnen und nicht ED452.

In der Hardwareconfig ist der Messtaster 7 Byte lang. (siehe Bild Hardware)

Was mache ich falsch?

Mit freundlichen Grüßen
Edi
 

Anhänge

  • UDT.png
    UDT.png
    11,5 KB · Aufrufe: 57
  • Symbolik.png
    Symbolik.png
    9,7 KB · Aufrufe: 57
  • Hardware.png
    Hardware.png
    4,4 KB · Aufrufe: 57
Das ist so ein Siemensding.
Words und DWords haben stehen, wenn absolut adressiert, immer an einem Speicherbereich, der durch 2 ohne Rest teilbar ist.
Du könntest probieren, die Eingangsadressen deiner Messtaster immer mit einem ungeraden Byte zu beginnen, damit dein EingangsDoppelWort EingangsDInt an genau so einer Stelle liegt.
Bei deinem Messtaster_Rechts und Messtaster_Oben sollte es ja passen, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok dachte ich mir fast dass das wieder ein Siemensding ist.
Ne auch bei den anderen Tastern wird immer das Byte Abstand eingefügt.

Dann nehm ich den Messwert aus dem UDT raus und leg ihn separat an. Wäre ja zu schön gewesen vorallem für die Wiederverwendbarkeit.

Danke für die Antwort.
 
Das ist so ein Siemensding.
Words und DWords haben stehen, wenn absolut adressiert, immer an einem Speicherbereich, der durch 2 ohne Rest teilbar ist.
Du könntest probieren, die Eingangsadressen deiner Messtaster immer mit einem ungeraden Byte zu beginnen, damit dein EingangsDoppelWort EingangsDInt an genau so einer Stelle liegt.
Bei deinem Messtaster_Rechts und Messtaster_Oben sollte es ja passen, oder?
Da muss ich mal als praktisch Siemens Laie eine Lanze für Siemens brechen, das ist nur bedingt ein Siemens Ding. Bei Strukturen, die man mit UDTs denke ich mal vergleichen kann, gibt es im CODESYS Universum auch Lücken, je nach Datentyp.
 
Da ich 4 Messtaster an einem Keyence DL-PN1 angeschlossen wollte ich der Einfachheit halber die Belegung der Bits über einen UDT lösen.
Ich habe meinen UDT nach Handbuch bzw. Vorlage von Keyence angelegt. (siehe Bild UDT.png)

Die ersten 3 Byte sind mit "Standardsignalen" belegt. Ab dem 4 Byte wird per DINT der Messwert übertragen.
So hab ich es meiner Meinung nach auch angelegt.
Welche Messtaster verwendest Du denn und wie soll deren Schnittstelle laut deren eigener Beschreibung aussehen?
Vielleicht hast Du da ja auch was falsch interpretiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da muss ich mal als praktisch Siemens Laie eine Lanze für Siemens brechen, das ist nur bedingt ein Siemens Ding. Bei Strukturen, die man mit UDTs denke ich mal vergleichen kann, gibt es im CODESYS Universum auch Lücken, je nach Datentyp.
Das Alignment kann man bei CODESYS (und Beckhoff) aber einstellen.
Bei Siemens kann man es nicht einstellen. Ist es immer Word-Alignment
 
Eventuell wäre es eine Alternative, die Ein-/Ausgangsdaten als Array of Byte zu deklarieren und dann in der Software in ein von dir gewünschtes Format zu speichern.
 
Keyence GT2? Keyence hat das leider öfter so. Ich denke wenn man ein Array of Byte ab Byte3 anlegt fängt das auch tatsächlich dort an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich teile mir seit einiger Zeit meine Schnittstellen in mehrere UDTs auf. Meistens ist es ja so, dass anfangs Bit-Signale und später größere Datentypen auf der Schnittstelle liegen. Nun lege ich mir einen UDT für die Bit-Signale an und getrennt einen UDT für die größeren Datentypen.
Damit fahre ich bis jetzt sehr gut.
Hier zum besseren Verständnis ein Ausschnitt einer Schnittstelle.
Schnittstelle.PNG
 
Ich würde hier tatsächlich den Ansatz von @circlehook weiterverfolgen - also Array of Byte - und dies dann in einem Baustein auf deinen UDT umkopieren/zuweisen. Wie schon geschrieben wurde : bei Keyence ist das (leider) so Usus weil die das insgesamt eben vom Array of Byte betrachten. Das kannst du auch bei deren Kameras oder Lasern oder oder auch wieder haben ... :cool:
 
ok ich hab es jetzt so gemacht wie atec geschrieben hat. (Guter Name übrigens, wie mein Arbeitgeber ;-))
Das funktioniert ja auch.

Den Vorschlag mit dem Array of Byte werde ich mal ausprobieren ob das für mich praktikabel ist.
Und ja, Messtaster sind Keyence GT2.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich krame das Thema nochmal raus, weil ich bei mir die gleiche Situation habe. Keyence Kamera, Datentyp angelegt, Lücke von 1Byte zwischen den Bools und dem DINT am Schluss.

Ich verstehe die Lösungsvorschläge welche das Problem umgehen, ich verstehe aber nicht warum es überhaupt auftritt.
Diese "Durch 2 teilbar" Antwort klingt zwar typisch Siemens, ist in diesem Fall ja aber nicht wahr hab ich das Gefühl...

Egal wie ich meine Startadresse wähle bleibt die Lücke am Ende. Und der DINT fängt auch ohne Probleme auf ungeraden Startadressen an.
Auf einer 1514 V18 und einer Sinumerik One V17 ausprobiert.
1699944992190.png

Vielleicht fällt ja noch jemandem etwas ein außer den UDT aufzubrechen. Klar geht das, aber schön finde ich das nicht und ich will es irgendwie auch nicht so einfach akzeptieren.

Grüße
 
Ich verstehe die Lösungsvorschläge welche das Problem umgehen, ich verstehe aber nicht warum es überhaupt auftritt.
Diese "Durch 2 teilbar" Antwort klingt zwar typisch Siemens, ist in diesem Fall ja aber nicht wahr hab ich das Gefühl...
Zu Deinem eigentlichen Problem kann ich leider nichts beitragen, aber zu den Lücken.
Das mit den Lücken ist kein Siemens Ding, wie ich in #4 schon erklärt habe, sondern ein Geschwindigkeitsding. Da bei einem passenden Aligment nur ein Speicherzugriff zum Auslesen der Daten notwendig ist. Manche Prozessoren unterstützen die Ablage von Daten ohne Alignment auch nicht.
Im Codesys Universum tritt das mit den Lücken auch bei STRUCTs auf, allerdings kann man sich da, zumindest bei TwinCAT gegen die Lücken wehren.
 
Zuletzt bearbeitet:
@Froschkönig :
Es tut mir leid das ist (abweichend von den Kommentaren oben) eher so ein Keyence-Ding.
Ich denke mal, dass auch Keyence das Ganze beim Import erstmal als Array of Byte betrachte und es dann entsprechend um-parsed.
Bei eigenen Arbeiten mit Keyence (bei mir Codeleser) habe ich es auch immer so gehandhabt ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Froschkönig :
Es tut mir leid das ist (abweichend von den Kommentaren oben) eher so ein Keyence-Ding.
Ich denke mal, dass auch Keyence das Ganze beim Import erstmal als Array of Byte betrachte und es dann entsprechend um-parsed.
Bei eigenen Arbeiten mit Keyence (bei mir Codeleser) habe ich es auch immer so gehandhabt ...
Versteh ich leider nicht. Mein UDT ist ja selbstgemacht, der kommt gar nicht von Keyence.
 
Ich spreche nicht von deinem UDT sondern von dem Import von Keyence.
Du kannst es von Keyence als Byte-Array importieren und dann allles passend auf deinen UDT parsen ...

Nachsatz : machst es so dann kannst du sogar mit optimierten DB's arbeiten ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie sieht der Aufbau der Gsd Datei aus?
Ist der Dint Wert vielleicht im nächsten Modul/Steckplatz ?
Dann kannst du in der HW-Konfiguration die EA Adresse anpassen und die Lücke einfügen, dann sind halt leider dort die Adressen nicht mehr fortlaufend.
 
Egal wie ich meine Startadresse wähle bleibt die Lücke am Ende. Und der DINT fängt auch ohne Probleme auf ungeraden Startadressen an.
Auf einer 1514 V18 und einer Sinumerik One V17 ausprobiert.
Anhang anzeigen 72904

Vielleicht fällt ja noch jemandem etwas ein außer den UDT aufzubrechen. Klar geht das, aber schön finde ich das nicht und ich will es irgendwie auch nicht so einfach akzeptieren.
:unsure:
Ich würde die Reservebits 16-23 aus der jetzigen Stelle herausnehmen und ganz an den Anfang des udt stellen.
Dann solltest Du den udt ein Byte vor Deiner eigentlichen Startadresse beginnen lassen können und alles an der richtigen Stelle haben.
 
Also ich hab jetzt mit ein bisschen google und Erklärungen durch Kollegen die Sache mit dem Word Allignement vollständig verstanden. Danke für die vielen Hinweise! Wieder ein bisschen schlauer :)
Vielleicht denke ich dran und poste meine Lösung wenn sie mal integriert ist.
 
Zurück
Oben