Problem bei Umsetzung

Zet0r

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Also folgende Aufgabe soll umgesetzt werden. Es gibt 4 Steuerausgänge und 4 Dateneingänge. Als erstes soll der erste Steuerausgang auf 1 gesetzt werden. Dann sollen die 4 Dateneingänge auslesen werden. Die Werte müssen nun zwischengespeichert werden z.B. als Binärzahl (z.B. 1010). Dann wird der erste Steuerausgang auf 0 gesetzt und der zweite Steuerausgang auf 2 und die Werte sollen wieder ausgelesen und zwischengespeichert werden. So soll das dann auch für den 3. und 4. Steuerausgang gemacht werden. Die 4 4-stelligen Binärzahlen sollen dann in einem Doppelword zusammengefasst werden. Was dannach kommt, sollte ich alleine schaffen. Dann widerholt sich der Ablauf. In welcher Programmiersprache(AWL,KOP,FUP) das ganze Umgesetzt wird ist egal. Ich habe keine Ahnung wie das funktionieren soll und hoffe ihr könnt mir helfen.
 
bis wann sind die hausaufgaben zu erledigen? :ROFLMAO:

gar kein plan ist schlecht, beruf wechseln! falls d aber schon ne idee hast, zeig sie uns!

[edit] für vier vierstellige binärzahlen braucht es nur ein word [/edit]
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
das ist wirklich eine schöne aufgabe für azubis, also besonders dann wenn man es in ein word schreiben möchte ... ich hab da mal was vorbereitet:

Code:
*
      U     E      1.0                  //neustart
      FP    M      4.5                  
      SPBNB _005
      S     M      3.7                  //start bzw.nullschritt
      R     M      4.0                  //schrittmerker rücksetzen
      R     M      4.1                  //schrittmerker rücksetzen
      R     M      4.2                  //schrittmerker rücksetzen
      R     M      4.3                  //schrittmerker rücksetzen
      L     0                           //und eine 0
      T     MW    20                    //ins ergebnis laden
_005: NOP   0

      U     E      1.1                  //weiterschaltbedingung
      FP    M      4.4                  //über taster
      =     M      5.0

      U     M      3.7                  //nullschritt
      O     M      4.3                  //schritt 4
      U     M      5.0                  //und weiterschalten erlaubt
      S     M      4.0                  //macht schritt 1
      R     M      4.3                  //damit vergessen wir schritt 4
      R     M      3.7                  // oder den nullschritt
      R     M      5.0                  //und wenn schritt 1 aktiv, darf auch nicht weitergeschalten werden

      U     M      4.0                  //schritt 1 aktiv
      FP    M      6.0                  //aber nur einmal lesen
      SPBNB _001
      L     EB     2                    //eingänge lesen
      L     W#16#F                      //4 wollen wir haben
      UW                                //also maskieren
      T     MB    21                    //und speichern
_001: NOP   0

      U     M      4.0                  //schritt 1 ausgeführt
      U     M      5.0                  //weiterschalten erwünscht
      S     M      4.1                  //macht schritt 2
      R     M      4.0                  //schritt 1 können wir also vergessen
      R     M      5.0                  //und wenn schritt 2 aktiv, darf auch nicht weitergeschalten werden

      U     M      4.1                  //schritt 2 aktiv
      FP    M      6.1                  //aber nur einmal lesen
      SPBNB _002
      L     EB     2                    //eingänge lesen
      SLW   4                           //um 4 stellen nach links schubsen
      L     W#16#F0                     //maskieren
      UW                                //und verknüppeln                               
      L     MB    21                    //mit schritt 1
      OW                                //verodern
      T     MB    21                    //und weg damit
