DE69835492T2 - Verfahren und Gerät zum Lesen von Strichkoden - Google Patents

Verfahren und Gerät zum Lesen von Strichkoden Download PDF

Info

Publication number
DE69835492T2
DE69835492T2 DE69835492T DE69835492T DE69835492T2 DE 69835492 T2 DE69835492 T2 DE 69835492T2 DE 69835492 T DE69835492 T DE 69835492T DE 69835492 T DE69835492 T DE 69835492T DE 69835492 T2 DE69835492 T2 DE 69835492T2
Authority
DE
Germany
Prior art keywords
data
bar
character
cpu
demodulation
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69835492T
Other languages
English (en)
Other versions
DE69835492D1 (de
Inventor
Mitsuo Nakahara-ku Kawasaki-shi Watanabe
Motohiko Nakahara-ku Kawasaki-shi Itoh
Hiroaki Nakahara-ku Kawasaki-shi Kawai
Isao Nakahara-ku Kawasaki-shi Iwaguchi
Shinichi Nakahara-ku Kawasaki-shi Sato
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Application granted granted Critical
Publication of DE69835492D1 publication Critical patent/DE69835492D1/de
Publication of DE69835492T2 publication Critical patent/DE69835492T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
    • G06K7/1404Methods for optical code recognition
    • G06K7/146Methods for optical code recognition the method including quality enhancement steps
    • G06K7/1473Methods for optical code recognition the method including quality enhancement steps error correction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06KGRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
    • G06K7/00Methods or arrangements for sensing record carriers, e.g. for reading patterns
    • G06K7/10Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
    • G06K7/14Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light

Description

  • Die vorliegende Erfindung bezieht sich auf einen Strichcodeleser und ein Strichcodeleseverfahren zum Lesen eines Strichcodes auf der Basis einer Variation einer reflektierten Lichtmenge, die durch das Scannen des Strichcodes erhalten wird.
  • In den letzten Jahren wurden Strichcodes zur Erleichterung der Verwaltung von Waren zum Verkauf verbreitet ver wendet, wie sie durch POS (Kassen)-Systeme im Vertriebswesen oder dgl, repräsentiert werden. In dem POS-System in einem Geschäft werden beispielsweise Informationen, wie die Klassifikation und der Preis einer Ware, in einen Strichcode codiert, und der Strichcode wird auf die Ware gedruckt. An der Ausgangskasse wird Scanlicht vom Strichcodeleser auf den Strichcode eingestrahlt, und die Menge an reflektiertem Licht wird detektiert. Dies ermöglicht, dass die in den Strichcode codierten Daten gelesen werden, und die Bezahlung für die Waren kann auf der Basis der decodierten Daten angefordert werden. Gleichzeitig wird die Anzahl verkaufter Güter in Echtzeit gezählt, und kann für eine Inventur und die Lagerwirtschaft verwendet werden.
  • Solche Strichcodes können in einen WPC-Code, wie einen JAN-Code, einen UPC-Code und einen EAN-Code, und in einen zweiten Code mit variabler Länge klassifiziert werden. Unter diesen ist der WPC-Code mit einem Startkontrollstrich (Start Guard Bar – SGB), der am Rand ganz links hinzugefügt wird, einem mittleren Strich (Center Bar – CB), der in einem Zwischenteil eingefügt wird, und dem Endkontrollstrich (End Guard Bar – EGB), der am Rand ganz rechts hinzugefügt wird, versehen, und ist aus einem linken Datenblock mit 6 oder 4 Zeichen zwischen dem Startkontrollstrich und dem mittleren Strich, und einem rechten Datenblock mit 6 oder 4 Datenzeichen zwischen dem mittleren Strich und dem Endkontrollstrich zusammengesetzt.
  • Ferner gibt es in Bezug auf den WPC-Code einen WPC-Code, der 13-stelliger Strichcode genannt wird. In diesem 13-stelligen Strichcode ist jedes Zeichen in dem linken Datenblock durch ein gerades Paritätszeichen (ein Zeichen, bei dem die Gesamtanzahl von Modulen, die die beiden darin enthaltenen schwarzen Striche bilden, gerade ist) oder ein ungerades Paritätszeichen (ein Zeichen, bei dem die Gesamtanzahl von Modulen, die die darin enthaltenen schwarzen Striche bilden, ungerade ist) repräsentiert, und ein Wert, der der Kombination der geraden Paritäten und der ungeraden entspricht, ist als 13. Zeichen (Flaggenzeichen) repräsentiert, wodurch die Informationen mit 13 Ziffern dargestellt werden.
  • Um das Flaggenzeichen in dem 13-stelligen Strichcode zu demodulieren, ist es demgemäß notwendig, die normale Demodulation 6-stelliger Datenzeichen zumindest in dem linken Datenblock zu vollenden.
  • Wenn gemäß dem Standard des WPC-Codes 12 Datenstücke in dem 13-stelligen Strichcode abwechselnd in ungerade Positionen und gerade Positionen klassifiziert werden, wobei angenommen wird, dass das Zeichen ganz rechts in die ungerade Position klassifiziert wird (das Flaggenzeichen wird auch in die ungerade Position klassifiziert), wird die Summe der gesamten Zahlenwerte der Datenzeichen in den ungeraden Positionen plus dreimal die Gesamtsumme der Zahlenwerte der Datenzeichen in den geraden Positionen ein ganzzahliges Vielfaches von 10. Unter Verwendung dieses Standards ist es leicht möglich zu bestätigen, ob die dem Strichcode entsprechenden demodulierten Daten korrekt reproduziert wurden, wenn eine Vielzahl der durch das Blocklesen erhaltenen demodulierten Daten kombiniert wird. Eine solche Bestätigung wird "Modulus 10-Prüfung" genannt.
  • Demgemäß müssen die 6-stelligen Datenzeichen in dem rechten Datenblock normalerweise vollständig demoduliert werden, um diese Modulus 10-Prüfung auszuführen.
  • Ein Strichcodeleser kann jedoch den Strichcode nicht genau lesen, wenn der Beutel und das Papier, auf die der Strichcode gedruckt ist, Falten aufweisen, oder wenn der Strichcode in einer falschen Position aufgedruckt wird. Obwohl das vom Strichcodeleser empfangene reflektierte Licht ein diffusives reflektiertes Licht auf der Strichcodeoberfläche ist, besteht ferner eine Möglichkeit, dass der Strichcodeleser nicht genug reflektiertes Licht von der Lichtmenge, die der Farbe jedes Strichs in dem Strichcode entspricht, aufgrund des Zustands der Strichcodeoberfläche empfangen kann.
  • Auch wenn nur ein Zeichen nicht demoduliert werden kann, ist es in solchen Fällen unmöglich, das 13. Zeichen zu berechnen, und die Modulus 10-Prüfung nur mit den Daten auszuführen, die durch das Scannen in diesem Zustand erhalten werden. Als Ergebnis ist es notwendig, denselben Strichcode viele Male zu lesen, und kleine Stücke jeweils erhaltener Daten zusammenzuführen.
  • Die US-4 414 468-A offenbart eine Technik zum Kompensieren systematischer Fehler beim Drucken oder Lesen von Strichcodes. Wenn Strich-Zwischenraum-Paarmessungen ein mehrdeutiges Zeichen anzeigen (das nur unter Verwendung von Strichbreitenmessungen vollständig decodiert werden kann), basiert eine Fehlerkorrektur auf den Charakteristiken des benachbarten, vorher decodierten Zeichens.
  • Ein Strichcodeleser gemäß einem ersten Aspekt der vorliegenden Erfindung umfasst eine Strichbreiten-Detektionseinrichtung zum Lesen eines Strichcodes mit einer Vielzahl von Datenzeichen, wobei jedes Datenzeichen ein Strichbreitenmuster umfasst, das einen Zahlenwert repräsentiert, bei welchem die Zeichen des Strichcodes in eine Sequenz ungera der und gerader Positionen klassifiziert werden können, wobei das Zeichen ganz rechts in eine ungerade Position klassifiziert wird, und bei welchem die durch die Datenzeichen repräsentierten Zahlenwerte einen vorherbestimmten bedingten Ausdruck erfüllen, in Übereinstimmung mit welchem die Summe der Zahlenwerte, die durch die Datenzeichen in den ungeraden Positionen repräsentiert werden, plus dreimal die Summe der Zahlenwerte, die durch die Datenzeichen in den geraden Positionen repräsentiert werden, ein ganzzahliges Vielfaches von Zehn ist; eine Demodulationseinrichtung zum Demodulieren des von der Strichbreiten-Detektionseinrichtung detektierten Strichbreitenmusters, um einen Zahlenwert für jedes der Datenzeichen zu erhalten, und zum Ausgeben der demodulierten Daten; und gekennzeichnet durch das Vorsehen einer Datenableitungseinrichtung zum Ableiten eines Zahlenwerts eines Datenzeichens in dem Strichcode, dessen Demodulation fehlgeschlagen ist, wobei die Datenableitungseinrichtung eine inverse Operation des vorherbestimmten bedingten Ausdrucks unter Verwendung der Zahlenwerte ausführt, die von der Demodulationseinrichtung für die anderen Datenzeichen erhalten werden.
  • So können ein Strichcodeleser und ein Strichcode-Leseverfahren vorgesehen werden, die fähig sind, in einem Fall, wenn die Demodulation eines Zeichens fehlschlägt, die in dieses Zeichen codierten Daten auf der Basis demodulierter Daten abzuleiten, die durch das Demodulieren anderer Zeichen erhalten werden.
  • Insbesondere mit dieser Konfiguration liest die Strichbreitenmuster-Detektionseinheit den Strichcode, der mit einer Vielzahl von Datenzeichen gespeichert wird, welche durch das Codieren vorherbestimmter Datenstücke erhalten werden, die einen bedingten Ausdruck erfüllen, und detektiert das gelesene Strichbreitenmuster. Die Demodulations einheit demoduliert das von der Strichbreitenmuster-Detektionseinheit detektierte Strichbreitenmuster für jedes Datenzeichen, und gibt demodulierte Daten aus. Wenn die Demodulation eines Datenzeichens in dem Strichcode durch die Demodulationseinheit fehlschlägt, führt die Datenableitungseinheit die inverse Operation des bedingten Ausdrucks auf der Basis der durch das Demodulieren aller anderen Datenzeichen in dem Strichcode erhaltenen Zahlenwerte aus und leitet Daten ab, die in das Datenzeichen codiert werden, dessen Demodulation durch die Demodulationseinheit fehlgeschlagen ist. Als Ergebnis ist es möglich, die dem gesamten Strichcode entsprechenden demodulierten Daten rascher zu erhalten.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann das Datenzeichen durch das Codieren einer Gerade-Ungerade-Paritätsunterscheidung in den Daten erhalten werden, und der Strichcode kann mit einer Vielzahl der Datenzeichen in Übereinstimmung mit einer Kombination unter vorherbestimmten Kombinationen der geraden Parität und der ungeraden Parität gespeichert werden.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann die Demodulationseinheit das von der Strichbreitenmuster-Detektionseinheit detektierte Strichbreitenmuster für jedes der Datenzeichen demodulieren und dann die Daten und die Gerade-Ungerade-Paritätsunterscheidung ausgeben, und kann ferner eine Paritätsableitungseinheit umfassen, die zu verwenden ist, wenn die Demodulationseinheit bei der Demodulation eines Datenzeichens in dem Strichcode fehlschlägt, zum Spezifizieren der vorherbestimmten Kombinationen, welche Kombinationen von Gerade-Ungerade-Paritätsunterscheidungen entsprechen, die durch das Demodulieren der anderen Datenzeichen in dem Strichcode mit der Demodulationseinheit erhalten werden, und zum Lesen der Gerade-Ungerade-Paritätsunterscheidung, die dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinheit fehlgeschlagen ist, unter den spezifizierten Kombinationen.
  • Ein den ersten Aspekt der vorliegenden Erfindung verkörpernder Strichcodeleser kann ferner versehen sein mit einer Vergleichseinheit zum Vergleichen eines ersten Strichbreitenmusters, das dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinheit fehlgeschlagen ist, und eines zweiten Strichbreitenmusters, das Daten entspricht, die von der Datenableitungseinheit abgeleitet werden; und einer Validiereinheit zum Validieren der von der Datenableitungseinheit abgeleiteten Daten nur dann, wenn das erste Strichbreitenmuster mit dem zweiten Strichbreitenmuster zumindest teilweise als Ergebnis des Vergleichs durch die Vergleichseinheit zusammenfällt.
  • Mit dieser Konfiguration ist es möglich, das Ableitungsergebnis zu kontrollieren, und daher ist es möglich, die Zuverlässigkeit zu verbessern.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann die Vergleichseinheit Strichbreiten jedes Paars von Strichen in dem ersten Strichbreitenmuster und in dem zweiten Strichbreitenmuster vergleichen, wobei jedes Paar von Strichen einander entspricht, und die Validiereinheit validiert die von der Datenableitungseinheit abgeleiteten Daten nur, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines vorherbestimmten Verhältnisses liegt.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann die Validiereinheit, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines ersten vorherbestimmten Verhältnisses liegt, die Daten sofort validieren, und, wenn das Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines zweiten vorherbestimmten Verhältnisses liegt, das das erste vorherbestimmte Verhältnis überschreitet, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit und die Datenableitungseinheit neustarten, und kann die Daten nur validieren, wenn das Verhältnis von Strichbreiten des Paars von Strichen nach dem Neustart innerhalb des zweiten vorherbestimmten Verhältnisses liegt.
  • Während es mit dieser Konfiguration möglich ist, das Ableitungsergebnis in einem Fall prompt zu validieren, dass die Zuverlässigkeit des Ableitungsergebnisses hoch ist (wenn das Verhältnis von Strichbreiten eines Paars von Strichen innerhalb des ersten vorherbestimmten Verhältnisses liegt), ist es auch möglich, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit und die Datenableitungseinheit in einem Fall neuzustarten, dass die Zuverlässigkeit des Ableitungsergebnisses vergleichsweise gering ist (wenn das Verhältnis von Strichbreiten eines Paars von Strichen das erste vorherbestimmte Verhältnis überschreitet), und daher ist es möglich, die Zuverlässigkeit des Ableitungsergebnisses zu verbessern.
  • Ein den ersten Aspekt der vorliegenden Erfindung verkörpernder Strichcodeleser kann ferner versehen sein mit einer Vergleichseinheit zum Vergleichen eines ersten Strichbreitenmusters, das dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinheit fehlgeschlagen ist, und eines zweiten Strichbreitenmusters, das Daten entspricht, die von der Datenableitungseinheit abgeleitet werden, und der Gerade-Ungerade-Paritätsunterscheidung entspricht, die von der Paritätsableitungseinheit abgeleitet wird; und einer Validiereinheit zum Validieren der von der Datenableitungseinheit abgeleiteten Daten und der von der Paritätsableitungseinheit abgeleiteten Gerade-Ungerade-Paritätsunterscheidung nur dann, wenn das erste Strichbreitenmuster mit dem zweiten Strichbreitenmuster zumindest teilweise als Ergebnis des Vergleichs durch die Vergleichseinheit zusammenfällt.
  • Mit dieser Konfiguration ist es möglich, das Ableitungsergebnis zu kontrollieren, und daher ist es möglich, die Zuverlässigkeit des Ableitungsergebnisses zu verbessern.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann die Vergleichseinheit Strichbreiten jedes Paars von Strichen in dem ersten Strichbreitenmuster und in dem zweiten Strichbreitenmuster vergleichen, wobei jedes Paar von Strichen einander entspricht, und die Validiereinheit kann die von der Datenableitungseinheit abgeleiteten Daten und die von der Paritätsableitungseinheit abgeleitete Gerade-Ungerade-Paritätsunterscheidung validieren, wenn ein Verhältnis von Strichbreiten eines Paars von Strichen innerhalb eines vorherbestimmten Verhältnisses liegt.
  • Bei einem den ersten Aspekt der vorliegenden Erfindung verkörpernden Strichcodeleser kann die Validiereinheit, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines ersten vorherbestimmten Verhältnisses liegt, die Daten sofort validieren, und, nur wenn das Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines zweiten vorherbestimmten Verhältnisses liegt, das das erste vorherbestimmte Verhältnis überschreitet, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit, die Datenableitungseinheit und die Paritätsableitungseinheit neustarten, und kann die Daten und die Unterscheidung einer geraden Parität oder einer ungeraden Parität nur validieren, wenn das Verhältnis von Strichbreiten des Paars von Strichen nach dem Neustart innerhalb des zweiten vorherbestimmten Verhältnisses liegt.
  • Während es mit dieser Konfiguration möglich ist, das Ableitungsergebnis in einem Fall prompt zu validieren, dass die Zuverlässigkeit des Ableitungsergebnisses hoch ist (wenn das Verhältnis von Strichbreiten eines Paars von Strichen innerhalb des ersten vorherbestimmten Verhältnisses liegt), ist es auch möglich, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit und die Datenableitungseinheit in einem Fall neuzustarten, dass die Zuverlässigkeit des Ableitungsergebnisses vergleichsweise gering ist (wenn das Verhältnis von Strichbreiten eines Paars von Strichen das erste vorherbestimmte Verhältnis überschreitet), und daher ist es möglich, die Zuverlässigkeit des Ableitungsergebnisses zu verbessern.
  • Ein den ersten Aspekt der vorliegenden Erfindung verkörpernder Strichcodeleser kann ferner versehen sein mit einer Validiereinheit zum sofortigen Validieren der von der Datenableitungseinheit abgeleiteten Daten, wenn die Demodulationseinheit Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch einmaliges Scannen mit der Strichbreitenmuster-Detektionseinheit erhalten wird, und zum Neustarten der Strichbreitenmuster-Detektionseinheit, der Demodulationseinheit und der Datenableitungseinheit, und zum Validieren der durch die Datenableitung nach dem Neustart abgeleiteten Daten, wenn die Demodulationseinheit Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch mehrmaliges Scannen mit der Strichbreitenmuster-Detektionseinheit erhalten wird.
  • Während es mit dieser Konfiguration möglich ist, das Ableitungsergebnis in einem Fall prompt zu validieren, dass die Zuverlässigkeit des Ableitungsergebnisses hoch ist (wenn das Strichbreitenmuster durch das kontinuierliche Lesen erhalten wird), ist es möglich, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit und die Datenablei tungseinheit in einem Fall neuzustarten, dass die Zuverlässigkeit des Ableitungsergebnisses vergleichsweise gering ist (wenn das Strichbreitenmuster durch das geteilte Lesen erhalten wird), und daher ist es möglich, die Zuverlässigkeit des Ableitungsergebnisses zu verbessern.
  • Ein den ersten Aspekt der vorliegenden Erfindung verkörpernder Strichcodeleser kann ferner versehen sein mit einer Validiereinheit zum sofortigen Validieren der von der Datenableitungseinheit abgeleiteten Daten und der von der Paritätsableitungseinheit abgeleiteten Gerade-Ungerade-Paritätsunterscheidung, wenn die Demodulationseinheit Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch einmaliges Scannen mit der Strichbreitenmuster-Detektionseinheit erhalten wird, und zum Neustarten der Strichbreitenmuster-Detektionseinheit, der Demodulationseinheit und der Datenableitungseinheit, und zum Validieren der von der Datenableitungseinheit abgeleiteten Daten und der von der Paritätsableitungseinheit abgeleiteten Gerade-Ungerade-Paritätsunterscheidung nach dem Neustart, wenn die Demodulationseinheit Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch mehrmaliges Scannen mit der Strichbreitenmuster-Detektionseinheit erhalten wird.
  • Während es mit dieser Konfiguration möglich ist, das Ableitungsergebnis in einem Fall prompt zu validieren, dass die Zuverlässigkeit des Ableitungsergebnisses hoch ist (wenn das Strichbreitenmuster durch das kontinuierliche Lesen erhalten wird), ist es möglich, die Strichbreitenmuster-Detektionseinheit, die Demodulationseinheit und die Datenableitungseinheit in einem Fall neuzustarten, dass die Zuverlässigkeit des Ableitungsergebnisses vergleichsweise gering ist (wenn das Strichbreitenmuster durch das geteilte Lesen er halten wird), und daher ist es möglich, die Zuverlässigkeit des Ableitungsergebnisses zu verbessern.
  • Gemäß einem zweiten Aspekt der vorliegenden Erfindung ist ein Verfahren zum Lesen eines Strichcodes vorgesehen, mit einem Schritt des Lesens eines Strichcodes mit einer Vielzahl von Datenzeichen, wobei jedes Datenzeichen ein Strichbreitenmuster umfasst, das einen Zahlenwert repräsentiert, bei welchem die Zeichen des Strichcodes in eine Sequenz ungerader und gerader Positionen klassifiziert werden können, wobei das Zeichen ganz rechts in eine ungerade Position klassifiziert wird, und bei welchem die durch die Datenzeichen repräsentierten Zahlenwerte einen vorherbestimmten bedingten Ausdruck erfüllen, in Übereinstimmung mit welchem die Summe der Zahlenwerte, die durch die Datenzeichen in den ungeraden Positionen repräsentiert werden, plus dreimal die Summe der Zahlenwerte, die durch die Datenzeichen in den geraden Positionen repräsentiert werden, ein ganzzahliges Vielfaches von Zehn ist; einem Demodulationsschritt des Demodulierens des Strichbreitenmusters, das für jedes der Datenzeichen detektiert wird, um einen Zahlenwert zu erhalten, und des Ausgebens demodulierter Daten; und gekennzeichnet durch das Vorsehen eines Ableitungsschritts des Ableitens eines Zahlenwerts eines Datenzeichens, dessen Demodulation fehlgeschlagen ist, welcher die Ausführung einer inversen Operation des vorherbestimmten bedingten Ausdrucks unter Verwendung der Zahlenwerte umfasst, die durch den Demodulationsschritt für die anderen Datenzeichen erhalten werden.
  • Nun wird anhand von Beispielen auf die beigeschlossenen Zeichnungen Bezug genommen, in denen:
  • 1 ein Blockbild ist, das Abschnitte eines die vorliegende Erfindung verkörpernden Strichcodelesers zeigt;
  • 2 ein Blockbild ist, das einen Strichcodeleser gemäß einer ersten Ausführungsform der vorliegenden Erfindung zeigt;
  • 3 eine Darstellung ist, die in Format von Strichbreitendaten zeigt;
  • 4 eine Darstellung ist, welche eine Struktur demodulierter Daten zeigt, die in einem temporären Sicherungspuffer nach dem Detektieren eines Pseudo-Startkontrollstrichs gebildet werden;
  • 5 eine Darstellung ist, welche eine Struktur demodulierter Daten zeigt, die in einem temporären Sicherungspuffer nach dem Detektieren eines Pseudo-Endkontrollstrichs gebildet werden;
  • 6 eine Darstellung ist, welche eine Struktur demodulierter Daten zeigt, die in einem temporären Sicherungspuffer nach dem Detektieren eines mittleren Pseudo-Strichs gebildet werden;
  • 7 eine Darstellung ist, die eine Struktur eines ersten Demodulationsvollendungspuffers zeigt;
  • 8 eine Darstellung ist, die eine Struktur eines zweiten Demodulationsvollendungspuffers zeigt;
  • 9 eine Darstellung ist, die eine Struktur eines dritten Demodulationsvollendungspuffers zeigt;
  • 10 ein Flussdiagramm ist, welches ein Strichcode-Erkennungs/Demodulationsprozessprogramm zeigt, das in der in 2 gezeigten CPU ausgeführt wird;
  • 11 ein Flussdiagramm ist, das eine erste Abfrageprozesssubroutine zeigt, die im in 10 gezeigten S001 ausgeführt wird;
  • 12 ein Flussdiagramm ist, das eine zweite Abfrageprozesssubroutine zeigt, die im in 10 gezeigten S002 ausgeführt wird;
  • 13 ein Flussdiagramm ist, das eine erste Strichcode-Detektionsprozesssubroutine zeigt, die im in 12 ge zeigten S202 ausgeführt wird;
  • 14 ein Flussdiagramm ist, das weitere Teile einer ersten Strichcode-Detektionsprozesssubroutine zeigt, die im in 12 gezeigten S202 ausgeführt wird;
  • 15 ein Flussdiagramm ist, das eine zweite Strichcode-Detektionsprozesssubroutine zeigt, die im in 12 gezeigten S204 ausgeführt wird;
  • 16 ein Flussdiagramm ist, das eine dritte Strichcode-Detektionsprozesssubroutine zeigt, die im in 12 gezeigten S206 ausgeführt wird;
  • 17 ein Flussdiagramm ist, das eine Strichcode-Demodulationsprozesssubroutine zeigt, die im in 10 gezeigten S003 ausgeführt wird;
  • 18 ein Flussdiagramm ist, das weitere Teile einer Strichcode-Demodulationsprozesssubroutine zeigt, die im in 10 gezeigten S003 ausgeführt wird;
  • 19 ein Flussdiagramm ist, das weitere Teile einer Strichcode-Demodulationsprozesssubroutine zeigt, die im in 10 gezeigten S003 ausgeführt wird;
  • 20 ein Flussdiagramm ist, das eine 1-Zeichen-Ableitungsprozesssubroutine zeigt, die im in 10 gezeigten S007 und S011 ausgeführt wird;
  • 21 ein Flussdiagramm ist, das eine 1-Zeichen-Beurteilungsprozesssubroutine zeigt, die im in 20 gezeigten S713 ausgeführt wird;
  • 22 ein Flussdiagramm ist, das eine Syntheseprozesssubroutine zeigt, die im in 10 gezeigten S008 ausgeführt wird;
  • 23 ein Flussdiagramm ist, das eine Koinzidenzanzahl-Prüfprozesssubroutine zeigt, die im in 10 gezeigten S013 ausgeführt wird;
  • 24 ein Flussdiagramm ist, das eine Koinzidenzanzahl-Prüfprozesssubroutine, die im in 10 gezeigten S013 ausgeführt wird, gemäß der zweiten Ausführungsform der vorliegenden Erfindung zeigt;
  • 25 eine Darstellung ist, die einen Fall zeigt, dass die Demodulation von 1 Zeichen in dem linken Datenblock des Strichcodes fehlschlägt;
  • 26 eine Darstellung ist, die ein Strichbreitenmuster des in 25 gezeigten 1 Zeichens zeigt, dessen Demodulation fehlgeschlagen ist;
  • 27 eine Darstellung ist, die einen Fall zeigt, dass die Demodulation von 1 Zeichen in dem rechten Datenblock des Strichcodes fehlschlägt;
  • 28 eine Darstellung ist, die ein Strichbreitenmuster des in 27 gezeigten 1 Zeichens zeigt, dessen Demodulation fehlgeschlagen ist;
  • 29 eine Tabelle ist, die Kombinationen von Strichbreitenmustern von Datenzeichen in dem Strichcode und demodulierten Daten zeigt;
  • 30 eine Tabelle ist, die Kombination von UNGERADE/GERADE-Strukturen von Datenzeichen in dem Strichcode und Flaggenzeichen zeigt; und
  • 31 eine Koordinate ist, die zur Modulanzahlberechnung verwendet wird.
  • Zuerst erfolgt eine Erläuterung eines 13-stelligen Strichcodes, der von einem Strichcodeleser gemäß einer Ausführungsform der vorliegenden Erfindung zu lesen ist, mit Bezugnahme auf 25 bis 30. Ein 13-stelliger Strichcode (WPC-Code), wie in 25 und 27 gezeigt, ist versehen mit einem Startkontrollstrich (SGB) links, der aus einem festgelegten Muster von Strichen besteht (drei Striche in Schwarz, Weiß, Schwarz, wobei jeder Strich aus einem Modul besteht), einem mittleren Strich (CB) in der Mitte, der aus einem festgelegten Muster von Strichen besteht (fünf Striche in Weiß, Schwarz, Weiß, Schwarz, Weiß, wobei jeder Strich aus 1 Modul besteht, und einem Endkontrollstrich (EGB) rechts, der aus einem festgelegten Muster von Strichen besteht (drei Striche in Schwarz, Weiß, Schwarz, wobei jeder Strich aus 1 Modul besteht). Der Strichcode ist auch versehen mit einem linken Datenblock, der aus 6 Datenzeichen (C1 bis C6) besteht, zwischen dem Startkontrollstrich (SGB) und dem mittleren Strich (CB), und einem rechten Datenblock, der aus 6 Datenzeichen (C7 bis C12) besteht, zwischen dem mittleren Strich (CB) und dem Endkontrollstrich (EGB).
  • Jedes Datenzeichen (C1 bis C12), wie in 26 und 28 gezeigt, besteht aus einer Kombination von zwei weißen Strichen und zwei schwarzen Strichen, die durch die geeignete Zuordnung von Weiß oder Schwarz zu jedem der sieben Module gebildet werden (jedes Modul hat eine Einheitslänge). In jedem Datenzeichen (C1 bis C6) des linken Datenblocks sind die vier Striche in jedem Datenzeichen in der Reihenfolge eines weißen Strichs (a), schwarzen Strichs (b), weißen Strichs (c) und schwarzen Strichs (d) vom Startkontrollstrich (SGB) angeordnet, und in jedem Datenzeichen (C7 bis C12) des rechten Datenblocks sind die vier Striche in der Reihenfolge eines weißen Strichs (a), schwarzen Strichs (b), weißen Strichs (c) und schwarzen Strichs (d) vom Endkontrollstrich (EGB) angeordnet.
  • 29 ist eine Tabelle, welche alle Strichbreiten (Modulanzahl)-muster, die jeder Strich (a, b, c, d) des Datenzeichens sein kann, und Zahlenwerte zeigt, die den Strichbreitenmustern entsprechen. Zusätzlich zeigt ein zum Zahlenwert hinzugefügtes "E-" ein Datenzeichen mit gerade Parität an (ein Zeichen, in dem die Summe der Module beider schwarzen Striche (b, d) gerade ist), und "0-" zeigt ein Datenzeichen mit ungerader Parität an (ein Zeichen, in dem die Summe der Module beider schwarzen Striche (b, d) ungerade ist). Dann zeigt T2 in jedem Datenzeichen eine Strichbreite (Modulanzahl) an, die durch das Summieren des schwarzen Strichs (d) und des weißen Strichs (c) erhalten wird, und T1 zeigt eine Strichbreite (Modulanzahl) an, die durch das Summieren des weißen Strichs (c) und des schwarzen Strichs (b) erhalten wird, und beide werden "δ Distanz" genannt.
  • Gemäß dem Standard des WPC-Codes besteht der rechte Datenblock nur aus Datenzeichen mit gerader Parität, und der linke Datenblock besteht aus Datenzeichen mit gerader Parität und Datenzeichen mit ungerader Parität. Kombinationen einer geraden Parität und ungeraden Parität der 6 Datenzeichen in dem linken Datenblock werden jedoch gemäß dem Standard des WPC-Codes auf 10 Arten beschränkt, wie in 30 gezeigt. Ferner wird ein Zahlenwert (0 bis 9), nämlich ein Flaggenzeichen, für jede Kombination definiert. Jedes Kombinationsmuster einer geraden Parität und ungeraden Parität (hier im Nachstehenden "GERADE/UNGERADE-Struktur" genannt), das von den 6 Datenzeichen in dem linken Datenblock angenommen werden kann, unterscheidet sich von einem anderen Kombinationsmuster in zwei oder mehreren Zeichen, wie in 30 gezeigt.
  • Wenn, wie oben beschrieben, gemäß dem Standard des WPC-Codes die 12 Datenzeichen in dem 13-stelligen Strichcode sequentiell in ungerade Positionen oder gerade Positionen klassifiziert werden, wobei angenommen wird, dass das Datenzeichen ganz rechts in die ungerade Position klassifiziert wird (das Flaggenzeichen wird in die ungerade Position klassifiziert), wird ferner die Summe der gesamten Zahlenwerte von Datenzeichen in den ungeraden Positionen plus dreimal die Gesamtsumme von Zahlenwerten von Datenzeichen in den geraden Positionen ein ganzzahliges Vielfaches von 10. Diese Bedingung wird nunmehr als "vorherbestimmter bedingter Ausdruck" bezeichnet.
  • Als Nächstes erfolgt eine Erläuterung eines Verfahrens zum Ableiten von Daten (Zahlenwert und UNGERADE/GERADE-Struktur), die in ein Datenzeichen codiert werden, dessen Demodulation fehlschlägt, auf der Basis der anderen 11 Stellen demodulierter Daten. Als Beispiel wird ein Fall untersucht, wenn das Datenzeichen in dem linken Datenblock liegt.
  • Nun wird, wie in 25 gezeigt, angenommen, dass Daten 07, 04, E0, 08, E1, E4, E0, E6, E2, E8, E5 und E0 sequentiell in jedes Datenzeichen in dem 13-stelligen Strichcode von dem ersten Zeichen (C1) codiert werden. Dann wird angenommen, dass die Demodulation des dritten Datenzeichens (C3) in dem linken Datenblock fehlschlägt.
  • Wenn alle übrigen Datenzeichen demoduliert werden, ist es in diesem Fall klar, dass das Kombinationsmuster der UNGERADE/GERADE-Struktur in dem linken Block "OO–OEE" ist, wobei "–" das fehlende Zeichen bezeichnet. Ein beliebiges Kombinationsmuster der UNGERADE/GERADE-Struktur, die 6 Datenzeichen werden kann, in dem linken Datenblock unterscheidet sich von einem anderen Kombinationsmuster der UNGERADE/GERADE-Struktur in zwei oder mehreren Zeichen, wie oben beschrieben. Wenn beliebige der Datenzeichen weggelassen werden, unterscheidet sich demgemäß das Kombinationsmuster der UNGERADE/GERADE-Struktur der übrigen 5 Zeichen von einem anderen Kombinationsmuster der UNGERADE/GERADE-Struktur zumindest in einem Zeichen. In dem in 25 gezeigten Fall gibt es nur ein Flaggenzeichen, das dem Kombinationsmuster der UNGERADE/GERADE-Struktur äquivalent zu "OO–OEE" entspricht, welches das in 30 als "1" bezeichnete ist. Demgemäß ist es eindeutig klar, dass die UNGERADE/GERADE-Struktur weggelassener Daten GERADE ist (gerade Parität).
  • Wenn gemäß dem oben beschriebenen Standard der WPC-Modulus 10-Prüfung angenommen werden kann, dass 11 demodulierte Zeichen korrekt sind, ist es dann möglich, einen Zahlenwert eines weggelassenen Datenzeichens abzuleiten, indem Werte dieser 11 Zeichen auf den bedingten Ausdruck der Modulus 10-Prüfung angewendet werden. In dem in 25 gezeigten Fall, wie in den folgenden Ausdrücken gezeigt, ist die Gesamtsumme demodulierter Daten (einschließlich des Flaggenzeichens) in ungeraden Zahlenpositionen "31", und die Gesamtsumme demodulierter Daten (ausschließlich des weggelassenen Datenwerts C3) in geraden Positionen ist "13". (C1 + C3 + C5 + C7 + C9 + C11)·3 + (Flaggenzeichen + C2 + C4 + C6 + C8 + C10 + C12) = ganzzahliges Vielfaches von 10 (7 + ? + 1 + 0 + 2 + 3)·3 + (1 + 4 + 8 + 4 + 6 + 8 + 0) = ganzzahliges Vielfaches von 10 (13 + ?)·3 + (31) = ganzzahliges Vielfaches von 10
  • Wenn das Ergebnis der oben beschriebenen Modulus 10-Prüfung gut ist, muss demgemäß der in das weggelassene Datenzeichen C3 codierte Zahlenwert "0" sein. Auf diese Weise ist es möglich, "0" als Zahlenwert abzuleiten, der in ein weggelassenes Datenzeichen C3 codiert werden könnte.
  • Der auf diese Weise abgeleitete Zahlenwert kann wie er ist verwendet werden; es ist jedoch zweckmäßig, das Ableitungsergebnis zu kontrollieren, um die Genauigkeit davon sicherzustellen, da sein Zahlenwert unter der Annahme abgeleitet wird, dass die anderen 11 demodulierten Zeichen korrekt sind. So werden die abgeleitete UNGERADE/GERADE-Struktur und das Strichbreitenmuster, das dem Zahlenwert entspricht, aus der in 29 gezeigten Tabelle gelesen, die Anzahl von Modulen jedes Strichs, um das gelesene Strichbreitenmuster zu sein, wird mit den tatsächlich detektierten Strichbreitendaten hinsichtlich des Datenzeichens verglichen, dessen Modulation fehlgeschlagen ist, und es wird bestimmt, ob beliebige von der δ Distanz T1, der δ Distanz T2, des schwarzen Strichs (b) und des schwarzen Strichs (d) zusammenfal len, wodurch das Ableitungsergebnis genau wird.
  • Ein die vorliegende Erfindung verkörpernder Strichcodeleser, wobei auf 1 Bezug genommen wird, ist versehen mit einer Strichbreitenmuster-Detektionseinheit 100 zum Lesen eines Strichcodes (der mit einer Vielzahl von Datenzeichen gespeichert wird, die durch das Codieren einer vorherbestimmten Anzahl von einen vorherbestimmten bedingten Ausdruck erfüllenden Datenstücken erhalten werden), und Detektieren des gelesenen Strichcodes; einer Demodulationseinheit 101 zum Demodulieren des von der Strichcode-Detektionseinheit detektierten Strichcodes und Ausgeben demodulierter Daten; und einer Ableitungseinheit 102, wenn ein Datenzeichen in dem Strichcode nicht demoduliert wird, zum Rückrechnen des bedingten Ausdrucks auf der Basis demodulierter Daten, welche durch das Demodulieren anderer Datenzeichen in dem Strichcode mit der Demodulationseinheit und Ableiten der Daten erhalten werden, die in das von der Demodulationseinheit nicht demodulierte Datenzeichen codiert werden.
  • Mit dieser Konfiguration liest die Strichbreitenmuster-Detektionseinheit 100 den Strichcode, der mit mehrfachen Datenzeichen gespeichert wird, welche durch das Codieren der vorherbestimmten Anzahl von Stücken von Daten erhalten werden, die den vorherbestimmten Konditional-Ausdruck erfüllen, und detektiert das gelesene Strichbreitenmuster. Die Demodulationseinheit 101 demoduliert jedes Datenzeichen des von der Strichbreitenmuster-Detektionseinheit detektierten Strichcodes, und gibt diese demodulierten Daten aus. Wenn die Demodulationseinheit 101 bei der Demodulation eines Datenzeichens in dem Strichcode fehlschlägt, rechnet die Datenableitungseinheit (102) den bedingten Ausdruck auf der Basis des Zahlenwerts zurück, der durch das Demodulieren anderer Datenzeichen in dem Strichcode mit der Demodulationseinheit erhalten wird, und leitet Daten ab, die in das von der Demo dulationseinheit nicht demodulierte Datenzeichen codiert werden. Als Ergebnis können sofort demodulierte Daten erhalten werden, die dem gesamten Strichcode entsprechen.
  • Als Nächstes erfolgt eine Beschreibung eines Strichcodelesers gemäß einer ersten Ausführungsform der vorliegenden Erfindung.
  • 2 ist ein Blockbild, das eine Umrisskonfiguration eines Strichcodelesers der Ausführungsform gemäß der vorliegenden Erfindung zeigt. In 2 ist der Strichcodeleser versehen mit einer CPU 1, einem Strichbreiten-Datengruppen-Speicherpuffer 2, einer Steuerschaltung 3, einer Schnittstellenschaltung 4, einem ROM 5 und einem RAM 6, die über einen Bus B miteinander verbunden sind; einem Strichbreitenzähler 16 und einer Laserstrahl-Start-Ende-Detektierschaltung 17, die mit dem Strichbreiten-Datengruppen-Speicherpuffer 2 verbunden ist; einem Taktgeber 19 und einem A/D-Wandler 15, der mit dem Strichbreitenzähler 16 verbunden ist; einem Lichtempfangselement 18, das mit dem A/D-Wandler 15 verbunden ist; einer Motortreibschaltung 8, einer Lasertreibschaltung 9, einem Lautsprecher 10 und einer LED 11, die jeweils mit der Steuerschaltung 3 verbunden sind; einem Motor 12, der mit der Motortreibschaltung 8 verbunden ist; einem optischen Scansystem 14, das vom Motor 12 angetrieben wird; und einem Halbleiterlaser 13, der mit der Lasertreibschaltung 9 verbunden ist.
  • Der ROM 5 ist ein Nurlesespeicher, der die in 29 und 30 gezeigten Tabellen und ein Strichcode-Erkennungs/Demodulationsprozessprogramm speichert.
  • Die CPU 1 führt das in dem ROM 5 gespeicherte Strichcode-Erkennungs/Demodulationsprozessprogramm aus, wodurch sie über einen Großteil des Strichcodelesers eine Steuerung ausübt und als Demodulationseinheit, Datenableitungseinheit, Paritätsableitungseinheit, Vergleichseinheit und Validier einheit arbeitet, um so die durch das Lesen des Strichcodes 21 erhaltenen Strichbreitendaten zu demodulieren.
  • Die Schnittstellenschaltung 4 steuert den Status des Busses B, und steuert die Datentransmission zu einer externen Anordnung, usw.
  • Die Steuerschaltung 3 steuert die Motortreibschaltung 8, die Lasertreibschaltung 9, den Lautsprecher 10 und die lichtemittierende Diode (LED) 11. Diese Motortreibschaltung 8 treibt den Motor 12 so an, dass er einen Polygonspiegel (nicht gezeigt) in dem optischen Scansystem 14 dreht. Die Lasertreibschaltung 9 treibt den Halbleiterlaser 13 so an, dass ein Laserstrahl L emittiert wird. Der Lautsprecher 10 erzeugt einen Ton, der die Vollendung des Strichcodelesens (Demodulierens) anzeigt. Die lichtemittierende Diode 11 ist ein Anzeigeelement, das Informationen wie den Preis einer Ware 20 anzeigt, die als Ergebnis der Demodulation des Strichcodes erhalten werden.
  • Der von dem Halbleiterlaser 13 emittierte Laserstrahl L fällt auf das optische Scansystem 14 ein, und wird vom optischen Scansystem 14 abgelenkt. Das heißt, das optische Scansystem 14 lenkt den Laserstrahl L in eine Richtung ab, wobei der (nicht gezeigte) Polygonspiegel vom Motor 12 gedreht wird. Auf der gegenüberliegenden Seite des Polygonspiegels sind einige Spiegel befestigt. Demgemäß wird der vom Polygonspiegel abgelenkte Laserstrahl L durch jeden festen Spiegel erneut reflektiert, wodurch die Ablenkrichtung (Scanrichtung) in verschiedenste Richtungen geändert wird. In dem optischen Scansystem 14 wird ein Laserstrahlscannen in mehrfache Richtungen kontinuierlich mit einer hohen Geschwindigkeit im Ablenkzyklus durch eine Reflexionsfläche des Polygonspiegels vorgenommen. Hier im Nachstehenden wird jedes Laserstrahlscannen, das in dem Ablenkzyklus durch eine Reflexionsfläche des Polygonspiegels vorgenommen wird, als "ein Scannen" bezeichnet.
  • Wenn der auf diese Weise gescannte Laserstrahl L auf die Oberfläche (die den Strichcode 21 enthält) der Ware 20 auftrifft, wird der Laserstrahl L an der Oberfläche unregelmäßig reflektiert, und ein Teil des reflektierten Lichts R wird vom Lichtempfangselement (Photodiode) 18 empfangen. Der A/D-Wandler 15 vergleicht den festen Schwellenwert mit dem aktuellen Wert (der die Energie des reflektierten Lichts R anzeigt, das vom Lichtempfangselement 18 empfangen wird), und wandelt den aktuellen Wert in ein Binärsignal um. Das Binärsignal zeigt "H" an, wenn die Stärke des reflektierten Lichts R dem Reflexionsvermögensverhältnis eines schwarzen Strichs in dem Strichcode 21 entspricht, und zeigt "L" an, wenn die Stärke des reflektierten Lichts R dem Reflexionsvermögensverhältnis eines weißen Strichs in dem Strichcode 21 entspricht.
  • Der Strichbreitenzähler 16 misst, auf der Basis des vom A/D-Wandler 15 eingegebenen Binärsignals, eine Zeit von der Anstiegzeiteinstellung bis zur Abfallzeiteinstellung des Binärsignals (von der erwartet wird, dass sie der Breite des schwarzen Strichs in dem Strichcode 21 entspricht), und misst eine Zeit von der Abfallzeiteinstellung bis zur Anstiegzeiteinstellung des Binärsignals (von der erwartet wird, dass sie der Breite des weißen Strichs in dem Strichcode 21 entspricht). Zusätzlich zählt der Strichbreitenzähler 16 die Taktfrequenz von dem Taktgeber 19, um die diesen Strichbreiten entsprechende Zeit zu messen. Dann gibt der Strichbreitenzähler 16 in 3 gezeigte 16 Bit-Strichbreitendaten bei jedem Strich aus.
  • In 3 zeigen 11 Stellen vom nullten Bit bis zum zehnten Bit (BCD 0 bis BCD 10) Zählwerte, die Strichbreiten anzeigen, das elfte Bit (W/B) zeigt die Farbe des Strichs (1 = weiß, 0 = schwarz), das zwölfte Bit (WERR) zeigt ein Vor liegen von Fehlern (1 = Fehler liegt vor/0 = kein Fehler). Das dreizehnte Bit (CHR-F) wird "1", wenn ein schwarzer Strich in dem Muster detektiert wird, welcher der Startkontrollstrich sein kann, oder wenn ein weißer Strich in dem Muster detektiert wird, welcher der Startkontrollstrich sein kann. Ähnlich wird das 14. Bit (CHR-L) "1", wenn ein weißer Strich in dem Muster detektiert wird, welcher der Endkontrollstrich sein kann. Das 15. Bit (C128) ist eine Identifikationsflagge.
  • Der Strichbreitenzähler 16 gibt kontinuierlich solche Strichbreitendaten bei jedem Scannen des Laserstrahls aus. Die bei jedem Scannen kontinuierlich ausgegebenen Strichbreitendaten werden "Strichbreiten-Datengruppe" genannt.
  • Die Steuerschaltung 3, die Motortreibschaltung 8, der Motor 12, die Lasertreibschaltung 9, der Halbleiterlaser 13, das optische Scansystem 14, das Lichtempfangselement 18, der A/D-Wandler 15, der Strichbreitenzähler 16 und der Taktgeber 19 sind äquivalent zur Strichbreitenmuster-Detektionseinheit von 1.
  • Die aus dem Strichbreitenzähler 16 ausgegebene Strichbreiten-Datengruppe wird in die Laserstrahl-Start-Ende-Detektierschaltung 17 eingegeben. Die Laserstrahl-Start-Ende-Detektierschaltung 17 kontrolliert den Status der Strichbreiten-Datengruppe und detektiert den Scan-Startpunkt und den Scan-Endpunkt des Laserstrahls bei einem Scannen, und fügt Informationen hinzu, die den Startpunkt und den Endpunkt der Strichbreiten-Datengruppe anzeigen.
  • Die Strichbreiten-Datengruppe (zu der die Informationen hinzugefügt werden, die den Scan-Startpunkt und den Scan-Endpunkt des Laserstrahls anzeigen) wird temporär in dem Strichbreiten-Datengruppen-Speicherpuffer 2 gespeichert. Der Strichbreiten-Datengruppen-Speicherpuffer 2 speichert sequentiell die von dem Strichbreitenzähler 16 eingegebenen Strichbreiten-Datengruppen und transferiert diese zur CPU 1, um eine nach der anderen ansprechend auf eine Anforderung von der CPU 1 zu speichern.
  • In dem RAM 6, zusätzlich dazu, dass er einen Arbeitsbereich für die CPU 1 enthält, führt die CPU 1 das Strichcode-Erkennungs/Demodulationsprozessprogramm aus, wodurch ein temporärer Sicherungspuffer 6a, ein erster Demodulationsvollendungspuffer 6b, ein zweiter Demodulationsvollendungspuffer 6c und ein dritter Demodulationsvollendungspuffer 6d entwickelt werden.
  • Während der Strichcode-Erkennungs/Demodulationsprozess für jede Strichbreiten-Datengruppe ausgeführt wird, sichert der temporäre Sicherungspuffer 6a temporär die Daten (demodulierten Daten), die als Ergebnis des Prozesses erhalten werden. Das Format der im temporären Sicherungspuffer 6a gesicherten demodulierten Daten wird mit Bezugnahme auf 4 bis 6 erläutert.
  • 4 zeigt das Datenformat, wenn der Strichcode 21 vom Startkontrollstrich als Startpunkt gescannt wird (das Scannen wird "kontinuierliches Lesen" genannt, wenn der Strichcode zu einer Zeit vom Startkontrollstrich zum Endkontrollstrich gescannt wird). Das Datenformat ist in diesem Fall, wie in 4 gezeigt, sequentiell von oben, versehen mit einem Bereich, der die Klassifikation der demodulierten Daten zeigt (der die demodulierten Daten des 13-stelligen Strichcodes in einem Fall von "01" anzeigt), einem Bereich, der eine Abfragerichtung zeigt (der zeigt, dass der Startkontrollstrich in einem Fall von "01" enthalten ist), einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem linken Datenblock zeigt, einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem rechten Datenblock zeigt, einem Bereich, der demodulierte Daten in dem linken Datenblock speichert, einem Bereich, der demodulierte Daten in dem rechten Datenblock speichert, einem Bereich, der vier Stücke von Strichbreitendaten speichert, um ein Datenzeichen zu sein, dessen Demodulation zuerst fehlschlägt, und einem Bereich, der eine Zeichenlänge eines Datenzeichens unmittelbar vor dem Datenzeichen speichert, dessen Demodulation zuerst fehlgeschlagen ist (auf der Seite des Startkontrollstrichs).
  • 5 zeigt ein Datenformat, wenn der Strichcode 21 vom Endkontrollstrich als Startpunkt gescannt wird. Das Datenformat ist in diesem Fall, wie in 5 gezeigt, sequentiell von oben, versehen mit einem Bereich, der die Klassifikation der demodulierten Daten zeigt (der die demodulierten Daten des 13-stelligen Strichcodes in einem Fall von "01" anzeigt), einem Bereich, der eine Abfragerichtung zeigt (der zeigt, dass der Endkontrollstrich enthalten ist, der Startkontrollstrich jedoch nicht, in einem Fall von "02"), einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem linken Datenblock zeigt, einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem rechten Datenblock zeigt, einem Bereich, der demodulierte Daten in dem linken Datenblock speichert, einem Bereich, der demodulierte Daten in dem rechten Datenblock speichert, einem Bereich, der vier Stücke von Strichbreitendaten speichert, um ein Datenzeichen zu sein, dessen Demodulation zuerst fehlschlägt, und einem Bereich, der eine Zeichenlänge eines Datenzeichens unmittelbar vor dem Datenzeichen speichert, dessen Demodulation zuerst fehlgeschlagen ist (auf der Seite des Endkontrollstrichs).
  • 6 zeigt ein Datenformat, wenn der Strichcode 21 über dem mittleren Strich gescannt wird. Das Datenformat ist in diesem Fall, wie in 6 gezeigt, sequentiell von oben, versehen mit einem Bereich, der die Klassifikation der demodulierten Daten zeigt (der die demodulierten Daten des 13- stelligen Strichcodes in einem Fall von "01" anzeigt), einem Bereich, der eine Abfragerichtung zeigt (der zeigt, dass nur der mittlere Strich in einem Fall von "03" enthalten ist), einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem linken Datenblock zeigt, einem Bereich, der die Zeichenanzahl der demodulierten Daten in dem rechten Datenblock zeigt, einem Bereich, der demodulierte Daten in dem linken Datenblock speichert, einem Bereich, der demodulierte Daten in dem rechten Datenblock speichert, einem Bereich, der vier Stücke von Strichbreitendaten speichert, um ein Datenzeichen zu sein, dessen Demodulation in dem rechten Datenblock (in der Vorwärtsrichtung) zuerst fehlschlägt, einem Bereich, der vier Stücke von Strichbreitendaten speichert, um ein Datenzeichen zu sein, dessen Demodulation in dem linken Datenblock (in der Rückwärtsrichtung) zuerst fehlschlägt, einem Bereich, der eine Zeichenlänge eines Datenzeichens unmittelbar vor dem Datenzeichen speichert, dessen Demodulation (auf der Seite des Endkontrollstrichs) in dem rechten Datenblock (in der Vorwärtsrichtung) zuerst fehlgeschlagen ist, und einem Bereich, der eine Zeichenlänge eines Datenzeichens unmittelbar vor dem Datenzeichen speichert, dessen Demodulation (auf der Seite des mittleren Strichs) in dem linken Datenblock (in der Rückwärtsrichtung) zuerst fehlgeschlagen ist.
  • Der erste Demodulationsvollendungspuffer 6b speichert, wenn in 4 gezeigte demodulierte Daten als Ergebnis der Ausführung des Strichcode-Erkennungs/Demodulationsprozesses für eine Strichbreiten-Datengruppe erhalten werden, die demodulierten Daten, und ist wie in 7 gezeigt strukturiert.
  • Der zweite Demodulationsvollendungspuffer 6c speichert, wenn in 5 gezeigte demodulierte Daten als Ergebnis der Ausführung des Strichcode-Erkennungs/Demodulationsprozesses für eine Strichbreiten-Datengruppe erhalten werden, die demodulierten Daten, und ist wie in 8 gezeigt strukturiert.
  • Der dritte Demodulationsvollendungspuffer 6d speichert, wenn in 6 gezeigte demodulierte Daten als Ergebnis der Ausführung des Strichcode-Erkennungs/Demodulationsprozesses für eine Strichbreiten-Datengruppe erhalten werden, die demodulierten Daten, und ist wie in 9 gezeigt strukturiert.
  • Als Nächstes erfolgen konkrete Erläuterungen des in dem ROM 5 gespeicherten und von der CPU 1 ausgeführten Strichcode-Erkennungs/Demodulationsprozessprogramms mit Bezugnahme auf in 10 bis 27 gezeigte Flussdiagramme.
  • Das Flussdiagramm in 10, das die Hauptroutine des Strichcode-Erkennungs/Demodulationsprozesses ist, startet mit der Zufuhr einer Hauptenergiequelle zum Strichcodeleser und dem Speichern der Strichbreiten-Datengruppe in dem Strichbreiten-Datengruppen-Speicherpuffer 2. Im ersten S000 entnimmt die CPU 1 die älteste Strichbreiten-Datengruppe aus dem Strichbreiten-Datengruppen-Speicherpuffer 2.
  • Im nächsten S001 führt die CPU 1 den ersten Abfrageprozess aus, wobei grob eine Demodulationsstartposition (nämlich ein Kontrollstrich oder ein mittlerer Strich in beliebigen Strichbreitendaten) für die in S000 entnommene Strichbreiten-Datengruppe erhalten wird. 11 ist ein Flussdiagramm, das die in S001 ausgeführte erste Abfrageprozesssubroutine zeigt.
  • Nach dem Einspringen in die Subroutine führt die CPU 1 zuerst einen Schleifenprozess von S101 bis S103 durch, um so Strichbreitendaten, deren CHR-L-Bit oder CHR-F-Bit "1" ist, unter der zu verarbeitenden Strichbreiten-Datengruppe abzufragen. Zusätzlich stellt die CPU 1 einen Strichcode-Abfragezeiger, der eine Position zu detektierender Strich breitendaten zeigt, oben an der zu verarbeitenden Strichbreiten-Datengruppe ein, wenn der Schleifenprozess zuerst ausgeführt wird.
  • Nach dem Einspringen in die Schleife prüft die CPU 1 in dem ersten S101, ob das CHR-L-Bit oder CHR-F-Bit in den durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten "1" ist oder nicht. Die CPU 1 führt den Prozess zu S102 weiter, wenn das CHR-L-Bit und das CHR-F-Bit in den Strichbreitendaten "0" sind.
  • In S102 führt die CPU 1 eine Inkrementierung des Strichcode-Abfragezeigers aus, so dass die nächsten Strichbreitendaten angezeigt werden. In dem nächsten S103 prüft die CPU 1, ob es nicht-detektierte Strichbreitendaten gibt oder nicht (ob der Strichcode-Abfragezeiger das Ende der zu verarbeitenden Strichbreiten-Datengruppe überschreitet oder nicht). Die CPU 1 führt den Prozess zu S106 in der Hauptroutine in 10 weiter, wenn es keine nicht-detektierte Strichbreiten-Datengruppe mehr gibt. Umgekehrt führt die CPU 1 den Prozess zu S101 zurück, wenn es noch eine nicht-detektierte Strichbreiten-Datengruppe gibt.
  • Im Gegensatz dazu führt die CPU 1 den Prozess zu S104 weiter, wenn sie in S101 beurteilt, dass das CHR-L-Bit oder CHR-F-Bit der durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten "1" ist.
  • In S104 prüft die CPU 1, ob das W/B-Bit der durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten einen schwarzen Strich zeigt oder nicht. Die CPU 1 führt den Prozess zu S105 weiter, wenn das W/B-Bit der Strichbreitendaten einen schwarzen Strich zeigt.
  • In S105 prüft die CPU 1, ob nur das CHR-F-Bit der Strichbreitendaten "1" ist oder nicht. Dann beurteilt die CPU 1, dass ein Operationsfehler des Strichbreitenzählers 16 auftritt, und führt den Prozess zu S102 weiter, wenn das CHR-F-Bit der Strichbreitendaten "0" ist, oder wenn das CHR-L-Bit der Strichbreitendaten "1" ist. Umgekehrt, wenn in den Strichbreitendaten das CHR-F-Bit "1" ist und das CHR-L-Bit "0" ist, setzt die CPU 1 eine Flagge decdirec = 01, die zeigt, dass ein Pseudo-Startkontrollstrich (ein Muster ähnlich einem Startkontrollstrich) in S106 detektiert wird, und beendet dann die erste Abfrageprozesssubroutine.
  • Im Gegensatz dazu führt die CPU 1 den Prozess zu S107 weiter, wenn sie in S104 beurteilt, dass das W/B-Bit in den durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten einen weißen Strich zeigt.
  • In S107 prüft die CPU 1, ob das CHR-F-Bit in den durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten "1" ist oder nicht. Dann führt die CPU 1 den Prozess zu S111 weiter, wenn das CHR-F-Bit in den Strichbreitendaten "0" ist.
  • Andererseits führt die CPU 1 eine Prüfung des mittleren Strichs in S108 aus, wenn das CHR-F-Bit in den Strichbreitendaten "1" ist. Die Prüfung des mittleren Strichs ist eine Prüfung, ob Strichbreiten von zu einem Zeitpunkt detektierten fünf Strichen (weißer Strich, schwarzer Strich, weißer Strich, schwarzer Strich, weißer Strich) regelmäßig sind oder nicht. Die CPU 1 führt den Prozess zu S111 weiter, wenn das Ergebnis der Prüfung des mittleren Strichs ein Misserfolg ist (NEIN in S109). Andererseits führt die CPU 1 den Prozess zu S111 weiter, nachdem eine "CB-Prüfflagge" in S110 EIN geschaltet wird, wenn das Ergebnis der Prüfung des mittleren Strichs gut ist (JA in S109).
  • In S111 prüft die CPU 1, ob das CHR-L-Bit in den durch den Strichcode-Abfragezeiger angezeigten Strichbreitendaten "1" ist. Dann führt die CPU 1 den Prozess zu S115 weiter, wenn das CHR-L in den Strichbreitendaten "0" ist.
  • Im Gegensatz dazu führt die CPU 1 eine Endkontroll strich-Prüfung in S112 aus, wenn das CHR-L in den Strichbreitendaten "1" ist. Die Endkontrollstrich-Prüfung ist eine Prüfung, ob ein unmittelbar vor dem Zeitpunkt detektierter weißer Strich mit einer genügenden Breite als Rand versehen ist oder nicht. Die CPU 1 führt den Prozess zu S115 weiter, wenn das Ergebnis der Endkontrollstrich-Prüfung ein Misserfolg ist (NEIN in S113). Umgekehrt führt die CPU 1 den Prozess zu S115 weiter, nachdem eine "EGB-Prüfflagge" in S114 EIN geschaltet wird, wenn das Ergebnis der Endkontrollstrich-Prüfung gut ist (JA in S113).
  • In S115 prüft die CPU 1, ob nur eine "CB-Prüfflagge" EIN geschaltet ist oder nicht. Die CPU 1 stellt eine Flagge decdirec = 03 ein, die zeigt, dass ein mittlerer Pseudo-Strich (ein Muster ähnlich dem mittleren Strich) in S116 detektiert wird, und beendet dann die erste Abfrageprozesssubroutine, wenn nur die "CB-Prüfflagge" EIN geschaltet ist.
  • Andererseits prüft die CPU 1 in dem nächsten S117, ob nur die "EGB-Prüfflagge" EIN geschaltet ist, wenn sie in S115 beurteilt, dass nur die "CB-Prüfflagge" EIN geschaltet ist. Wenn nur die "EGB-Prüfflagge" EIN geschaltet ist, stellt die CPU 1 dann eine Flagge decdirec = 02 ein, die zeigt, dass ein Pseudo-Endkontrollstrich (ein Muster ähnlich dem Endkontrollstrich) in S118 detektiert wird, und beendet dann die erste Abfrageprozesssubroutine.
  • Ferner prüft die CPU 1 in dem nächsten S119, ob sowohl die "CB-Prüfflagge" als auch die EGB-Prüfflagge" EIN geschaltet sind, wenn sie in S117 beurteilt, dass nur die "EGB-Prüfflagge" EIN geschaltet ist. Die CPU 1 stellt fest, dass sich ein Operationsfehler des Strichbreitenzählers 16 ereignet hat, und führt den Prozess zu S102 weiter, wenn beide Prüfflaggen AUS sind.
  • Andererseits prüft die CPU 1 Zeichenlängen des elften Zeichens und des zwölften Zeichens im nächsten S120, wenn beide Prüfflaggen EIN geschaltet sind. Mit anderen Worten, die CPU 1 prüft unter der Annahme, dass der Endkontrollstrich detektiert wird, ob eine Strichbreitengesamtsumme von vier Strichen benachbart dem Endkontrollstrich und eine Strichbreitengesamtsumme von vier Strichen ferner benachbart den vier Strichen als Zeichenlänge innerhalb einer Toleranz liegen. Dann führt die CPU 1 den Prozess zu S102 weiter, wenn die Zeichenlängen des elften Zeichens und des zwölften Zeichens innerhalb der Toleranz liegen (JA in S121). Wenn die Zeichenlänge des elften Zeichens oder des zwölften Zeichens nicht innerhalb der Toleranz liegt (NEIN in S121), setzt die CPU 1 eine Flagge decdirec = 03, die zeigt, dass ein mittlerer Pseudo-Strich (ein Muster ähnlich dem mittleren Strich) in S122 detektiert wird, und beendet dann die erste Abfrageprozesssubroutine.
  • In der in 10 gezeigten Hauptroutine, zu welcher der Prozess von der ersten Abfrageprozesssubroutine zurückgeführt wird, führt die CPU 1 den zweiten Abfrageprozess im nächsten S002 aus. 12 ist ein Flussdiagramm, das die in S002 ausgeführte zweite Abfrageprozesssubroutine zeigt.
  • Nach dem Einspringen in diese Subroutine prüft die CPU 1 in dem ersten S201, ob die Flagge decrirec mit "01" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S203 weiter, wenn die Flagge decrirec nicht mit "01" gesetzt ist. Umgekehrt führt die CPU 1 den ersten Strichcode-Detektionsprozess, der ein Strichcode-Abfrageprozess ist, nach dem Detektieren des Pseudo-Startkontrollstrichs in S202 aus, wenn die Flagge decrirec mit "01" gesetzt ist. 13 und 14 sind Flussdiagramme, welche die in S202 ausgeführte erste Strichcode-Abfrageprozesssubroutine zeigen.
  • In dem ersten S301, nach dem Einspringen in diese Subroutine, prüft die CPU 1 die Länge des ersten Zeichens kontinuierlich mit dem Pseudo-Startkontrollstrich. Mit anderen Worten, die CPU 1 prüft, ob eine Gesamtsumme von Strichbreiten-Zählwerten von vier Zeichen, um das erste Zeichen zu sein, ungefähr ein festgelegter Wert wird oder nicht. Wenn die Länge des ersten Zeichens nicht ungefähr der festgelegte Wert ist, stellt die CPU 1 fest, dass die zu verarbeitende Strichbreiten-Datengruppe eine Datengruppe auf der Basis eines Designs ohne den Strichcode ist, löscht eine "Flagge der Detektion eines gültigen Etiketts", und führt dann den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Andererseits führt die CPU 1 den Prozess zu S302 weiter, wenn die Länge des ersten Zeichens ungefähr der festgelegte Wert ist.
  • In S302 prüft die CPU 1 die Länge des benachbarten Zeichens (anfänglich des zweiten Zeichens benachbart dem ersten Zeichen). Die CPU 1 führt den Prozess zu S306 weiter, wenn die Länge dieses Zeichens ungefähr der festgelegte Wert ist.
  • In S306 prüft die CPU 1, ob die Zeichenlängenprüfung für 6 Zeichen in S301 und S302 zu diesem Zeitpunkt vollendet ist. Die CPU 1 führt den Prozess zu S302 zurück, wenn die Zeichenlängenprüfung für 6 Zeichen noch nicht vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S308 nach dem Löschen der "4-stelligen Flagge" in S307 weiter, wenn die Zeichenlängenprüfung für 6 Zeichen bereits vollendet ist.
  • In S303 prüft die CPU 1, ob die Anzahl von Zeichen, von denen in S301 und S302 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte wert ist, weniger als drei ist oder nicht, wenn in S302 beurteilt wurde, dass die Länge des benachbarten Zeichens nicht ungefähr der festgelegte Wert ist. Wenn die Anzahl von Zeichen, von denen beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, weniger als drei ist, stellt die CPU 1 fest, dass die Zuverlässigkeit der zu verarbeitenden Strichbreiten-Datengruppe gering ist, und löscht dann die "Flagge der Detektion eines gültigen Etiketts" in S320, und führt danach den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter.
  • Wenn hingegen die Anzahl von Zeichen, von denen beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, in S304 drei oder mehr beträgt, prüft die CPU 1, ob die Anzahl von Zeichen, von denen in S301 und S302 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, vier ist oder nicht. Die CPU 1 führt den Prozess zu S318 weiter, wenn die Anzahl von Zeichen, von denen beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, nicht vier ist.
  • Wenn die Anzahl von Zeichen, von denen beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, 4 ist, führt die CPU 1 nach dem Setzen einer "vierstelligen Flagge" in S305 den Prozess zu S308 weiter.
  • In S308 prüft die CPU 1 erneut die Länge des vierten Zeichens (wenn die "vierstellige Flagge" gesetzt ist) oder des sechsten Zeichens (wenn die "vierstellige Flagge" gelöscht ist). Wenn die Länge des vierten Zeichens oder des sechsten Zeichens ungefähr der festgelegte Wert ist, führt die CPU 1 nach dem Löschen der "vierstelligen Flagge" in S310 (wobei S310 übersprungen wird, wenn sie bereits gelöscht ist) dann den Prozess zu S318 weiter.
  • Andererseits führt die CPU 1 die Prüfung des mittleren Strichs in S309 aus, wenn die Länge des vierten Zeichens oder des sechsten Zeichens ungefähr der festgelegte Wert ist. Die Prüfung des mittleren Strichs ist eine Prüfung, ob fünf Striche benachbart dem vierten Zeichen (wenn die "vierstellige Flagge" gesetzt ist) oder dem sechsten Zeichen (wenn die "vierstellige Flagge" gelöscht ist) mit einem als mittlerer Strich vorherbestimmten Muster zusammenfallen (einem Muster, in dem jede Strichbreite 1 Modullänge ist). Nach dem Löschen der "vierstelligen Flagge" in S310 führt die CPU 1 den Prozess zu S318 weiter, wenn das Ergebnis der Prüfung des mittleren Strichs ein Misserfolg (NG) ist.
  • Ferner setzt die CPU 1 eine "Flagge der Detektion des mittleren Strichs" in S311, wenn das Ergebnis der Prüfung des mittleren Strichs gut (OK) ist. Das heißt, die Flagge gb-cb-f wird auf "1" gesetzt.
  • Im nächsten S312 prüft die CPU 1 die Länge des fünften Zeichens benachbart dem mittleren Strich (wenn die "vierstellige Flagge" gesetzt ist) oder des siebenten Zeichens (wenn die "vierstellige Flagge" gelöscht ist). Die CPU 1 führt den Prozess zu S318 weiter, wenn die Länge des fünften Zeichens oder des siebenten Zeichens nicht ungefähr der festgelegte Wert ist. Andererseits führt die CPU 1 den Prozess zu S313 weiter, wenn die Länge des fünften Zeichens oder des siebenten Zeichens ungefähr der festgelegte Wert ist.
  • In S313 prüft die CPU 1 die Länge des benachbarten Zeichens (anfänglich des sechsten Zeichens benachbart dem fünften Zeichen, oder des achten Zeichens benachbart dem siebenten Zeichen). Die CPU 1 führt den Prozess zu S314 weiter, wenn die Länge dieses Zeichens ungefähr der festgelegte Wert ist.
  • In S314 prüft die CPU 1, ob die "vierstellige Flagge" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S316 weiter, wenn die "vierstellige Flagge" gelöscht ist. Umgekehrt prüft die CPU 1 in S315, ob die Zeichenlängenprüfung für 4 Zeichen in S312 und S313 zu diesem Zeitpunkt vollendet ist, wenn die "vierstellige Flagge" gesetzt ist. Dann führt die CPU 1 den Prozess zu S316 weiter, wenn die Zeichenlängenprüfung für 4 Zeichen noch nicht vollendet ist. Alternativ dazu führt die CPU 1 den Prozess zu S317 weiter, wenn die Zeichenlängenprüfung für 4 Zeichen bereits vollendet ist.
  • In S316 prüft die CPU 1, ob die Zeichenlängenprüfung für 6 Zeichen in S312 und S313 zu diesem Zeitpunkt vollendet ist. Die CPU 1 führt den Prozess zu S313 zurück, wenn die Zeichenlängenprüfung für 6 Zeichen noch nicht vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S317 weiter, wenn die Zeichenlängenprüfung für 6 Zeichen bereits vollendet ist.
  • In S317 prüft die CPU 1 erneut die Länge des achten Zeichens (wenn die "vierstellige Flagge" gesetzt ist) oder des zwölften Zeichens (wenn die "vierstellige Flagge" gelöscht ist). Die CPU 1 führt den Prozess zu S318 weiter, wenn die Länge des achten Zeichens oder des zwölften Zeichens nicht ungefähr der festgelegte Wert ist, und führt den Prozess zu S321 weiter, wenn die Länge des achten Zeichens oder des zwölften Zeichens ungefähr der festgelegte Wert ist.
  • In S318 führt die CPU 1 einen Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Bei diesem Prozess zum Detektieren der Anzahl gültiger Zeichen stellt die CPU 1 in einem Zähler jun-cnt ein, wobei von der Anzahl von Zeichen, um der linke Block zu sein, in S301, S302 und S308 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, und stellt in einem Zähler gku-cnt ein, wobei von der Anzahl von Zeichen, um der rechte Block zu sein, in S312, S313 und S317 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist. Nach der Vollendung dieses Prozesses zum Detektieren der Anzahl gültiger Zeichen führt die CPU 1 den Prozess zu S319 weiter.
  • Alternativ dazu prüft die CPU 1 in S321, ob die "vierstellige Flagge" gelöscht ist oder nicht. Die CPU 1 führt den Prozess zu S325 weiter, wenn die "vierstellige Flagge" gelöscht ist, und führt den Prozess zu S322 weiter, wenn die "vierstellige Flagge" gesetzt ist.
  • In S322 führt die CPU 1 eine einfache Endzeichenlängenprüfung aus. Mit anderen Worten, die CPU 1 prüft, ob drei Striche benachbart dem achten Zeichen mit einem als Endkontrollstrich vorherbestimmten Muster zusammenfallen (einem Muster, in dem jede Strichbreite 1 Modullänge ist), und ein weiter Strich benachbart den drei Strichen mit einer Strichbreite versehen ist, die länger ist als eine als Endrand bestimmte Länge. Dann führt die CPU 1 den Prozess zu S324 weiter, wenn das Ergebnis der einfachen Endzeichenlängenprüfung ein Misserfolg (NG) ist. Im Gegensatz dazu setzt die CPU 1 die "Endkontrollstrich-Detektionsflagge" in S323, wenn das Ergebnis der einfachen Endzeichenlängenprüfung gut (OK) ist. Das heißt, die Flagge gb-cb-f wird mit "2" überschrieben. Die CPU 1 führt den Prozess nach der Vollendung von S323 zu S324 weiter.
  • In S324 führt die CPU 1 den oben beschriebenen Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Mit anderen Worten, die CPU 1 stellt in dem Zähler jun-cnt ein, wobei von der Anzahl von Zeichen, um der linke Datenblock zu sein, in S301, S302 und S308 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, und stellt in dem Zähler gku-cnt ein, wobei von der Anzahl von Zeichen, um der rechte Datenblock zu sein, in S312, S313 und S317 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist. Nach der Vollendung dieses Prozesses zum Detektieren der Anzahl gültiger Zeichen führt die CPU 1 den Prozess zu S319 weiter.
  • Alternativ dazu führt die CPU 1 in S325 die Endrandprüfung aus. Mit anderen Worten, die CPU 1 prüft, ob drei Striche benachbart dem zwölften Zeichen mit einem als Endkontrollstrich vorherbestimmten Muster zusammenfallen (einem Muster, in dem jede Strichbreite 1 Modullänge ist), und ein weißer Strich benachbart diesen drei Strichen mit einer Strichbreite versehen ist, die länger ist als eine als Endrand bestimmte Länge. Dann führt die CPU 1 den Prozess zu S327 weiter, wenn das Ergebnis der Endrandprüfung ein Misserfolg (NG) ist. Im Gegensatz dazu setzt die CPU 1 die "Endkontrollstrich-Detektionsflagge" in S326, wenn das Ergebnis der Endrandprüfung gut (OK) ist. Das heißt, die Flagge gb-cb-f wird mit "2" überschrieben. Die CPU 1 führt den Prozess nach der Vollendung dieses S326 zu S327 weiter.
  • In S327 führt die CPU 1 den oben beschriebenen Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Mit anderen Worten, die CPU 1 stellt in dem Zähler jun-cnt ein, wobei von der Anzahl von Zeichen, um der linke Datenblock zu sein, in S301, S302 und S308 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte wert ist, und stellt in dem Zähler gku-cnt ein, wobei von der Anzahl von Zeichen, um der rechte Datenblock zu sein, in S312, S313 und S317 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist. Nach der Vollendung dieses Prozesses zum Detektieren der Anzahl gültiger Zeichen führt die CPU 1 den Prozess zu S319 weiter.
  • In S319 setzt die CPU 1 die "Flagge der Detektion eines gültigen Etiketts". Danach beendet die CPU 1 die erste Strichcode-Detektionsprozessroutine, und führt den Prozess zur in 12 gezeigten zweiten Abfrageprozessroutine zurück. In der zweiten Abfrageprozessroutine führt die CPU 1 nach der Vollendung von S202 den Prozess zu S203 weiter.
  • In S203 prüft die CPU 1, ob die Flagge decrirec mit "03" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S205 weiter, wenn die Flagge decrirec nicht mit "03" gesetzt ist. Die CPU 1 führt den zweiten Strichcode-Detektionsprozess, der ein Strichcode-Abfrageprozess ist, nach dem Detektieren der mittleren Pseudo-Strichdetektion in S204 aus, wenn die Flagge decrirec mit "03" gesetzt ist. 15 ist ein Flussdiagramm, das die in S204 ausgeführte zweite Strichcode-Abfrageprozesssubroutine zeigt.
  • In dem ersten S401, nach dem Einspringen in die Subroutine, prüft die CPU 1 die Länge des Zeichens benachbart dem mittleren Pseudo-Strich in der Vorwärtsrichtung (das fünfte Zeichen in einem Fall eines 8-stelligen Strichcodes, das siebente Zeichen in einem Fall eines 13-stelligen Strichcodes). wenn die Länge des fünften Zeichens oder des siebenten Zeichens nicht ungefähr der festgelegte Wert ist, stellt die CPU 1 fest, dass die Zuverlässigkeit der zu verarbeitenden Strichbreiten-Datengruppe gering ist, und löscht die "Flagge der Detektion eines gültigen Etiketts" in S426, und führt danach den Prozess zu S016 in der in 5 gezeigten Hauptroutine weiter. Andererseits führt die CPU 1 den Prozess zu S402 weiter, wenn die Länge des fünften Zeichens oder des siebenten Zeichens ungefähr der festgelegte Wert ist.
  • In S402 prüft die CPU 1 die Länge des Zeichens benachbart dem mittleren Pseudo-Strich in der Rückwärtsrichtung (das vierte Zeichen in einem Fall des 8-stelligen Strichcodes, das sechste Zeichen in einem Fall des 13-stelligen Strichcodes). Die CPU 1 führt den Prozess zu S404 weiter, wenn die Länge des vierten Zeichens oder des sechsten Zeichens ungefähr der festgelegte Wert ist. Andererseits stellt die CPU 1 eine "Rückwärtsrichtung-keine-Daten-Flagge" in S403 ein, und führt dann den Prozess zu S404 weiter, wenn die Länge des vierten Zeichens oder des sechsten Zeichens nicht ungefähr der festgelegte Wert ist.
  • In S404 prüft die CPU 1, ob die "Rückwärtsrichtungkeine-Daten-Flagge" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S408 weiter, wenn die "Rückwärtsrichtungkeine-Daten-Flagge" gesetzt ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S405 weiter, wenn die "Rückwärts richtung-keine-Daten-Flagge" nicht gesetzt ist.
  • In S405 prüft die CPU 1 die Länge des Zeichens benachbart dem vierten Zeichen oder dem sechsten Zeichen in der Rückwärtsrichtung (anfänglich das dritte Zeichen benachbart dem vierten Zeichen, oder das fünfte Zeichen benachbart dem sechsten Zeichen). Die CPU 1 führt dann den Prozess zu S406 weiter, wenn die Länge dieses Zeichens ungefähr der festgelegte Wert ist.
  • In S406 zählt die CPU 1 die Anzahl von Zeichen (Zeichen, die sich in der Rückwärtsrichtung fortsetzen), von denen in S402 und S405 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, zu diesem Zeitpunkt.
  • In dem nächsten S407 prüft die CPU 1, ob die Zeichenlängenprüfung für 6 Zeichen in S402 und S405 zu diesem Zeitpunkt vollendet ist oder nicht. Die CPU 1 führt den Prozess zu S405 zurück, wenn die Zeichenlängenprüfung für 6 Zeichen noch nicht vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S408 weiter, wenn die Zeichenlängenprüfung für 6 Zeichen bereits vollendet ist.
  • Alternativ dazu führt die CPU 1 den Prozess zu S408 weiter, wenn sie in S405 beurteilt, dass die Länge des benachbarten Zeichens nicht ungefähr der festgelegte Wert ist.
  • In S408 prüft die CPU 1 die Länge des Zeichens benachbart dem fünften Zeichen oder dem siebenten Zeichen in der Vorwärtsrichtung (anfänglich das sechste Zeichen benachbart dem fünften Zeichen, oder das achte Zeichen benachbart dem siebenten Zeichen). Die CPU 1 führt den Prozess zu S409 weiter, wenn die Länge dieses Zeichens ungefähr der festgelegte Wert ist.
  • In S409 zählt die CPU 1 die Anzahl der Zeichen (Zeichen, die sich in der Vorwärtsrichtung fortsetzen), von denen in S401 und S408 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist, zu diesem Zeitpunkt.
  • In dem nächsten S410 prüft die CPU 1, ob die Zeichenlängenprüfung für 6 Zeichen in S401 und S408 zu diesem Zeitpunkt vollendet ist oder nicht. Die CPU 1 führt den Prozess zu S408 zurück, wenn die Zeichenlängenprüfung für 6 Zeichen noch nicht vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S411 weiter, wenn die Zeichenlängenprüfung für 6 Zeichen bereits vollendet ist.
  • Alternativ dazu führt die CPU 1 den Prozess zu S411 weiter, wenn sie in S408 beurteilt, dass die Länge des benachbarten Zeichens nicht ungefähr der festgelegte Wert ist.
  • In S411 prüft die CPU 1, ob die "Rückwärtsrichtungkeine-Daten-Flagge" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S412 weiter, wenn die "Rückwärtsrichtungkeine-Daten-Flagge" nicht gesetzt ist, und führt den Prozess zu S418 weiter, wenn die "Rückwärtsrichtung-keine-Daten-Flagge" gesetzt ist.
  • In S412 prüft die CPU 1, ob die in S406 gezählte Anzahl gültiger Zeichen in der Rückwärtsrichtung "1" ist oder mehr, und die in S409 gezählte Anzahl gültiger Zeichen in der Vorwärtsrichtung "3" ist oder mehr, oder nicht, oder ob die in S406 gezählte Anzahl gültiger Zeichen in der Rückwärtsrichtung "3" ist oder mehr, und die in S409 gezählte Anzahl gültiger Zeichen in der Vorwärtsrichtung "1" ist oder mehr, oder nicht. wenn die Anzahl gültiger Zeichen in einer beliebigen Richtung weniger als "3" ist, und die Anzahl gültiger Zeichen in einer Richtung "0" ist, stellt die CPU 1 fest, dass die Zuverlässigkeit der zu verarbeitenden Strichbreiten-Datengruppe gering ist, und löscht dann die "Flagge der Detektion eines effektiven Etiketts" in S426, und führt danach den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Alternativ dazu führt die CPU 1 den Prozess zu S413, wenn die Anzahl effektiver Zeichen in einer Richtung "3" ist oder mehr, und die Anzahl effektiver Zei chen in einer anderen Richtung "1" ist oder mehr.
  • In S413 prüft die CPU 1, ob die in S406 gezählte Anzahl der gültigen Zeichen in der Rückwärtsrichtung "4 (in einem Fall eines 8-stelligen Strichcodes)" oder "6 (in einem Fall eines 13-stelligen Strichcodes)" ist oder nicht. Die CPU 1 führt den Prozess zu S416 weiter, wenn die Anzahl gültiger Zeichen in der Rückwärtsrichtung nicht "4" oder "6" ist, und führt den Prozess zu S414 weiter, wenn Anzahl gültiger Zeichen in der Rückwärtsrichtung "4" oder "6" ist.
  • In S414 prüft die CPU 1 erneut die Länge des ersten Zeichens. Die CPU 1 führt den Prozess zu S416 weiter, wenn die Länge des ersten Zeichens nicht ungefähr der festgelegte Wert ist, und führt den Prozess zu S415 weiter, wenn die Länge des ersten Zeichens ungefähr der festgelegte Wert ist.
  • In S415 prüft die CPU 1, ob die in S409 gezählte Anzahl gültiger Zeichen in der Vorwärtsrichtung "4 (in einem Fall eines 8-stelligen Strichcodes)" oder "6 (in einem Fall eines 13-stelligen Strichcodes)" ist oder nicht. Die CPU 1 führt den Prozess zu S419 weiter, wenn die Anzahl gültiger Zeichen in der Vorwärtsrichtung "4" oder "6" ist, und führt den Prozess zu S416 weiter, wenn Anzahl gültiger Zeichen in der Vorwärtsrichtung nicht "4" oder "6" ist.
  • In S416 führt die CPU 1 den oben beschriebenen Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Mit anderen Worten, die CPU 1 stellt in dem Zähler gku-cnt ein, mit der in S409 gezählten Anzahl effektiver Zeichen in der Vorwärtsrichtung, und stellt in dem Zähler jun-cnt ein, mit der in S406 gezählten Anzahl gültiger Zeichen in der Rückwärtsrichtung. Nach der Vollendung des Prozesses zum Detektieren der Anzahl gültiger Zeichen setzt die CPU 1 die "Flagge der Detektion eines gültigen Etiketts" in S317, und beendet dann die zweite Strichcode-Detektionsprozessroutine, um so zur in 12 gezeigten zweiten Abfrageprozessroutine zurück zukehren.
  • Andererseits prüft die CPU 1 in S418, ob die in S409 gezählte Anzahl effektiver Zeichen in der Vorwärtsrichtung "4 (in einem Fall eines 8-stelligen Strichcodes)" oder "6 (in einem Fall eines 13-stelligen Strichcodes)" ist. Wenn die Anzahl effektiver Zeichen in der Vorwärtsrichtung nicht "4" oder "6" ist, löscht die CPU 1 die "Flagge der Detektion eines gültigen Etiketts" in S426, und führt dann den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Alternativ dazu führt die CPU 1 den Prozess zu S419 weiter, wenn die Anzahl gültiger Zeichen in der Vorwärtsrichtung 4" oder "6" ist.
  • In S419 prüft die CPU 1 erneut die Länge des achten Zeichens (wenn in S418 beurteilt wird, dass die Anzahl von Zeichen in der Vorwärtsrichtung "4" ist) oder des zwölften Zeichens (wenn in S418 beurteilt wird, dass die Anzahl von Zeichen in der Vorwärtsrichtung "6" ist). Die CPU 1 führt den Prozess zu S425 weiter, wenn die Länge des achten Zeichens oder des zwölften Zeichens nicht ungefähr der festgelegte Wert ist. Alternativ dazu führt die CPU 1 den Prozess zu S420 weiter, wenn die Länge des achten Zeichens oder des zwölften Zeichens ungefähr der festgelegte Wert ist.
  • In S420 führt die CPU 1 die Endrandprüfung aus. Mit anderen Worten, die CPU 1 prüft, ob drei Striche benachbart dem achten Zeichen (wenn in S418 beurteilt wird, dass die Anzahl effektiver Zeichen in der Vorwärtsrichtung "4" ist) oder dem zwölften Zeichen (wenn in S418 beurteilt wird, dass die Anzahl effektiver Zeichen in der Vorwärtsrichtung "6" ist) mit einem als Endkontrollstrich vorherbestimmten Muster zusammenfallen (dem Muster, in dem jede Strichbreite 1 Modullänge ist), und ein weißer Strich benachbart den drei Strichen mit einer Strichbreite versehen ist, die länger ist als die als Endkontrollstrich bestimmte Länge. Dann führt die CPU 1 den Prozess zu S425 weiter, wenn das Ergebnis der Endrandprüfung ein Misserfolg (NG) ist. Alternativ dazu führt die CPU 1 den Prozess zu S421 weiter, wenn das Ergebnis der Endrandprüfung gut (OK) ist.
  • In S425 prüft die CPU 1, ob die "Rückwärtsrichtungkeine-Daten-Flagge" gesetzt ist oder nicht. Wenn die "Rückwärtsrichtung-keine-Daten-Flagge" gesetzt ist, löscht die CPU 1 die "Flagge der Detektion eines gültigen Etiketts" in S426, und führt dann den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Alternativ dazu führt die CPU 1 den Prozess zu S424 weiter, wenn die "Rückwärtsrichtungkeine-Daten-Flagge" nicht gesetzt ist.
  • Andererseits prüft die CPU 1 in S421, ob die in S409 gezählte Anzahl effektiver Zeichen "4" ist oder nicht. Die CPU 1 führt den Prozess zu S423 weiter, wenn die Anzahl effektiver Zeichen nicht "4" ist, und führt nach dem Setzen der "vierstelligen Flagge" in S422 den Prozess zu S423 weiter, wenn die Anzahl effektiver Zeichen 4" ist.
  • In S423 setzt die CPU 1 die "Endkontrollstrich-Detektionsflagge". Das heißt, die CPU 1 setzt "1" für die Flagge gb-cb-f. Danach führt die CPU 1 den Prozess zu S424 weiter.
  • In S424 führt die CPU 1 den Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Mit anderen Worten, die CPU 1 stellt in dem Zähler gku-cnt ein, mit der in S409 gezählten Anzahl effektiver Zeichen in der Vorwärtsrichtung, und stellt in dem Zähler jun-cnt ein, mit der in S406 gezählten Anzahl gültiger Zeichen in der Rückwärtsrichtung. Nach der Vollendung dieses Prozesses zum Detektieren der Anzahl gültiger Zeichen stellt die CPU 1 die "Flagge der Detektion eines gültigen Etiketts" in S317 ein, und beendet dann die zweite Strichcode-Detektionsprozessroutine, um so zur in 12 gezeigten zweiten Abfrageprozessroutine zurückzukehren.
  • Die CPU 1 führt den Prozess zu S205 weiter, wenn sie zur zweiten Abfrageprozessroutine zurückkehrt.
  • In S205 prüft die CPU 1, ob die Flagge decrirec für "02" gesetzt ist. Wenn die Flagge decrirec nicht für "02" gesetzt ist, stellt die CPU 1 fest, dass ein Operationsfehler aufgetreten ist, und führt den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Wenn im Gegensatz dazu die Flagge decrirec für "02" gesetzt ist, führt die CPU 1 den dritten Strichcode-Detektionsprozess, der ein Strichcode-Abfrageprozess ist, nach dem Detektieren des Pseudo-Endkontrollstrichs in S206 aus. 16 ist ein Flussdiagramm, das die in S206 ausgeführte dritte Strichcode-Abfrageprozesssubroutine zeigt.
  • In dem ersten S501, nach dem Einspringen in diese Subroutine, führt die CPU 1 die Endzeichenlängenprüfung aus. Mit anderen Worten, die CPU 1 prüft die Gesamtsumme von Strichbreiten von vier Strichen benachbart dem Pseudo-Endkontrollstrich. Wenn die Länge des Endzeichens nicht ungefähr der festgelegte Wert ist, stellt die CPU 1 fest, dass die Zuverlässigkeit der zu verarbeitenden Strichbreiten-Datengruppe gering ist, und löscht dann die "Flagge der Detektion eines gültigen Etiketts" in S507, und führt danach den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Alternativ dazu führt die CPU 1 den Prozess zu S502 weiter, wenn die Länge des Endzeichens ungefähr der festgelegte Wert ist.
  • In S502 und dem nächsten S503 prüft die CPU 1 die Längen des elften Zeichens benachbart dem Endzeichen und des zehnten Zeichens. Wenn die Länge des elften Zeichens oder des zehnten Zeichens nicht ungefähr der festgelegte Wert ist, stellt die CPU 1 fest, dass die Zuverlässigkeit der zu verarbeitenden Strichbreiten-Datengruppe gering ist, und löscht dann die "Flagge der Detektion eines effektiven Eti ketts" in S507, und führt danach den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Alternativ dazu führt die CPU 1 den Prozess zu S504 weiter, wenn beide Längen des elften Zeichens und des zehnten Zeichens ungefähr der festgelegte Wert sind.
  • In S504 prüft die CPU 1 die Länge des benachbarten Zeichens (anfänglich das neunte Zeichen benachbart dem zehnten Zeichen). Die CPU 1 führt den Prozess zu S508 weiter, wenn die Länge dieses Zeichens nicht ungefähr der festgelegte Wert ist, und führt den Prozess zu S505 weiter, wenn die Länge dieses Zeichens ungefähr der festgelegte Wert ist.
  • In S505 prüft die CPU 1, ob die Zeichenlängenprüfung für 6 Zeichen in S501 und S504 zu diesem Zeitpunkt vollendet ist oder nicht. Die CPU 1 führt den Prozess zu S504 zurück, wenn die Zeichenlängenprüfung für 6 Zeichen noch nicht vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S506 weiter, wenn die Zeichenlängenprüfung für 6 Zeichen bereits vollendet ist.
  • In S506 führt die CPU 1 die Prüfung des mittleren Strichs aus. Die Prüfung des mittleren Strichs ist eine Prüfung, ob fünf Striche benachbart dem siebenten Zeichen mit einem als mittlerer Strich bestimmten Muster zusammenfallen (einem Muster, in dem jede Strichbreite 1 Modullänge ist). Wenn das Ergebnis der Prüfung des mittleren Strichs gut (OK) ist, stellt die CPU 1 dies als unmöglichen Status fest, und löscht dann die "Flagge der Detektion eines gültigen Etiketts", und führt danach den Prozess zu S016 in der in 10 gezeigten Hauptroutine weiter. Im Gegensatz dazu führt die CPU 1 den Prozess zu S508 weiter, wenn das Ergebnis der Prüfung des mittleren Strichs ein Misserfolg (NG) ist.
  • In S508 führt die CPU 1 den Prozess zum Detektieren der Anzahl gültiger Zeichen aus. Mit anderen Worten, die CPU 1 stellt in dem Zähler jun-cnt ein, mit der Anzahl von Zeichen, von denen in S501 bis S504 beurteilt wurde, dass die Zeichenlänge ungefähr der festgelegte Wert ist. Nach der Vollendung dieses Prozesses zum Detektieren der Anzahl gültiger Zeichen beendet die CPU 1 die dritte Strichcode-Detektionsprozesssubroutine nach dem Setzen der "Flagge der Detektion eines gültigen Etiketts" in S509, und kehrt dann zur in 12 gezeigten zweiten Abfrageprozessroutine zurück.
  • In der zweiten Abfrageprozessroutine beendet die CPU 1 die zweite Abfrageprozessroutine nach S206, und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • In der Hauptroutine führt die CPU 1 den Strichcode-Demodulationsprozess in S003 nach S002 aus (äquivalent zur Demodulationseinheit). 17 bis 19 sind Flussdiagramme, welche die in S003 ausgeführte Strichcode-Demodulationssubroutine zeigen.
  • In dem ersten S601, nach dem Einspringen in diese Subroutine, prüft die CPU 1, ob die in S106 und S116, S118 oder S122 gesetzt Flagge decdirec "1" ist oder nicht. Die CPU 1 stellt den Wert des Zählers jun-cnt für die Variable loop-cnt in S602 ein, wenn die Flagge decdirec "1" ist (wenn der Pseudo-Startkontrollstrich zum ersten Mal detektiert wird).
  • In dem nächsten S603 stellt die CPU 1 den Demodulationszeiger an der Position des oberen Strichs (weißer Strich (a)) des ersten Zeichens in der zu verarbeitenden Strichbreiten-Datengruppe ein.
  • Dann führt die CPU 1 den Schleifenprozess zwischen S604 bis S610 aus, um Datenzeichen (Zeichen, von denen beurteilt wurde, dass die Länge ungefähr der festgelegte Wert ist) in dem linken Datenblock sequentiell zu demodulieren. In dem ersten S604, nach dem Einspringen in die Schleife, führt die CPU 1 den Demodulationsprozess für das vom Demodulationszeiger angezeigte Zeichen aus. Konkret ausgedrückt, auf der Ba sis der Strichbreitengesamtsumme (δ Distanz T1) des dritten Strichs (weißer Strich (a)) und des vierten Strichs (schwarzer Strich (d)), gezählt vom weißen Strich (a) an der vom Demodulationszeiger angezeigten Position, und der Strichbreitengesamtsumme (δ Distanz T2) des zweiten Strichs (schwarzer Strich (b)) und des dritten Strichs (weißer Strich (c)), gezählt vom weißen Strich (a) an der vom Demodulationszeiger angezeigten Position, fragt die CPU 1 die in 29 gezeigte Liste ab, und liest die entsprechenden demodulierten Daten (Kombination der UNGERADE/GERADE-Struktur und des Zahlenwerts). Wenn die δ Distanzen T1 und T2 3 oder 4 sind, gibt es zusätzlich jeweils zwei Arten entsprechender demodulierter Daten, daher ist es unmöglich, eine von den beiden Arten von Daten zu spezifizieren. In diesem Fall fragt die CPU 1, auf der Basis der Anzahl von Modulen des schwarzen Strichs ganz rechts, die in 29 gezeigte Liste weiter ab, und spezifiziert die entsprechenden demodulierten Daten. Die CPU 1 speichert die auf diese Weise gelesenen und spezifizierten demodulierten Daten in die spezifische Position in dem temporären Sicherungspuffer 6a (siehe 4).
  • Im nächsten S605 prüft die CPU 1, ob der Demodulationsprozess in S604 erfolgreich ist oder nicht. Die CPU 1 führt den Prozess zu S606 weiter, wenn der Demodulationsprozess erfolgreich ist, und führt den Prozess zu S607 weiter, wenn der Demodulationsprozess nicht erfolgreich ist.
  • In S607 prüft die CPU 1, ob der Misserfolg des Demodulationsprozesses das erste Mal ist nach dem Einsprung in den Strichcode-Demodulationsprozess oder nicht. Wenn der Demodulationsprozess einmal fehlschlägt, führt die CPU 1 den Prozess zu S606 weiter, nach dem Sichern der Strichbreitendaten von vier Strichen, um das Zeichen zu sein, dessen Demodulation fehlschlägt, in S608. Im Gegensatz dazu führt die CPU 1 den Prozess zu S611 weiter, um den Demodulationsprozess für den linken Datenblock zu stoppen, wenn der Demodulationsprozess zweimal oder mehrmals fehlschlägt.
  • In S606 führt die CPU 1 eine Dekrementierung für die Variable loop-cnt aus.
  • Im nächsten S609 setzt die CPU 1 den Demodulationszeiger um vier Stücke von Strichbreitendaten vor. Das heißt, die CPU 1 stellt den Demodulationszähler auf den oberen Strich (weißer Strich (a)) des in der Vorwärtsrichtung benachbarten Datenzeichens ein.
  • Im nächsten S610 prüft die CPU 1, ob die Variable loop-cnt "0" ist oder nicht. Die CPU 1 führt den Prozess zu S604 zurück, wenn die Variable loop-cnt "0" noch nicht erreicht. Alternativ dazu führt die CPU 1 den Prozess zu S611 weiter, wenn als Ergebnis der Wiederholung des Schleifenprozesses von S604 bis S610 die Variable loop-cnt "0" erreicht.
  • In S611 prüft die CPU 1, ob die Anzahl der Datenzeichen, von denen in S605 beurteilt wird, dass der Demodulationsprozess erfolgreich ist, drei oder mehr ist. Wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, weniger als drei ist, führt die CPU 1 nach dem Inkrementieren des Strichcode-Abfragezeigers in S632 den Prozess zum in 10 gezeigten S016 zurück. Alternativ dazu führt die CPU 1 den Prozess zu S612 weiter, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, drei oder mehr ist.
  • In S612 prüft die CPU 1, ob die "vierstellige Flagge" gesetzt ist oder nicht. wenn die "vierstellige Flagge" gesetzt ist, prüft die CPU 1 in S630, ob die Anzahl der Datenzeichen, von denen in S605 beurteilt wird, dass der Demodulationsprozess erfolgreich ist, 4 ist oder nicht. wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, nicht vier ist, führt die CPU 1 nach dem Inkrementieren des Strichcode-Abfragezeigers in S632 den Prozess zum in 10 gezeigten S016 zurück. Alternativ dazu, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, 4 ist, prüft die CPU 1 in S631, ob die Flagge gb-cb-f mit "2" gesetzt ist. Die CPU 1 führt den Prozess zu S616 weiter, wenn die Flagge gb-cb-f mit "2" gesetzt ist, und führt den Prozess zu S628 weiter, wenn die Flagge gb-cb-f nicht mit "2" gesetzt ist.
  • Wenn die CPU 1 andererseits in S612 beurteilt, dass die "vierstellige Flagge" nicht gesetzt ist, prüft sie in S613, ob die Anzahl der Datenzeichen, von denen in S605 beurteilt wurde, dass der Demodulationsprozess erfolgreich ist, 6 ist oder nicht. Wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, nicht 6 ist, speichert die CPU 1 in die Position des temporären Sicherungspuffers 6a (siehe 4) die Strichbreitendaten von vier Strichen, die in S608 gesichert wurden (die Strichbreitendaten von vier Strichen, um das Datenzeichen zu sein, dessen Demodulation fehlgeschlagen ist), und die Länge des Datenzeichens unmittelbar vor dem Datenzeichen, dessen Demodulation fehlgeschlagen ist. Nach S629 führt die CPU 1 den Prozess zu S628 weiter. Alternativ dazu führt die CPU 1 den Prozess zu S614 weiter, wenn beurteilt wird, dass die Anzahl von Datenzeichen, deren Demodulation erfolgreich ist, 6 beträgt.
  • In S614 prüft die CPU 1, ob die Flagge gb-cb-f mit "0" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S628 weiter, wenn die Flagge gb-cb-f mit "0" gesetzt ist, und führt den Prozess zu S615 weiter, wenn die Flagge gb-cb-f nicht mit "0" gesetzt ist.
  • In S615 prüft die CPU 1, ob der Wert des Zählers gku-cnt "0" ist oder nicht. Wenn der Wert des Zählers gku-cnt "0" ist, stellt die CPU 1 fest, dass es keine Daten gibt, um der rechte Datenblock zu sein, und führt den Pro zess zu S628 weiter, und, wenn der Wert des Zählers nicht gku-cnt "0" ist, stellt sie fest, dass es ein Datenzeichen gibt, um der rechte Datenblock zu sein, und führt den Prozess zu S616 weiter.
  • In S616 stellt die CPU 1 den Wert des Zählers gku-cnt für die Variable loop-cnt ein.
  • In dem nächsten S617 stellt die CPU 1 den Demodulationszeiger an der Position des oberen Strichs (weißer Strich (a)) des fünften Zeichens (wenn die "vierstellige Flagge" gesetzt ist) oder des siebenten Zeichens (wenn die "vierstellige Flagge" nicht gesetzt ist) in der zu verarbeitenden Strichbreiten-Datengruppe ein.
  • Dann führt die CPU 1 den Schleifenprozess von S618 bis S624 aus, um das Datenzeichen sequentiell zu demodulieren, um der rechte Datenblock zu sein (Datenzeichen, von dem beurteilt wird, dass die Länge ungefähr der festgelegte Wert ist). In dem ersten S618, nach dem Einspringen in diese Schleife, führt die CPU 1 den Demodulationsprozess für das vom Demodulationszeiger angezeigte Zeichen aus. Die CPU 1 speichert die durch diesen Demodulationsprozess erhaltenen demodulierten Daten in die entsprechende Position in dem temporären Sicherungspuffer 6a (siehe 4).
  • Im nächsten S619 prüft die CPU 1, ob der Demodulationsprozess in S618 erfolgreich ist oder nicht. Die CPU 1 führt den Prozess zu S620 weiter, wenn der Demodulationsprozess erfolgreich ist, und führt den Prozess zu S621 weiter, wenn der Demodulationsprozess nicht erfolgreich ist.
  • In S621 prüft die CPU 1, ob der Misserfolg des Demodulationsprozesses das erste Mal nach dem Einspringen in diesen Strichcode-Demodulationsprozess ist oder nicht. Wenn die Demodulation einmal nicht erfolgreich ist, führt die CPU 1, nach dem Sichern der Strichbreitendaten von vier Strichen, um das Datenzeichen zu sein, dessen Demodulationspro zess fehlgeschlagen ist, in S622 den Prozess zu S620 weiter. Wenn die Demodulation im Gegensatz dazu zweimal oder mehrmals nicht erfolgreich ist, führt die CPU 1 den Prozess zu S625 weiter, um den Demodulationsprozess des rechten Datenblocks zu stoppen.
  • In S620 führt die CPU 1 eine Dekrementierung für die Variable loop-cnt aus.
  • Im nächsten S623 setzt die CPU 1 den Demodulationszeiger um vier Stücke von Strichbreitendaten vor. Das heißt, die CPU 1 stellt den Demodulationszeiger auf den oberen Strich des in der Vorwärtsrichtung benachbarten Datenzeichens ein (weißer Strich (a)).
  • Im nächsten S624 prüft die CPU 1, ob die Variable loop-cnt "0" ist oder nicht. Die CPU 1 führt den Prozess zu S618 zurück, wenn die Variable loop-cnt "0" noch nicht erreicht. Alternativ dazu führt die CPU 1 den Prozess zu S625 weiter, wenn die Variable loop-cnt als Ergebnis der Wiederholung des Schleifenprozesses von S618 bis S624 "0" erreicht.
  • In S625 prüft die CPU 1, ob die "vierstellige Flagge" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S628 weiter, wenn die "vierstellige Flagge" gesetzt ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S626 weiter, wenn die "vierstellige Flagge" nicht gesetzt ist.
  • In S626 prüft die CPU 1, ob die Anzahl der Datenzeichen, von denen in S619 beurteilt wurde, dass der Demodulationsprozess erfolgreich ist, 6 ist oder nicht. Die CPU 1 führt den Prozess zu S628, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, 6 ist. Wenn im Gegensatz dazu die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, nicht 6 ist, speichert die CPU 1 in die entsprechende Position in dem temporären Sicherungspuffer 6a (siehe 4) die Strichbreitendaten von vier Strichen, die in S622 gesichert wurden (die Strichbreitendaten von vier Strichen, um das Datenzeichen zu sein, dessen Demodulation fehlgeschlagen ist), und die Länge des Datenzeichens unmittelbar vor dem Datenzeichen, dessen Demodulation fehlgeschlagen ist. Nach S627 führt die CPU 1 den Prozess zu S628 weiter.
  • In S628 kopiert die CPU 1 in den ersten Demodulationsvollendungspuffer 6b (siehe 7) die Daten in dem temporären Sicherungspuffer 6a, die die in S604 und S618 gespeicherten demodulierten Daten und die in S629 und S627 gespeicherten Strichbreitendaten von vier Strichen enthalten. Nach S628 beendet die CPU 1 die Strichcode-Demodulationsprozessroutine, und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • Ferner prüft die CPU 1 in S633, ob die in S106, S116, S118 oder S122 eingestellte Flagge decdirec "2" ist oder nicht, wenn in S601 beurteilt wird, dass die Flagge decdirec nicht "1" ist. Die CPU 1 setzt den Wert des Zählers jun-cnt in die Variable loop-cnt in S634, wenn die Flagge decdirec "2" ist (wenn der Endkontrollstrich zum ersten Mal detektiert wird).
  • Im nächsten S635 stellt die CPU 1 den Demodulationszeiger an der Position des oberen Strichs (weißer Strich (a)) des Endzeichens in den zu verarbeitenden Strichbreitendaten ein.
  • Dann führt die CPU 1 den Schleifenprozess von S636 bis S642 aus, um Datenzeichen, um der rechte Datenblock zu sein (Zeichen, von denen angenommen wird, dass die Länge ungefähr der festgelegte Wert ist), sequentiell in der Rückwärtsrichtung zu demodulieren. In dem ersten S636, nach dem Einspringen in diese Schleife, führt die CPU 1 den Demodulationsprozess für das vom Demodulationszeiger angezeigte Zeichen aus. Die CPU 1 speichert die durch diesen Demodulationsprozess erhaltenen demodulierten Daten in die entsprechende Position in dem temporären Sicherungspuffer 6a (siehe 5).
  • In dem nächsten S637 prüft die CPU 1, ob der Demodulationsprozess in S636 erfolgreich ist oder nicht. Die CPU 1 führt den Prozess zu S638 weiter, wenn der Demodulationsprozess erfolgreich ist, und führt den Prozess zu S639 weiter, wenn der Demodulationsprozess nicht erfolgreich ist.
  • In S639 prüft die CPU 1, ob dies der erste Misserfolg des Demodulationsprozesses nach dem Einspringen in diesen Strichcode-Demodulationsprozess ist. Wenn dies der erste Misserfolg der Demodulation ist, führt die CPU 1 den Prozess zu S638 weiter, nach dem Sichern der Strichbreitendaten von vier Strichen, um das Datenzeichen zu sein, dessen Demodulationsprozess fehlschlägt, in S640. Wenn die Demodulation zweimal oder mehrmals nicht erfolgreich ist, führt die CPU 1 den Prozess zu S643 weiter, um den Demodulationsprozess für den rechten Datenblock zu stoppen.
  • In S638 führt die CPU 1 eine Dekrementierung für die Variable loop-cnt aus.
  • Im nächsten S641 setzt die CPU 1 den Demodulationszeiger um vier Stücke von Strichbreitendaten zurück. Das heißt, die CPU 1 setzt den Demodulationszeiger auf den oberen Strich (weißer Strich (a)) des in der Rückwärtsrichtung benachbarten Datenzeichens.
  • Im nächsten S642 prüft die CPU 1, ob die Variable loop-cnt "0" ist oder nicht. Die CPU 1 führt den Prozess zu S636 zurück, wenn die Variable loop-cnt noch nicht "0" erreicht. Im Gegensatz dazu führt die CPU 1 den Prozess zu S643 weiter, wenn die Variable loop-cnt als Ergebnis der Wiederholung des Schleifenprozesses von S636 bis S642 "0" erreicht.
  • In S643 prüft die CPU 1, ob die Anzahl der Datenzeichen, von denen in S636 beurteilt wird, dass der Demodulationsprozess erfolgreich ist, drei oder mehr ist. Wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, weniger als drei ist, führt die CPU 1 den Prozess zum in 10 gezeigten S016 zurück, nach dem Inkrementieren des Strichcode-Abfragezählers in S632. Im Gegensatz dazu führt die CPU 1 den Prozess zu S644 weiter, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, drei oder mehr ist.
  • In S644 prüft die CPU 1, ob die "vierstellige Flagge" gesetzt ist oder nicht. Wenn die "vierstellige Flagge" gesetzt ist, prüft die CPU 1, ob die Anzahl der Datenzeichen, von denen in S637 beurteilt wird, dass der Demodulationsprozess erfolgreich ist, 4 ist oder nicht in S645. Wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, nicht 4 ist, führt die CPU 1 den Prozess zum in 10 gezeigten S016 weiter, nach dem Inkrementieren des Strichcode-Abfragezählers in S632. Im Gegensatz dazu führt die CPU 1 den Prozess zu S628 weiter, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, vier ist.
  • Wenn die CPU 1 in S644 beurteilt, dass die "vierstellige Flagge" nicht gesetzt ist, prüft sie ferner, ob die Anzahl der Datenzeichen, von denen in S637 beurteilt wird, dass der Demodulationsprozess erfolgreich ist, 6 ist oder nicht in S646. Die CPU 1 führt den Prozess zu S628 weiter, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, 6 ist, und führt den Prozess zu S647 weiter, wenn die Anzahl der Datenzeichen, deren Demodulation erfolgreich ist, nicht 6 ist.
  • In S647 speichert die CPU 1 in die entsprechende Position in dem temporären Sicherungspuffer 6a (siehe 5) die Strichbreitendaten von vier Strichen, die in S640 gesichert wurden (Strichbreitendaten von vier Strichen, die das Datenzeichen darstellen, dessen Demodulation fehlgeschlagen ist), und die Länge des Datenzeichens unmittelbar vor dem Datenzeichen, dessen Demodulation fehlgeschlagen ist. Nach S647 führt die CPU 1 den Prozess zu S628 weiter.
  • In S628 kopiert die CPU 1 in den zweiten Demodulationsvollendungspuffer 6c (siehe 8) die Daten in dem temporären Sicherungspuffer 6a, die die in S636 gespeicherten demodulierten Daten und die in S640 gespeicherten Strichbreitendaten von vier Strichen enthalten. Nach S628 beendet die CPU 1 die Strichcode-Demodulationsprozessroutine, und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • Andererseits stellt die CPU 1 den Wert des Zählers jun-cnt für die Variable loop-cnt in S648 sein, wenn sie in S633 beurteilt, dass die Flagge decdirec nicht "2" ist.
  • Im nächsten S649 stellt die CPU 1 den Demodulationszeiger an der Position des oberen Strichs (weißer Strich (a)) des vierten Zeichens (wenn die "vierstellige Flagge" gesetzt ist) oder des sechsten Zeichens (wenn die "vierstellige Flagge" nicht gesetzt ist) in der zu verarbeitenden Strichbreiten-Datengruppe ein.
  • Dann führt die CPU 1 den Schleifenprozess von S650 bis S656 aus, um Datenzeichen, um der linke Datenblock zu sein (Zeichen, von denen angenommen wird, dass die Länge ungefähr der festgelegte Wert ist), sequentiell in der Rückwärtsrichtung zu demodulieren. In dem ersten S650, nach dem Einspringen in diese Schleife, führt die CPU 1 den Demodulationsprozess für das vom Demodulationszeiger angezeigte Zeichen aus. Die CPU 1 speichert die durch diesen Demodulationsprozess erhaltenen demodulierten Daten in die entsprechende Position des temporären Sicherungspuffers 6a (siehe 6).
  • In dem nächsten S651 prüft die CPU 1, ob der Demodulationsprozess in S650 erfolgreich ist oder nicht. Die CPU 1 führt den Prozess zu S652 weiter, wenn der Demodulationsprozess erfolgreich ist, und führt zu S6S3 weiter, wenn der Demodulationsprozess fehlschlägt.
  • In S6S3 prüft die CPU 1, ob dies der erste Misserfolg des Demodulationsprozesses nach dem Einspringen in den Schleifenprozess von S650 bis S656 ist. Wenn dies der erste Misserfolg ist, führt die CPU 1 den Prozess zu S652 weiter, nach dem Sichern der Strichbreitendaten von vier Strichen, die das Datenzeichen darstellen, dessen Demodulationsprozess fehlschlägt, in S654. Wenn im Gegensatz dazu die Demodulation zweimal oder mehrmals nicht erfolgreich ist, führt die CPU 1 den Prozess zu S657 weiter, um den Demodulationsprozess für den linken Datenblock zu stoppen.
  • In S657 führt die CPU 1 eine Dekrementierung für die Variable loop-cnt aus.
  • Im nächsten S655 setzt die CPU 1 den Demodulationszeiger um vier Stücke von Strichbreitendaten zurück. Das heißt, die CPU 1 stellt den Demodulationszeiger auf den oberen Strich (weiter Strich (a)) des in der Rückwärtsrichtung benachbarten Datenzeichens ein.
  • Im nächsten S656 prüft die CPU 1, ob die Variable loop-cnt "0" ist oder nicht. Die CPU 1 führt den Prozess zu S650 zurück, wenn die Variable loop-cnt noch nicht "0" erreicht. Im Gegensatz dazu führt die CPU 1 den Prozess zu S657 weiter, wenn die Variable loop-cnt als Ergebnis der Wiederholung des Schleifenprozesses von S650 bis S656 "0" erreicht.
  • In S657 stellt die CPU 1 den Demodulationszeiger an der Position des oberen Strichs (weißer Strich (a)) des fünften Zeichens (wenn die "vierstellige Flagge" gesetzt ist) oder des siebenten Zeichens (wenn die "vierstellige Flagge" nicht gesetzt ist) in der zu verarbeitenden Strichbreiten-Datengruppe ein.
  • Im nächsten S658 stellt die CPU 1 den Wert des Zählers gku-cnt für die Variable loop-cnt ein.
  • Dann führt die CPU 1 den Schleifenprozess von S659 bis S665 aus, um Datenzeichen, um der rechte Datenblock zu sein (Zeichen, von denen angenommen wird, dass die Länge ungefähr der festgelegte Wert ist), sequentiell in der Vorwärtsrichtung zu demodulieren. In dem ersten S659, nach dem Einspringen in diese Schleife, führt die CPU 1 den Demodulationsprozess für das vom Demodulationszeiger angezeigte Zeichen aus. Die CPU 1 speichert die durch diesen Demodulationsprozess vorgesehenen Demodulationsdaten in die entsprechende Position des temporären Sicherungspuffers 6a (siehe 6).
  • In dem nächsten S660 prüft die CPU 1, ob der Demodulationsprozess in S659 erfolgreich ist oder nicht. Die CPU 1 führt den Prozess zu S661 weiter, wenn der Demodulationsprozess erfolgreich ist, und führt den Prozess zu S662 weiter, wenn der Demodulationsprozess nicht erfolgreich ist.
  • In S662 prüft die CPU 1, ob dies der erste Misserfolg des Demodulationsprozesses nach dem Einspringen in den Schleifenprozess von S659 bis S665 ist. Wenn dies der erste Misserfolg ist, führt die CPU 1 den Prozess zu S661 weiter, nach dem Sichern der Strichbreitendaten von vier Strichen, die das Datenzeichen darstellen, dessen Demodulationsprozess fehlschlägt, in S663. Wenn im Gegensatz dazu die Demodulation zweimal oder mehrmals nicht erfolgreich ist, führt die CPU 1 den Prozess zu S666 weiter, um den Demodulationsprozess für den rechten Datenblock zu stoppen.
  • In S661 führt die CPU 1 eine Dekrementierung für die Variable loop-cnt aus.
  • Im nächsten S664 setzt die CPU 1 den Demodulationszeiger um vier Stücke von Strichbreitendaten vor. Das heißt, die CPU 1 stellt den Demodulationszeiger auf den oberen Strich (weißer Strich (a)) des in der Vorwärtsrichtung benachbarten Datenzeichens ein.
  • Im nächsten S665 prüft die CPU 1, ob die Variable loop-cnt "0" ist oder nicht. Die CPU 1 führt den Prozess zu S659 zurück, wenn die Variable loop-cnt noch nicht "0" erreicht. Im Gegensatz dazu führt die CPU 1 den Prozess zu S666 weiter, wenn die Variable loop-cnt als Ergebnis der Wiederholung des Schleifenprozesses von S659 bis S665 "0" erreicht.
  • In S666 prüft die CPU 1, ob die Anzahl demodulierter Daten, deren Demodulation in S650 erfolgreich ist, in dem linken Datenblock eins oder mehr ist, und die Anzahl demodulierter Daten, deren Demodulation in S659 erfolgreich ist, in dem rechten Datenblock drei oder mehr ist, oder ob die Anzahl demodulierter Daten, deren Demodulation in S650 erfolgreich ist, in dem linken Datenblock drei oder mehr ist, und die Anzahl demodulierter Daten, deren Demodulation in S659 erfolgreich ist, in dem rechten Datenblock eins oder mehr ist. Die CPU 1 führt den Prozess zum in 10 gezeigten S016 weiter, nach dem Inkrementieren des Strichcode-Abfragezeigers in S632, wenn die Anzahl der demodulierten Daten in einem beliebigen Block weniger als drei ist, und wenn die Anzahl der demodulierten Daten in einem Block 0 ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S667 weiter, wenn die Anzahl demodulierter Daten in einem Block drei oder mehr ist, und die Anzahl demodulierter Daten in einem anderen Block eins oder mehr ist.
  • In S667 prüft die CPU 1, ob die Anzahl demodulierter Daten, deren Demodulation in S659 erfolgreich ist, in dem linken Datenblock 6 ist oder nicht. Die CPU 1 führt den Prozess zu S669, wenn die Anzahl demodulierter Daten in dem linken Datenblock sechs ist, und führt dann den Prozess zu S668 weiter, wenn die Anzahl demodulierter Daten in dem linken Datenblock nicht 6 ist. In S668 speichert die CPU 1 in die entsprechende Position des temporären Sicherungspuffers 6a (siehe 6) die Strichbreitendaten von vier Strichen, die in S654 gesichert wurden (Strichbreitendaten von vier Strichen, die das Datenzeichen darstellen, dessen Demodulation fehlgeschlagen ist), und die Länge des Datenzeichens unmittelbar vor dem Datenzeichen, dessen Demodulation fehlgeschlagen ist. Nach S668 führt die CPU 1 den Prozess zu S669 weiter.
  • In S669 speichert die CPU 1 in die entsprechende Position des temporären Sicherungspuffers 6a (siehe 6) die Strichbreitendaten von vier Strichen, die in S663 gesichert wurden (Strichbreitendaten von vier Strichen, die das Datenzeichen darstellen, dessen Demodulation fehlgeschlagen ist), und die Länge des Datenzeichens unmittelbar vor dem Datenzeichen, dessen Demodulation fehlgeschlagen ist. Nach S669 führt die CPU 1 den Prozess zu S628 weiter.
  • In S628 kopiert die CPU 1 in den dritten Demodulationsvollendungspuffer 6d (siehe 9) die Daten in dem temporären Sicherungspuffer 6a, die die in S650 und S659 gespeicherten demodulierten Daten und die in S668 und S669 gespeicherten Strichbreitendaten enthalten. Nach S628 beendet die CPU 1 die Strichcode-Demodulationsprozessroutine, und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • In der Hauptroutine, nach S003, prüft die CPU 1, ob die Strichbreiten-Datengruppe, die das Prozessobjekt für den Strichcode-Demodulationsprozess in S003 ist, durch das kontinuierliche Lesen erhalten wird oder nicht. Diese Prüfung wird auf der Basis ausgeführt, ob die Flagge gb-cb-f in S323 oder S326 mit "2" gesetzt wurde oder nicht. Die CPU 1 führt den Prozess zu S008 weiter, wenn die demodulierten Daten nicht durch das kontinuierliche Lesen erhalten werden, wenn nämlich die Flagge gb-cb-f mit "0" oder "1" gesetzt ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S005 beim kontinuierlichen Lesen weiter, wenn nämlich die Flagge gb-cb-f mit "2" gesetzt ist.
  • In S005 prüft die CPU 1, ob alle in der Strichbreiten- Datengruppe enthaltenen Datenzeichen durch den Strichcode-Demodulationsprozess in S003 vollständig demoduliert wurden. Die CPU 1 führt den Prozess zu S008 weiter, wenn alle Datenzeichen vollständig demoduliert wurden. Im Gegensatz dazu führt die CPU 1 den Prozess zu S006 weiter, wenn alle Datenzeichen nicht vollständig demoduliert wurden.
  • In S006 prüft die CPU 1, ob die Demodulation von nur 1 Zeichen während des Strichcode-Demodulationsprozesses in S003 fehlgeschlagen ist. Die CPU 1 führt den Prozess zu S008 weiter, wenn die Demodulation von 2 oder mehrere Zeichen fehlgeschlagen ist. Wenn im Gegensatz dazu die Demodulation von nur 1 Zeichen fehlgeschlagen ist, führt die CPU 1 den 1-Zeichen-Ableitungsprozess (äquivalent zur Datenableitungseinheit und Paritätsableitungseinheit) in S007 aus, um demodulierte Daten abzuleiten, die dem Zeichen entsprechen, dessen Demodulation fehlgeschlagen ist. 20 ist ein Flussdiagramm, das die in S007 ausgeführte 1-Zeichen-Ableitungsprozesssubroutine zeigt.
  • In dem ersten S701, nach dem Einspringen in diese Subroutine, prüft die CPU 1, ob die "vierstellige Flagge" gesetzt ist oder nicht. wenn die "vierstellige Flagge" gesetzt ist, ist es unmöglich, Zeichen abzuleiten, daher beendet die CPU 1 prompt die 1-Zeichen-Ableitungsprozesssubroutine, und führt dann den Prozess zur in 10 gezeigten Hauptroutine prompt zurück. Im Gegensatz dazu führt die CPU 1 den Prozess zu S702 weiter, wenn die "vierstellige Flagge" nicht gesetzt ist.
  • In S702 prüft die CPU 1, ob das Zeichen, dessen Demodulation während des Strichcode-Demodulationsprozesses in S003 fehlgeschlagen ist, in dem linken Datenblock ist oder nicht. Die CPU 1 führt den Prozess zu S705 weiter, da es unnötig ist, die UNGERADE/GERADE-Struktur abzuleiten, wenn das Zeichen, dessen Demodulation fehlgeschlagen ist, in dem rechten Datenblock ist. Im Gegensatz dazu führt die CPU 1 den Prozess zu S703 weiter, wenn das Zeichen, dessen Demodulation fehlgeschlagen ist, in dem linken Datenblock ist.
  • In S703 leitet die CPU 1 die UNGERADE/GERADE-Struktur des 1 Zeichens, dessen Demodulation fehlgeschlagen ist, auf der Basis der 5 Zeichen in dem linken Datenblock, deren Demodulation erfolgreich war, unter Verwendung der in 30 gezeigten Liste, wie oben beschrieben, ab (äquivalent zur Paritätsableitungseinheit).
  • Im nächsten S704 sichert die CPU 1 die in S703 abgeleitete UNGERADE/GERADE-Struktur. Nach S704 führt die CPU 1 den Prozess zu S705 weiter.
  • In S705 berechnet die CPU 1 ein entsprechendes Flaggenzeichen auf der Basis der UNGERADE/GERADE-Struktur von 6 Zeichen, um der linke Datenblock zu sein (einschließlich der in S704 gesicherten UNGERADE/GERADE-Struktur), unter Verwendung der in 30 gezeigten Liste.
  • Im nächsten S706 rechnet die CPU 1, auf der Basis der Zahlenwerte von 11 Zeichen, deren Demodulation erfolgreich war, und des Zahlenwerts des in S705 berechneten Flaggenzeichens, die Modulus 10-Prüfung zurück (der vorherbestimmte bedingte Ausdruck), und berechnet einen Zahlenwert, der durch das Zeichen codiert wird, dessen Demodulation fehlgeschlagen ist (äquivalent zur Datenableitungseinheit).
  • Im nächsten S707 sichert die CPU 1 den in S706 berechneten Zahlenwert.
  • Im nächsten S708 spezifiziert die CPU 1, auf der Basis der in 29 gezeigten Liste, die in S704 gesicherte UNGERADE/GERADE-Struktur (GERADE, wenn S703 nicht ausgeführt wird), und das Strichbreitenmuster, das dem in S707 gesicherten Zahlenwert entspricht.
  • Im nächsten S709 berechnet die CPU 1 die Gesamtsumme von Modulen (δ Distanz T1) des weißen Strichs (c) und des schwarzen Strichs (d), die in einem vom ersten Demodulationsvollendungspuffer 6b bis dritten Demodulationsvollendungspuffer 6d gespeichert sind, in den in S003 demodulierte Daten gespeichert werden. Bei dieser Berechnung setzt die CPU 1 die Zeichenlänge, die in einem der Puffer 6b bis 6d gespeichert ist, der gleich ist dem die demodulierten Daten speichernden Puffer, für "C" in der in 31 gezeigten Koordinate ein. Dann berechnet die CPU 1 die Position (Anzahl von Modulen) des weißen Strichs (c) und des schwarzen Strichs (d) in dieser Koordinate auf Dezimalstellen. Dann rundet die CPU 1 die berechnete Position (Anzahl von Modulen) auf eine Dezimalstelle ab.
  • Im nächsten S710 berechnet die CPU 1 die Gesamtsumme von Modulen (δ Distanz T2) des schwarzen Strichs (b) und des weißen Strichs (c), die in einem vom ersten Demodulationsvollendungspuffer 6b bis dritten Demodulationsvollendungspuffer 6d gespeichert sind, in den in S003 demodulierte Daten gespeichert werden, ähnlich S709.
  • Im nächsten S711 berechnet die CPU 1 die Gesamtsumme von Modulen des schwarzen Strichs (b), die in einem vom ersten Demodulationsvollendungspuffer 6b bis dritten Demodulationsvollendungspuffer 6d gespeichert sind, in den in S003 demodulierte Daten gespeichert werden, ähnlich S709.
  • Im nächsten S712 berechnet die CPU 1 die Gesamtsumme von Modulen des schwarzen Strichs (d), die in einem vom ersten Demodulationsvollendungspuffer 6b bis dritten Demodulationsvollendungspuffer 6d gespeichert sind, in den in S003 demodulierte Daten gespeichert werden, ähnlich S709.
  • Im nächsten S713 führt die CPU 1 den 1-Zeichen-Beurteilungsprozess auf der Basis der in S709 bis S712 berechneten Anzahl von Modulen aus. 21 ist ein Flussdiagramm, das die in S713 ausgeführte 1-Zeichen-Beurteilungsprozesssubroutine zeigt.
  • In dem ersten S801, nach dem Einspringen in dieses Flussdiagramm, prüft die CPU 1, ob die in S708 spezifizierte Anzahl von Modulen der δ Distanz T1 in dem Strichbreitenmuster mit der in S709 berechneten Anzahl von Modulen der δ Distanz T1 zusammenfällt (äquivalent zu einer Vergleichseinheit). Die CPU 1 führt den Prozess zu S803 weiter, wenn beide nicht zusammenfallen, und führt den Prozess zu S802 weiter, wenn beide zusammenfallen.
  • In S802 prüft die CPU 1, ob die Position der δ Distanz T1, die durch die Modulanzahlberechnung in S709 berechnet wird, vor dem Abrunden (Verhältnis zwischen δ Distanzen) in den Grauzonen liegt oder nicht (0,5 bis 0,7, 1,3 bis 1,7, 2,3 bis 2,7, 3,3 bis 3,7, 4,3 bis 4,7, 5,3 bis 5,5). Die CPU 1 führt den Prozess zu S810 weiter, wenn die Position der δ Distanz T1 (Verhältnis zwischen δ Distanzen) in der Grauzone liegt (wenn sie das erste vorherbestimmte Verhältnis überschreitet und im zweiten vorherbestimmten Verhältnis liegt), und führt den Prozess zu S809 weiter, wenn sie außerhalb der Grauzonen liegt (wenn sie im ersten vorherbestimmten Verhältnis liegt).
  • Andererseits prüft die CPU 1 in S803, ob die in S708 spezifizierte Anzahl von Modulen der δ Distanz T2 in dem Strichbreitenmuster und die in S710 berechnete Anzahl von Modulen der δ Distanz T2 zusammenfallen (äquivalent zur Vergleichseinheit). Die CPU 1 führt den Prozess zu S805 weiter, wenn beide nicht zusammenfallen, und führt den Prozess zu S804 weiter, wenn beide zusammenfallen.
  • In S804 prüft die CPU 1, ob die Position der δ Distanz T2, die durch die Modulanzahlberechnung in S710 berechnet wurde, vor dem Abrunden (Verhältnis zwischen δ Distanzen) in den Grauzonen liegt oder nicht. Die CPU 1 führt den Prozess zu S810 weiter, wenn die Position der δ Distanz T2 (Verhältnis zwischen δ Distanzen) in den Grauzonen liegt (wenn sie das erste vorherbestimmte Verhältnis überschreitet und im zweiten vorherbestimmten Verhältnis liegt), und führt den Prozess zu S809 weiter, wenn sie außerhalb der Grauzonen liegt (wenn sie im ersten vorherbestimmten Verhältnis liegt).
  • Andererseits prüft die CPU 1 in S805, ob die in S708 spezifizierte Anzahl von Modulen des schwarzen Strichs (b) mit der in S711 berechneten Anzahl von Modulen des schwarzen Strichs (b) zusammenfällt (äquivalent zur Vergleichseinheit). Die CPU 1 führt den Prozess zu S807 weiter, wenn beide nicht zusammenfallen, und führt den Prozess zu S806 weiter, wenn beide zusammenfallen.
  • In S806 prüft die CPU 1, ob die Position des schwarzen Strichs (b) vor dem Abrunden, die durch die Modulanzahlberechnung in S711 berechnete Position (Verhältnis zwischen Strichen), in den Grauzonen liegt oder nicht. Die CPU 1 führt den Prozess zu S810 weiter, wenn die Position des schwarzen Strichs (b) (Verhältnis zwischen Strichen) in den Grauzonen liegt (wenn sie das erste vorherbestimmte Verhältnis überschreitet und im zweiten vorherbestimmten Verhältnis liegt), und führt den Prozess zu S809 weiter, wenn sie außerhalb der Grauzonen liegt (wenn sie im ersten vorherbestimmten Verhältnis liegt).
  • Andererseits prüft die CPU 1 in S807, ob die in S708 spezifizierte Anzahl von Modulen des schwarzen Strichs (d) mit der in S712 berechneten Anzahl von Modulen des schwarzen Strichs (d) zusammenfällt (äquivalent zur Vergleichseinheit). Die CPU 1 führt den Prozess zu S812 weiter, wenn beide nicht zusammenfallen, und führt den Prozess zu S808 weiter, wenn die beiden zusammenfallen.
  • In S808 prüft die CPU 1, ob die Position des schwarzen Strichs (d) vor dem Abrunden, die durch die Modulanzahlberechnung in S712 berechnete Position (Verhältnis zwischen Strichen), in den Grauzonen liegt oder nicht. Die CPU 1 führt den Prozess zu S810 weiter, wenn die Position des schwarzen Strichs (d) (Verhältnis zwischen Strichen) in den Grauzonen liegt (wenn sie das erste vorherbestimmte Verhältnis überschreitet und im zweiten vorherbestimmten Verhältnis liegt), und führt den Prozess zu S812 weiter, wenn sie außerhalb der Grauzonen liegt (wenn sie im ersten vorherbestimmten Verhältnis liegt).
  • Die CPU 1 setzt in S809 eine "Grauzonenflagge", und setzt die "Grauzonenflagge" in S810 zurück. Mach S809 und S810 setzt die CPU 1 eine "Beurteilung OK"-Flagge in S811 (äquivalent zur Validiereinheit), und beendet dann den 1-Zeichen-Beurteilungsprozess und führt den Prozess zur in 20 gezeigten Routine zurück.
  • Andererseits setzt die CPU 1 in S812 eine "Beurteilung NG"-Flagge. Danach beendet die CPU 1 die 1-Zeichen-Beurteilungsprozesssubroutine und führt den Prozess zur in 20 gezeigten Routine zurück.
  • In der in 20 gezeigten Routine, zu welcher der Prozess zurückgeführt wird, prüft die CPU 1 in S714 nach S713, ob die "Beurteilung OK"-Flagge in S811 gesetzt ist, oder die "Beurteilung NG"-Flagge in S812 gesetzt ist. Wenn sie die "Beurteilung OK"-Flagge setzt, zieht die CPU 1 die in S704 gesicherte UMGERADE/GERADE-Struktur und den in S707 gesicherten Zahlenwert als demodulierte Daten heran, die dem Datenzeichen entsprechen, dessen Demodulation fehlgeschlagen ist, und schreibt diese in die entsprechende Position in einem vom ersten Demodulationsvollendungspuffer 6b bis zum dritten Demodulationsvollendungspuffer 6d, in den in S003 demodulierte Daten gespeichert wurden (äquivalent zur Validiereinheit). Alternativ dazu überspringt die CPU 1 S715, wenn die eine "Beurteilung NG"-Flagge gesetzt ist. In jedem Fall beendet die CPU 1 die 1-Zeichen-Ableitungsprozesssub routine und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • In der in 10 gezeigten Hauptroutine führt die CPU 1 den Prozess nach S007 zu S008 weiter.
  • In S008 führt die CPU 1 den zusammengesetzten Prozess aus. 22 ist ein Flussdiagramm, das die in S008 ausgeführte zusammengesetzte Prozesssubroutine zeigt. Im ersten S901, nach dem Einspringen in diese Subroutine, führt die CPU 1 eine Stellenanzahlprüfung aus. Mit anderen Worten, die CPU 1 berechnet die Summe der gesamten Stücke demodulierter Daten, die in einem vom ersten Demodulationsvollendungspuffer 6b bis zum dritten Demodulationsvollendungspuffer 6d gespeichert sind, in den in S003 demodulierte Daten gespeichert wurden, und der gesamten Stücke demodulierter Daten, die in einem anderen Demodulationsvollendungspuffer 6b, 6c oder 6d gespeichert sind, und prüft, ob die Summe 12 Stellen überschreitet oder nicht.
  • Die CPU 1 führt den Prozess von S902 zu S905 weiter, wenn das Ergebnis der Stellenanzahlprüfung fehlschlägt.
  • Andererseits führt die CPU 1 den Prozess von S902 zu S903 weiter, wenn das Ergebnis der Stellenanzahlprüfung gut ist. In S903 führt die CPU 1 eine überlappte Teilprüfung aus. Mit anderen Worten, die CPU 1 prüft, ob demodulierte Daten in den jeweiligen Demodulationsvollendungspuffern 6b bis 6d, die bei der Stellenanzahlprüfung zu verarbeiten sind, einander teilweise überlappen. Die CPU 1 führt den Prozess von S904 zu S905 weiter, wenn das Ergebnis der überlappten Teilprüfung ein Misserfolg ist.
  • In S905 prüft die CPU 1, ob die Stellenanzahlprüfung in S901 (Addition der Gesamtsumme demodulierter Daten) für alle Demodulationsvollendungspuffer 6b bis 6d ausgeführt wird. Die CPU 1 führt den Prozess zu S901 zurück, wenn die Stellenanzahlprüfung in S901 nicht für alle Demodulationsvoll endungspuffer 6b bis 6d vollendet ist. Im Gegensatz dazu führt die CPU 1 den Prozess zum in 10 gezeigten S016 weiter, wenn die Stellenanzahlprüfung in S901 für alle Demodulationsvollendungspuffer 6b bis 6d vollendet ist.
  • Wenn das Ergebnis der überlappten Teilprüfung in S903 hingegen gut ist, beendet die CPU 1 die zusammengesetzte Prozesssubroutine, und führt den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • In der in 10 gezeigten Hauptroutine führt die CPU 1 den Prozess nach S008 zu S009 weiter. In S009 führt die CPU 1 die Modulus 10-Prüfung für alle demodulierten Daten aus, die in jedem Demodulationsvollendungspuffer 6b bis 6d gespeichert sind, der das Objekt des zusammengesetzten Prozesses in S008 ist, in einem Zustand, dass die überlappten Teile überlappt verbunden sind. Die CPU 1 führt den Prozess zu S013 weiter, wenn das Ergebnis der Modulus 10-Prüfung gut ist, wenn nämlich die dem Strichcode 21 entsprechenden Demodulationsdaten reproduziert werden können. Im Gegensatz dazu führt die CPU 1 den Prozess zu S010 weiter, wenn das Ergebnis der Modulus 10-Prüfung ein Misserfolg ist, wenn nämlich die dem Strichcode 21 entsprechenden Demodulationsdaten nicht reproduziert werden können.
  • In S010 prüft die CPU 1, ob 1 Zeichen fehlt oder nicht, aufgrund der Tatsache, dass das Ergebnis der Modulus 10-Prüfung ein Misserfolg ist. Die CPU 1 führt den Prozess zu S016 weiter, wenn das Ergebnis der Modulus 10-Prüfung nicht wegen des Fehlens von 1 Zeichen ein Misserfolg ist. Wenn das Ergebnis der Modulus 10-Prüfung hingegen wegen des Fehlens von 1 Zeichen ein Misserfolg ist, führt die CPU 1 den Prozess zu S012 weiter, nachdem sie den 1-Zeichen-Ableitungsprozess in S011 ausführt (20).
  • In S012 führt die CPU 1 erneut die Modulus 10-Prüfung für die demodulierten Daten aus, bei denen 1 Zeichen abge leitet wird. Die CPU 1 führt den Prozess zu S016 weiter, wenn das Ergebnis der Modulus 10-Prüfung ein Misserfolg ist, wenn nämlich die dem Strichcode 21 entsprechenden demodulierten Daten nicht reproduziert werden können. Im Gegensatz dazu führt die CPU 1 den Prozess zu S013 weiter, wenn das Ergebnis der Modulus 10-Prüfung gut ist, wenn nämlich die dem Strichcode 21 entsprechenden demodulierten Daten reproduziert werden können.
  • In S013 führt die CPU 1 einen Koinzidenzanzahl-Prüfprozess aus. 23 ist ein Flussdiagramm, das die in S013 ausgeführte Koinzidenzanzahl-Prüfprozesssubroutine zeigt. In dem ersten S050, nach dem Einspringen in diese Subroutine, prüft die CPU 1, ob die durch den 1-Zeichen-Ableitungsprozess in S007 oder S011 abgeleiteten demodulierten Daten in den durch die Modulus 10-Prüfung zu prüfenden demodulierten Daten enthalten sind. Die CPU 1 führt den Prozess zu S055 weiter, wenn die demodulierten Daten, die abgeleitet wurden, nicht enthalten sind. Da in diesem Fall die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung hoch ist, setzt die CPU 1, um sofort einen Lesen OK-Prozess auszuführen, die "Koinzidenzanzahl NG-Flagge" in S055 zurück, und setzt die "Koinzidenzanzahl OK-Flagge" in S056, und beendet danach die Koinzidenzanzahl-Prüfprozesssubroutine.
  • Andererseits prüft die CPU 1 in S051, ob die "Grauzonenflagge" gesetzt ist oder nicht, wenn sie in S050 beurteilt, dass die demodulierten Daten, die abgeleitet wurden, enthalten sind. Die CPU 1 führt den Prozess zu S055 weiter, wenn die "Grauzonenflagge" nicht gesetzt ist. Da in diesem Fall die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung vergleichsweise hoch ist, setzt die CPU 1, um sofort den Lesen OK-Prozess auszuführen, die "Koinzidenzanzahl NG-Flagge" in S055 zurück, und setzt die "Koinzidenzanzahl OK-Flagge" in S056, und beendet danach die Koinzi denzanzahl-Prüfsubroutine (äquivalent zur Validiereinheit).
  • Wenn die "Grauzonenflagge" hingegen gesetzt ist, ist die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung vergleichsweise gering, daher führt die CPU 1 den Prozess zu S052 weiter, um das Lesen durch das Einstellen einer Bedingung zu vollenden, dass das Ergebnisses der Modulus 10-Prüfung zweimal gut wird (äquivalent zur Validiereinheit). In S052 prüft die CPU 1, ob die "einmalige Koinzidenz OK-Flagge" bereits gesetzt ist. Wenn die "einmalige Koinzidenz OK-Flagge" noch nicht gesetzt ist, ist es das erste Mal, dass das Ergebnis der Modulus 10-Prüfung gut wird, zur Ausführung des Demodulationsprozesses für die nächste Strichbreiten-Datengruppe setzt die CPU 1 die "einmalige Koinzidenz OK-Flagge" in S053, und setzt danach die "einmalige Koinzidenz NG-Flagge" in S054, und beendet danach die Koinzidenzanzahl-Prüfsubroutine. Wenn die "einmalige Koinzidenz OK-Flagge" hingegen bereits gesetzt ist, ist es das zweite Mal, dass das Ergebnis der Modulus 10-Prüfung gut ist, zur Ausführung des Lesen OK-Prozesses setzt die CPU 1 daher die "Koinzidenzanzahl NG-Flagge" in S055, und setzt die "Koinzidenzanzahl OK-Flagge" in S056, und beendet danach die Koinzidenzanzahl-Prüfprozesssubroutine.
  • Die CPU 1 führt den Prozess zur in 10 gezeigten Hauptroutine zurück, nachdem sie die Koinzidenzanzahl-Prüfprozesssubroutine beendet hat.
  • In der in 10 gezeigten Hauptroutine führt die CPU 1 den Prozess nach S013 zu S014 weiter. In S014 prüft die CPU 1, ob die "Koinzidenzanzahl OK-Flagge" gesetzt ist oder nicht. Die CPU 1 führt den Prozess zu S016 weiter, wenn die "Koinzidenzanzahl OK-Flagge" noch nicht gesetzt ist (äquivalent zur Validiereinheit).
  • In S016 entnimmt die CPU 1 eine nächste Strichbreiten-Datengruppe aus dem Strichbreiten-Datengruppen-Speicherpuf fer 2. Nach der Vollendung von S016 führt die CPU 1 den Prozess zu S001 zurück, und führt den Erkennungs/Demodulationsprozess für die Strichbreiten-Datengruppe aus.
  • Andererseits führt die CPU 1 den "Lesen OK-Prozess" in S015 aus, wenn sie in S014 beurteilt, dass die "Koinzidenzanzahl OK-Flagge" gesetzt ist (äquivalent zur Validiereinheit). Das heißt, die CPU 1 bewirkt, dass der Lautsprecher eine Sprache ausgibt, die die Vollendung des Lesens (der Demodulation) des Strichcodes anzeigt, und bewirkt, dass die lichtemittierende Diode 11 Informationen anzeigt, wie einen Preis der Ware 20, die den demodulierten Daten entsprechen. Wenn der "Lesen OK-Prozess" vollendet ist, beendet die CPU 1 das Strichcode-Erkennungs/Demodulationsprozessprogramm.
  • Als Nächstes erfolgen Erläuterungen des Betriebs des wie oben strukturierten Strichcodelesers gemäß dieser Ausführungsform mit Bezugnahme auf 25 bis 28.
  • Hier im Nachstehenden erfolgt eine Erläuterung eines Betriebsbeispiels des Strichcodelesers in einem Fall, dass die Demodulation des dritten Zeichens (C3) in dem linken Datenblock fehlschlägt, da das dritte Zeichen (C3) wie in 25 gezeigt Flecken aufweist.
  • Es wird angenommen, wie in 25 gezeigt, dass der Scanstrahl den Strichcode 21 vom Startkontrollstrich (SGB) zum Endkontrollstrich (EGB) zu einer Zeit scannt. Wenn in diesem Fall das dritte Zeichen (C3) als vier Striche erkannt wird, und erkannt wird, dass die Länge des dritten Zeichens (C3) ungefähr der festgelegte Wert ist, wird in dem ersten Abfrageprozess in S001 der mittlere Pseudo-Kontrollstrich detektiert (S106), und in dem zweiten Abfrageprozess in S002 werden 12 gültige Zeichen abgefragt (S324). In dem Strichcode-Demodulationsprozess in S003 wird der Demodulationsprozess für jedes Zeichen (S604, S618) sequentiell vom ersten Zeichen (C1) ausgeführt, und die demodulierten Daten, die durch den Demodulationsprozess für jedes Zeichen vorgesehen werden, werden in dem ersten Demodulationsvollendungspuffer 6b gespeichert.
  • Wenn jedoch wegen einer Schmutzmarkierung oder dgl. nicht erkannt wird, dass die Anzahl von Modulen jedes Strichs, um das dritte Zeichen (C3) zu sein, zu einer beliebigen in 29 gezeigten Kombination passt, ist der Demodulationsprozess (S604) für das dritte Zeichen (C3) nicht erfolgreich, sondern es werden die Strichbreitendaten von vier Strichen, die das dritte Zeichen (C3) darstellen, in dem ersten Demodulationsvollendungspuffer 6b gespeichert. Dann wird, für das vierte Zeichen (C4) und die folgenden, der Demodulationsprozess (S604, S618) fortgesetzt.
  • Wenn der Strichcode-Demodulationsprozess (S003) auf diese Weise vollendet wird, ist dies ein Fall, dass die demodulierten Daten durch das kontinuierliche Lesen erhalten werden (S004). In diesem Fall werden alle Zeichen nicht vollständig demoduliert (S005), und die Demodulation von nur einem Zeichen schlägt fehl (S006), daher wird der 1-Zeichen-Ableitungsprozess in S007 ausgeführt.
  • In dem 1-Zeichen-Ableitungsprozess ist das dritte Zeichen (C3), dessen Demodulation fehlgeschlagen ist, in dem linken Datenblock enthalten (S702), daher wird in S703 die UNGERADE/GERADE-Struktur abgeleitet. In diesem Fall ist die Kombination, die mit der UNGERADE/GERADE-Struktur der anderen 5 Zeichen, deren Demodulation erfolgreich ist, in dem linken Datenblock zusammenfällt, nur die Kombination, die dem Flaggenzeichen 1 in der Liste von 30 entspricht. Daher wird abgeleitet, dass die UNGERADE/GERADE-Struktur des ersten Zeichens (C1) "GERADE (gerade Parität)" ist.
  • Wenn in S706 die Modulus 10-Prüfung auf der Basis der Zahlenwerte der 11 Zeichen, deren Demodulation erfolgreich ist, und des Zahlenwerts des Flaggenzeichens rückgerechnet wird, wird ferner der Zahlenwert des dritten Zeichens als "0" berechnet.
  • In S708 wird ferner das Strichbreitenmuster spezifiziert (weißer Strich (a), 1 Modul; schwarzer Strich (b), 1 Modul; weißer Strich (c), 2 Module; schwarzer Strich (d), 3 Module; δ Distanz T1, 3 Module; δ Distanz T2, 5 Module), das den hinsichtlich des dritten Zeichens (C3) abgeleiteten demodulierten Daten (E-0) entspricht. Andererseits werden in S709 bis S712 die Anzahl von Modulen, welche der Strichbreite von vier Strichen entsprechen, die in dem ersten Demodulationsvollendungspuffer 6a gespeichert sind, und die Anzahl von Modulen jeder δ Distanz jeweils berechnet. Dann werden die spezifizierte Anzahl von Modulen und die berechnete Anzahl von Modulen für jeden Strich und jede δ Distanz verglichen, und, wenn ein Fehler zwischen der spezifizierten Anzahl und der berechneten Anzahl in Bezug auf einen Strich oder eine δ Distanz innerhalb von +/– 0,5 liegt, werden die abgeleitete Kombination der UNGERADE/GERADE-Struktur und der Zahlenwert als demodulierte Daten validiert, die dem dritten Zeichen entsprechen (S714, S715).
  • In diesem Fall wird das Ergebnis der Modulus 10-Prüfung (S009) natürlich gut wegen des kontinuierlichen Lesens. Wenn der Fehler jedoch innerhalb von +/– 0,3 bis 0,5 liegt, wird die "Grauzonenflagge" gesetzt (S881), daher wird es eine Bedingung, um die abgeleiteten Daten zu validieren, dass der Leseprozess erneut ausgeführt wird, und das Ergebnis der Modulus 10-Prüfung als Folge des Koinzidenzanzahl-Prüfprozesses in S013 gut wird (S014, S016). Wenn der Fehler hingegen innerhalb von +/– 0,3 liegt, wird die "Grauzonenflagge" zurückgesetzt (S810), und daher werden die abgeleiteten Daten sofort validiert (S014, S015).
  • Hier im Nachstehenden erfolgt eine Erläuterung eines Betriebsbeispiels des Strichcodelesers in einem Fall, dass die Demodulation des neunten Zeichens (C9) in dem rechten Datenblock fehlschlägt, da das neunte Zeichen (C9) Flecken aufweist, wie in 27 gezeigt.
  • Es wird angenommen, wie in 27 gezeigt, dass der Scanstrahl zu einer Zeit den Strichcode 21 vom Startkontrollstrich (SGB) zum Endkontrollstrich (EGB) scannt. Wenn in diesem Fall das neunte Zeichen (C9) als vier Striche erkannt wird, und erkannt wird, dass die Länge des neunten Zeichens (C9) ungefähr der festgelegte Wert ist, wird in dem ersten Abfrageprozess in S001 der mittlere Pseudo-Kontrollstrich detektiert (S106), und in dem zweiten Abfrageprozess in S002 werden 12 gültige Zeichen abgefragt (S324). In dem Strichcode-Demodulationsprozess in S003 wird der Demodulationsprozess für jedes Zeichen (S604, S618) sequentiell vom ersten Zeichen (C1) ausgeführt, und die demodulierten Daten, die durch den Demodulationsprozess für jedes Zeichen vorgesehen werden, werden in dem ersten Demodulationsvollendungspuffer 6b gespeichert.
  • Obwohl der Demodulationsprozess (S618) für das neunte Zeichen (C9) nicht erfolgreich ist, werden jedoch die Strichbreitendaten von vier Strichen, um das neunte Zeichen (C9) zu sein, in dem ersten Demodulationsvollendungspuffer 6b gespeichert. Dann wird, für das neunte Zeichen (C9) und die folgenden, der Demodulationsprozess (S618) fortgesetzt.
  • Wenn der Strichcode-Demodulationsprozess (S003) auf diese Weise vollendet wird, ist dies ein Fall, dass die demodulierten Daten durch das kontinuierliche Lesen erhalten werden (S004). In diesem Fall werden alle Zeichen nicht vollständig demoduliert (S005), und die Demodulation von nur einem Zeichen schlägt fehl (S006), daher wird der 1-Zeichen-Ableitungsprozess in S007 ausgeführt.
  • In dem 1-Zeichen-Ableitungsprozess ist das neunte Zeichen (C9), dessen Demodulation fehlgeschlagen ist, in dem rechten Datenblock enthalten (S702), daher wird in S703 die UNGERADE/GERADE-Struktur nicht abgeleitet, sondern wird natürlich als GERADE (gerade Parität) abgeleitet. Zusätzlich wird in S705 der Zahlenwert des Flaggenzeichens auf der Basis der UNGERADE/GERADE-Struktur von 6 Zeichen, deren Demodulation erfolgreich ist, in dem linken Datenblock als "1" berechnet.
  • Wenn in S706 die Modulus 10-Prüfung auf der Basis der Zahlenwerte der 11 Zeichen, deren Demodulation erfolgreich ist, und des Zahlenwerts des Flaggenzeichens rückgerechnet wird, wird ferner der Zahlenwert des neunten Zeichens als "2" berechnet.
  • In S708 wird ferner das Strichbreitenmuster spezifiziert (weißer Strich (a), 2 Module; schwarzer Strich (b), 2 Module; weißer Strich (c), 1 Modul; schwarzer Strich (d), 2 Module; δ Distanz T1, 3 Module; δ Distanz T2, 3 Module), das den hinsichtlich des neunten Zeichens (C9) abgeleiteten demodulierten Daten (E-2) entspricht. Andererseits werden in S709 bis S712 die Anzahl von Modulen, welche der Strichbreite von vier Strichen entsprechen, die in dem ersten Demodulationsvollendungspuffer 6a gespeichert sind, und die Anzahl von Modulen jeder δ Distanz jeweils berechnet. Dann werden die spezifizierte Anzahl von Modulen und die berechnete Anzahl von Modulen für jeden Strich und jede δ Distanz verglichen, und, wenn ein Fehler zwischen der spezifizierten Anzahl und der berechneten Anzahl in Bezug auf einen Strich oder eine δ Distanz innerhalb von +/– 0,5 liegt, wird die abgeleitete Kombination der UNGERADE/GERADE-Struktur und des Zahlenwerts als demodulierte Daten effektiv gemacht, die dem neunten Zeichen entsprechen (S714, S715).
  • In diesem Fall wird das Ergebnis der Modulus 10-Prüfung (S009) natürlich gut wegen des kontinuierlichen Lesens. Wenn der Fehler jedoch innerhalb von +/– 0,3 bis 0,5 liegt, wird die "Grauzonenflagge" gesetzt (S881), daher wird es eine Bedingung, um die abgeleiteten Daten zu validieren, dass der Leseprozess erneut ausgeführt wird, und das Ergebnis der Modulus 10-Prüfung als Folge des Koinzidenzanzahl-Prüfprozesses in S013 gut wird (S014, S016). Wenn der Fehler hingegen innerhalb von +/– 0,3 liegt, wird die "Grauzonenflagge" zurückgesetzt (S810), daher werden die abgeleiteten Daten sofort validiert.
  • Obwohl gemäß der Ausführungsform 1, wie oben beschrieben, die Demodulation von nur 1 Zeichen fehlschlägt, was durch eine Schmutzmarkierung oder dgl. auf dem Strichcode 21 verursacht wird, ist es möglich, die demodulierten Daten, die dem Zeichen entsprechen, dessen Demodulation fehlgeschlagen ist, auf der Basis der demodulierten Daten anderer Zeichen abzuleiten, deren Demodulation erfolgreich ist. Dabei ist es möglich zu verifizieren, ob diese Ableitung gut ist oder nicht, indem das Strichbreiten-Datenmuster, das den abgeleiteten demodulierten Daten entspricht, und die tatsächlich erhaltenen Strichbreitendaten verglichen werden. Demgemäß ist es möglich, die Ableitung mit hoher Zuverlässigkeit auszuführen.
  • Gemäß der oben beschriebenen Ausführungsform ist es auch möglich, 1 Zeichen, dessen Demodulation fehlschlägt, in einem Fall des "geteilten Lesens" abzuleiten, bei dem ein Strichcode 21 geteilt wird und durch eine Vielzahl von Scans gelesen wird, wobei jede durch jedes Scannen erhaltene Strichbreiten-Datengruppe demoduliert wird, und eine Vielzahl demodulierter Daten, die durch jede Demodulation vorgesehen werden, kombiniert wird. Wenn jedoch das kontinuierliche Lesen und das geteilte Lesen verglichen werden, werden durch das kontinuierliche Lesen vorgesehene demodulierte Daten mit höherer Zuverlässigkeit vorgesehen. So ändert sich in der Ausführungsform 2 die Anzahl von Malen einer Koinzi denz, die für ein Lesen OK notwendig ist (die Anzahl von Malen, wenn das Ergebnis der Modulus 10-Prüfung gut wird), auf der Basis davon, ob demodulierte Daten durch das kontinuierliche Lesen oder durch das geteilte Lesen erhalten werden.
  • Zusätzlich enthält das "geteilte Lesen" ein "3-1 Lesen", bei dem ein Strichcode 21 durch dreimaliges Scannen geteilt gelesen wird, und ein Scannen ein anderes Scannen in dem linken Datenblock und dem rechten Datenblock überlappt. In diesem Fall gibt es jedoch zwei überlappte Teile, daher besteht eine Möglichkeit, dass ein Zeichen in jedem dieser überlappten Teile abgeleitet wird. Wenn ein Zeichen in diesem Fall in zwei Teilen abgeleitet wird, sinkt die Zuverlässigkeit für das Ableitungsergebnis deutlich ab. So wird in der Ausführungsform 2 ein Zeichen nicht im "3-1 geteilten Lesen" demoduliert.
  • 24 ist ein Flussdiagramm, das eine Koinzidenzanzahl-Prüfprozesssubroutine, die in dem in 10 gezeigten S013 ausgeführt wird, gemäß der Ausführungsform 2 der vorliegenden Erfindung zeigt. In dem ersten S100, nach dem Einspringen in diese Subroutine, prüft die CPU 1, ob durch den 1-Zeichen-Ableitungsprozess in S007 oder S011 abgeleitete demodulierte Daten in den demodulierten Daten enthalten sind, die Objekte der Modulus 10-Prüfung sein werden, oder nicht. Die CPU 1 führt den Prozess zu S1007 weiter, wenn keine abgeleiteten demodulierten Daten enthalten sind. Da in diesem Fall die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung hoch ist, setzt die CPU 1, um den Lesen OK-Prozess sofort auszuführen, die "Male der Koinzidenz NG-Flagge" in S1007 zurück, und setzt die "Male der Koinzidenz OK-Flagge" in S1008, und beendet danach die Koinzidenzanzahl-Prüfprozesssubroutine.
  • Wenn die CPU 1 in S1001 hingegen beurteilt, dass die abgeleiteten demodulierten Daten enthalten sind, prüft sie in S1002, ob die demodulierten Daten, die Objekte der Modulus 10-Prüfung sein werden, durch das kontinuierliche Lesen erhalten werden oder nicht. Die CPU 1 führt den Prozess zu S1007 weiter, wenn die demodulierten Daten durch das kontinuierliche Lesen erhalten werden. Da in diesem Fall die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung hoch ist, setzt die CPU 1, um den Lesen OK-Prozess sofort auszuführen, die "Male der Koinzidenz NG-Flagge" in S1007 zurück, und setzt die "Male der Koinzidenz OK-Flagge" in S1008, und beendet danach die Koinzidenzanzahl-Prüfprozesssubroutine (äquivalent zur Validiereinheit). Wenn die CPU 1 hingegen in S1002 beurteilt, dass die demodulierten Daten nicht durch das kontinuierliche Lesen erhalten werden, ist die Zuverlässigkeit des Ergebnisses der Modulus 10-Prüfung relativ gering, daher führt die CPU 1 den Prozess zu S1003 unter der Bedingung weiter, die ein Vollenden des Lesen anzeigt, dahingehend dass das Ergebnis der Modulus 10-Prüfung zweimal gut wird (äquivalent zur Validiereinheit). In S1003 prüft die CPU 1, ob die demodulierten Daten, die das Objekt der Modulus 10-Prüfung sind, durch das "3-1 geteilte Lesen" erhalten werden oder nicht. Die CPU 1 führt den Prozess zu S1006 weiter, wenn die demodulierten Daten durch das "3-1 geteilte Lesen" erhalten werden. Da in diesem Fall die Zuverlässigkeit der demodulierten Daten gering ist, setzt die CPU 1 die "Koinzidenzanzahl NG-Flagge" zurück, und beendet diese Koinzidenzanzahl-Prüfprozesssubroutine.
  • Wenn die CPU 1 in S1003 hingegen beurteilt, dass die demodulierten Daten nicht durch das "3-1 geteilte Lesen" erhalten werden, prüft sie in S1004, ob die "einmalige Koinzidenz OK-Flagge" bereits gesetzt ist oder nicht. Wenn die "einmalige Koinzidenz OK-Flagge" noch nicht gesetzt ist, wird das Ergebnis der Modulus 10-Prüfung nur einmal, die CPU 1 setzt, um den Demodulationsprozess für die nächste Strichdatengruppe auszuführen, die "einmalige Koinzidenz OK-Flagge" in S1005, und setzt die "einmalige Koinzidenz NG-Flagge", und beendet danach die einmalige Koinzidenz-Prüfprozessubroutine. Wenn die "einmalige Koinzidenz OK-Flagge" hingegen bereits gesetzt ist, wird das Ergebnis der Modulus 10-Prüfung zweimal, die CPU 1 setzt, um den Lesen OK-Prozess auszuführen, die "einmalige Koinzidenz NG-Flagge" in S1007 zurück, und setzt die "einmalige Koinzidenz OK-Flagge" in S1008, und beendet danach die einmalige Koinzidenz-Prüfprozesssubroutine.
  • Nach der Beendigung dieser Koinzidenzanzahl-Prüfprozesssubroutine führt die CPU 1 den Prozess zur in 10 gezeigten Hauptroutine zurück.
  • Die anderen Konfigurationen und die anderen Operationen in der Ausführungsform 2 sind genau gleich wie die Ausführungsform 1, daher werden Erklärungen davon weggelassen.

Claims (12)

  1. Strichcodeleser, mit: einer Strichbreiten-Detektionseinrichtung (100) zum Lesen eines Strichcodes mit einer Vielzahl von Datenzeichen (C1 ... C12), wobei jedes Datenzeichen ein Strichbreitenmuster umfasst, das einen Zahlenwert repräsentiert, bei welchem die Zeichen des Strichcodes in eine Sequenz ungerader und gerader Positionen klassifiziert werden können, wobei das Zeichen ganz rechts (C12) in eine ungerade Position klassifiziert wird, und bei welchem die durch die Datenzeichen repräsentierten Zahlenwerte einen vorherbestimmten bedingten Ausdruck erfüllen, in Übereinstimmung mit welchem die Summe der Zahlenwerte, die durch die Datenzeichen in den ungeraden Positionen repräsentiert werden, plus dreimal die Summe der Zahlenwerte, die durch die Datenzeichen in den geraden Positionen repräsentiert werden, ein ganzzahliges Vielfaches von Zehn ist; einer Demodulationseinrichtung (101) zum Demodulieren des von der Strichbreiten-Detektionseinrichtung (100) detektierten Strichbreitenmusters, um einen Zahlenwert für jedes der Datenzeichen zu erhalten, und zum Ausgeben der demodulierten Daten; und gekennzeichnet durch das Vorsehen einer Datenableitungseinrichtung (102) zum Ableiten eines Zahlenwerts eines Datenzeichens in dem Strichcode, dessen Demodulation fehlgeschlagen ist, wobei die Datenableitungseinrichtung eine inverse Operation des vorherbestimmten bedingten Ausdrucks unter Verwendung der Zahlenwerte ausführt, die von der Demodulationseinrichtung (101) für die anderen Datenzeichen erhalten werden.
  2. Strichcodeleser nach Anspruch 1, bei welchem das Datenzeichen durch das Codieren einer Gerade-Ungerade-Paritätsunterscheidung und des Zahlenwerts erhalten wird, und der Strichcode mit einer Vielzahl der Datenzeichen in Übereinstimmung mit einer Kombination unter vorherbestimmten Kombinationen der geraden Parität und der ungeraden Parität gespeichert wird.
  3. Strichcodeleser nach Anspruch 2, bei welchem die Demodulationseinrichtung (101) das von der Strichbreiten-Detektionseinrichtung (100) detektierte Streichbreitenmuster für jedes der Datenzeichen demoduliert und den Zahlenwert und die Gerade-Ungerade-Paritätsunterscheidung ausgibt, und ferner mit einer Paritätsableitungseinrichtung, wenn die Demodulationseinrichtung bei der Demodulation für ein Datenzeichen in dem Strichcode fehlschlägt, zum Spezifizieren einer der vorherbestimmten Kombinationen, welche einer Kombination von Gerade-Ungerade-Paritätsunterscheidungen entspricht, die durch das Demodulieren der anderen Datenzeichen in dem Strichcode mit der Demodulationseinrichtung erhalten werden, und zum Lesen der Gerade-Ungerade-Paritätsunterscheidung, die dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinrichtung fehlgeschlagen ist, unter den spezifizierten Kombinationen.
  4. Strichcodeleser nach Anspruch 1, ferner mit: einer Vergleichseinrichtung zum Vergleichen eines ersten Strichbreitenmusters, das dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinrichtung fehlgeschlagen ist, und eines zweiten Strichbreitenmusters, das Daten entspricht, die von der Datenableitungseinrichtung abgeleitet werden; und einer Validiereinrichtung zum Validieren der von der Datenableitungseinrichtung abgeleiteten Daten nur dann, wenn das erste Strichbreitenmuster mit dem zweiten Strichbreitenmuster zumindest teilweise als Ergebnis des Vergleichs durch die Vergleichseinrichtung zusammenfällt.
  5. Strichcodeleser nach Anspruch 4, bei welchem die Vergleichseinrichtung Strichbreiten jedes Paars von Strichen in dem ersten Strichbreitenmuster und in dem zweiten Strichbreitenmuster vergleicht, wobei jedes Paar von Strichen einander entspricht, und bei welchem die Validiereinrichtung die von der Datenableitungseinrichtung abgeleiteten Daten nur validiert, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines vorherbestimmten Verhältnisses liegt.
  6. Strichcodeleser nach Anspruch 5, bei welchem die Validiereinrichtung, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines ersten vorherbestimmten Verhältnisses liegt, die Daten sofort validiert, und, wenn das Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines zweiten vorherbestimmten Verhältnisses liegt, das das erste vorherbestimmte Verhältnis überschreitet, die Strichbreitenmuster-Detektionseinrichtung, die Demodulationseinrichtung und die Datenableitungseinrichtung neustartet, und die Daten nur validiert, wenn das Verhältnis von Strichbreiten des Paars von Strichen nach dem Neustart innerhalb des zweiten vorherbestimmten Verhältnisses liegt.
  7. Strichcodeleser nach Anspruch 3, ferner mit: einer Vergleichseinrichtung zum Vergleichen eines ersten Strichbreitenmusters, das dem Datenzeichen entspricht, dessen Demodulation mit der Demodulationseinrichtung fehlgeschlagen ist, und eines zweiten Strichbreitenmusters, das Daten entspricht, die von der Datenableitungseinrichtung abgeleitet werden, und der Gerade-Ungerade-Paritätsunterscheidung entspricht, die von der Paritätsableitungseinrichtung abgeleitet wird; und einer Validiereinrichtung zum Validieren der von der Datenableitungseinrichtung abgeleiteten Daten und der von der Paritätsableitungseinrichtung abgeleiteten Gerade-Ungerade-Paritätsunterscheidung nur dann, wenn das erste Strichbreitenmuster mit dem zweiten Strichbreitenmuster zumindest teilweise als Ergebnis des Vergleichs durch die Vergleichseinrichtung zusammenfällt.
  8. Strichcodeleser nach Anspruch 7, bei welchem die Vergleichseinrichtung Strichbreiten jedes Paars von Strichen in dem ersten Strichbreitenmuster und in dem zweiten Strichbreitenmuster vergleicht, wobei jedes Paar von Strichen einander entspricht, und bei welchem die Validiereinrichtung die von der Datenableitungseinrichtung abgeleiteten Daten und die von der Paritätsableitungseinrichtung abgeleitete Gerade-Ungerade-Paritätsunterscheidung validiert, wenn ein Verhältnis von Strichbreiten eines Paars von Strichen innerhalb eines vorherbestimmten Verhältnisses liegt.
  9. Strichcodeleser nach Anspruch 8, bei welchem die Validiereinrichtung, wenn ein Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines ersten vorherbestimmten Verhältnisses liegt, die Daten sofort validiert, und, nur wenn das Verhältnis von Strichbreiten eines beliebigen Paars von Strichen innerhalb eines zweiten vorherbestimmten Verhältnisses liegt, das das erste vorherbestimmte Verhältnis überschreitet, die Strichbreitenmuster-Detektionseinrichtung, die Demodulationseinrichtung, die Datenableitungseinrichtung und die Paritätsableitungseinrichtung neustartet, und die Daten und die Unterscheidung einer geraden Parität oder einer ungeraden Parität nur validiert, wenn das Verhältnis von Strichbreiten des Paars von Strichen nach dem Neustart innerhalb des zweiten vorherbestimmten Verhältnisses liegt.
  10. Strichcodeleser nach Anspruch 1, ferner mit: einer Validiereinrichtung zum sofortigen Validieren der von der Datenableitungseinrichtung abgeleiteten Daten, wenn die Demodulationseinrichtung Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch einmaliges Scannen mit der Strichbreitenmuster-Detektionseinrichtung erhalten wird, und zum Neustarten der Strichbreitenmuster-Detektionseinrichtung, der Demodulationseinrichtung und der Datenableitungseinrichtung, und zum Validieren der durch die Datenableitung nach dem Neustart abgeleiteten Daten, wenn die Demodulationseinrichtung Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch mehrmaliges Scannen mit der Strichbreitenmuster-Detektionseinrichtung erhalten wird.
  11. Strichcodeleser nach Anspruch 3, ferner mit: einer Validiereinrichtung zum sofortigen Validieren der von der Datenableitungseinrichtung abgeleiteten Daten und der von der Paritätsableitungseinrichtung abgeleiteten Gerade-Ungerade-Paritätsunterscheidung, wenn die Demodulationseinrichtung Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch einmaliges Scannen mit der Strichbreitenmuster-Detektionseinrichtung erhalten wird, und zum Neustarten der Strichbreitenmuster-Detektionseinrichtung, der Demodulationseinrichtung und der Datenableitungseinrichtung, und zum Validieren der von der Datenableitungseinrichtung abgeleiteten Daten und der von der Paritätsableitungseinrichtung abgeleiteten Gerade-Ungerade-Paritätsunterscheidung nach dem Neustart, wenn die Demodulationseinrichtung Datenzeichen außer einem Datenzeichen in dem Strichcode auf der Basis eines Strichbreitenmusters demoduliert, das durch mehrmaliges Scannen mit der Strichbreitenmuster-Detektionseinrichtung erhalten wird.
  12. Verfahren zum Lesen eines Strichcodes, mit: einem Schritt des Lesens eines Strichcodes mit einer Vielzahl von Datenzeichen (C1 ... C12), wobei jedes Datenzeichen ein Strichbreitenmuster umfasst, das einen Zahlenwert repräsentiert, bei welchem die Zeichen des Strichcodes in eine Sequenz ungerader und gerader Positionen klassifiziert werden können, wobei das Zeichen ganz rechts (C12) in eine ungerade Position klassifiziert wird, und bei welchem die durch die Datenzeichen repräsentierten Zahlenwerte einen vorherbestimmten bedingten Ausdruck erfüllen, in Übereinstimmung mit welchem die Summe der Zahlenwerte, die durch die Datenzeichen in den ungeraden Positionen repräsentiert werden, plus dreimal die Summe der Zahlenwerte, die durch die Datenzeichen in den geraden Positionen repräsentiert werden, ein ganzzahliges Vielfaches von Zehn ist; einem Demodulationsschritt des Demodulierens des Strichbreitenmusters, das für jedes der Datenzeichen detektiert wird, um einen Zahlenwert zu erhalten, und des Ausgebens demodulierter Daten; und gekennzeichnet durch das Vor sehen eines Ableitungsschritts des Ableitens eines Zahlenwerts eines Datenzeichens, dessen Demodulation fehlgeschlagen ist, welcher die Ausführung einer inversen Operation des vorherbestimmten bedingten Ausdrucks unter Verwendung der Zahlenwerte umfasst, die durch den Demodulationsschritt für die anderen Datenzeichen erhalten werden.
DE69835492T 1997-11-26 1998-06-04 Verfahren und Gerät zum Lesen von Strichkoden Expired - Lifetime DE69835492T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP32468197 1997-11-26
JP32468197A JP3472691B2 (ja) 1997-11-26 1997-11-26 バーコード読取装置及びバーコード読取方法

Publications (2)

Publication Number Publication Date
DE69835492D1 DE69835492D1 (de) 2006-09-21
DE69835492T2 true DE69835492T2 (de) 2006-11-30

Family

ID=18168548

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69835492T Expired - Lifetime DE69835492T2 (de) 1997-11-26 1998-06-04 Verfahren und Gerät zum Lesen von Strichkoden

Country Status (4)

Country Link
US (1) US6032862A (de)
EP (1) EP0919946B1 (de)
JP (1) JP3472691B2 (de)
DE (1) DE69835492T2 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3510496B2 (ja) * 1998-09-28 2004-03-29 富士通株式会社 バー幅補正装置,バー幅補正方法,バーコード読取装置及びそのバーコード復調方法
JP3548025B2 (ja) * 1998-12-17 2004-07-28 富士通株式会社 バーコード読取装置および方法
US20060082557A1 (en) * 2000-04-05 2006-04-20 Anoto Ip Lic Hb Combined detection of position-coding pattern and bar codes
JP3554703B2 (ja) * 2000-10-12 2004-08-18 リバーベル株式会社 情報端末装置
JP4170111B2 (ja) * 2003-02-21 2008-10-22 富士通株式会社 バーコード読取装置およびバーコード読取方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4414468A (en) * 1981-05-18 1983-11-08 International Business Machines Corporation Systematic error correction in bar code scanner
GB8815490D0 (en) * 1988-06-29 1988-08-03 Key Strip Ltd Swipe reader
DE69031869D1 (de) * 1989-10-11 1998-02-05 Cias Inc Kode und vorrichtung für optimale fehlerdetektion und -verbesserung
US5488418A (en) * 1991-04-10 1996-01-30 Mitsubishi Denki Kabushiki Kaisha Encoder and decoder

Also Published As

Publication number Publication date
US6032862A (en) 2000-03-07
JP3472691B2 (ja) 2003-12-02
EP0919946B1 (de) 2006-08-09
EP0919946A2 (de) 1999-06-02
EP0919946A3 (de) 2000-08-30
JPH11161734A (ja) 1999-06-18
DE69835492D1 (de) 2006-09-21

Similar Documents

Publication Publication Date Title
US5387787A (en) Scanning device for reconstructing a complete code from scanned segments
US4963719A (en) Bar code scanner and method of scanning
JP2951965B2 (ja) 機械が光学的に読取り可能なバイナリコードの測定方法
US6386454B2 (en) Detecting bar code candidates
US6902114B2 (en) Setting bar code of optical information reader, method for generating the same, method for changing setting of optical information reader and computer-readable medium
US5729001A (en) Method for evaluating a succession of bar code symbols
US6095419A (en) Bar code reading apparatus for reading plural code systems
US5777310A (en) Problem reduction with low level information integration in bar code decoding
DE19736202A1 (de) Strichcode-Symbolisierung mit der Fähigkeit, 16-Bit-Zeichen zu codieren, und Verfahren und Apparat zum Drucken und zum Lesen derselben
CA2267892C (en) Method and apparatus for decoding bar code symbols using ratio analysis of module size
US4962432A (en) Selective retrieval of data from microfilm images of different forms by reading a memory index form cord (bar code) recorded on each image frame
US5198649A (en) Bar code scanner and method of scanning bar codes labels with or without an Add-On code
DE69835492T2 (de) Verfahren und Gerät zum Lesen von Strichkoden
US5311000A (en) Bar code scanner and method of scanning
DE69233268T2 (de) Gerät und Verfahren zur Streifenkodelesung
US6102295A (en) Method and apparatus for decoding symbols by declaring erasures of element characteristics
DE69831453T2 (de) Strichkodeleser
JPH06274674A (ja) バーコード読取方法およびバーコード読取装置
US3924105A (en) Device for optically reading coded identity cards and the like
CA2364661A1 (en) Bar code scanning system and method
EP0762309A2 (de) Verfahren und Gerät zur Markenermittlung
DE69925925T2 (de) Barcodeleser und barleseverfahren
DE60028116T2 (de) Verfahren zum Dekodieren von Strichcodes
JPH08263585A (ja) コード読取装置
JPH0421915B2 (de)

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8328 Change in the person/name/address of the agent

Representative=s name: SEEGER SEEGER LINDNER PARTNERSCHAFT PATENTANWAELTE