Diese Seite verwendet Cookies, um das bestmögliche Nutzererlebnis sicherzustellen. Wenn Sie die Seite weiter nutzen, stimmen Sie der Cookie-Nutzung zu.  mehr...  Einverstanden  Ablehnen

Barcode scannen und Gewicht in SQL Datenbank speichern

In einer SQL-Datenbank sollen
  • Auftragsnummer
  • Palettennummer
  • Bruttogewicht
gespeichert werden, sobald nacheinander die Barcodes für Auftragsnummer und Palettennummer gescannt wurden.

Die BEMABOX ist per RS232-Kabel mit der Basisstation BC9030 eines Datalogic PM9500 Funk-Barcode-Scanners verbunden.
Die Waage ist über einen COM-Server mit dem Ethernet verbunden.
Der Scanner ist so konfiguriert, dass er als Präfix das Steuerzeichen STX und als Suffix das Steuerzeichen ETX sendet.

Barcode scannen und Gewicht in SQL Datenbank speichern

Auf der BEMABOX wird zunächst die Tabelle PALETTE mit folgenden Feldern definiert:

SQL-Datenbank Palette

Dann wird die Regel PALETTE erstellt, die alle Meldungen verarbeitet, die mit dem Steuerzeichen STX beginnen und mit ETX enden.
Dazwischen befinden sich maximal 20 Ziffern oder Buchstaben:

Regel PALETTE


Zuerst wird die Auftragsnummer gescannt und von der Regel PALETTE im Kontext auftrag zwischengespeichert.
Danach wird die Palettennummer gescannt. Die Regel PALETTE ermittelt dann das Gewicht und speichert dieses zusammen mit der Auftragsnummer aus dem Kontext auftrag, der Palettennummer und einem Zeitstempel (Datum und Uhrzeit) in der Tabelle PALETTE.

Das erfolgreiche Scannen der Auftragsnummer wird mit zwei Signaltönen quittiert, das erfolgreiche Scannen der Palettennummer und das anschließende Speichern der Daten wird mit 3 Signaltönen quittiert.
Im Fehlerfall werden 3 kurze, 3 lange und anschließend 3 kurze Signaltöne ausgegeben.

Der spezielle Barcode RESET setzt die Schrittfolge zurück und kann zum Initialisieren der Schnittstelle verwendet werden.
Reset PALETTE
Das Initialisieren wird mit vier Signaltönen bestätigt.


XGETSID( $sid , $role , $master , $sysloglevel , $syslogdays )

XTTYOPN( 0 )
if ($barcode == 'RESET')
{
  XSETC( 'auftrag' , '' )
  for ($i=0;$i<4;$i++)
  {
    usleep(200000);
    XTTYSND( chr(7) )
  }
  return $syserror; 
}

XGETC( 'auftrag' , $auftrag )
if (strlen($auftrag) == 0)
{
  XSETC( 'auftrag' , $barcode )
  for ($i=0;$i<2;$i++)
  {
    usleep(200000);
    XTTYSND( chr(7) )
  }
  return $syserror; 
}

XSETC( 'auftrag' , '' )

$cmd = 'READ' . chr(13) . chr(10); 
$regex = '~^(ST|US|OL|UL),(GS|NT), *([0-9\.\-]{1,8}),(kg|lb)\r\n~i';

XTCP( '192.168.178.27' , 8000 , $cmd , $regex , &$data ) 
if (!empty($syserror)) 
{
   XLOGW( $syserror )

   XTTYSND( 'D' )
   usleep(500000);
   for ($i=0;$i<3;$i++)
   {
     XTTYSND( chr(7) )
     usleep(100000);
   }
   for ($i=0;$i<3;$i++)
   {
     XTTYSND( chr(7) )
     usleep(500000);
   }
   for ($i=0;$i<3;$i++)
   {
     XTTYSND( chr(7) )
     usleep(100000);
   }
   XTTYSND( 'E' )

   return $syserror; 
} 

$weight = $sysmatch[3]; 
$unit = $sysmatch[4]; 

$info = "Auftrag: $auftrag Palette: $barcode Gewicht: $weight $unit";
XLOGW( $info )

XDBOPEN( 'palette' )
XCHECKREPLY( $syserror , "" )
$dattimb = date('Y-m-d H:i:s');

XDBPUT( $dattimb , $auftrag , $barcode , $weight , $unit )
XCHECKREPLY( $syserror , "" )

for ($i=0;$i<3;$i++)
{
  usleep(200000);
  XTTYSND( chr(7) )
}

$sysreply = '';

Zur Fehleranalyse kann das Protokoll der Kommunikation in eine Protokolldatei ausgegeben werden:

PALETTE Protokoll

Die Daten können später über einen Browser ausgewertet werden:

PALETTE Datenbank

Über einen Filter kann nach Datum, Auftragsnummer oder Palettennummer gesucht werden:

PALETTE Suchen

Anschließend können die Datensätze nach
  • Stunde
  • Tag
  • Monat
  • Jahr
verdichtet werden, um sie als Datei zu exportieren oder um sie zu löschen.

PALETTE Auswertung

Die Daten können über die Drucken-Funktionalität des Browsers ausgedruckt werden.
Alternativ können die exportieren Daten über Excel importiert und analysiert werden:

PALETTE Excel

zurück zur BEMACON Process-Engine

Alle Namen von Produkten und Dienstleistungen sind Marken der jeweiligen Firmen.