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

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

Thema: S7 315DP2 Daten durchleiten

  1. #11
    Jetfix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.08.2008
    Beiträge
    20
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    vielen Dank für die HIlfe bis hierher!
    Habe mit der Suche einige hilfreiche Beiträge zur Normierung gefunden.
    Ich schreibe jetzt mal meine Überlegungen auf und hoffe das ihr mir den Wahrheitsgehalt entweder bestätigen, oder mich auf die Fehler hinweisen könnt.

    Stromsignal 3,36mA - 20.64mA
    alle 50 ms ein Messwert der nur in DB muss
    Wertebereich 0-99.999mm
    Wenn ich mit einem DW einlese macht das ja 65.636 Unterteilungen
    ->99.999mm / 65.636 = 1,53ym Schritte in Anzeige
    (Kann ich auch mit PED einlesen? Wenn ich das am Analogeingang brücke oder so? Geht das von der Hardware bei dem einen Signal? Dann erhöhe ich die Anzeigegenauigkeit doch ungemein oder? Sprich 2³² anstelle 2 hoch 16!?)

    Code:
    NW 1 über SCALE 105 normiert
      
          U     "Schmiermerker"
          =     L      0.0
          BLD   103
          U     "Trigger Keyence"
          SPBNB _001
          CALL  "SCALE"
           IN     :=PEW2
           HI_LIM :=9.999900e+001
           LO_LIM :=0.000000e+000
           BIPOLAR:=L0.0
           RET_VAL:=MW44
           OUT    :=MD40
    _001: NOP   0
    
    NW 2
     L     MD    40
          T     DB10.DBD    0
    Welche Karte packt die Datenmenge im Bezug auf die 50ms den auf jeden Fall? Ist kein Problem kann da Änderungen vornehmen!!!

    Stimmt der HI_LIM?

    Wenn das so funktioniert wollte ich evtl. noch ein Schieberegister basteln bei dem max 36 Werte in einem DB abgelegt werden die dann komplett abgerufen werden können... entspricht einem gemessenen Blech

    Danke
    Gruß Jetfix

  2. #12
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    die karte liefert dir 27648 einheiten bei 20ma
    danach kommt der übersteuerungsbereich bis 32767
    die fc105 liefert im übersteuerungsbereich immer den wert hi_lim und das übersteuerungsbit, ist also nicht brauchbar.

    lad die mal analog_in von meiner hp. arbeitet wie die fc105, gibt aber auch werte des übersteuerungsbereichs raus. http://lischis-home.dyndns.org/files...e/dirindex.php

    alternativ kannst du auch einfach den wert durch 276,4827648 teilen
    http://lischis-home.dyndns.org/files..._Normieren.xls

    ped liefert die karte nicht.
    entscheident ist auch die auflösung der karte 9/12/14 bit. welche hast du?
    z.b. du hast 13 bit auflösung => 32768 / 8192 = 4 d.h. die sprünge in deinem pew sind immer 4
    um möglichst genau zu messen brauchst du 15 bit

    https://mall.automation.siemens.com/...8-&jumpto=1498
    Geändert von volker (28.09.2008 um 09:55 Uhr)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

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

    Jetfix (28.09.2008)

  4. #13
    Jetfix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.08.2008
    Beiträge
    20
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen,

    wenn mal jemand so nett wäre und wirft einen Blick auf den Code...

    Mathematisch kommt es hin... war tierisch die Normierung raus zu bekommen... eigentlich ganz einfach wenn man es mal gemacht hat, aber der Offset 0ym bei 3,36mA hat mich fast verzweifeln lassen...

    Bin mir etwas unsicher ob das L T gefusele so passt?
    ITD notwendig???
    MD sowie DBD notwendig oder tuts auch ein Wort?

    Habe jetzt alles in ein NW gepackt... macht man das so in der Praxis? Wenn nicht warum?

    3,36mA->20,64mA
    0 -> 10.000ym
    gewählter Bereich an SPS 0-20mA

    Code:
     L     2.764800e+004               //27648 Punkte - Einheiten S7->Nennbe
          L     2.000000e+001               //20mA Analogeingang
          /R    
          T     #Zwischenergebnis
    
          L     #Zwischenergebnis           //Laden hier noch notwenig??
          L     2.064000e+001               //20,64 mA (Übersteuerungsbereich)
          *R    
          T     #Obergrenze                 //HI-Wert S7 Einheiten
    
          L     #Zwischenergebnis
          L     3.360000e+000               //3,36mA
          T     #Untergrenze                //LO-Wert S7 Einheiten
    
          L     #Obergrenze
          L     #Untergrenze
          -R    
          T     #Wertebereich               //genutzter Bereich S7 Einheiten
    
          L     1.000000e+004               //10.000ym HI-Wert physikalisch
          L     #Wertebereich
          /R    
          T     #Faktor_Norm                //Normierungsfaktor
    
          L     #Untergrenze                //S7 Einheit ->0ym
          L     #Faktor_Norm
          *R    
          T     #Offset                     //LO-Wert S7-Einheiten bei physikalisch 0
    
          L     PEW    2                    //Analogwert einlesen
          ITD                               //Analogwert in 32-Bit-Ganzzahl umwandeln
          DTR                               //32-Bit-Ganzzahl in Real umwandeln 
          L     #Faktor_Norm                //Normierungsfaktor
          *R    
          T     #Gesamt                     //Offsetwert + Wert X
          L     #Offset
          -R    
          T     MD    62                    //physikalisches Ergebnis
    
          AUF   "Datentransfer"             //Datenbaustein aufrufen
          L     MD    62                    //Merkerdoppelwort laden 
          T     DB1.DBD    0                //transferieren
    Dankeschön für die Mühen

    fein fein viel dazu gelernt
    Geändert von Jetfix (30.09.2008 um 23:42 Uhr) Grund: kleine Ergänzung

  5. #14
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    Vorweg: habe deinen Code jetzt nicht genau angeschaut ob alles iO ist, habe nur auf deine Fragen geschaut

    Zitat Zitat von Jetfix Beitrag anzeigen
    Bin mir etwas unsicher ob das L T gefusele so passt?
    ITD notwendig???
    MD sowie DBD notwendig oder tuts auch ein Wort?
    Habe jetzt alles in ein NW gepackt... macht man das so in der Praxis? Wenn nicht warum?

    Code:
     L     2.764800e+004               //27648 Punkte - Einheiten S7->Nennbe
          L     2.000000e+001               //20mA Analogeingang
          /R    
          T     #Zwischenergebnis
     
          L     #Zwischenergebnis           //Laden hier noch notwenig??
          L     2.064000e+001               //20,64 mA (Übersteuerungsbereich)
          *R
    Nein, kannst du dir sparen, dein Zwischenergebnis steht schon in AKKU 1, du lädst es da nochmal da rein (doppelt gemoppelt hält besser )



    Zitat Zitat von Jetfix Beitrag anzeigen
    Code:
          AUF   "Datentransfer"             //Datenbaustein aufrufen
         L     MD    62                    //Merkerdoppelwort laden 
         T     DB1.DBD    0                //transferieren
    Das AUF "Datentransfer" kannst du da weg lassen, du gibts bei deinem T Befehl ja die komplette Abdresse angibst. Sinn würde das machen wenn du da folgendes schreiben würdest

    Code:
          AUF   "Datentransfer"             //Datenbaustein aufrufen
         L     MD    62                    //Merkerdoppelwort laden 
         T    DBD    0                //transferieren

    Zitat Zitat von Jetfix Beitrag anzeigen
    MD sowie DBD notwendig oder tuts auch ein Wort?

    0 -> 10.000ym
    wenn du da keine kommastellen benötigst kannst du da ruhig ein Wort nehmen, die Zahlen von 0 - 10000 passen in ein Wort.
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  6. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    @Jetfix

    Code:
          L     #Zwischenergebnis
          L     3.360000e+000               //3,36mA
          T     #Untergrenze                //LO-Wert S7 Einheiten
    Schreibfehler? Fehlt da die Rechenoperation?

    PS: Im übrigen, hast du das sehr übersichtlich hingeschrieben (Rechenweg), rechnest aber jeden SPS-Zyklus aus einigen festen Konstanten erstmal ein paar weitere Konstanten aus und verwendest die dann. Das kostet natürlich (im Prinzip) unnötig Rechenzeit. Ansdererseits kannst du das dadurch aber später ganz einfach in einen eignen FC packen, an welchem man die jetzigen Konstanten variabel antragen kann. Und die Übersicht bleibt so auch gewahrt.
    Geändert von Ralle (03.10.2008 um 00:38 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. #16
    Jetfix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.08.2008
    Beiträge
    20
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @Ralle , MW

    Sorry bin mittlerweile ein Stück weiter. Ich wußte nicht das man Rechenoperationen auch simulieren kann, sprich sich die Werte in Gleitkomma, Dez... im DB und FC angucken kann.. Hatte vergessen zu posten... aber dachte es würde keiner mehr schreiben..
    NW 1 funktioniert einwandfrei mittlerweile. Wollte jetzt noch hinbekommen das er mir im Array of Real von DB1 die Adressen durch geht. Bin dabei mit Pointern und SPA, SPB, SPBN rum zu experimentieren, habs aber noch nicht getestet.

    @Ralle
    Ist das für die Rechenleistung der CPU von Vorteil wenn ich die Vorberechnungen aus NW1 in einen eigenen FC packe?

    @MW
    Bei den Vorberechnungen und kommt es zu einem Offset-> -xxxx (Wert habe ich nicht im Kopf, aber vier Stellen und -!) Dann brauche ich doch ein DW oder?


    FC immer aktiv solange Schalter auf Auto steht, in OB realisiert
    Hier meine Fortschritte bis jetzt:
    NW1
    Code:
      L     2.764800e+004               //27648 Punkte - Einheiten S7->Nennbereich in Akku1
          L     2.000000e-002               //20mA Analogeingang in Akku2
          /R                                //dividiert die Real Zahlen (32bit) Akku1 / Akku2 = Akku1
          T     #Zwischenergebnis           //und transferiert das Ergebnis in Temp Variable
    
          L     #Zwischenergebnis
          L     2.064000e-002               //20,64 mA (leichter Übersteuerungsbereich)
          *R    
          T     #Obergrenze                 //HI-Wert S7 Einheiten
    
          L     #Zwischenergebnis
          L     3.360000e-003               //3,36mA
          *R    
          T     #Untergrenze                //LO-Wert S7 Einheiten
    
          L     #Obergrenze
          L     #Untergrenze
          -R    
          T     #Wertebereich               //genutzter Bereich S7 Einheiten
    
          L     1.000000e+004               //10.000ym HI-Wert physikalisch
          L     #Wertebereich
          /R    
          T     #Faktor_Norm                //Normierungsfaktor
    
          L     #Untergrenze                //S7 Einheit ->0ym
          L     #Faktor_Norm
          *R    
          T     #Offset                     //LO-Wert S7-Einheiten bei physikalisch 0
    
          L     PEW    2                    //Analogwert einlesen
          ITD                               //Integere Zahl in 32-Bit-Ganzzahl umwandeln
          DTR                               //32-Bit-Ganzzahl in Gleitpunktzahl (Real) umwandeln 
          L     #Faktor_Norm                //Normierungsfaktor
          *R    
          T     #Gesamt                     //Offsetwert + Wert X
          L     #Offset
          -R    
          T     MD    34
    NW2
    Code:
      U     "Trigger Meßwert"           //Trigger Impuls je anstehender Meßwert 20ms lang-> positive Flanke
          FP    M      6.5
          =     M      6.6                  //Pro Signal (positive Flanke) high für Zyklus
    NW3
    Code:
      U     M      6.6
          U     "Trigger Keyence"
          SPBN  LOW                         //Wenn VKE = 0 ->Sprungbefehl
    
          L     P#0.0                       //Läd Pointer mit Anfangs Byte 0
          T     MD    40                    // Transferiere Pointer in MD 40
    
          L     1                           //Läd Integere Ganzzahl 1 für DB
          T     MW    24                    //und transferiert sie in in MW 24
    //hier noch ein Sprungbefehl das er einmal DB 2 setzt wenn Trigger Keyence fällt
    
          AUF   DB [MW 24]                  //DB Nummer 1 oder 2 (Integere aus MW24)
    
          L     MD    34                    // Ergebnis aus Berechnung NW1
          T     DBD [MD 40]                 //ARRAY of REAL, Anfang bei Byte 0
    
          L     P#4.0                       //Läd den Pointer mit Anfangsbyte 4
          L     MD    40                    //Transferiert Pointer in MD
          +D                                //addiert die Bytes auf MD 40 (eine REAL Adresse rauf)
          T     MD    40                    //transferiert die neue Adresse in MD 40
    
    
    
    LOW:  NOP   0
    Habe es aber noch nicht getestet! Bei dem L P#4.0 bin ich mir unsicher...
    klingt irgendwie unlogisch! Hmm... wüßte sonst nicht wie außer mit
    L4
    L MD 40
    +D
    aber dann ist es kein Pointer mehr oder?

    Danke...

  8. #17
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    Ist das für die Rechenleistung der CPU von Vorteil wenn ich die Vorberechnungen aus NW1 in einen eigenen FC packe?
    nein. ehr von nachteil da der aufruf einer fc zeit kostet.

    ich verstehe deine klimmzüge zur normierung nicht wirklich.
    das ist nichts halbes und nichts ganzes, und total unflexibel.
    wenn du schon mit ogr/ugr arbeitest nimm die zu grunde liegende formel dafür.
    hast du dir meinen baustein analog_in mal angesehen?
    schau dir auch mal die hilfe zur fc105 aus den ti-s7-converting blocks an!
    meine fc arbeitet genauso nur das out nicht auf ogr/ugr begrenzt wird.
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  9. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    Jetfix (04.10.2008)

  10. #18
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Jetfix Beitrag anzeigen
    Habe es aber noch nicht getestet! Bei dem L P#4.0 bin ich mir unsicher...
    klingt irgendwie unlogisch! Hmm... wüßte sonst nicht wie außer mit
    L4
    L MD 40
    +D
    aber dann ist es kein Pointer mehr oder?

    Danke...
    Ein

    L P#4.0

    ist das gleiche wie

    L L#4
    SLD 3

    Durch das verschieben um 3 Bit nach links erzeugst du einen Pointer.
    Zu Pointern schau mal in die FAQ des Forums, da hat Volker einen schönen Beitrag erstellt.

    Ein eigener FC lohnt nur dann, wenn du die Konstanten, welche ja jetzt fest sind

    2.000000e-002 //20mA Analogeingang in Akku2
    2.064000e-002 //20,64 mA (leichter Übersteuerungsbereich)
    3.360000e-003 //3,36mA
    1.000000e+004 //10.000ym HI-Wert physikalisch

    als Inputs definierst, dazu noch den Meßwert als Input und das Ergebnis als Output. Dann kannst du den erstellten FC mehrfach nutzen.

    Rechenzeit sparst du nur, wenn du die Berechnungen, die jetzt fix sind mit dem Taschenrechner machst und statt der Berechnung dieses Ergebnis in der SPS zum rechnen verwendest. Das muß aber nur sein, wenn deine SPS zu langsam oder zu klein ist und du Zykluszeit- und/oder Speicherplatzprbleme hast.

    Ansonsten, siehe auch Volkers Hinweise.

    PS: Die Formel, welche Volker meint:

    OUT = [ ((FLOAT (IN) – K1)/(K2–K1)) * (HI_LIM–LO_LIM)] + LO_LIM

    steht in der Hilfe zum FC 105 aus der Standard-Library.
    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

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

    Jetfix (04.10.2008)

  12. #19
    Registriert seit
    27.11.2005
    Ort
    im Osten
    Beiträge
    1.183
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Standard

    Zitat Zitat von Jetfix Beitrag anzeigen
    @MW
    Bei den Vorberechnungen und kommt es zu einem Offset-> -xxxx (Wert habe ich nicht im Kopf, aber vier Stellen und -!) Dann brauche ich doch ein DW oder?
    der Wertebereich eines Integers(Word) liegt zwischen -32768 und +32767
    (Dint(DWord) zwischen -2147483648 und +2147483647)

    Also wenn du dir sicher bist, dass dein wert immer in diesen grenzen liegen wird, kannst du ein Word nehmen.

    Benötigst du dein Ergebnis allerdings mit Kommastellen, bleibt dir nix anderes übrig, als im Real Format (DWord) zu bleiben.
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  13. Folgender Benutzer sagt Danke zu MW für den nützlichen Beitrag:

    Jetfix (04.10.2008)

  14. #20
    Jetfix ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    30.08.2008
    Beiträge
    20
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    @Volker,
    ich habe versucht den von dir erstellten Baustein ein zu laden.
    Auf dearchivieren->Heruntergeladene Datei ausgewählt-> Zielverzeichnis ?
    Wußte nicht in welchen Ordner ich das von der S7 packe...
    Dann habe ich "Klimmzüge" gemacht um alles genau zu dokumentieren und damit ich den Ablauf verstehe...

    @Ralle,
    Den Beitrag "Pointer Zeiger FIFO LIFO" hatte ich gefunden...
    kam ich aber nicht mit zurecht... Datenende?
    Wie kann man die Stelle der letzten geschriebenen Daten abfragen?
    Da ich den FC, sprich meine Berechnung nur einmal brauche habe ich ihn nicht als variablen FC angelegt. Hatte aber was damit rum experimentiert...
    Erklär mir bitte was der Befehlt L #L4 bedeutet. Um genauer zu sein das zweite L?

    @MW,
    ahh cool danke! Verstehe!!
    Um das so genau zu haben wie möglich bleibe ich dann beim Real Format.
    Ich hatte mal den Rechenwert im Endergebnis NW 1 mit meiner Berechnung mit dem Taschenrechner (7 Stellen hinter Komma genau) verglichen und kam auf Abweichung von 0,000023%... Aufgrund der Werte im REAL, ist klar jetzt...

    Komme mit meinen Pointern noch nicht ganz weiter, bzw. eher mit den Sprüngen die sinnvoll an zu wenden.
    Möchte wenn "Trigger Meßwert" kommt (Impuls für die Dauer von 20ms)
    Den einen Wert in mein Array legen. Dann den nächsten Wert fortlaufen wenn der Puls erneut kommt... Solange bis "Trigger Keyence" Abfällt. ("Trigger Keyence" kommt zeitgleich mit erstem "Trigger Meßwert" und bleibt bis Ende letzter Wert. ) Dann wenn Das Spiel erneut beginnt soll er wieder am ersten Feld des Arrays anfangen...

    Hier mein Programm bis jetzt.... bei der Simulation eben ist er in Stop gegangen... glaube es liegt an den Sprungbefehlen...
    Code:
         
    NW2
     U     "Trigger Meßwert"           //Trigger Impuls je anstehender Meßwert 20ms lang-> positive Flanke
          FP    M      6.5
          =     M      6.6                  //Pro Signal (positive Flanke) high für Zyklus
    
    NW3
    
    L     L#0                         //Läd Pointer mit Anfangs Byte 0
          SLD   3                           //Verschieben um 3 Bit nach links erzeugt Pointer
          T     MD    40                    // Transferiere Pointer in MD 40
    
          U     "Trigger Keyence"
          SPBN  LOW                         //Wenn VKE = 0 ->Sprungbefehl
    
    
    WDH:  L     1                           //Läd Integere Ganzzahl 1 für DB
          T     MW    24                    //und transferiert sie in MW 24
    
          U     M      6.6
          SPB   TIME
          AUF   DB [MW 24]                  //DB Nummer 1 (Integere aus MW24), Vorbereitung für Programmerweiterung
    
    
          L     MD    34                    // Ergebnis aus Berechnung NW1
          T     DBD [MD 40]                 //ARRAY of REAL, Anfang bei Byte 0
    
          L     L#4                         //Läd den Pointer mit Anfangsbyte 4
          SLD   3                           //Verschieben um 3 Bit nach links erzeugt Pointer
          L     MD    40                    //Transferiert Pointer in MD
          +D                                //addiert die Bytes auf MD 40 (eine REAL Adresse rauf)
          T     MD    40                    //transferiert die neue Adresse in MD 40
    
          L     MW    38                    //Schleifenzähler zur Kontrolle
          L     1
          +I    
          T     MW    38
    
          U     "Trigger Keyence"           //Schleifenende, Beendigung der Meßwerterfassung
          FN    M      6.7
          SPB   ENDE
    TIME: SPA   WDH                         //Verschleifen mit Kette / TIME abwarte bis Impuls Messwert kommt
    LOW:  NOP   0                           //Überspringen des Ablaufes
    ENDE: NOP   0                           //Schleifenende und Ausgang wenn Trigger Keyence fällt
    Geändert von Jetfix (04.10.2008 um 00:24 Uhr)

Ähnliche Themen

  1. CAD Daten auf das HMI
    Von teddy im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.11.2010, 05:12
  2. Daten aus PC in SPS
    Von Outrider im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 23.06.2010, 13:45
  3. CNC Daten in SPS
    Von Fluffi im Forum Programmierstrategien
    Antworten: 11
    Letzter Beitrag: 27.03.2008, 21:44
  4. Daten zur TP
    Von Anonymous im Forum HMI
    Antworten: 5
    Letzter Beitrag: 26.07.2005, 21:54

Lesezeichen

Berechtigungen

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