_002: NOP   0

      U     M      4.1                  //schritt 2 ausgeführt
      U     M      5.0                  //weiterschalten erwünscht
      S     M      4.2                  //macht schritt 3
      R     M      4.1                  //schritt 2 können wir also vergessen
      R     M      5.0                  //und wenn schritt 3 aktiv, darf auch nicht weitergeschalten werden

      U     M      4.2                  //schritt 3 aktiv
      FP    M      6.2                  //aber nur einmal lesen
      SPBNB _003
      L     EB     2                    //eingänge lesen
      L     W#16#F                      //4 wollen wir haben
      UW                                //also maskieren
      T     MB    20                    //und speichern
_003: NOP   0

      U     M      4.2                  //schritt 3 ausgeführt
      U     M      5.0                  //weiterschalten erwünscht
      S     M      4.3                  //macht schritt 4
      R     M      4.2                  //schritt 3 können wir also vergessen
      R     M      5.0                  //und wenn schritt 4 aktiv, darf auch nicht weitergeschalten werden

      U     M      4.3                  //schritt 4 aktiv
      FP    M      6.3                  //aber nur einmal lesen
      SPBNB _004
      L     EB     2                    //eingänge lesen
      SLW   4                           //um 4 stellen nach links schubsen
      L     W#16#F0                     //maskieren
      UW                                //und verknüppeln
      L     MB    20                    //mit schritt 3
      OW                                //verodern
      T     MB    20                    //und weg damit
_004: NOP   0

//zu erst lampe an, dann einlesen, also:
      U     M      3.7
      =     A      1.0                  //lampe 1
      U     M      4.0
      =     A      1.1                  //lampe 2
      U     M      4.1
      =     A      1.2                  //lampe 3
      U     M      4.2
      =     A      1.3                  //lampe 4

// die vier eingelesenen 4-stelligen binärzahlen liegen somit im MW 20
// wobei in MB21 schritt 1 und 2 (LSB->MSB) und im MB 20 schritt 3 und 4 liegen
 
Zuletzt bearbeitet:
Danke für deine Antwort. Wird ne Weile dauern eh ich deinen Code kompett durchschaue...
bis wann sind die hausaufgaben zu erledigen? :ROFLMAO:

gar kein plan ist schlecht, beruf wechseln! falls d aber schon ne idee hast, zeig sie uns!
bis Ende Juni ^^. Wenn ich das ganze in C++ programmieren müsste, währe es kein Problem, aber mit den Mitteln die STEP 7 bereit stellt, sah ich keine Möglichkeit. Ich hätte eigendlich an sowas wie eine Taktgesteuerte Ansteuerung gedacht, aber sowas wie einen Taktgenerator stellt S7 scheinbar nicht bereit... In den Vorlesungen hat man uns auch nicht gesagt wie man mehrere Eingangswerte zu einer Zahl zusammenfasst. Und als ich das selber probiert habe, hat es nicht funktioniert.
[edit] für vier vierstellige binärzahlen braucht es nur ein word [/edit]
stimmt...
das ist wirklich eine schöne aufgabe für azubis, also besonders dann wenn man es in ein word schreiben möchte ... ich hab da mal was vorbereitet:

was hat das hier zu bedeuten: "_004: NOP 0" und "SPBNB _001"? Sind das Sprungstellen?
 
Danke für deine Antwort. Wird ne Weile dauern eh ich deinen Code kompett durchschaue...

es ist im wesentlichen eine schrittkette, die jeden schritt halt etwas macht, was steht im kommentar ...

was hat das hier zu bedeuten: _004: NOP 0 und SPBNB _001? Sind das Sprungstellen?

das eine ist der sprungbefehl (SPBN - springe bedingt wenn VKE=0) und das andere ist die sprungmarke, die angesprungen werden soll, muß nicht mit NOP 0 (Nulloperation) gefüllt sein
 
lang ists her :D

also ich hab mal ein eigenes Programm geschrieben und würde gerne eure Meinung hören ob das so funktionieren kann

