Eingänge Einlesen auf eine Struktur

CNC840D

Level-2
Beiträge
161
Reaktionspunkte
10
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich hätte mal eine Frage zum E-/Mapping mit Pointern oder ähnlich.
Da ich jetzt nach 25 Jahren Siemens auf meine alten Tage noch in Beckhoff TWINCAT3 einsteigen soll und in meiner Fa. leider kein CODESYS Know How vorhanden ist wollte ich mal hier nachfragen wie man sowas denn so löst in TWINCAT damit ich nach Möglichkeit gleich den richtigen Weg einschlage.
Bisher haben wir in Siemens die E-/A' komplett blockweise über pointer oder seit TIA teilweise auch über Systemkonstanten eingelesen und intern dann auf Strukturen gelegt.
Nun habe ich versucht das ganze mit einer GVL zu lösen die über den AT Befehl eine Struktur im E-/A Bereich adressiert ( ri_UOP AT %IB1200 : ro_UOP;). Allerdings ist Online dann egal welcher Datentyp in der Struktur verwendet wird immer ein Byte verwendet. Bei der Peripherie die ich einlesen wollte handelt es sich um einen Roboter der ein E-/A Feld von 128E und 128A hat dieses Feld haben wir unterteilt in die ersten 20 Byte mit Standard Signalen und den Rest in optionale Signale.
Leider habe ich aktuell noch keine Hardware.
Die Screenshots zeigen die Siemens Konfiguration und was ich in TWINCAT versucht habe.
Könnt Ihr mir bitte ein paar Tipps geben wie man das lösen könnte ?

Danke
 

Anhänge

  • 03-05-_2022_07-38-00.jpg
    03-05-_2022_07-38-00.jpg
    34,3 KB · Aufrufe: 20
  • 03-05-_2022_07-32-19.jpg
    03-05-_2022_07-32-19.jpg
    113,8 KB · Aufrufe: 18
  • 03-05-_2022_07-32-04.jpg
    03-05-_2022_07-32-04.jpg
    32,7 KB · Aufrufe: 19
  • 03-05-_2022_07-31-42.jpg
    03-05-_2022_07-31-42.jpg
    11,4 KB · Aufrufe: 18
  • 03-05-_2022_07-30-48.jpg
    03-05-_2022_07-30-48.jpg
    31,6 KB · Aufrufe: 18
Ich bin auch nicht so fit in Codesys, aber ich würde mal statt

Code:
AT %IB1200

Folgendes probieren.
Dann adressiert es ggf. nicht für jedes Bit ein Byte

Code:
AT %IX1200.0

Grüße

Marcel
 
Hilft jetz bei Deinem Problem nicht wirklich, aber die Adresse kannst Du Dir bei TwinCAT schenken, dass passiert automatisch.
Für Eingänge reicht %I* und bei Ausgängen %Q*

Du kannst Doch in der Struktur schon die ATs mit * angeben, diese Struktur dann instantiieren und die Hardware auf diese Instanz verknüpfen.
 
Mit den Bits und Bools ist das bei Codesys so eine Sache.
Variablen vom Typ BOOL belegen immer ein Byte im Speicher.
Ausnahme: BOOL-Variablen, die mit AT %IX/QX/MX Byte.Bit deklariert sind, belegen nur ein Bit.
Einzelne BIT-Variablen gibt es ansonsten nicht, aber innerhalb von Strukturen kann man BIT-Variablen deklarieren.
Da Du ja eine Struktur hast, wäre das die Löusng: Datentyp BIT statt BOOL.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit den Bits und Bools ist das bei Codesys so eine Sache.
Variablen vom Typ BOOL belegen immer ein Byte im Speicher.
Ausnahme: BOOL-Variablen, die mit AT %IX/QX/MX Byte.Bit deklariert sind, belegen nur ein Bit.
Einzelne BIT-Variablen gibt es ansonsten nicht, aber innerhalb von Strukturen kann man BIT-Variablen deklarieren.
Da Du ja eine Struktur hast, wäre das die Löusng: Datentyp BIT statt BOOL.
Hab die Bool's jetzt als BIT deklariert, das hat soweit funktioniert. Allerdings sind in der Struktur auch noch ein paar INT mitdrin die allerdings als BYTE angezeigt werden, kann man da auch noch was machen?

