praktikant braucht support

VyRuz

Level-1
Beiträge
47
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo erstmal!

ich bin student der elektrotechnik und absolviere gerade mein praxissemester in einer automatisierungstechnik firma.

mein erster auftrag ist es ein vorhandenes Step7 programm von awl
in fup umzuschreiben. Es geht um eine Kransteuerung welche über ein bedienpanel 24 felder ansteuert, dort etwas aus dem lager greift und
es zu einem ablageplatz transportiert.
dummerweise wurde das programm nicht in der firma geschrieben in der ich arbeite, sondern in einer anderen welche jetzt pleite ist.
meine kollegen hier haben auch leider keine zeit mir zu helfen und der sps-programmierer ist zur zeit nicht im haus.

Meine sps kenntnisse reichen nun leider auch nicht aus, um alles alleine hinzukriegen.
Ist es überhaupt sinnvoll alles in fup umzuwandeln oder sollte man auch teile in awl lassen (z.b. die calls)?

hab mal ein bsp bei dem ich probleme hab:

Code:
Positionsvergleich der Brücke

      L     "MW_Sollpos_Bruecke"
      L     "MW_Istpos_Bruecke"
      -I    
      SPP   endT
      NEGI  
endT: NOP   0
      L     "MW_max_Tol_Still"
      <I    
      =     #in_toleranz
      =     "M_Bruecke_Pos_erreicht"
      NOP   0

Wie würdet ihr das in fup umwandeln, hab zwar was gebastelt aber damit bin ich mir sehr unsicher...

CPU: CPU 314-C 2DP
Step7 Version 5.3 + SP2

Ich wär euch sehr dankbar wenn ihr mir bei dem ein oder anderen Problem helfen könntet, ich denke mal das viele von euch richtige sps-cracks sind :wink:

mfg
 
Folgendes hab ich auf die schnelle ersellt.

mw0 = ist
mw2 = soll
mw4 = max
m10.0 = toleranz
m10.1 = pos_erreicht
---------------------------

FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1

BEGIN
NETWORK
TITLE =

U E 0.0;
SPBNB _001;
L MW 0;
L MW 2;
-I ;
T MW 2;
_001: NOP 0;
NETWORK
TITLE =

L MW 2;
L 0;
>I ;
SPB zero;
NETWORK
TITLE =

U E 0.0;
SPBNB _002;
L MW 2;
NEGI ;
T MW 2;
_002: NOP 0;
NETWORK
TITLE =

zero: U E 0.0;
SPBNB _003;
L MW 2;
L MW 4;
-I ;
T MW 4;
UN OV;
SAVE ;
CLR ;
_003: U BIE;
= M 10.0;
= M 10.1;
END_FUNCTION
 
Zuviel Werbung?
-> Hier kostenlos registrieren
super danke, im prinzip hab ich es fast genauso ^^

hab nochmal eine frage, die variable "#in_toleranz" ist im awl prog nur als temporäre variable in der funktion definiert.
muss die noch irgendwo global deklariert werden, oder reicht es wenn ich die auch einfach in die temp liste eintrage?

und nochmal eine verständnisfrage:
was hab ich davon wenn ich das 2erkomplement bilde?
kann mir daraus jetzt keinen reim machen...
 
VyRuz schrieb:
was hab ich davon wenn ich das 2erkomplement bilde?
kann mir daraus jetzt keinen reim machen...
Du bildest die negative Zahl:
22 =0000 0000 0001 0110
1 un 0 tauschen:
1111 1111 1110 1001
1 dazuzählen
1111 1111 1110 1010
= -22
 
:oops:

ok, danke.
weiss zwar was ein 2erkomplement ist, hab mir das jetzt aber nicht so vor augen geführt. jetzt isses mir logsich!
thx
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ gast
ich hab das letzte netzwerk so geschrieben weil es mir logisch war!?
wär das falsch? weil du hast das mit nem sub baustein gemacht?

Code:
endT: L     MW   118
      L     MW   148
      <I    
      =     #in_toleranz
      =     M      2.0

also quasi einfach nur ein cmp zwischen den beiden werten...
 
dank dir, deine version ist natürlich wesentlich eleganter, aber ich will mich erstmal an das sture übersetzen halten. bin zur zeit genug verwirrt :roll:
(ist erst mein dritter tag an step7 und hatte vorher nur ein wenig step5)
aber deine version hat mir gezeigt, das ich mit dem compare baustein nicht falsch lag :wink:

ich hoffe das ihr mir auch bei weiteren fragen helfen könnt, es ist garnicht so einfach für mich solch ein umfangreiches (relativ :D ) zu entschlüsseln und umzusetzen. besonders ohne hilfe von den kollegen...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hab ein nächstes problem entdeckt welches mir bei der umsetzung schwierigkeiten bereitet.
Und zwar geht es um die positionsauswahl für den kran.