Code:
      S     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      S     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   126                    //Im Merker 126 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      S     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      S     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   128                    //Im Merker 128 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren


      L     MW   125                    //ersten Merker laden
      L     MW   126                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   129                    //In Ergebnismerker 129 laden

      L     MW   129                    //Ergebnismerker 129 laden
      L     MW   127                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   129                    //In EM 129 speichern

      L     MW   128                    //vierten Merker laden
      L     MW   129                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   129                    //In EM 129 speichern


      L     MW   129                    //Ergebnismerker 129 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   129                    //speichern

      L     MW   129                    //Ergebnismerker 129 laden
      L     3.456000e+000
      *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden




      BE                                //Baustein ENDE
Die genaue Aufgabenstellung lautet folgendermaßen:
Ein Gleichstrommotor soll mittels einer SPS S7-314IFM gesteuert werden. Dazu soll die Drehzahl über einen 4-stelligen BCD-kodierten Vorwahldrehschalter eingestellt werden. Zum Einlesen des Wertes müssen die vier Dezimalstellen nacheinander aktiviert werden (S-St1...S-St4), so daß der entsprechende BCD-Wert an den Dateneingängen (S-D0...S-D3) anliegt. Die Ausgabe der Steuerspannung für den Motor erfolgt über den Analogausgang der Steuerung, wobei angenommen wird, daß die Drehzahl sich proportional zur Steuerspannung verhält und bei 10 V 8000 min-1 beträgt.
 
Code:
[B][COLOR=Red]//wodurch bedingt? VKE darf ich mir aussuchen? SET ist eine definierte 1 [/COLOR][/B]
      S     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      S     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   126                    //Im Merker 126 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      S     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      S     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   128                    //Im Merker 128 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren

[COLOR=Red]//kannst du die wortschubserei erklären?[/COLOR]
      L     MW   125                    //ersten Merker laden
      L     MW   126                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   129                    //In Ergebnismerker 129 laden

      L     MW   129                    //Ergebnismerker 129 laden
      L     MW   127                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   129                    //In EM 129 speichern

      L     MW   128                    //vierten Merker laden
      L     MW   129                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   129                    //In EM 129 speichern


      L     MW   129                    //Ergebnismerker 129 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   129                    //speichern

      L     MW   129                    //Ergebnismerker 129 laden
      L     3.456000e+000               [B][COLOR=Red]//dies ist kein INT[/COLOR][/B]
      *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden [B][COLOR=Red]"UA" ist bit, byte, word...???[/COLOR][/B]




      BE                                //Baustein ENDE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
[B][COLOR=Red]//wodurch bedingt? VKE darf ich mir aussuchen? SET ist eine definierte 1 

[COLOR=Orange]//In der Aufgabenstellung steht doch "[/COLOR][/COLOR][COLOR=Orange]Zum Einlesen des Wertes
 müssen die vier Dezimalstellen nacheinander aktiviert werden
 (S-St1...S-St4)". Also aktiviere ich die erste Steuerleitung H-St1 
mit dem Set und lese die Eingänge aus.[/COLOR][/B]
[B][COLOR=Red]
[/COLOR][/B]       S     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      S     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   126                    //Im Merker 126 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      S     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      S     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   128                    //Im Merker 128 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren

[COLOR=Red]//kannst du die wortschubserei erklären?

[B][COLOR=Orange]//Die 4 Word-Merker  werden zu einem Word zusammengefasst. 
Also wenn der Merker 125 z.B 000F als Wert hat und der Merker 126
 den Wert 00F0 soll der Merker 129 den Wert 00FF haben. 
Ich kann doch immer nur 2 Wörter gleichzeitig ODER verknüfen oder?[/COLOR][/B]

[/COLOR]       L     MW   125                    //ersten Merker laden
      L     MW   126                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   129                    //In Ergebnismerker 129 laden

      L     MW   129                    //Ergebnismerker 129 laden
      L     MW   127                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   129                    //In EM 129 speichern

      L     MW   128                    //vierten Merker laden
      L     MW   129                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   129                    //In EM 129 speichern


      L     MW   129                    //Ergebnismerker 129 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   129                    //speichern

      L     MW   129                    //Ergebnismerker 129 laden
      L     3.456000e+000               [B][COLOR=Red]//dies ist kein INT

