MicroWin => FC-Aufruf und MB übergeben

mega_ohm

Level-2
Beiträge
675
Reaktionspunkte
45
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe mal eine Frage zu MicroWin ( Version v4.?? Stand: 10/2008 )

Wie funktioniert da ein FC- Aufruf mit Übergabe eines MB ?

Code:
U M0.0
JMP 1 // soll springen, wenn M0.0= 1
Call MB16, FC5 // sonst FC5 aufrufen und MB16 übergeben
//
LBL 1 // der Rest ist nach dem selben Strickmuster, nur mit anderem
U M0.1 //  Übergabe- MB
JMP 2
Call MB18, FC5
//
...
LBL 14
U M1.7
JMP 15
Call MB44, FC5
//
LBL 15  // soll wie  NOP 0 funktionieren
Ist JMP ein absoluter Sprung oder wird nur gesprungen, wenn Mx.x= 1 ?

Ich habe das Progi eigentlich in s7 geschrieben. Da weiß ich, wie was funktioniert.
Danach hatte ich die lustige Idee, das s7- Progi einfach als AWL- Quelle zu exportieren und in MicroWin als AWL- Quelle zu importieren.
Naja... importiert wurden zumindest die Kommentare richtig. Jede Programmzeile mußte nachbearbeitet werden.
Das ist mir auch soweit geglückt. Selbst das DB- Handling (heist in MicroWin z.B.: VB6 (vergleichbar mit DB1.DBB6) oder VW für WORD etc.
habe ich rausgefunden.
Nur dieses blöde Übergabe- Byte zum FC5 wird nix.
Der FC5 wird abgearbeitet.
Normalerweise sollte er nicht mehrfach in einem Zyklus aufgerufen werden ( JMP- Befehl ). Selbst, wenn JMP ein absoluter Sprung wäre, müßte doch zumindest erstmal irgendwas bei Erfüllung einer Mx.x- Bedingung übergeben werden ( auch wenn es das falsche MB wäre), aber es passiert gar nix.

Im FC 5 ist eine temp. Variable UebByte als Byte (IN) deklariert.
 
Aufruf

Hallo,

am einfachsten hätteste dein Problem gelöst wenn du mal in Microwin ein SBR in KOP/FUP aufrufst. FC5 kannste vergessen -> das gehört in ein SBR. Der Aufruf ist auch einfach:

Code:
LD M0.0
CALL SBR_0, MW20

André
 
Hallo,

am einfachsten hätteste dein Problem gelöst wenn du mal in Microwin ein SBR in KOP/FUP aufrufst. FC5 kannste vergessen -> das gehört in ein SBR. Der Aufruf ist auch einfach:

Code:
LD M0.0
CALL SBR_0, MW20

André
Es ist ein SBR_5, der aufgerufen wird. Ich habe den Prog.- Ausschnitt aber zu Hause getippselt, wußte nicht mehr die genaue Bezeichnung und nannte es daher einfach FC5 :)

Das mit dem LD bzw. LDN statt U bzw. UN in der 1. Zeile einer Bedingung habe ich auch schon herausgefunden, weil ich mir einfach mal eine FUP- UND- Verknüpfung in AWL angesehen habe.

Leider lösen diese Tipps mein Problem mit Sprüngen und das Nichtfunktionieren importierter AWL- Quellen nicht.

Mal so gefragt:
Muß ich denn in s7-MicroWin überhaupt springen, wenn ich den SBR_5 mehrmals verwende ?
Code:
Ld M0.0           // wenn =1 dann
Call SBR_5, MB16  // SBR_5 aufrufen und MB16 übergeben
// 
Ld M0.1               
Call SBR_5, MB18
//
...
//
Ld M1.7
Call SBR_5, MB44
// 
LDB<> MB10, 0    // Vergleich MB 10 <> 0 ( MB10 wird von SBR_5
                 // verwendet) 
UN T42           // T42 = TOF; nach Ablauf einer Zeit
Call SBR_5, 0    // Ausgabe löschen

Würde ein bedingter Sprung so aussehen ?
Code:
LD M0.0 // wenn =1 
JMP 1 // dann Sprung
//
LBL 1
...
 
Zuletzt bearbeitet:
1. Wenn du den SBR5 mehrmals bedingt verwenden willst, kannst du das ohne Sprünge tun,
weil der Call Befehl ohnehin nur VKE-Abhängig ausgeführt wird.

2. Dein bedingter Sprung ist vom Syntax her korrekt.

3. Zu deinen importierten AWL-Quellen, ich wünsche dir aufgrund der doch absolut unterschiedlichen Befehlsstrucktur zwischen 200 und 300/400 damit noch viel Freude.
Dazu kann man bestenfalls sagen, das sowas im "göttlichen" Plan von Siemens wohl eher nicht vorgesehen ist.
Vielleicht wird der Punkt ja mit der 1200 besser ...

Mfg
Manuel
 
Zurück
Oben