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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 32

Thema: DB bearbeiten?

  1. #11
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bike Beitrag anzeigen

    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.

    bike

    Danke bike,

    nun das war ja ursprünglich der Vorschlag von vollmi, dass ich CHAR in STRING wandle mittels Blockmove!

    Bin da jetzt mal wieder etwas überfordert - wie müsste ich das denn machen, wenn ich z.B. nur die Zeichen von Adresse 4 bis 9 benötige?

    char.jpg

    Könntest du mir da vielleicht mit einem Bsp. etwas weiterhelfen?
    LG
    spirit

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

    Standard

    Wenn ich morgen ein Step 7 habe, schreib ich dir die Schleife als Beispiel.
    Willst du AWL oder SCL?

    Schönen Abend noch.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  3. #13
    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 bike Beitrag anzeigen
    Wenn ich morgen ein Step 7 habe, schreib ich dir die Schleife als Beispiel.
    Willst du AWL oder SCL?

    Schönen Abend noch.


    bike
    Dank`dir bike - ähm, also ich würde sagen AWL, wenn ich mir schon mal was wünschen darf ...

    Ebenfalls schönen Abend!
    LG
    spirit

  4. #14
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    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.
    Ueber die Datenleitung werden aber nur Bits geschoben. Da gehen keinerlei Informationen welchen Datentyp die darstellen mitgegeben.
    Ein Char besteht aus 8 Bit, also einem Byte. 1 Byte is 1 Byte und gibt keinerlei Auskunft ob das nun ein CHAR, INT, UINT etc sein könnte. Es wird daraus was der Empfänger erwartet.

    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?
    Du brauchst nicht mal einen. Eigentlich kannst du das auch in eine Temp Struktur laden. Und dann in einen Temporären String kopieren.

    3)
    Warum kann ich den DB, in den ich die Daten mittels Blockmove verschoben habe, nicht online beobachten?
    Das geht so halt nicht. Da würde ich dann wieder die Stelle im VAT anschauen und zwar zeichen für zeichen.

    Bin da jetzt mal wieder etwas überfordert - wie müsste ich das denn machen, wenn ich z.B. nur die Zeichen von Adresse 4 bis 9 benötige?
    Kommt drauf an. In SCL wärs eine codezeile.

    Code:
    #zwischenstring  := MID(IN:=#Empfangsstring, L:=5, P:=4);
    Wobei Zwischenstring ein String ist und Empfangsstring ebenfalls.

    in AWL wärs nicht grossartig schwerer;
    Code:
          CALL  "MID"
           IN     :=#Empfangsstring
           L      :=5
           P      :=4
           RET_VAL:=#zwischenstring
    Aber natürlich kannst du dir da auch Pointer basteln. mit den einzelnen Chars rumwursteln und das irgendwie im Panel zusammensetzen.
    Und an den Drucker ausgeben. Hat den Vorteil dass man das dann so programmieren kann das auch bestimmt keine aussagekräftige Referenzliste mehr erstellt werden kann und kein Mensch mehr sieht was da gemacht wird.

    mfG René

  5. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Das ist IMHO eine typische Aufgabe, die man zuerst mit Stift und Papier löst, bevor man irgendwas programmiert.
    Und wie vollmi schon schrieb: ein BYTE ist eine Speicherzelle der Größe 8 Bit, egal ob man das als BYTE, CHAR, ASCII-Zeichen oder sonstwelchen Datentyp deklariert. Was die Bits in der Bytefolge bedeuten interpretiert der Empfänger.

    Code:
    Barcode_CHAR CHAR-Array[1..15] (ab DB1.DBB0)
    DB1.DBB0   1   2   3   4   5   6   7   8   9   10  11  12  13  14
          +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
          | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15|
          +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
    
    
    Teilstring STRING[6] (ab DB2.DBB0)
        DB2.DBB0   1   2   3   4   5   6   7
              +---+---+---+---+---+---+---+---+
              | ML| AL| 1 | 2 | 3 | 4 | 5 | 6 |
              +---+---+---+---+---+---+---+---+
    
    
    Snd : STRUCT  //(ab DB3.DBB0)
      MaxLengt : BYTE;
      ActLengt : BYTE;
      Sendedaten : ARRAY[0..9] OF BYTE;
    END_STRUCT;
    
        DB3.DBB0   1   2   3   4   5   6   7   8
              +---+---+---+---+---+---+---+---+---
              | ML| AL| 0 | 1 | 2 | 3 | 4 | 5 |...
              +---+---+---+---+---+---+---+---+---
    Bei nur 6 Zeichen würde ich direkt die 6 BYTE/CHAR/Zeichen einzeln kopieren (statt großartiger Schleifen mit indirekter Adressierung oder SFC20 BLKMOV. Stringfunktionen funktionieren außerdem nur mit korrekt initialisierten Strings als Eingang und Ausgang).

    4. bis 9. Zeichen kopieren in den String "Teilstring":
    Code:
    L 6
    T DB2.DBB0                 //MaxLengt eintragen
    T DB2.DBB1                 //ActLengt eintragen
    
    L "DB1".Barcode_CHAR[4]    //DB1.DBB3
    T "DB2".Teilstring[1]      //DB2.DBB2
    L "DB1".Barcode_CHAR[5]
    T "DB2".Teilstring[2]
    L "DB1".Barcode_CHAR[6]
    T "DB2".Teilstring[3]
    L "DB1".Barcode_CHAR[7]
    T "DB2".Teilstring[4]
    L "DB1".Barcode_CHAR[8]
    T "DB2".Teilstring[5]
    L "DB1".Barcode_CHAR[9]
    T "DB2".Teilstring[6]
    4. bis 9. Zeichen kopieren in die Struktur "Snd":
    Code:
    L 9
    T "DB3".Snd.MaxLengt       //DB3.DBB0
    L 6
    T "DB3".Snd.ActLengt       //DB3.DBB1
    
    L "DB1".Barcode_CHAR[4]    //DB1.DBB3
    T "DB3".Snd.Sendedaten[0]  //DB3.DBB2
    L "DB1".Barcode_CHAR[5]
    T "DB3".Snd.Sendedaten[1]
    L "DB1".Barcode_CHAR[6]
    T "DB3".Snd.Sendedaten[2]
    L "DB1".Barcode_CHAR[7]
    T "DB3".Snd.Sendedaten[3]
    L "DB1".Barcode_CHAR[8]
    T "DB3".Snd.Sendedaten[4]
    L "DB1".Barcode_CHAR[9]
    T "DB3".Snd.Sendedaten[5]
    Da Du aber mit dem Baustein P_SEND über den CP340 senden mußt, brauchst Du eigentlich gar nichts kopieren sondern könntest dem P_SEND direkt die Adresse des 4. Barcodezeichens angeben, z.B. 6 Zeichen ab DB1.DBB3:
    Code:
       +----------+
       |  P_SEND  |
       |...       |
     1-|DB_NO     |
     3-|DBB_NO    |
     6-|LEN       |
       |...       |
    Oder die Sendedaten aus der Struktur Snd ab DB3.DBB2:
    Code:
       +----------+
       |  P_SEND  |
       |...       |
     3-|DB_NO     |
     2-|DBB_NO    |
     6-|LEN       |
       |...       |
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    rostiger Nagel (03.07.2014)

  7. #16
    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 PN/DP Beitrag anzeigen

    Bei nur 6 Zeichen würde ich direkt die 6 BYTE/CHAR/Zeichen einzeln kopieren (statt großartiger Schleifen mit indirekter Adressierung oder SFC20 BLKMOV. Stringfunktionen funktionieren außerdem nur mit korrekt initialisierten Strings als Eingang und Ausgang).

    4. bis 9. Zeichen kopieren in den String "Teilstring":
    Code:
    L 6
    T DB2.DBB0                      //MaxLengt eintragen
    T DB2.DBB1                      //ActLengt eintragen
    
    L "DB1".Barcode_CHAR[4]    //DB1.DBB3
    T "DB2".Teilstring[1]           //DB2.DBB2
    L "DB1".Barcode_CHAR[5]
    T "DB2".Teilstring[2]
    L "DB1".Barcode_CHAR[6]
    T "DB2".Teilstring[3]
    L "DB1".Barcode_CHAR[7]
    T "DB2".Teilstring[4]
    L "DB1".Barcode_CHAR[8]
    T "DB2".Teilstring[5]
    L "DB1".Barcode_CHAR[9]
    T "DB2".Teilstring[6]
    Harald
    Ich danke euch für die Erklärungen ... bin ein Stückchen weiter; habe mir nun mal folgenden DB zusammengebastelt:

    DB.jpg


    Hierzu nun zwei Fragen:


    1)
    Warum muss bei Teilstring[n] als Datentyp eigentlich auch CHAR stehen; ist doch eigentlich ein STRING, oder nicht?

    2)
    In der Visu habe ich im Scanner-Feld eine Zeichenkette mit 13 Zeichen angelegt. Bekomme aber nur 10 angezeigt. Woran könnte das jetzt wieder liegen?
    LG
    spirit

  8. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    habe mir nun mal folgenden DB zusammengebastelt:

    DB.jpg


    Hierzu nun zwei Fragen:


    1)
    Warum muss bei Teilstring[n] als Datentyp eigentlich auch CHAR stehen; ist doch eigentlich ein STRING, oder nicht?
    Anscheinend hast Du Teilstring als ARRAY[1..9] OF CHAR angelegt. Ich habe in meinem Beispiel Teilstring als STRING[6] angelegt.

    Dem AWL-Code ist es aber sowieso egal, ob ein BYTE oder CHAR oder 1 Zeichen eines STRING gelesen oder transferiert wird, weil er nicht den Datentyp prüft sondern eine 8-Bit große Speicherstelle liest/transferiert. L und T werten nur die Größenangabe des Operanden aus, nicht dessen Typ.

    Zitat Zitat von spirit Beitrag anzeigen
    In der Visu habe ich im Scanner-Feld eine Zeichenkette mit 13 Zeichen angelegt. Bekomme aber nur 10 angezeigt. Woran könnte das jetzt wieder liegen?
    In welcher Visu hast Du wie eine Zeichenketten-Variable angelegt?
    Ich vermute jetzt einfach mal, Du hast eine Variable als STRING angelegt und die Visu wertet deshalb das 2. Kopfbyte (aktuelle Stringlänge) aus und da steht womöglich eine 10 drin --> schreibe da doch mal eine 13 rein.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #18
    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 PN/DP Beitrag anzeigen
    Anscheinend hast Du Teilstring als ARRAY[1..9] OF CHAR angelegt. Ich habe in meinem Beispiel Teilstring als STRING[6] angelegt.

    Harald
    Ja stimmt; das habe ich als Array angelegt!

    ABER: Wenn ich es als STRING[9] anlege, dann erhalte ich ja nicht die Klammern hinter Teilstring[1], usw. Wie hast du das nur wieder gemacht?


    Zitat Zitat von PN/DP Beitrag anzeigen
    In welcher Visu hast Du wie eine Zeichenketten-Variable angelegt?
    Ich vermute jetzt einfach mal, Du hast eine Variable als STRING angelegt und die Visu wertet deshalb das 2. Kopfbyte (aktuelle Stringlänge) aus und da steht womöglich eine 10 drin --> schreibe da doch mal eine 13 rein.

    Harald
    Also es gibt in der Visu ein Eingabefeld, in das der Scanner den Barcode scannt. Dieses habe ich wie folgt definiert:

    Darstellung = Zeichenkette

    Feldlänge Zeichenkette = 13

    Prozessvariable = Scanner


    Unter Variablen habe ich dann bestimmt:

    Visu.jpg


    Jetzt bekomme ich aber nach dem Scannen eine seltsame Darstellung in dem Eingabefeld:

    Anzeige.jpg

    Irgendwie zum verrückt werden ...

    LG
    spirit

  10. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von spirit Beitrag anzeigen
    ABER: Wenn ich es als STRING[9] anlege, dann erhalte ich ja nicht die Klammern hinter Teilstring[1], usw. Wie hast du das nur wieder gemacht?
    - erstelle in einem DB (z.B. DB2) an Adresse 0.0 die Variable "Teilstring" als STRING[10] (die geht dann bis 11.0)
    - gib dem DB einen symbolischen Name, z.B. "DB2"
    - schreibe im AWL-Editor:
    Code:
    L DB2.DBB0   //hierdrin muß die Maximallänge des Strings stehen: 10
    L DB2.DBB1   //hierdrin steht die aktuelle Länge des Strings: am besten auch 10
    L DB2.DBB2   //wird automatisch umgewandelt zu "DB2".Teilstring[1]
    L DB2.DBB3   //wird automatisch umgewandelt zu "DB2".Teilstring[2]
    ...
    L DB2.DBB11  //wird automatisch umgewandelt zu "DB2".Teilstring[10]
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. #20
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von spirit Beitrag anzeigen
    Unter Variablen habe ich dann bestimmt:

    Visu.jpg


    Jetzt bekomme ich aber nach dem Scannen eine seltsame Darstellung in dem Eingabefeld:

    Anzeige.jpg
    Der Datentyp ist falsch gewählt. StringChar entspricht einem ARRAY OF CHAR (ohne die String-Kopfinformationen).
    Entweder Du wählst String ab DB90.DBB0 oder StringChar ab DB90.DBB2

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ä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
  •