[COLOR=Orange]//Was meinst du damit? Muss ich das WORD in 
eine Gleitkommazahl wandeln um das zu realisieren?[/COLOR]

[/COLOR][/B]       *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden [B][COLOR=Red]"UA" ist bit, byte, word...??? 

[COLOR=Orange]//UA ist der Analogausgang "PAW128" also ein WORD...[/COLOR]
[/COLOR][/B] 



      BE                                //Baustein ENDE
 
Code:
[B][COLOR=Red]//wodurch bedingt? VKE darf ich mir aussuchen? SET ist eine definierte 1 

[COLOR=Orange]//In der Aufgabenstellung steht doch "[/COLOR][/COLOR][COLOR=Orange]Zum Einlesen des Wertes
 müssen die vier Dezimalstellen nacheinander aktiviert werden
 (S-St1...S-St4)". Also aktiviere ich die erste Steuerleitung H-St1 
mit dem Set und lese die Eingänge aus.

[COLOR=Red]//wird aber nur ausgeführt wenn das VKE = 1 ist ... also min:[/COLOR]
[/COLOR][/B] [B][COLOR=Red]
[/COLOR][/B]      [B][COLOR=Red]SET                               //wobei ich eine richtige Startbedingung bevorzugen würde[/COLOR][/B]
      S     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      S     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   126                    //Im Merker 126 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      S     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      S     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   128                    //Im Merker 128 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren

[COLOR=Red]//kannst du die wortschubserei erklären?

[B][COLOR=Orange]//Die 4 Word-Merker  werden zu einem Word zusammengefasst. 
Also wenn der Merker 125 z.B 000F als Wert hat und der Merker 126
 den Wert 00F0 soll der Merker 129 den Wert 00FF haben. 
Ich kann doch immer nur 2 Wörter gleichzeitig ODER verknüfen oder?

[COLOR=Red]//in Anbetracht der Tatsache, dass MW125 und MW126 überlappen würde eine
Oder-verknüpfung so aussehen:

MW125:  0000 0000 [U]0000 1111[/U]
MW126:  [U]0000 1111[/U] xxxx xxxx
OW
MW129:  0000 1111 xxxx 1111
also:      0    F    x    F
[/COLOR][/COLOR][/B] 
[/COLOR]      L     MW   125                    //ersten Merker laden
      L     MW   126                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   129                    //In Ergebnismerker 129 laden

      L     MW   129                    //Ergebnismerker 129 laden
      L     MW   127                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   129                    //In EM 129 speichern

      L     MW   128                    //vierten Merker laden
      L     MW   129                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   129                    //In EM 129 speichern


      L     MW   129                    //Ergebnismerker 129 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   129                    //speichern

      L     MW   129                    //Ergebnismerker 129 laden
      L     3.456000e+000               [B][COLOR=Red]//dies ist kein INT

[COLOR=Orange]//Was meinst du damit? Muss ich das WORD in 
eine Gleitkommazahl wandeln um das zu realisieren?
[COLOR=Red]//wenn du mit 3,456 multiplizieren möchtest kommst du um eine wandlung nicht drum rum[/COLOR]
[/COLOR] 
[/COLOR][/B]      *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden [B][COLOR=Red]"UA" ist bit, byte, word...??? 

[COLOR=Orange]//UA ist der Analogausgang "PAW128" also ein WORD...
[COLOR=Red]// dann mußt du dir hier noch was einfallen lassen, wie du die gleitpunktzahl 
sinnvoll abgebildet bekommst, schau dir mal den FC106 "UNSCALE" aus der Standard Libary an[/COLOR]
[/COLOR] [/COLOR][/B] 
      BE                                //Baustein ENDE
 
