S7 315DP2 Daten durchleiten

Jetfix

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie bekomme ich Daten (entweder Binär codiert oder als Analogwert (Stromsignal) ) durch meine S7 hin zu einer Intranetdose? Sprich normal RJ-45 Stecker? Welche Möglichkeit empfiehlt sich in Hinblick auf "Einfachheit"?Welche Karten benötige ich? Gruß Jetfix
 
Daten

Hi,
Strom -> Analogeingang -> SPS Programm -> TCP/IP Connection -> Intranet..

Das möchtest du, oder?
Eine CPU mit TCP/IP Port oder ein CP dafür; aber wo gehen die Daten denn hin...:confused: Intranet...wofür?

V.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
Strom -> Analogeingang -> SPS Programm -> TCP/IP Connection -> Intranet..
Ganz genau das!
Wie gehe ich am besten vor?
Funktioniert das mit der CP 343-1 Lean?

Das möchtest du, oder?
Eine CPU mit TCP/IP Port oder ein CP dafür; aber wo gehen die Daten denn hin...:confused: Intranet...wofür?
Die IT Abteilung soll sich die Daten dann da abgreifen. Soll aber nicht unser Problem sein. Ist so gewünscht...
 
Zuletzt bearbeitet:
Ganz genau das!
Wie gehe ich am besten vor?
Funktioniert das mit der CP 343-1 Lean?


Die IT Abteilung soll sich die Daten dann da abgreifen. Soll aber nicht unser Problem sein. Ist so gewünscht...

Das geht mit der CP 343-1 Lean. Die Lean Baugruppe hat nur im Vergleich zu der Normalen Baugruppe weniger Verbindungsresourcen, die können glaub ich nur 8 Verbindungen verwalten, sollte aber für deinen Fall vollkommen ausreichen.

Je nachdem wie euere IT Abteilung die Daten holen will(kann) musst du nicht mal das Programm ändern, zb. könnten die dan Merker, Eingänge, Ausgänge und Werte aus DB´s einfach auslesen bzw. schreiben (zb. mit Libnodave).

Um genauere Aussagen treffen zu können müsstest du uns mitteilen wie euere IT´ler die Daten auslesen wollen.
(Wollen die die Daten gesendet bekommen oder wollen die sie selber holen ?)
 
Zuletzt bearbeitet:
Hallo zusammen,

also ich müsste alle 50ms einen Analogwert verarbeiten, bzw. ihn durch die SPS jagen und mit einer Karte (habe mir in der Hardeware jetzt die CP 343-1 IT ausgesucht, hoffe die funktioniert) der IT Abeilung als Schnittstelle zur Verfügung stellen.

Die Daten kann ich entweder Binär codiert, über RS 232 oder halt als Analogwert nehmen. Ist für ein Techniker Projekt, wobei wir das nur noch simulieren. Durchführung ist aus Budget Gründen gecancellt worden.
Da es für mich schon ein Krampf war, wenn auch sehr lehrreich, so weit zu kommen neigt sich meine Zeit dem Ende. Noch gut eine Woche...

Also ist am schnellsten erlernbar? Welche Methode?
Da ich noch arbeite nebebei kämpfe ich mich Nachts durch den Kram...

Habe mir das Buch SPS Aufbaukurs von Jürgen Kaftan zugelegt... und dachte an folgende Durchführung:

1. PEW reinladen
2. In Datenbaustein schieben
3. Auf IT Karte schicken

Ungefähr so:
PHP:
NW1
 L     PEW   10          //Analogwert einladen von AI
 T     DB1.DBW    0    // In Datenbaustein Transferieren (Datentyp INT) 
 NOP   0

NW2
AUF DB 1             // Aufrufen den Datenbausteins
L DBW 0              //Laden des Datenbausteinwortes 0
T PAW 100         // in Periepherieausgangswort der IT Karte und ab dafür

Und das geschieht jetzt alle 20ms, also einmal pro Zyklus....
Ist das Leben so einfach....?
Ich habe mich mit jemandem drüber unterhalten und er meinte ich brauche den OB35 um die Zeit zu takten und müsste mit indirekter Adressierung arbeiten.... Ist dem so?

Ich hoffe auf Hilfe
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. PEW reinladen
2. In Datenbaustein schieben
3. Auf IT Karte schicken

Ungefähr so:
PHP:
NW1
 L     PEW   10          //Analogwert einladen von AI
 T     DB1.DBW    0    // In Datenbaustein Transferieren (Datentyp INT) 
 NOP   0
 
NW2
AUF DB 1             // Aufrufen den Datenbausteins
L DBW 0              //Laden des Datenbausteinwortes 0
T PAW 100         // in Periepherieausgangswort der IT Karte und ab dafür

Da fehlt aber noch die Normierung, sonst hast du da nur einen nichts aussagenden Zahlenwert zwischen 0 und 27648 zu stehen und du möchtest sicherlich einen brauchbaren wert übergegben (zb. 35°C)
siehe dazu die FAQ vom Kollegen Vierlagig
http://www.sps-forum.de/showthread.php?t=19311


Die Frage nach dem Kommunikationweg hast du nicht beantwortet und die wäre schon wichtig

Um genauere Aussagen treffen zu können müsstest du uns mitteilen wie euere IT´ler die Daten auslesen wollen.
(Wollen die die Daten gesendet bekommen oder wollen die sie selber holen ?)

