Laden...

GruppenSeparatoren werden im DMC nicht erkannt

Erstellt von moser69 vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.255 Views
M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren
GruppenSeparatoren werden im DMC nicht erkannt

Hallo Zusammen
ich eine GUI geschrieben wo als Eingangsdaten der Inhalt eine DMC übernommen werden soll. Leider werden die GS nicht erkannt … oder vom Scanner nicht übertragen (Cognex DM8050). Die Cognex Leute finden keine Lösung … 😦
Vielleicht liegt das aber auch an meiner Applikation …
!!! Und jetzt kommts: wenn ich den DMC in Notepad++ einscanne - sehe ich alles, inkl. GS, RS und EOT. Wenn ich jetzt diesen "Text" vom Notepad++ in meine GUI kopiere - funktioniert alles.
Als Eingangsfeld für die Scanner Daten nutze ich eine einfache TextBox … hier habe ich auch schon versucht einige Eigenschaften zu verändern - muss aber zugeben dass ich nicht alle kenne …
Programmiert habe ich in VS 2017 / C# / .NET FW 4.00

Ich würde mich über jeden Tipp / Lösung seeeehr freuen ! 😃

Gruß,
moser

4.931 Beiträge seit 2008
vor 4 Jahren

In welchem Format scannst du denn die Daten? Könntest du mal einen Beispieltext zeigen?

M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren

Hallo
so sieht der code aus - allerdings die GruppenSepparatoren (die Kästchen hier) sind erst in Notepad++ sichtbar.

[)>0613V6439559581P285164571630000P1009170332320P0021P1006273801122P0031P1006262629132P00S96189060002B10ZREFLASH11Z31627909012Z10521825605137

Gruß,
moser

4.931 Beiträge seit 2008
vor 4 Jahren

Da es sich bei GS, RS und EOT um nicht druckbare Steuerzeichen (s. z.B. How do I put GS / RS / EOT into a PDF417 barcode?) handelt, können diese in einer Standard-TextBox nicht angezeigt werden.
Notepad++ benutzt anscheinend intern eine andere TextBox-Implementierung, welche eben auch Steuerzeichen sichtbar darstellt (ähnlich wie auch z.B. "MS Word" Tabs und Spaces optional anzeigen kann).

Scannst du den Code direkt in die TextBox oder benutzt du eine spezielle API dafür?
Wenn du den Text dann z.B. in eine Datei speicherst, siehst du dann mit einem Hexcode-Editor (oder z.B. Notepad++) dann die Steuerzeichen?

PS: Nur durch "Zitieren" deines Beitrags habe ich die Steuerzeichen gesehen, denn auch hier in der normalen Forenansicht werden diese nicht dargestellt. Selbst im Standard-Editor Notepad kann ich das herauskopierte Steuerzeichen zwar einfügen, aber es wird nicht dargestellt (aber beim Speichern ist das Steuerzeichen dann vorhanden)!

Edit: schau auch mal in Free Barcode Scanner ASCII String Decoder 😉

1.029 Beiträge seit 2010
vor 4 Jahren

Hi,

mal vom Grundsatz - ich persönlich als Nutzer erwarte eigentlich von einer Textbox nicht, dass diese irgendwelche Steuerzeichen darstellt - die sind ja für was anderes als zum Anzeigen gut.

Mit einem der vielen Key/Input-Ereignisse sollte man diese doch problemlos abfangen und verarbeiten können. Oder verstehe ich das Grundproblem nicht?

LG

M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren

Ich scanne den DMC direkt in die TextBox - erwarte aber nicht, dass die Separattoren angezeigt werden. Ich habe eine Methode, die mir den DMC zerlegen soll und die einzelnenn Datensegmente anhand der GS ausliest. Diese Methode funktioniert mit einem anderen Scanner, den ich aber aus unterschiedlichen Gründen für meine Applikation nicht verwenden kann.
Ich habe einen Cognex DM8050, und mit dem habe ich das beschriebene Problem.
Leider konnten mir bis jetzt die Cognex Experten auch nicht weiter helfen.