Code:
// Zeiger auf Jobnummer bilden
      L     MW   124
      L     2                           //Wortweise
      *I    
      L     142                         //Versatz im DB
      +I    
      T     #mw_temp
      L     P#0.0
      L     #mw_temp
      SLD   3                           //Kovertierung ins Pointerformat
      +D

also bis zu der zeile "T #mw_temp" konnte ich es in fup umsetzen aber jetzt klappt es überhaupt nicht mehr und ich hab keinen plan wie es weitergeht :cry:
weiss nicht wie ich einen pointer in fup lade und das mw_temp krieg ich auch nicht geschoben!
ich hoffe einer von euch hat ne lösung

wär nett wenn mir einer diese konvertierung mal erklären könnte :D
 
Manche sachen sind halt nicht ohne Grund in AWL programmiert,
wie z.B. sld 3 sprich schiebe Links Doppelwort um 3 Bits ->
wird benutzt um Bits auszublenden.
Ich wüßte nicht das es dafür FUP Funktionen gibt.

Gruß,

Nummer5 :)
 
Schreib einfach für die Sachen,die Du nicht übersetzten kannst FC´s oder
FB´s,die Du in FUP aufrufst,sozusagen dann als "Black Box".
Das sieht dann auch übersichtlich aus.

Gruß,

Nummer5 8)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Nummer 5,
sicher ist dein Vorschlag "Black Box" die bessere Lösung. Aber die "Black Box" kann man auch in SCL schreiben. Dann muss man auch nicht wissen, warum der Pointer 3 mal nach links geschoben wird.

Un das man in FUP nicht schieben kann dem widersprech ich.

Gruß Wilfried

PS
Sehe grade dass das Beispiel für rechts schieben ist, geht natürlich auch andersrum.
 

Anhänge

  • shr_dw.jpg
    shr_dw.jpg
    242,6 KB · Aufrufe: 173
wenn mir evtl jemand erklären könnte warum ein pointer 3mal geschoben wird kann ich es vll anders ausdrücken.
ich versteh halt den sinn nicht :?

kann man in fup überhaupt mit pointern arbeiten??
 
Hier wird deine Frage erklärt:

http://www.sps-forum.de/phpBB2/viewtopic.php?t=3843&highlight=pointer+sld

Servus,

in diesem Programmausschnitt ist indirekte Adressierung verwendet. Das heißt, daß die Adresse des zu verarbeitenten Operanten in der Adresse in den eckigen Klammern steht.

z.B AUF DB10
U L 2.0
= A[DBD 30]

AUF DB10 // öffnet den Datenbaustein 10, dies ist auch möglich durch
... DB10.DBD30

L 2.0 // bezieht sich auf die Lokaldaten einer Funktion, diese haben für
einen Aufruf gültigkeit

=A [DBD30] // ist die indirekte Adressierung, die Adresse des
Ausganges steht im Datenbausteindoppelwort 30 des
gerade geöffneten DB. Und zwar in der Form

0000 0000 0000 0xxx xxxx xxxx xxxx x.yyy

dabei gibt das y die Bitadresse an und das x die
Byteadresse.

Hoffe das hilft.
Gruss Buh
Es gab im Forum schon mehrmals Fragen dazu, Suchen nach "Pointer" und "indirekte Adressierung" kann dir schon ganz gut weiterhelfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ok, das hab ich jetzt verstanden, warum man schieben muss :idea:

aber meine frage ist eigentlich ob sowas in fup umzusetzen ist... ?
hab bisher weder irgendetwas mit pointern in fup gesehen, noch funktioniert der schiebebefehl sowie ich das will :roll:
 
hab jetzt folgende awl in folgenden fup umgewandelt.
warum erkennt step7 in dem fup den Merker und die Zahl als Eingangsvariablen für den cmp nicht an?
Was kann ich tun?
 

Anhänge

  • fup_209.jpg
    fup_209.jpg
    38,7 KB · Aufrufe: 128
  • awl.jpg
    awl.jpg
    24,7 KB · Aufrufe: 129
Hallo,
bei DI- Variablen muss ein L# vor dem Wert oder in Einstellungen die
Typüberprüfung abschalten. Ist aber nicht ratsam.
Gruß Wilfried
 

Anhänge

  • di.jpg
    di.jpg
    6,7 KB · Aufrufe: 118
Zuviel Werbung?
-> Hier kostenlos registrieren
Dankefein

das funktioniert jetzt, aber das MD 104 akzeptiert er immer noch nicht.
sehr seltsam... denn wenn ich zum Test mal MD 4 eingebe, nimmt er das an...

Das kann ich mir absolut nicht erklären
 
Hallo,
wenn du in deiner Symbolik den MD104 aufgenommen hast, so hat er den falschen Datentyp. (Typkonflikt)
Wenn er nicht darin aufgeführt ist wird der Datentyp auch nicht geprüft.
 
In der Symboltabelle legst du für das MD auch einen Typ fest, schau mal nach und trage den richtigen Typ ein.
 
Zurück
Oben