Im einfachsten Falle (Daten sollen nur ausgelesen werden) reicht es aus wenn du die Daten in dem DB schiebst. Musst du den Wert allerdings senden wirds es kommplizierter, den da müsstest du erst mal eine Verbindung projektieren und ein Programm dazu schreiben.
 
Danke MW!Werde mir den Bericht von vierlagig zu gemüte führen! Habe ihn bei der Suche leider nicht gefunden... Da kam so gut wie nichts brauchbares raus deshalb habe ich den Fred gestartet. Die IT Abteilung braucht lediglich eine Schnittstelle an der sie die Daten auslesen können. Sprich ob ich die Daten jetzt in den Datenbaustein schiebe und sie mit einem Kabel von IT-Dose zu SPS (CP 343-1 IT ) gehen und sich die Daten mit Hilfe von Libnodave? abholen bleibt erst mal uns überlassen... Wir müssen bei Produktübergabe nur Wasserdicht argumentieren. Vor den Lehrern....
 
Hallo zusammen,

also ich müsste alle 50ms einen Analogwert verarbeiten, bzw. ihn durch die SPS jagen und mit einer Karte (habe mir in der Hardeware jetzt die CP 343-1 IT ausgesucht, hoffe die funktioniert) der IT Abeilung als Schnittstelle zur Verfügung stellen.

Hallo,

jetzt kommt der böse Gerhard als Spielverderber :p

Die Verbindung zwischen S7-CPU und der CP 343-1 über den
Rückwandbus läuft mit 187,5 kBit/s. Da müsste man mal nach-
rechnen, ob das mit den 50 ms so geht. Weiter ist es nicht
besonders effizient, einzelne Werte über tcp/ip (CP -> Leit-
rechner) zu verschicken.

Deshalb: Besser auf der CPU eine Ringpuffer für die Daten (ggf.
mit Zeitstempel) anlegen und immer wieder ein größeres Daten-
paket übertragen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Daten

Hi,
also wenn deine Analogwerte (normiert mittels Bausteine, siehe Suche) in einem DB bereit stehen, und die SPS ist für die TCP/IP Kommunikation konfiguriert(IP Adresse usw., man kann sie dann "pingen"), können die mit z.B.:
- LibNoDave + VB oder VBA(Excel), oder C. oder...
- ein OPC Server und entspr. Programm
- eine Visualisierung
von einem PC abgefragt werden. Die SPS muss weiter nichts machen dafür.

V.

P.S.: der böse Gerhard als Spielverderber :razz: hat natürlich Recht!
 
... Die IT Abteilung braucht lediglich eine Schnittstelle an der sie die Daten auslesen können. Sprich ob ich die Daten jetzt in den Datenbaustein schiebe und sie mit einem Kabel von IT-Dose zu SPS (CP 343-1 IT ) gehen und sich die Daten mit Hilfe von Libnodave? abholen bleibt erst mal uns überlassen... Wir müssen bei Produktübergabe nur Wasserdicht argumentieren. Vor den Lehrern....

CP 343-1 soll Daten versenden
VT: kein Poll-Betrieb, Datenübertragung bei Bedarf
NT: sind andere Daten gefordert, muss das SPS-Programm geändert werden

Server holt Daten
Es gibt einige Bibliotheken mit dem S7-Protokoll wie libnodave (open
source), Prodave, Aglink und Comdrv. Mit diesen kann man recht einfach
auf die Steuerungsdaten zugreifen (CP routet nur).
VT: man kommt an die SPS-Werte ohne das Programm zuändern
NT: fortlaufende Netzlast (auch wenn es keine Nutzdaten übertragen gibt) durch Poll-Betrieb
 
Zuletzt bearbeitet:
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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/SPS/S7_Bausteine/dirindex.php

alternativ kannst du auch einfach den wert durch 276,4827648 teilen
http://lischis-home.dyndns.org/files/SPS/Tools/S7_Analogwert_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...-1388-1387-1386-1385-1-1504-1498-&jumpto=1498
 
Zuletzt bearbeitet:
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          [COLOR=Blue] //Laden hier noch notwenig??[/COLOR]
      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
   [COLOR=Blue]   ITD [/COLOR]                              //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

      [COLOR=Blue]AUF   "Datentransfer"             //Datenbaustein aufrufen
      L     MD    62                    //Merkerdoppelwort laden 
      T     DB1.DBD    0                //transferieren[/COLOR]
Dankeschön für die Mühen

fein fein viel dazu gelernt:)
 
Zuletzt bearbeitet:
Vorweg: habe deinen Code jetzt nicht genau angeschaut ob alles iO ist, habe nur auf deine Fragen geschaut

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          [COLOR=blue] //Laden hier noch notwenig??[/COLOR]
      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 ;) )



Code:
      [COLOR=blue]AUF   "Datentransfer"             //Datenbaustein aufrufen[/COLOR]
[COLOR=blue]     L     MD    62                    //Merkerdoppelwort laden [/COLOR]
[COLOR=blue]     T     DB1.DBD    0                //transferieren[/COLOR]

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:
      [COLOR=blue]AUF   "Datentransfer"             //Datenbaustein aufrufen[/COLOR]
[COLOR=blue]     L     MD    62                    //Merkerdoppelwort laden [/COLOR]
[COLOR=blue]     T    DBD    0                //transferieren[/COLOR]



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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@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.
 
Zuletzt bearbeitet:
@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...
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
@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.
 
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
 
Zuletzt bearbeitet:
Zurück
Oben