Das funktioniert so nicht. Das Aktivieren der Steuerleitung erfolgt, danach muß der Ausgang erst einmal von der Steuerung an die Peripherie gehen, das erfolgt am Zyklusanfang (oder Ende, ist in diesem Falle ja egal). Erst dann kann man das Ergebnis am Eingangsbyte ablesen, wenn man Pech hat und der externe BCD-Schalter eine Elektronik enthält, die Zeit zum Umschalten benötigt, muß man auch hier nochmal etwas warten. Also kannst du maximal in jedem SPS-Zyklus eine Steuerleitung aktivieren und abfragen, bzw. falls der BCD-Schalter zu langsam ist auch da noch eien Zyklus warten. Ich würde mir in diesem Falle eine kleine Schrittkette bauen, die in 8 Schritten durchläuft:

1. Steuerleitung 1 aktivieren, die anderen deaktivieren
2. Ergebnis auslesen
3. Steuerleitung 2 aktivieren, die anderen deaktivieren
4. Ergebnis auslesen
5. Steuerleitung 3 aktivieren, die anderen deaktivieren
6. Ergebnis auslesen
7. Steuerleitung 4 aktivieren, die anderen deaktivieren
8. Ergebnis auslesen, Berechnen der Drehzahl und Ausgeben an den Servo

So Programmieren, das die SPS in einem Zyklus immer nur einen Schritt ausführt, nicht alle Schritte auf einmal!!!
 
Zuletzt bearbeitet:
Aber in seinem eigenen neuen Code war genau das nicht mehr drin, womit das Ganze garantiert nicht funzt!

richtig ... da hilft noch nicht mal schneller als die zykluszeit zu sein, er arbeitet ja mit dem prozessabbild ... aber auch die wort-schubserei scheint nicht so das gelbe zu sein ...
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
richtig ... da hilft noch nicht mal schneller als die zykluszeit zu sein, er arbeitet ja mit dem prozessabbild ... aber auch dir wort schubserei scheint nicht so das gelbe zu sein ...

@ZetOr

Mach das mit dem Byte nicht zu kompliziert. Jeder Zyklus bringt dir ein Byte.
Sieh dir den Befehl BTD an. Du nimmst jeweils das Byte (BCD) und transferrierst es an die richtige Stelle in einem MD!
Ok das 2. und 4. vorher entsprechend um 4 Bit verschieben und verodern!

Code:
L 0
T MD10

L BCD-Byte 1  //definiert als Byte!
L BCD-Byte 2
SLW 4
OW
T MB13

L BCD-Byte 3
L BCD-Byte 4
SLW 4
OW
T MB12

L MD10
BTD
T MD14
Im MD14 steht dann deine eingelesene 4-stellige Dezimalzahl.
 
Zuletzt bearbeitet:
Code:
[B][COLOR=Orange] 
[COLOR=Red]//wird aber nur ausgeführt wenn das VKE = 1 ist ... also min:[/COLOR]
[/COLOR][COLOR=Orange]//ach so...jetzt versteh ich was du meinst...also S durch SET ersetzen.
Aber für R gilt das nicht oder?[/COLOR][/B] 


       [B]SET[/B]     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      [B]SET[/B]     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      [B]SET[/B]     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   129                    //Im Merker 129 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      [B]SET[/B]     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   131                    //Im Merker 131 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren

[COLOR=Red][B][COLOR=Orange]
[COLOR=Red]//in Anbetracht der Tatsache, dass MW125 und MW126 überlappen würde eine
Oder-verknüpfung so aussehen:

MW125:  0000 0000 [U]0000 1111[/U]
MW126:  [U]0000 1111[/U] xxxx xxxx
OW
MW129:  0000 1111 xxxx 1111
also:      0    F    x    F

[COLOR=Orange]so müsste es dann richtig sein...also ohne Überlappung:[/COLOR]
[/COLOR][/COLOR][/B] 
[/COLOR]       L     MW   125                    //ersten Merker laden
      L     MW   127                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   133                    //In Ergebnismerker 133 laden

      L     MW   133                    //Ergebnismerker 133 laden
      L     MW   129                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   133                    //In EM 133 speichern

      L     MW   131                    //vierten Merker laden
      L     MW   133                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   133                    //In EM 133 speichern


      L     MW   133                    //Ergebnismerker 133 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   133                    //speichern

      L     MW   133                    //Ergebnismerker 133 laden
      L     3.456000e+000             [B][COLOR=Red]

