-> Hier kostenlos registrieren
S7-300/S7-1200 - Mehrere aufeinanderfolgende Eingangsbytes in Datenbaustein kopieren
Hallo zusammen,
ich stehe grad mal wieder auf dem Schlauch und brauch vermutlich brauch ich nur einen Schubs in die richtige Richtung :wink:.
Ich habe hier einen Datalogic Scanner mit einer CBX500 Anschlussbox. Darin ist eine ProfinetIO Schnittstelle eingebaut,
über die ich Barcodedaten in meine S7-1200 einlesen muss.
Die ProfinetIO Kommunikation zu dem Scanner habe ich aufgebaut und kann prinzipiell auch Daten empfangen.
Allerdings sind die Projektierungsmöglichkeiten des Scanners in der Gerätekonfiguration sehr eingeschränkt. So können zum
Beispiel maximal 64 Byte in einem "Rutsch" übertragen werden. Alles was länger ist (was bei einem 2D-Code leicht möglich ist)
wird vom Scanner gesplittet und sequentiell übertragen.
Dazu kommt, und das ist im Moment mein eigentliches Problem, das in der Gerätekonfiguration des Scanners keine großen
Datenblöcke angelegt werden können, sondern das Telegramm muss aus den Modulen 1 Byte, 1 Word, 2 Word oder 4 Word
zusammengestellt werden.
Somit ist ein Einlesen der Daten mit der Funktion DPRD_DAT bzw. DPWR_DAT (zum Schreiben) nicht möglich.
Ich suche also nun nach einer brauchbaren Funktion um 64 Bytes einzulesen und in einen Datenbaustein zu kopieren.
- Der MOVE Befehl funktioniert, ist aber bei 64 Byte (jeweils für Eingang/Ausgang) doch recht unübersichtlich.
- Die Funktion MOVE_BLK scheidet auch aus, weil als Eingangsformat ein Array erwartet wird.
Kennt jemand von euch eine geeignete Funktion, vorzugsweise FUP/KOP, da ich über keine Kentnisse in SCL verfüge.
Alternativ habe ich schon mit dem Gedanken gespielt einen Baustein zu schreiben, der die Daten aus nur 10 Bytes sequentiell
einliest. Diese 10 Bytes würde ich dann mit dem MOVE Befehl von der Schnittstelle in den DB kopieren.
Anschließend muss dem Scanner mitgeteilt werden das die Daten verarbeitet worden sind, damit er die nächsten 10 Zeichen
sendet, die dann an das Ende des ersten Teils angehängt werden.
Allerdings fürchte ich das die Datenübertragung damit recht "lange" dauert. Ist zwar nicht zeitkritisch, sollte aber auch nicht
"ewig" dauern. Um sicherzustellen das die Daten konsistent sind gibt es wohl eine Option am Scanner, die ein identisches
Check-Byte am Anfang und Ende des Datentelegramms einbindet.
Was haltet ihr davon, bzw. hat jemand Erfahrung mit diesem Gerät (scheint übrigens auch bei der S7-300 nicht anders zu
sein). Oder hat jemand eine Idee wie ich die Daten "ohne großen Aufwand" konsistent übertragen kann.
Gruß smartie
Hallo zusammen,
ich stehe grad mal wieder auf dem Schlauch und brauch vermutlich brauch ich nur einen Schubs in die richtige Richtung :wink:.
Ich habe hier einen Datalogic Scanner mit einer CBX500 Anschlussbox. Darin ist eine ProfinetIO Schnittstelle eingebaut,
über die ich Barcodedaten in meine S7-1200 einlesen muss.
Die ProfinetIO Kommunikation zu dem Scanner habe ich aufgebaut und kann prinzipiell auch Daten empfangen.
Allerdings sind die Projektierungsmöglichkeiten des Scanners in der Gerätekonfiguration sehr eingeschränkt. So können zum
Beispiel maximal 64 Byte in einem "Rutsch" übertragen werden. Alles was länger ist (was bei einem 2D-Code leicht möglich ist)
wird vom Scanner gesplittet und sequentiell übertragen.
Dazu kommt, und das ist im Moment mein eigentliches Problem, das in der Gerätekonfiguration des Scanners keine großen
Datenblöcke angelegt werden können, sondern das Telegramm muss aus den Modulen 1 Byte, 1 Word, 2 Word oder 4 Word
zusammengestellt werden.
Somit ist ein Einlesen der Daten mit der Funktion DPRD_DAT bzw. DPWR_DAT (zum Schreiben) nicht möglich.
Ich suche also nun nach einer brauchbaren Funktion um 64 Bytes einzulesen und in einen Datenbaustein zu kopieren.
- Der MOVE Befehl funktioniert, ist aber bei 64 Byte (jeweils für Eingang/Ausgang) doch recht unübersichtlich.
- Die Funktion MOVE_BLK scheidet auch aus, weil als Eingangsformat ein Array erwartet wird.
Kennt jemand von euch eine geeignete Funktion, vorzugsweise FUP/KOP, da ich über keine Kentnisse in SCL verfüge.
Alternativ habe ich schon mit dem Gedanken gespielt einen Baustein zu schreiben, der die Daten aus nur 10 Bytes sequentiell
einliest. Diese 10 Bytes würde ich dann mit dem MOVE Befehl von der Schnittstelle in den DB kopieren.
Anschließend muss dem Scanner mitgeteilt werden das die Daten verarbeitet worden sind, damit er die nächsten 10 Zeichen
sendet, die dann an das Ende des ersten Teils angehängt werden.
Allerdings fürchte ich das die Datenübertragung damit recht "lange" dauert. Ist zwar nicht zeitkritisch, sollte aber auch nicht
"ewig" dauern. Um sicherzustellen das die Daten konsistent sind gibt es wohl eine Option am Scanner, die ein identisches
Check-Byte am Anfang und Ende des Datentelegramms einbindet.
Was haltet ihr davon, bzw. hat jemand Erfahrung mit diesem Gerät (scheint übrigens auch bei der S7-300 nicht anders zu
sein). Oder hat jemand eine Idee wie ich die Daten "ohne großen Aufwand" konsistent übertragen kann.
Gruß smartie
Zuletzt bearbeitet: