Matrixcode berechnen als String Array

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Dolzman.

    Matrixcode berechnen als String Array

    Hallo zusammen,

    im Forum und Internet gibt es eine Vielzahl an Bibliotheken zum erstellen von Barcodes und Matrixcodes, Kostenlos und Kostenpflichtig. Allerdings wird hier immer nur ein Bild oder PDF mit dem entsprechenden Code generiert. Ich suche eine Möglichkeit mir den Aufbau einer Datamatrix als String Array zu generieren welches dann eine Dimension von 20x20 hat und mit 0 und 1 belegt ist je nachdem wo ein Punkt gesetzt werden muss.

    Hintergrund:

    In unserem Fertigungssystem werden Bauteile erfasst welche später auf einer Fräsmaschine bearbeitet werden, die Rohlinge werden mit Datamatrix Aufklebern versehen welche vor der Bearbeitung gescannt werden, damit der Fertigungsstand im System entsprechend bekannt ist. Nach der Fräsbearbeitung soll nun der Matrixcode auf der Fräsmaschine mit einem Fräser in das Bauteil gestochen werden.

    Die Seriennummern liegen in einer Excel Tabelle, ich möchte diese nun auslesen, daraus eine Datamatrix generieren so dass ich am Ende ein NC-Programm auswerfen kann welches mir den Code auf das Bauteil sticht. Das String Array für einen 10x10 Code sollte dann so aussehen:

    1011011010
    1001011011
    1000010100
    1010100101
    1000010110
    1001110101
    1011010100
    1001011011
    1000010100
    1111111111

    Hat jemand eine Idee wo wich sowas bekommen könnte ? Es darf auch gerne eine Kostenpflichtige Lösung sein, müsste dann mein Chef ein paar Euros investieren !


    Gruß
    Dolzman
    Ich habe keine Ahnung von der Praxis, aber ich glaub ich versteh das Problem nicht. Ne DataMatrix hat doch nen bestimmten Aufbau. Du hast obén ein 10x10-Zeichen-Array gezeigt, gehend von (0, 0)-(9, 9). Der Binärcodierungsbereich für Deine Daten geht von (1, 1)-(8, 8), also 64 Zeichen = 64 Bits = 2 hoch 64 Kombinationen. Die Seriennummer muss also nur noch in Binärformat umgewandelt werden und rein in die DataMatrix damit. Nun die Frage: Welchen Aufbau hat die Seriennummer? Und: Mit welchen Daten kommt der Maschinenscanner klar? Weißt Du bereits, wo für den Scanner die Daten anfangen? Will heißen: Hast Du Referenz-DataMatrix-Codes, bei denen Du weißt, wie sie aussehen und was der Scanner darin erkennt? Wenn ja, sollte der weitere Weg m.E. nicht sonderlich schwierig sein. Oder wo siehst Du die Probleme in der Umsetzung?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @Dolzman Ein Matrix-Code ist ein Koordinatensystem (an drei der vier Exken) mit den entsprechenden Informationen drin.
    Kauft Euch eine Bibliothek, die Matrix-Codes generiert und feddich.
    Ggf. gibt es sogar kostenlose Varianten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()

    Hallo und danke erstmal für die Antworten,

    Wie im Eingangspost erwähnt habe ich im Netz schon einige Bibliotheken zur Matrixcode Generierung gefunden, diese geben dann aber nur eine Grafik (jpg/gif/png) aus. Ich suche jetzt etwas um die Koordinaten als String zu generieren, dabei wäre es egal ob dieser aus 0/1 +/- oder sonst wie besteht, ich benötige nur ein Zeichen damit ich weis an welcher Stelle mein Fräser einen Punkt machen muss. Der Code kann beliebig groß sein, meine Nummer benötigt hier 14x14 Pixel, es können aber auch 20x20 werden. Versteht ihr was ich meine ?

    Beispiel:

    Seriennummer des Bauteils
    17120410-1/1

    Generierter Matrixcode als Bild
    dolzman.de/files/VB-Forum/mc.JPG



    Benötigtes String Array
    10101010101010
    11011000111101
    10010010011100
    11101011111011
    10001100001100
    11110111010101
    10010000010010
    11010101100101
    10000001001010
    10101000000011
    10101111010100
    10101111011111
    10010100001000
    11111111111111

    Gefräster Matrixcode auf Maschine
    dolzman.de/files/VB-Forum/cnc.JPG

    Bilder leider nur als Link da das einbetten aus externer URL nicht funktioniert !

    Gurß
    Dolzman

    Dolzman schrieb:

    Versteht ihr was ich meine ?
    OK.
    Da musst Du Dir was eigenes für machen.
    Voraussetzungen:
    Der Code ist immer gleich groß bzw. die Größe ist bekannt.
    Die Anzahl der Dots sind immer gleich bzw. bekannt.
    Wenn Du die Anzahl der Zeilen und die Randbreite kennst, kannst Du mit .GetPixel(x, y) das Bild im entsprechenden Raster abtasten.
    Weiß wird zur 1, schwarz zur 0.
    Der Rest ist nun nur noch eine Fleißaufgabe.
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Danke für deine Antwort,

    sowas ähnliches hatte ich mir schon gedacht, dass ich das Bild abtasten muss um die Codierung als String zu bekommen !
    Ich denke da muss ich mal was basteln ! Falls jemand noch eine andere Idee hat, immer her damit !

    Gruß
    Dolzman

    Dolzman schrieb:

    Versteht ihr was ich meine ?
    Inzwischen nicht mehr.
    @RodFromGermany: Ich dächt, dass es um den umgekehrten Weg geht:

    Dolzman schrieb:

    Die Seriennummern liegen in einer Excel Tabelle, ich möchte diese nun auslesen, daraus eine Datamatrix generieren so dass ich am Ende ein NC-Programm auswerfen kann welches mir den Code auf das Bauteil sticht.

    @Dolzman: Ich verstehe Dein Problem so, korrigiere mich, wenn ich falsch liege:
    Du hast ne Seriennummer: 17120410-1/1
    Daraus willst Du ein String-Array machen. Dieses String-Array übergibst Du dem Fräser, damit er auf's Bauteil ne DataMatrix zaubert.

    Die Frage ist m.E. nun: wie wird aus der S/N die DataMatrix. Und zwar nicht codetechnisch. Das ist m.E. einfach. Die Frage ist, wie die Seriennummer eincodiert wird. Also wo an welcher Stelle der DataMatrix welche S/N-Ziffer steht. Man könnte sagen, dass es um die Dechiffrierung der DataMatrix geht, um zu erkennen, an welcher Position welche Ziffer steht. Und der Bindestrich und das Slash.

    btw: Du kannst über [Erweiterte Antwort] -> |Dateianhänge| Bilder hochladen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    Dolzman schrieb:

    Ich denke da muss ich mal was basteln !
    Nimm mal dies als Anhaltspunkt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Dim sb = New StringBuilder()
    5. Dim randOben = 9 ' Rand
    6. Dim randLinks = 7 ' Rand
    7. Dim width = 13 ' Dot-Breite
    8. Dim height = 13 ' Dot-Höhe
    9. Dim startX = randLinks + width \ 2 ' mitten im Dot
    10. Dim startY = randOben + height \ 2
    11. Using bmp = New Bitmap("C:\Temp\MatrixCode.jpg")
    12. For y = startY To bmp.Height - 1 Step height
    13. For x = startX To bmp.Width - 1 Step width
    14. Dim col = bmp.GetPixel(x, y)
    15. If col.R < 128 Then
    16. sb.Append(0)
    17. Else
    18. sb.Append(1)
    19. End If
    20. Next
    21. sb.AppendLine()
    22. Next
    23. End Using
    24. Me.RichTextBox1.Text = sb.ToString()
    25. End Sub
    26. End Class
    Musst Du noch ausrichten und justieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    @Fakiz
    @RodFromGermany

    Danke für eure Tipps, damit konnte ich meine Anforderung lösen !
    Ich habe die Bibliothek von DataMatrix.Net eingebunden, kann hiermit die Matrix generieren und direkt
    über die GetPixel Schleife die Punkte ermitteln !

    Das ganze schaut wie folgt aus:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Public Class Form1
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. ' Grafik der Datamatrix erstellen
    5. Dim DME As New DataMatrix.net.DmtxImageEncoder
    6. Dim DMO As New DataMatrix.net.DmtxImageEncoderOptions
    7. DMO.ModuleSize = 10
    8. DMO.MarginSize = 0
    9. DMO.BackColor = Color.White
    10. DMO.ForeColor = Color.Black
    11. DMO.Scheme = DataMatrix.net.DmtxScheme.DmtxSchemeAsciiGS1
    12. Dim bmp As Bitmap = DME.EncodeImage(TB_Eingabe.Text, DMO)
    13. PictureBox1.Image = bmp
    14. ' ++++++++++++++++++++++++++++++++++++++++++++++++
    15. ' Pixel aus Grafik ermitteln
    16. Dim sb = New StringBuilder()
    17. Dim randOben = 0 ' Rand
    18. Dim randLinks = 0 ' Rand
    19. Dim width = 10 ' Dot-Breite
    20. Dim height = 10 ' Dot-Höhe
    21. Dim startX = randLinks + width \ 2 ' mitten im Dot
    22. Dim startY = randOben + height \ 2
    23. For y = startY To bmp.Height - 1 Step height
    24. For x = startX To bmp.Width - 1 Step width
    25. Dim col = bmp.GetPixel(x, y)
    26. If col.R < 128 Then
    27. sb.Append(1)
    28. Else
    29. sb.Append(0)
    30. End If
    31. Next
    32. sb.AppendLine()
    33. Next
    34. TB_Ausgabe.Text = sb.ToString()
    35. End Sub
    36. End Class

    Bilder
    • MatrixGenerator.JPG

      106,11 kB, 817×753, 36 mal angesehen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dolzman“ ()

    Hi,
    also nachdem ich heute nochmal alles durchgetstet habe läuft´s eigentlich ganz gut,
    jetzt bin ich gerade dran die Anwendung als WPF Projekt aufzubauen, bekomme aber die Grafik im Image Steuerelement nicht angezeigt.

    Die Grafik wird als System.Drawing.Bitmap generiert, welche sich aber nicht als Image.Source zuweisen lässt.
    Ich bin leider nicht der WPF Profi, wie stelle ich das am besten an das Bild darzustellen ?

    Das umwandeln als String funktioniert soweit gut !

    Gruß
    Dolzman
    Bin jetzt den Umweg gegangen das Bild ins Temp zu schreiben und dann als URL zu laden,
    funktioniert auch :saint:

    VB.NET-Quellcode

    1. DM_Picture.Save(TempDir + "\dm.png")
    2. DM_IMAGE.Source = New BitmapImage(New Uri(TempDir + "\dm.png"))

    Dolzman schrieb:

    jetzt bin ich gerade dran die Anwendung als WPF Projekt aufzubauen
    Hat das einen bestimmten Zweck?
    Lässt sich damit die Maschine besser steuern?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    VB-Fragen über PN / Konversation werden ignoriert!
    Nein, das hat keinen bestimmten Zweck,
    ich wollte es nur etwas hübscher machen, und da habe ich mir im WPF ein paar schöne Styles gebaut !
    Ich hab´s jetzt auch hinbekommen das die Grafik direkt zuzuweisen, ich habe das Bitmap in ein BitmapImage umgewandelt.