[/COLOR][/B]      *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden [B][COLOR=Red]
[/COLOR][/B]
      BE                                //Baustein ENDE
ich habe mir den FC106 mal angesehen. So wie ich die S7 Hilfe verstanden habe macht er das was die Multiplikation mit der Gleitkommazahl machen soll...Wenn ich den Baustein in den Code reinziehe erscheint folgendes:

Code:
CALL  "UNSCALE"
       IN     :=   MW133              //Wenn ich die S7 Hilfe richtig verstanden habe, muss hier die  zu skalierende  Variable rein, also der Merker 133
       HI_LIM :=8000
       LO_LIM :=0
       BIPOLAR:= 0 //Werte von 0 bis 27648
       RET_VAL:=
       OUT    :=PAW128
Kommt das so hin?? Also bei einem Wert von 8000 im Merker soll der Wert 27648 (entspricht 10V) am Analogausgang anliegen.

@Zet0r

Mach das mit dem Byte nicht zu kompliziert. Jeder Zyklus bringt dir ein Byte.
Sieh dir den Befehl BTD an. Du nimmst jeweils das Byte (BCD) und transferrierst es an die richtige Stelle in einem MD!

Wieso soll ich ein MD benutzen, das ist doch eine 32 Bit Ganzzahl, wenn eine 16 Bit Ganzzahl ausreicht? Und der Analogausgang ist doch auch eine 16 Bit Ganzzahl. Ich habe keinen Befehl gefunden mit dem ich von 32Bit auf 16 zurückwandeln kann....oder steh ich da auf dem Schlauch...
 
aaaaaaaaaaaaalso:

Code:
[B][COLOR=Orange] 
[COLOR=Red]//wird aber nur ausgeführt wenn das VKE = 1 ist ... also min:[/COLOR]
[/COLOR][COLOR=Orange]//ach so...jetzt versteh ich was du meinst...also S durch SET ersetzen.
Aber für R gilt das nicht oder?[/COLOR][/B] 
[B][COLOR=Red]//nein! ich habe es doch auch drüber geschrieben :rolleyes:
//deine darstellung würde sowieso nicht übersetzt werden
//lies dir bitte nochmal ralles beiträge durch
//was du da vorhast funktioniert so nicht![/COLOR][/B]

       [B]SET[/B]     "H-St1"                     //Steuerleistung 1 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F
      UW    
      T     MW   125                    //Im Merker 125 speichern
      R     "H-St1"                     //Steuerleitung 1 deaktivieren

      [B]SET[/B]     "H-St2"                     //Steuerleitung 2 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F0
      UW    
      SLW   4                           //Um 4 Stellen nach links
      T     MW   127                    //Im Merker 127 speichern
      R     "H-St2"                     //Steuerleitung 2 deaktivieren

      [B]SET[/B]     "H-St3"                     //Steuerleitung 3 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F00
      UW    
      SLW   8                           //Um 8 Stellen verschieben
      T     MW   129                    //Im Merker 129 speichern
      R     "H-St3"                     //Steuerleitung 3 deaktivieren

      [B]SET[/B]     "H-St4"                     //Steuerleitung 4 aktivieren
      L     EB   125                    //Eingangsbit laden
      L     W#16#F000
      UW    
      SLW   12                          //Um 12 Stellen verschieben
      T     MW   131                    //Im Merker 131 speichern
      R     "H-St4"                     //Steuerleitung 4 deaktivieren

[COLOR=Red][B][COLOR=Orange]
[COLOR=Red]//in Anbetracht der Tatsache, dass MW125 und MW126 überlappen würde eine
Oder-verknüpfung so aussehen:

MW125:  0000 0000 [U]0000 1111[/U]
MW126:  [U]0000 1111[/U] xxxx xxxx
OW
MW129:  0000 1111 xxxx 1111
also:      0    F    x    F

