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

Ergebnis 1 bis 5 von 5

Thema: String aus Strings und Bytes

  1. #1
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,

    ich habe es mit der Suchfunktion und Google versucht zu lösen, aber ich komme nicht auf einen grünen Zweig...

    Ich möchte einen String zusammenbasteln, welche ich über RS422 verschicke.

    Das Ganze ergibt eine Anweisung an ein Gerät und soll so aussehen:

    '#1y3$R'

    # ist Startzeichen, 1 ist die ID des Motors, y der Befehl, 3 ist ein Verfahrsatz der geladen wird und $R ist Endzeichen.

    Ich möchte nun die ID und den Verfahrsatz übergeben.

    Dazu habe ich eine Variable ID und eine Variable Satz jeweils vom Typen Byte, weil beides nicht größer als 32 wird...

    Ich habe versucht den String mit CONCAT zusammen zu bauen, aber BYTE_TO_CHAR(ID) gibt mir immer eine führende 0 mit so dass heraus kommt:
    '#01y03$R'

    Wie kriege ich das zusammengebastelt ohne die führenden 0 en?

    Danke!
    Zitieren Zitieren String aus Strings und Bytes  

  2. #2
    Registriert seit
    26.04.2010
    Beiträge
    292
    Danke
    31
    Erhielt 51 Danke für 50 Beiträge

    Standard

    Hi!

    Das wollte ich dich im anderen Thread schon fragen.
    Warum nimmst du eigentlich als Datentyp "Char". Kannst du nicht ein Array of BYTE verwenden?

    Die Zeichen stehen da dann zwar als Hex angezeigt, aber damit tust du dich doch mit Zusammensetzen von Nachrichten leichter.
    Zudem sind die Operationen bestimmt performanter wenn du als Datentyp "Byte" verwendest.


    Gruß,

    Ottmar

  3. #3
    Registriert seit
    12.03.2011
    Ort
    Erzgebirge
    Beiträge
    247
    Danke
    77
    Erhielt 29 Danke für 27 Beiträge

    Standard

    Hi,
    ich hab mal etwas ausprobiert. Ist etwas umständlich, funktioniert aber.


    Code:
    FUNCTION_BLOCK FB 1
    TITLE =
    VERSION : 0.1
    
    VAR
      VerfahrString : STRING  [7 ];    
      MotorID : INT ;    
      Verfahrsatz : INT ;    
      WertAlsString : STRING  [254 ];    
      StartCode : STRING  [1 ] := '#';    
      BefehlsCode : STRING  [1 ] := 'y';    
      EndCode : STRING  [1 ] := '$R';    
    END_VAR
    
    BEGIN
    
    NETWORK
    TITLE =
    
          L     7; 
          T     DB1.DBB    0; 
    
          L     0; 
          T     DB1.DBB    1; 
    
          CALL "CONCAT" (
               IN1                      := #VerfahrString,
               IN2                      := #StartCode,
               RET_VAL                  := #VerfahrString);
    
          CALL "I_STRNG" (
               I                        := #MotorID,
               RET_VAL                  := #WertAlsString);
    
          CALL "DELETE" (
               IN                       := #WertAlsString,
               L                        := 1,
               P                        := 1,
               RET_VAL                  := #WertAlsString);
    
          CALL "CONCAT" (
               IN1                      := #VerfahrString,
               IN2                      := #WertAlsString,
               RET_VAL                  := #VerfahrString);
    
          CALL "CONCAT" (
               IN1                      := #VerfahrString,
               IN2                      := #BefehlsCode,
               RET_VAL                  := #VerfahrString);
    
          CALL "I_STRNG" (
               I                        := #Verfahrsatz,
               RET_VAL                  := #WertAlsString);
    
          CALL "DELETE" (
               IN                       := #WertAlsString,
               L                        := 1,
               P                        := 1,
               RET_VAL                  := #WertAlsString);
    
          CALL "CONCAT" (
               IN1                      := #VerfahrString,
               IN2                      := #WertAlsString,
               RET_VAL                  := #VerfahrString);
    
          CALL "CONCAT" (
               IN1                      := #VerfahrString,
               IN2                      := #EndCode,
               RET_VAL                  := #VerfahrString);
    
    
    END_FUNCTION_BLOCK
    Mit Delete wird das führende Vorzeichen gelöscht.
    CONCAT setzt die Strings zusammen.

    Ein paar Bytes hin und her kopieren geht natürlich auch anders mit viel weniger Rechenaufwand.

    Gruß
    Holger

  4. #4
    HarryHirn ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    09.11.2012
    Ort
    Hamburg
    Beiträge
    15
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    hmm, ich werde das morgen auf der arbeit mal ausprobieren, aber wechseln auf ein Byte Array zum Senden und Empfangen ist sicher die klügere wahl.

    Das mit dem Char Array ist ein Relikt aus den ersten Gehversuchen, als ich noch mit den Zeichen hantiert habe, da die Nanotec Steuerung ja Zeichenketten sendet.
    Aber im Prinzip ist es ja egal, ob ich auf Chars oder auf Hexwerte prüfe

    Aber irgendwie stellt mich diese Automatisierungssache immer wieder vor neuen Problemen.
    Dachte nicht das wird so schwierig... in C fällt mir da immer sofort was ein

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn du auf ein Char-Array wechselst, kannst du auch die Wandlung von Int zu String sparen. Du hast ja nur eine Stelle, also Ziffern von 0-9. Dann nimmst du einfach die Int, addierst 48 dazu und hast den Char-Wert dieser Int. Diesen Char-Wert trägst du dann in die entsprechende Zelle ein.

    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 24.07.2013, 12:12
  2. Aus globale DB's Strings auslesen und darstellen
    Von S-Victor im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 09.03.2013, 10:30
  3. Antworten: 10
    Letzter Beitrag: 11.06.2011, 23:19
  4. Libnodave C# - WORD und STRING aus S7 lesen/schreiben
    Von dolo280 im Forum Hochsprachen - OPC
    Antworten: 10
    Letzter Beitrag: 13.01.2011, 12:04
  5. Bytes aus DB Laden und vergleichen
    Von bluebird277 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.09.2010, 15:10

Lesezeichen

Berechtigungen

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