Hier die Methode die ich nutze:

public static class DmcIdentifires
    {

        /// <summary>Extracts the element identified by the given identifier from the complete label String. The sections
        /// need to be divided by group separators</summary>
        /// <param name="identifier">The identifier of the section.</param>
        /// <param name="completeLabel">The complete label</param>
        /// <param name="index">The start index in the label of this identifier</param>
        /// <returns></returns>
        public static string GetContentForIdentifier(string completeLabel, string identifier)
        {
            // match [GS]1P (as look-around), then any code but GS or RS and then GS or RS, again as look-around
            // \p{P} contains punctuation 
            // [\w-[\x1d\x1e]] any word element but the GS or RS separators
            string regExPatternString = "(?<=\\x1d" + identifier + ")[\\u0020\\p{P}\\w-[\\x1d\\x1e]]{2,}((?=\\x1e)|(?=\\x1d))";
            var regex = new Regex(regExPatternString,
                RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);
            var match = regex.Match(completeLabel);

            if (match == null || match.Length == 0)
            {
                return null;
            }
            else
            {
                return match.ToString();
            }
        }

    }
1.029 Beiträge seit 2010
vor 4 Jahren
M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren

Wenn du den Text dann z.B. in eine Datei speicherst, siehst du dann mit einem Hexcode-Editor (oder z.B. Notepad++) dann die Steuerzeichen?

Wenn ich den Text von der TextBox (das was direkt vom Scanner kommt) in eine txt Datei speichere und die dann im Notepad++ öffne - sehe ich auch keine GS.

Vielleicht muss "nur" eine Eigenschaft der TextBox richtig gesetzt werden … ? 😦

4.931 Beiträge seit 2008
vor 4 Jahren

So eine Eigenschaft gibt es nicht.
Aber hänge dich mal an das KeyPress-Ereignis der TextBox (oder der Form, wie im Link von Taipi88 beschrieben).
Dort kannst du sie ja ebenfalls in eine Datei (oder z.B. als Hexwerte in die Debug-Ausgabe) schreiben lassen. Kommen die Steuerzeichen überhaupt an (werden also vom Scanner gesendet)?

M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren

Hi,

was ich meinte ist in folgendem Artikel beschrieben:

>

LG

Wenn ich versuche die Scanner Daten mit dem Ereignis PreviewKeyDown abzufangen - erkenne ich auch keine GS, … als ob sie vom Scanner gar nicht kommen.
Dann frage ich mich: was macht den Notepad++ dass ich sie sehen kann ?
Er musst sie irgendwie erkennen oder zumindest die Sacannerdaten mit den GS ergänzen … aber auch hier muss Notepad++ wissen wo sie hingehören …
Zu viele Sachen die ich nicht verstehe 😦

M
moser69 Themenstarter:in
6 Beiträge seit 2019
vor 4 Jahren

Als Eingangsdaten für meine Methode zum Extrahieren des DMC nehme ich momentan den Text von meiner TextBox.
Wenn ich jetzt die Ereignisse Ereignis PreviewKeyDown oder KeyPress verwende, dann ist der Text noch null - so habe ich keine Eingangsdaten für meine Methode.

Wie kann ich dann anders die Daten vom Scanner anfangen ?

185 Beiträge seit 2005
vor 4 Jahren

Was sagt denn der debugger?
Welche Daten empfänst du denn?
Hast du dir die Rohdaten mal angeschaut (Empfangene Bytes)?

4.931 Beiträge seit 2008
vor 4 Jahren

Bei den KeyPress oder KeyDown-Ereignissen stehen die Daten in den übergebenen KeyPressEventArgs bzw. KeyEventArgs (bevor also das Zeichen dem TextBox-Text hinzugefügt wird) - dies sind aber Grundlagen.

Oder die Methode Form.WndProc überschreiben und nach passenden WM_CHAR oder WM_KEYDOWN-Nachrichten schauen (dafür sollte aber KeyPreview = true bei der Form gesetzt sein).
Alternativ gibt es auch noch die virtuelle Methode Control.ProcessKeyMessage dafür.