[COLOR=Orange]so müsste es dann richtig sein...also ohne Überlappung:

[COLOR=Red]//wenn du jetzt noch anfängst mit durch zwei teilbaren,
 natürlichen zahlen adressierst wirds einfacher[/COLOR]
[/COLOR] [/COLOR][/COLOR][/B] 
[/COLOR]       L     MW   125                    //ersten Merker laden
      L     MW   127                    //zweiten Merker laden
      OW                                //ODER Verknüpfen
      T     MW   133                    //In Ergebnismerker 133 laden

      L     MW   133                    //Ergebnismerker 133 laden
      L     MW   129                    //dritten Merker laden
      OW                                // ODER verknüpfen
      T     MW   133                    //In EM 133 speichern

      L     MW   131                    //vierten Merker laden
      L     MW   133                    //Ergebnismerker laden
      OW                                //ODER verknüpfen
      T     MW   133                    //In EM 133 speichern


      L     MW   133                    //Ergebnismerker 133 in AKKU 1 laden
      BTI                               //BCD in Ganzzahl
      T     MW   133                    //speichern

      L     MW   133                    //Ergebnismerker 133 laden
      L     3.456000e+000             [B][COLOR=Red]

[/COLOR][/B]      *I                                //multiplizieren
      T     "UA"                        //in Analogausgang laden [B][COLOR=Red]
[/COLOR][/B]
      BE                                //Baustein ENDE
ich habe mir den FC106 mal angesehen. So wie ich die S7 Hilfe verstanden habe macht er das was die Multiplikation mit der Gleitkommazahl machen soll...Wenn ich den Baustein in den Code reinziehe erscheint folgendes:

Code:
CALL  "UNSCALE"
       IN     :=   M[B][COLOR=Red]W[/COLOR][/B]133              //Wenn ich die S7 Hilfe richtig verstanden habe, muss hier die  zu skalierende  Variable rein, also der Merker 133
       HI_LIM :=8000
       LO_LIM :=0
       BIPOLAR:= 0 //Werte von 0 bis 27648
       RET_VAL:=
       OUT    :=PAW128
Kommt das so hin?? Also bei einem Wert von 8000 im Merker soll der Wert 27648 (entspricht 10V) am Analogausgang anliegen.

und bei 0 liegen 0V an...so ist das richtig, aber die eingabe am IN würde er nicht akzeptieren ... stichwort REAL

Wieso soll ich ein MD benutzen, das ist doch eine 32 Bit Ganzzahl, wenn eine 16 Bit Ganzzahl ausreicht? Und der Analogausgang ist doch auch eine 16 Bit Ganzzahl. Ich habe keinen Befehl gefunden mit dem ich von 32Bit auf 16 zurückwandeln kann....oder steh ich da auf dem Schlauch...

da gibt es nicht viel zu wandeln, bis aufs vorzeichen. also positive zahlen kannst du ohne weiteres beschneiden, solange sie in den bereich der kleineren zahl fallen (plausibilitätsprüfung könnte angebracht sein)
also so:


MD 10 ... DINT mit <=32767
MW 12 ... INT

wenn es sich um eine zorzeichen behaftete zahl handelt ist es ein wenig anders

Code:
*
      L     MD    10                    //DINT
      L     DW#16#7FFFFFFF
      UD                                //DW-und
      T     MD     2                    //als DW speichern
//vorzeichenrichtige Zahl liegt in MW4
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also ich hab mich an die Sache nochmals rangesetzt und jetzt sollte es eigendlich funktionieren.

Hier erstmal der Inhalt die FC 2:

Code:
Netzwerk1 - Schritt 1 - Steuerleitung 1 wird aktiviert
[code]
      U     "TS1"
      =     "S-St1"                     //wenn VKE 1 dann S-St1 aktiv
      SPBNB _001
      L     0
      T     "MD0"                       //MD0 wird 0 gesetzt - "RESET" von MD0
