Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

Thema: DB bearbeiten?

  1. #1
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich lese über einen Handscanner einen 15stelligen Barcode ein und schreibe diesen in einen DB. Der DB ist als Array [1..15] of CHAR deklariert. Später sollen die Daten dann über ein CP340 (oje ) an einen Drucker gesendet werden.

    Nun werden aber tatsächlich nur 6 der 15 Zeichen benötigt und sollen auf der Visu zur Anzeige gebracht werden. Habe etwas geforscht und die FC26 "MID" gefunden, mit der man den DB entsprechend "beschneiden" könnte; leider geht das aber nur bei String.


    Frage:

    Wie könnte ich das nun für CHAR lösen?


    Lieben Dank!
    LG
    spirit
    Zitieren Zitieren DB bearbeiten?  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Am besten schiebst du deine Struktur in einen String (blkmov).

    Mit dem String arbeitest du dann weiter.

    mfG René

  3. #3
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Danke René,

    du meinst also die gescannten Daten in einen String verschieben und dann die FC26 anwenden?


    Wie sieht es dann aber aus, wenn die Daten an einen Scanner geschickt werden sollen - das müsste ja auch als CHAR passieren, oder?
    LG
    spirit

  4. #4
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Ich lese Ascii auch immer als Array of Char. Dann schiebe ich das in einen String.

    Mit Strings lässt es sich leichter arbeiten und anzeigen da es dafür n haufen IEC Funktionen gibt.

    zum versenden der so erhaltenen daten kopiere ich den String wieder in eine Struktur bestehend aus zwei Bytes und einem Array of Byte (um aktuallänge und maximallänge des Strings abzuschneiden)
    Code:
          Snd : STRUCT         
             MaxLengt : Byte;
             ActLengt : Byte;
             Sendebereich : ARRAY[0..256] OF BYTE; // String
          END_STRUCT;
    Also blockmove vom string nach "Snd"

    am Sendebaustein hänge ich dann aber nur "Sendebereich" an. Der braucht üblicherweise keine informationen wie lange der String ursprünglich war (Ich hatte aber mal einen Empfänger der einen String im S7 format wollte. Da mussten also die Infobytes mitgeschickt werden).

    PS: Bytearray kann natürlich auch ein Chararray senden. Ist egal für mich ist das einfach ein Buffer bestimmter Grösse.

    mfG René

  5. #5
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Hm, irgendwie ist es mir noch nicht ganz klar ...

    Also,

    1) Ich scanne den Barcode in ein Array of Char. So wie ich es jetzt schon habe!
    2) Ich kopiere das Ganze in einen String
    3) Jetzt bearbeite ich den String mittels der FC26 und zeige es auf der Visu an
    4) Jetzt käme ja das Senden über CP340 an den Drucker an die Reihe - aber wie gehe ich da jetzt vor?

    Es gibt hier ja den Sende-Baustein P_SEND; der Barcode muss aber als Ascii an den Drucker gesendet werden! Da kann ich ja dann nicht, wie von dir vorgeschlagen, ein Array of Byte senden oder ...


    Müsste da dann erst wieder von String nach CHAR geschoben werden - ist aber sehr aufwändig?


    Und was ist das bei dir für ein Sendebaustein - wo kommt der her?
    Geändert von spirit (02.07.2014 um 16:19 Uhr)
    LG
    spirit

  6. #6
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    Ich nehme den Sende oder Empfangsbaustein der halt angesagt ist. Wenn ich Openuser fahre TSEND und TRCV. Ueber einen CP nehme ich halt AG_Send AG_RCV (dann muss aber eine Stehende Verbindung projektiert sein.)

    Der Drucker erwartet Ascii. Er kann aber nicht erkennen wie das Paket bei dir deklariert ist. Die Deklaration ist für dich rein zur Anzeige und dass dein Kompiler weiss was damit zu tun ist.
    Ob du nun ein Array of Byte, Char, DWORD etc sendest ist egal, Hauptsache die absolute Länge des Paket ist die welche erwartet wird. Der inhalt der Speicherplätze ist identisch ob du die nun als Byte oder Char deklarierst.

    Ein String beansprucht immer mehr speicherplätze als ein CHAR du kannst also einen String nicht nach CHAR schieben sondern immer nur in eine struktur bestehend aus Länge und Maximallänge in byte gefolgt von einem array of CHAR/Byte/word whatever.

    mfG René

  7. #7
    Registriert seit
    19.07.2010
    Beiträge
    1.288
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Ich nehme den Sende oder Empfangsbaustein der halt angesagt ist. Wenn ich Openuser fahre TSEND und TRCV. Ueber einen CP nehme ich halt AG_Send AG_RCV (dann muss aber eine Stehende Verbindung projektiert sein.)
    Beim CP340 projektiert man imho keine Verbindung und die genannten Bausteine glaub ich waren für Ethernet, oder?
    mfG Aventinus

  8. #8
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.618
    Danke
    775
    Erhielt 646 Danke für 492 Beiträge

    Standard

    korrekt. Quintessenz daraus. Man nimmt den Baustein der angesagt ist für Aufgabe, CP und Protokoll.
    Trotzdem ist üblicherweise die Anbindung der Schnittstelle ziemlich dieselbe.

    mfg René

  9. #9
    Avatar von spirit
    spirit ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.09.2012
    Beiträge
    961
    Danke
    183
    Erhielt 23 Danke für 22 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen

    Der Drucker erwartet Ascii. Er kann aber nicht erkennen wie das Paket bei dir deklariert ist. Die Deklaration ist für dich rein zur Anzeige und dass dein Kompiler weiss was damit zu tun ist.
    Ob du nun ein Array of Byte, Char, DWORD etc sendest ist egal, Hauptsache die absolute Länge des Paket ist die welche erwartet wird. Der inhalt der Speicherplätze ist identisch ob du die nun als Byte oder Char deklarierst.

    mfG René
    1)
    Eben das verstehe ich nicht so ganz! Der Drucker benötigt Ascii - aber hinter Ascii steht doch der Datentyp CHAR und nicht Byte oder DWORD.

    2)
    Ich nehme an, dass ich zum Schieben meiner Struktur in einen String (mittels Blockmove) immer zwei DB`s brauche und das nicht in einem einzigen händeln kann, richtig?

    3)
    Warum kann ich den DB, in den ich die Daten mittels Blockmove verschoben habe, nicht online beobachten?

    DB.jpg
    LG
    spirit

  10. #10
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    1)
    Eben das verstehe ich nicht so ganz! Der Drucker benötigt Ascii - aber hinter Ascii steht doch der Datentyp CHAR und nicht Byte oder DWORD.
    Wie groß ist ein CHAR? Geht doch von 0- 255 also ein Byte.

    Zitat Zitat von spirit Beitrag anzeigen
    2)
    Ich nehme an, dass ich zum Schieben meiner Struktur in einen String (mittels Blockmove) immer zwei DB`s brauche und das nicht in einem einzigen händeln kann, richtig?
    Oder du macht die Aktion in einem FB und STAT Variablen.



    Warum willst du deine CHAR in einen String umbauen?
    Du bekommst Char geliefert, brauchst für den Drucker Char?
    Du kannst aus deinem Array mit indirekter Adressierung dir die Buchstaben die für dich wichtig sind in einen anderen DB schreiben.

    Du kannst dir auch selbst aus den Char einen String bauen.
    Im Kopf ist Byte 0 die Anzahl der Zeichen und das zweite ist die maximale Anzahl der Zeichen. Ab dem dritten stehen deine Char drin.
    Also geht auch ohne SFC.

    Dein Drucker hängt an einem CP340. Für diese Baugruppe gibt es Bausteine, die mitgeliefert werden, damit du alles einstellen und übertragen kannst.



    bike
    Geändert von bike (02.07.2014 um 20:53 Uhr)
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

Ähnliche Themen

  1. PDF bearbeiten
    Von waldy im Forum Stammtisch
    Antworten: 12
    Letzter Beitrag: 20.11.2012, 19:54
  2. String bearbeiten
    Von egor im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 28.07.2010, 11:19
  3. Symboltabelle bearbeiten
    Von thony77 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 18.09.2009, 08:08
  4. Symboltabelle bearbeiten
    Von rene im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 06.08.2007, 09:28
  5. Moglichkeiten um DB´s (S7) zu bearbeiten
    Von Loipe im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.01.2007, 16:45

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •