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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Messdaten von S7-300 an PC (Software:Testpoint) übertragen

  1. #21
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    So,
    habs das Teil jetzt an ne 313C gehängt und die Kommunikation klappte auch schon soweit...

    Hab das CP aus ASCII eingestellt.
    Dann ne Verbindung mit Hyperterminal aufgebaut.

    MIt dem FC3 will ich nun zum Testen eine Integerzahl auf den PC übertragen.
    Im Hyperterminal kommen aber nur Buchstaben an.

    Wie stell ich das jetzt an, dass ich am PC wieder Zahlen habe?

    Vielen Dank für eure Hilfe!

    Gruß
    Johannes
    Zitieren Zitieren Welches Datenformat muss ich nehmen?  

  2. #22
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.791
    Danke
    398
    Erhielt 2.415 Danke für 2.011 Beiträge

    Standard

    Hallo Jupp,
    du must deine Zahl, die du übertragen willst zunächst in eine Zeichenkette (String) wandeln. Das hatte ich aber auch schon mal geschrieben.

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Jupp06 (01.08.2007)

  4. #23
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Daumen hoch

    Sorry!

    Vielen Dank!
    Zitieren Zitieren Danke  

  5. #24
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Idee

    Hi,
    hab mir folgenden FC geschrieben, um Integer in ASCII umzuwandeln:

    ------------------------------------------------------------------

    L #Zahl
    T #Integer

    L LB 0
    T #Dekate1
    T #Dekate2

    L LB 1
    T #Dekate3
    T #Dekate4

    R L 2.0
    R L 2.1
    R L 2.2
    R L 2.3

    R L 3.4
    R L 3.5
    R L 3.6
    R L 3.7

    R L 4.0
    R L 4.1
    R L 4.2
    R L 4.3

    R L 5.4
    R L 5.5
    R L 5.6
    R L 5.7

    L #Dekate1
    + 48
    T #Dekate1

    L #Dekate2
    + 48
    T #Dekate2

    L #Dekate3
    + 48
    T #Dekate3

    L #Dekate4
    + 48
    T #Dekate4

    L LD 2
    T #ASCII

    ------------------------------------------------------------------

    Jetzt kommen Werte wie 0007 bei #Integer = 7 im PC an.
    Sieht aus, als würde es so klappen...

    Gruß
    Johannes
    Zitieren Zitieren Lösung  

  6. #25
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.261
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Irgendwie hab ich den Eindruck, dein Code wird so nicht richtig funktionieren.
    Ich hab mal eine Quelle eingefügt, die kannst du importieren und übersetzen. Du hast anschließend einen FC210, FC211, DB210. Schau es dir mal an, vielleicht kannst du was davon verwenden.

    Hier noch der Code:

    Code:
    DATA_BLOCK DB 210
    TITLE =
    VERSION : 0.1
    
    
      STRUCT     
       String_1 : STRING  [10 ];    
      END_STRUCT ;    
    BEGIN
       String_1 := ''; 
    END_DATA_BLOCK
    
    FUNCTION FC 210 : VOID
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      ZahlINT : INT ;    
      ZahlDINT : DINT ;    
      AdrString : ANY ;    
    END_VAR
    VAR_OUTPUT
      ASCIIDWORD : DWORD ;    
    END_VAR
    VAR_TEMP
      Integer : INT ;    
      Dekade1 : BYTE ;    
      Dekade2 : BYTE ;    
      Dekade3 : BYTE ;    
      Dekade4 : BYTE ;    
      TempString : STRING  [10 ];    
      RetVal : INT ;    
      OutStringAny : ANY ;    
      SAVE_VKE : BOOL ;    
      RETTAR1 : DWORD ;    
      RETTAR2 : DWORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Sichere VKE im BIE
    
          SET   ; 
          SAVE  ; 
          =     #SAVE_VKE; 
    NETWORK
    TITLE =Adtressregister retten
    
          TAR1  #RETTAR1; 
          TAR2  #RETTAR2; 
    NETWORK
    TITLE =ich würde das in etwa so machen
    
          L     P##TempString; 
          LAR1  ; 
    
    //Stringkopf vorbelegen
          L     10; 
          T     B [AR1,P#0.0]; 
          L     0; 
          T     B [AR1,P#1.0]; 
    //mit Leerzeichen vorbelegen
          L     W#16#20; 
          T     B [AR1,P#2.0]; 
          T     B [AR1,P#3.0]; 
          T     B [AR1,P#4.0]; 
          T     B [AR1,P#5.0]; 
          T     B [AR1,P#6.0]; 
          T     B [AR1,P#7.0]; 
          T     B [AR1,P#8.0]; 
          T     B [AR1,P#9.0]; 
          T     B [AR1,P#10.0]; 
          T     B [AR1,P#11.0]; 
          T     B [AR1,P#12.0]; 
    
    //String wandeln mit FC5 aus den IEC Functions der Standard-Library (DI_STRNG)
          CALL FC     5 (
               I                        := #ZahlDINT,
               RET_VAL                  := #TempString);
    
    //Adressen laden
          L     P##AdrString; 
          LAR1  ; 
          L     P##OutStringAny; 
          LAR2  ; 
    
    //Zeiger umkopierenm da ma Blockmove DSTBLK keinen String (OUT) zuweisen kann, aber einen Any (OUT)
          L     W [AR1,P#0.0]; 
          T     W [AR2,P#0.0]; 
          L     W [AR1,P#2.0]; 
          T     W [AR2,P#2.0]; 
          L     W [AR1,P#4.0]; 
          T     W [AR2,P#4.0]; 
          L     W [AR1,P#6.0]; 
          T     W [AR2,P#6.0]; 
    
          CALL SFC   20 (
               SRCBLK                   := #TempString,
               RET_VAL                  := #RetVal,
               DSTBLK                   := #OutStringAny);
    
    NETWORK
    TITLE =Dein Code, aber die Lokaldaten nicht direkt adressiert
    //Int darf nur 3-stellig sein, sonst funktioniert BTI nicht
    //man kann das auch mit DINT und DTB
          L     P##Integer; 
          LAR1  ; 
    
          L     #ZahlINT; 
          ITB   ; 
          T     W [AR1,P#0.0]; 
    
          L     B [AR1,P#0.0]; 
          L     W#16#F; 
          UW    ; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade2; 
    
          L     B [AR1,P#0.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade1; 
    
          L     B [AR1,P#1.0]; 
          L     W#16#F; 
          UW    ; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade4; 
    
          L     B [AR1,P#1.0]; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade3; 
    
          L     P##Dekade1; 
          LAR1  ; 
    
          L     D [AR1,P#0.0]; 
          T     #ASCIIDWORD; 
    
          SPA   ENDE; 
    NETWORK
    TITLE =Dein Code für Integer und korrigiert
    
          L     #ZahlINT; 
          ITB   ; 
          T     #Integer; 
    
          L     LB     0; 
          L     W#16#F; 
          UW    ; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade2; 
    
          L     LB     0; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade1; 
    
          L     LB     1; 
          L     W#16#F; 
          UW    ; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade4; 
    
          L     LB     1; 
          SRW   4; 
          L     W#16#30; 
          +I    ; 
          T     #Dekade3; 
          L     LD     2; 
          T     #ASCIIDWORD; 
    NETWORK
    TITLE =Zurückübertragen der geretteten Adressregister
    
    ENDE: NOP   0; 
          LAR1  #RETTAR1; 
          LAR2  #RETTAR2; 
    NETWORK
    TITLE =
    
          U     #SAVE_VKE; 
          SAVE  ; 
          BE    ; 
    END_FUNCTION
    
    FUNCTION FC 211 : VOID
    TITLE =
    VERSION : 0.1
    
    BEGIN
    NETWORK
    TITLE =
    
          CALL FC   210 (
               ZahlINT                  := MW   100,
               ZahlDINT                 := MD   104,
               AdrString                := DB210.String_1,
               ASCIIDWORD               := MD   110);
    
    END_FUNCTION
    Mag sein, daß noch was besser geht, aber dafür gibts andere KAndIdaten hier im Forum !

    PS: Die Zahl darf im Beispiel mit Vorzeichen 10 Stellen haben und landet im DB210 als String. Von da kann man dann ja beliebige Teile rauskopieren und weiterverwenden.
    Angehängte Dateien Angehängte Dateien
    Geändert von Ralle (01.08.2007 um 11:20 Uhr)
    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

  7. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Jupp06 (01.08.2007)

  8. #26
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Lächeln

    Ja, mein Code funktioniert leider nur für einstellige Zahlen...
    Da war ich wohl etwas zu euphorisch...

    Danke für deine Hilfe!
    Bin grade dabei, deine FCs auszuprobieren.

    Gruß
    Johannes
    Zitieren Zitieren Danke!!!  

  9. #27
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Frage

    Guten Morgen!

    Die Bausteine funktionieren gut. Vielen Dank!!!

    Ich hatte vor, die Übertragung mit ner Schrittkette zu realisieren.

    Es wird für die 6 Prüfstände nacheinander abgefragt, ob ein neuer Messwert vorhanden ist (Bit im Datenbaustein des Prüfstandes).

    Also:
    Prüfstand 1 > kein neuer Messwert
    springe zu Prüfstand 2
    Prüfstand 2 > neuer Messwert
    übertrage
    wenn fertig (DONE des FB3 P_SEND)
    springe zu Prüfstand 3
    usw...

    Problem:
    Das DONE-Signal steht viel zu kurz an
    Die Übertragung des 1. Schrittes läuft, dann geht es aber nicht weiter, weil der nächste Schritt auf das DONE-Signal wartet...

    Es kommt zwar, (habs mit dem SR getestet), aber es reicht halt nicht aus, um es vernümftig weiterverarbeiten zu können.

    Hab zunächst versucht, es mit dem SR zu speichern und diesen dann, nachdem der erste Schritt zurückgesetzt wurde, ebenfalls zurück zu setzen... klappt aber auch nicht wirklich...

    Habt ihr noch ne Idee dazu?
    Schonmal vielen Dank!!!

    Gruß
    Johannes
    Geändert von Jupp06 (07.08.2007 um 10:11 Uhr)
    Zitieren Zitieren Probleme mit DONE  

  10. #28
    Jupp06 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.08.2006
    Beiträge
    107
    Danke
    58
    Erhielt 2 Danke für 2 Beiträge

    Idee


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hätte mich mal etwas besser mit temporären Variablen beschäftigen sollen...
    Irgendwie hatte ich das Temporäre an diesen Variablen noch nicht so ganz begriffen...

    Naja, zum Glück läuft es jetzt und ich bin mal wieder etwas schlauer...

    Gruß
    Johannes
    Zitieren Zitieren Bin dumm...  

Ähnliche Themen

  1. Visualisierung von Messdaten
    Von Mertin im Forum HMI
    Antworten: 4
    Letzter Beitrag: 29.06.2010, 07:39
  2. Messdaten Visualisieren
    Von timod79 im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 12.03.2009, 10:52
  3. Messdaten per SMS
    Von patsy im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 24.02.2009, 16:05
  4. Messdaten aufzeichnen ??
    Von prinz1978 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 13.01.2009, 23:09
  5. Antworten: 22
    Letzter Beitrag: 01.09.2008, 16:58

Lesezeichen

Berechtigungen

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