_001: NOP   0
Netzwerk 2 - Schritt 2 - Steuerleitung 1 weiterhin aktiv, lesen und speichern
Code:
      U     "TS2"
      =     "S-St1"
      SPBNB _002
      L     EB   125
      OW    
      T     MW     2
_002: NOP   0
Netzwerk 3 - Schritt 3 - Steuerleitung 2 wird aktiviert
Code:
      U     "TS3"
      =     "S-St2"
Netzwerk 4 - Schritt 4 - Steuerleitung 2 weiterhin aktiv, lesen und speichern
Code:
      U     "TS4"
      =     "S-St2"
      SPBNB _003
      L     EB   125
      SLW   4
      OW    
      T     MW     2
_003: NOP   0
Netzwerk 5 - Schritt 5 - Steuerleitung 3 wird aktiviert
Code:
      U     "TS5"
      =     "S-St3"
Netzwerk 6 - Schritt 6 - Steuerleitung 3 weiterhin aktiv, lesen und speichern
Code:
      U     "TS6"
      =     "S-St3"
      SPBNB _004
      L     EB   125
      SLW   8
      OW    
      T     MW     2
_004: NOP   0
Netzwerk 7 - Schritt 7 - Steuerleitung 4 wird aktiviert
Code:
      U     "TS7"
      =     "S-St4"
Netzwerk 8 - Schritt 8 - Steuerleitung 4 weiterhin aktiv, lesen und speichern
Code:
      U     "TS8"
      =     "S-St4"
      SPBNB _005
      L     EB   125
      SLW   12
      OW    
      T     MW     2
_005: NOP   0
Netzwerk 9 - Schritt 8 - Umrechnung des Ergebnisses
entsprechend der Aufgabenstellung und anlegen an den Analogausgang
Code:
      U     "TS8"
      =     "S-St4"
      SPBNB _006
      L     MW     2                    //MW2 laden
      BTI                               //von BCD in 16 Bit Ganzzahl
      ITD                               //Ganzzahl 16 Bit zu Ganzzahl 32 Bit
      DTR                               //Ganzzahl 32 Bit zu 32 Bit Gleitkomma
      L     3.456000e+000               //Umrechnungs-Faktor laden
      *R                                //Gleitkomma-Muliplikation
      RND                               //Gleitkomma zu Ganzzahl runden
      T     "UA"                        //in den Analogausgang laden
_006: NOP   0
[/code]Das Programm läuft in 8 Zyklen ab. Es gibt immer noch die 4 Steuerleitungen (S-Stx). Diese sind jeweils für 2 Zyklen aktiviert. Im 1. Zyklus wird die Steuerleitung aktiviert und im 2. Zyklus wird dann bei immernoch aktivierter Steuerleitung der Wert eingelesen. 2 Zyklen pro Steuerleitung mal 4 Steuerleitungen, macht 8 Zyklen. Die "TSx" Werte sind Zählerstände. Also wenn der in einem anderen FB umgesetzte Zähler den Wert 8 hat, ist TS8 gleich 1 und die anderen TS Variablen sind 0. Im ersten Zyklus ist TS1 1 und die anderen TS Variablen sind 0.
 
Inzwischen hab ich das Programm zum laufen bekommen und noch ein paar Fehler gefunden. Aber kann mir jemand sagen wo der Fehler im folgenden Code liegt:

Code:
      L     MW     2                    //MW2 laden
      BTI                               //von BCD in 16 Bit Ganzzahl
      ITD                               //Ganzzahl 16 Bit zu Ganzzahl 32 Bit
      DTR                               //Ganzzahl 32 Bit zu 32 Bit Gleitkomma
      L     3.456000e+000               //Umrechnungs-Faktor laden
      *R                                //Gleitkomma-Muliplikation
      RND                               //Gleitkomma zu Ganzzahl runden
      T     "UA"                        //in den Analogausgang UA (Word) laden

Am Analogausgang liegt nur Mist an.
 
Zurück
Oben