@oliver.tonn
kannst Du mir mal ein Beispiel hier einstellen?
 
@oliver.tonn
kannst Du mir mal ein Beispiel hier einstellen?
Erstmal, soweit es sich vermeiden lässt, sollte man BIT nicht nutzen, da die Verarbeitung deutlich mehr Zeit in Anspruch nimmt, was hier im Infosys nachzulesen ist.
Was ich nicht ganz verstehe ist Dein Kommentar, dadurch das Du den in ein Zitat integriert hast wird er hier nicht angezeigt.
Was meinst Du mit ein INT wird als Byte angezeigt? Wenn der Robbi nur Bytes liefert kannst Du die Daten eh nicht direkt mappen und musst die von Hand zusammenstückeln.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bzgl. des Robis muss ich Dir recht geben, bei Siemens kann man ja via des SFC "Blockmove" die Bytes komplett auf eine Struktur schieben, dazu muss ich am Bausteineingang z.B. P#E1200.0 Byte 20 angeben, am Bausteinasugang steht dann entsprechend der Name der Struktur, Gibt es bei TWINCAT so eine ähnliche Funktion?

Danke schonmal für Eure Hilfe und die Tipps
 
Ja, bei TwinCAT oder Codesys gibt es MEMCPY. Du musst aber aufpassen, standardmäßig füht TC3 Füllbytes bei Strukturen ein, mit dem folgenden Pragma in der Struktur verhinderst Du das.
Code:
{attribute 'pack_mode' := '0'}
Allerdings musst Du noch ein Byte Array anlegen und das mit den Daten vom Robbi verknüpfen, da man bei TwinCAT/Codessys nicht direkt auf die Hardware zugreifen kann. Und dieses Byte Array kopierst Du dann in Deine Struktur. Oder Du nutzt eine UNION, die die Struktur und das Byte Array enthält, dann geht das automatisch.
 
@oliver.tonn
In Deinem Beispiel in #7 hast Du ja auch ein Struct. Dort sind die Bools natürlich Bytes, aber bei der Deklaration einzelner Bool-Variablen ist doch so etwas möglich:
Code:
Input1 AT %IX0.0:BOOL;
Input2 AT %IX0.1:BOOL;
 
@oliver.tonn
In Deinem Beispiel in #7 hast Du ja auch ein Struct. Dort sind die Bools natürlich Bytes, aber bei der Deklaration einzelner Bool-Variablen ist doch so etwas möglich:
Code:
Input1 AT %IX0.0:BOOL;
Input2 AT %IX0.1:BOOL;
Das ist kein Struct, die PLC Instanz heiß nur so, das sind alles einzelne Variablen als BOOL deklariert, aber ohne Adresse. Allerdings hast Du recht, wenn man das so deklariert kommt kein Kompilerfehler und die Variable nimmt tatsächlich nur ein Bit ein. Ob das funktioniert müsste man aber probieren.
 
Jetzt arbeite ich schon ein paar Jahre mit TC3, aber dass Bools als %I/Q/M* im Gegensatz zu TC2 nun auch ein ganzes Byte einnehmen, ist mir noch gar nicht aufgefallen. Das kommt davon, wenn man sich nicht mehr um die Adressen kümmern braucht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Jetzt arbeite ich schon ein paar Jahre mit TC3, aber dass Bools als %I/Q/M* nun auch ein ganzes Byte einnehmen, ist mir noch gar nicht aufgefallen. Das kommt davon, wenn man sich nicht mehr um die Adressen kümmern braucht.
Tröste Dich, ist mir umgekehrt ja auch so gegangen.
 
Zurück
Oben