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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 23

Thema: Probleme mit DBs in SCL

  1. #11
    chrissi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2007
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier erstmal mein Code (ich weiß es geht einfacher mit DELETE oder so, aber ich war/bin verzweifelt und habe vieles ausprobiert )

    Code:
       FUNCTION Test :REAL
    VAR
        test1 : STRING[10];
        test2: STRING[4];
        test3: STRING[14];
    END_VAR
    
    test1:=LEFT(IN := Db20.Messwert[0]  // IN: STRING
         ,L :=10  // IN: INT
         ); // STRING
     
     test2:=RIGHT(IN :=Db20.Messwert[0]  // IN: STRING
                  ,L :=4  // IN: INT
                  ); // STRING
    
    test3:=CONCAT(IN1 := test1 // IN: STRING
                  ,IN2 :=test2  // IN: STRING
                  ); // STRING
                     
    // Db40.Messwert[0]:=Db20.Messwert[0]; <- habe ich zu Testzwecken mal reingeschrieben, um zuschaun was dabei überhaupt rauskommt
    DB60.neu[0]:=STRNG_R(S := test3  // IN: STRING
            ); // REAL
    Test := DB60.neu[0];
    END_FUNCTION

    Habe viel drin rumgewurschtelt... bin halt grade dabei alles mögliche auszuprobieren... Meiner Meinung nach müsste das eigentlich auch alles recht einfach sein. Hm... nunja hoffe ihr könnt mir weiter helfen!

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo,
    als Erstes ist mir aufgefallen, dass deine Test-Strings nicht initialisiert sind. Da ist SCL allerdings eigen. Am Anfang (vor dem ersten Benutzen) müsste also stehen :
    Code:
    Test1 := "" ;
    Test2 := "" ;
    Test3 := "" ;
    Danach lassen die sich schon mal benutzen - davor (leider) nicht.

    Ansonsten - was ist mit den DB20.Messwert[0] und DVB40.Messswert[0] ?

  3. #13
    chrissi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2007
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die schnelle Antwort!
    Probiere ich sofort aus.

    DB40.Messwert[0] ist so ne Art Zwischenspeicher. Und ich wollte halt schaun was passiert wenn ich den String der in Db20.Messwert[0] "anfasse". Ich gebe beide über ein Panel aus. Da ich mir nen String ja nicht in VAT angucken kann.

  4. #14
    chrissi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2007
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich habe jetzt die Funktion mal mit einen vorgegebenen String probiert. (habe einen Wert in DB20.Messerwert[0] reingeschrieben) Das hat funktioniert. Nur sobald ich einen empfangenen Wert nehme geht es nicht

  5. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    ...
    dann hast du bei dem empfangenen String ggf. das gleiche Problem oder der empfangene String ist nicht richtig im Header deklariert (tatsächliche Länge). Das solltest du auf jeden Fall mal checken ...

  6. #16
    Registriert seit
    16.12.2004
    Ort
    Schleswig-Holstein
    Beiträge
    400
    Danke
    21
    Erhielt 24 Danke für 21 Beiträge

    Standard

    Die Ausgabe beobachte ich über ein Panel. Da stimmt dann auch noch alles.
    Daraus habe ich verstanden, dass die Werte im DB stimmten. Aber vielleicht meint chrissi ein Panel am Messinstrument (oder an der Station wo das Messinstrument zu finden ist).

    Am besten die Bytes im DB in einem VAT beobachten und gucken ob alles stimmt.

    Ich gebe beide über ein Panel aus. Da ich mir nen String ja nicht in VAT angucken kann.
    Wenn der STRING liegt, z.B., ab Byte null in DB20, dann im VAT beobachtest Du:
    DB20.DBB0 als hex oder dezimal - maximale Länge des STRINGs (eingegeben bei der Deklarierung)
    DB20.DBB1 als hex oder dezimal - aktuelle Länge des empfangenen STRINGs
    DB20.DBB2 als Zeichen - erstes Zeichen im STRING
    DB20.DBB3 " " - zweites " " "
    DB20.DBB4 ... etc. bis zum Ende des STRINGs.
    Geändert von RMA (07.08.2007 um 16:14 Uhr)

  7. #17
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Teste es doch mal ohne das RIGHT und dafür mit MID

    tmpZahl := MID(IN:=inStr, L:=10, P:=1);
    tmpExponent := MID(IN:=inStr, L:=4, P:=12);

    myReal := STRNG_R(CONCAT(IN1:=tmpZahl, IN2:=tmpExponent));
    If you open your Mind too much, your Brain will fall out.

  8. #18
    chrissi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2007
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Guten Morgen zusammen,

    also das Panel ist an der SPS angeschlossen.

    Ich habe mir dann den empfangenen Wert der in DB20 steht angeguckt und den Wert der in DB40 steht, nachdem ich

    DB40.Messwert[0]:=DB20.Messwert[0];

    emacht habe.

    Und ich war halt der meinung, dass die Ausgabe der beiden Werte über das Panel identisch sein müssten. Sind sie halt aber nicht.
    Mein Ausbilder hat schon überlegt ob die version von SCL evtl zu alt bzw. fehlerhaft ist. Ich habe grade V5.3 installiert.

    Teste es doch mal ohne das RIGHT und dafür mit MID
    habe ich auch schon getestet. Sobald ich den emfpangenen Wert von DB20 weiterverarbeite, "verschwinden" die ersten beiden Zeichen.

    Wenn ich jedoch selber in den DB20 was schreibe und damit arbeite funktioniert es.

  9. #19
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.728
    Danke
    398
    Erhielt 2.406 Danke für 2.002 Beiträge

    Standard

    Hallo Chrissi,
    kontrollier doch trotzdem vielleicht mal, was in den Kopf-Bytes von deinem String für Werte drin stehen (mich interessiert von allen Dingen Byte 1 - aktuelle Länge). Wenn dir Länge falsch drinsteht könnte auch bei der Zuweisung etwas schief laufen.
    Der Unterschied zwischen der manuellen Eingabe des Strings und dem importierten String ist, dass deine Visu schon weiss, wie der String richtig auszusehen hat - deine Datenübertragung vielleicht nicht ...

  10. #20
    chrissi ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    07.08.2007
    Beiträge
    8
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo hier mal mein Db40 (ich fange bei Byte 0 an, ohne was davor stehen zu haben)


    Struct
    Messwert ARRAY[0..15] ''
    STRING[25]


    Habe mir das nun in der VAT mit DB40.Dbb0 usw. angeguckt.
    und dort ist es nun so, dass bevor der erste string anfängt 4 Bytes sind. DB40.DBB0 = 19
    DB40.DBB1 = 00

    das 2. und 3. Byte haben ebenfalls 00 drin stehen.
    Danach fängt erst Messwert [0]. (also ab Byte 4)

    will ich den DB als string mit dem Panel ausgeben. Muss ich jedoch angeben, dass ich das ab Byte 2 gezeigt haben will, sonst werden die ersten 2 zeichen nicht angezeigt.

Ähnliche Themen

  1. Bus Probleme
    Von KR-TKD im Forum Feldbusse
    Antworten: 7
    Letzter Beitrag: 15.06.2011, 16:37
  2. CPU 315 F 2PN/DP DI Probleme
    Von Joke im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.05.2009, 21:10
  3. Probleme über Probleme!
    Von tom_2802 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 12.06.2008, 22:19
  4. Probleme mit ALM
    Von Larry Laffer im Forum PC- und Netzwerktechnik
    Antworten: 4
    Letzter Beitrag: 08.03.2008, 18:13
  5. Probleme mit OPC
    Von ILW im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 01.11.2007, 12:37

Lesezeichen

Berechtigungen

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