uflo
Level-1
- Beiträge
- 15
- Reaktionspunkte
- 0
-> Hier kostenlos registrieren
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
Hi,Das mit dem automatischen Abschalten nach Trocknugszeitende funktioniert mit der Schaltung so aber nicht. Hier kannst du nur Abschalten wenn ein Benutzer den Austaster drückt.
DATA_BLOCK "Priorität"
TITLE =
VERSION : 0.1
STRUCT
Prio : ARRAY [1 .. 10 ] OF
INT ;
END_STRUCT ;
BEGIN
Prio[1] := 0;
Prio[2] := 0;
Prio[3] := 0;
Prio[4] := 0;
Prio[5] := 0;
Prio[6] := 0;
Prio[7] := 0;
Prio[8] := 0;
Prio[9] := 0;
Prio[10] := 0;
END_DATA_BLOCK
FUNCTION FC 2 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
Ofen_Nummer : INT ;
END_VAR
VAR_TEMP
Zeiger : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =
L P#0.0;
T #Zeiger;
AUF "Priorität";
W: L DBW [#Zeiger];
L 0;
==I ;
SPB NULL;
L #Zeiger;
L P#2.0;
+D ;
T #Zeiger;
SPA W;
NULL: L #Ofen_Nummer;
T DBW [#Zeiger];
END_FUNCTION
FUNCTION FC 3 : VOID
TITLE =
VERSION : 0.1
BEGIN
NETWORK
TITLE =Ofen 1
U M 1.0; // Einschaltbefehl Ofen 1
UN M 1.2; // Ofen 1 in Liste eingetragen
FP M 1.1; // Flanke
SPBN xxx;
CALL FC 2 (
Ofen_Nummer := 1);
SET ;
S M 1.2; // Ofen 1 in Liste eingetragen
xxx: NOP 0;
NETWORK
TITLE =Ofen 2
U M 2.0; // Einschaltbefehl Ofen 2
UN M 2.2; // Ofen 2 in Liste eingetragen
FP M 2.1; // Flanke
SPBN yyy;
CALL FC 2 (
Ofen_Nummer := 2);
SET ;
S M 2.2; // Ofen 2 in Liste eingetragen
yyy: NOP 0;
END_FUNCTION
Hallo Paule
Wie kann man in einer Schleife feststellen welches Bit in einem Wort gesetzt wurde? In SCL ist es sicher einfacher als AWL-Sprache. Kannst du mir zeigen wie das geht, Du bist sicher stark in SCL!!!
FUNCTION FC 1 : VOID
VAR_INPUT
IN : WORD ;
END_VAR
VAR_OUTPUT
POS : INT ;
END_VAR
VAR_TEMP
Zaehler : INT ;
END_VAR
BEGIN
L #IN;
L W#16#0;
==I ;
SPB OUT; //Sprung zu OUT wenn kein Bit = TRUE
TAK ; //IN
L W#16#8000;
==I ;
SPB OUT1; //Sprung zu OUT1 wenn Bit 16 = TRUE
TAK ; //IN
ITD ; //wandeln
DTR ; //in REAL
LN ; //natürlicher Logarithmus von IN
L 6.931000e-001; //natürlicher Logarithmus von 2
/R ;
RND ; //Ergebniss REAL wandeln in INT
L 1; //Eins dazu addieren
+I ;
T #POS; //Position ausgeben
BEA ; //Ende
OUT: T #POS; // => 0 kein Bit
BEA ; //Ende
OUT1: L 16; // => 16 Bit 16
T #POS; //Ende
END_FUNCTION
U E124.1
FP M124.1
L 1
spb ok
U E124.2
FP M124.2
L 2
spb ok
....
ok: T Eintrag
Hallo Paule
Wie kann man in einer Schleife feststellen welches Bit in einem Wort gesetzt wurde? In SCL ist es sicher einfacher als AWL-Sprache. Kannst du mir zeigen wie das geht, Du bist sicher stark in SCL!!!
FUNCTION FC1 : VOID
VAR_INPUT
IN : WORD;
END_VAR
VAR_OUTPUT
POS : INT;
END_VAR
BEGIN
IF IN = 0 THEN //wenn kein Bit = TRUE
POS := 0; //POS = 0
ELSIF WORD_TO_INT(IN) = -32768 THEN //wenn Bit 16 = TRUE
POS := 16; //POS = 16
ELSE
POS := REAL_TO_INT(LN(INT_TO_REAL(WORD_TO_INT(IN))) / 6.931000e-001) + 1;
END_IF;
END_FUNCTION
geht auch anders, ohne Schleife.
Hast du überhaupt gelesen was ich geschrieben habe? :twisted:Den Code fürs Fifo solltest du mit dem was hier steht: https://www.sps-forum.de/threads/8887 eingendlich Zusammenfrikeln können. (Ganz unten Filo, je nach Puffergröße kannst du dann im höchsten Byte deine nummer auslesen)
jetzt musst du halt noch verhindern, das ein Ofen 2 mal eingetragen wird, und das der Filo FC solange aufgerufen wird bis im höchsten byte eine ofennumer steht!
nee, nur überflogen, das war wahrscheinlich das Problem.Hast du überhaupt gelesen was ich geschrieben habe? :twisted:
Bei mir braucht er nichts "Zusammenfrikeln" und das verhindern das nicht zweimal der gleiche Ofen eingetragen wird habe ich auch schon vorgesehen.
AWL-Quelle übersetzen und es läuft, was man von deinem Wahnsinns Code jetzt nicht wirklich behaupten kann.
Schreib ihm doch lieber den Teil der noch fehlt:
Das Austragen aus der Liste und das erneute sortieren.
U E 124.1
FP M 124.1
L 1
SPB ok
U E 124.2
FP M 124.2
L 2
SPB ok
//usw...
L 0
ok: T DB20.DBW 20
SET
R #warda
//Fifo...
AUF DB 20
L 0
LAR1
sl: L DBW [AR1,P#0.0]
L 0
==I
SPB sieb
SPA prf
sieb: L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
L 0
T DBW [AR1,P#2.0]
prf: L DBW [AR1,P#0.0]
L DBW 20
==I
S #warda
L P#2.0
+AR1
TAR1
L 128 // 16 SLD3 ==>128, da 18 letzer Registerplatz
<=I
SPB sl
U #warda
BEB
L DBW 20
T DBW 18
Hi,
ist klar. Das Bild ist nur total vereinfacht und zur Erklärung wie das im Prinzip laufen soll.
In Wahrheit kommt natürlich noch einiges vor den Aus- / Eintastern. Das ist eine ziemlich komplexe Steuerung über Prozessregler mit Durchlüftungs- und Spülvorgängen.
Da die LN Funktion aber auf Bsp:einer 31x CPU eine typische Ausführungszeit von 227us hat, denke Ich das er mit der Schleifen Funktion besser beraten ist, da diese in diesem fall meist schneller sein wird!
Aber es geht...
Absolut,(untested)
L 0
ok: T DB20.DBW 20
SET
R #warda
//Fifo...
AUF DB 20
L 0
LAR1
sl: L DBW [AR1,P#0.0]
L 0
==I
SPB sieb
SPA prf
sieb: L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
L 0
T DBW [AR1,P#2.0]
prf: L DBW [AR1,P#0.0]
L DBW 20
==I
S #warda
L P#2.0
+AR1
TAR1
L 128 // 16 SLD3 ==>128, da 18 letzer Registerplatz
<=I
SPB sl
U #warda
BEB
L DBW 20
T DBW 18
Gefällt mir zwar besser, aber eigentlich bin Ich als SPS Programmierer tätig!sorry Jochen das ist ein NOP 0
Vielleicht solltes du bei deinen Hochsprachen bleiben, was ich so lese ist das deine Welt.
Das es nicht geht, keine Funktion!Was ist daran ein NOP 0?
Das es nicht geht, keine Funktion!
SET
R #austragen
//Taster fürs eintragen
U M 99.0
FP M 124.1
L 1
SPB ok
U M 99.1
FP M 124.2
L 2
SPB ok
//usw...
//Taster fürs austragen
SET
S #austragen
U M 99.2
FP M 124.1
L 1
SPB ok
U M 99.3
FP M 124.2
L 2
SPB ok
//usw...
L 0
ok: T DB20.DBW 20
SET
R #warda
//Fifo...
AUF DB 20
L 0
LAR1
sl: L DBW [AR1,P#0.0]
L 0
==I
SPB sieb
//Hier noch zum austragen
U(
L DBW [AR1,P#0.0]
L DBW 20
==I
)
U #austragen
SPB sieb
SPA prf
sieb: L DBW [AR1,P#2.0]
T DBW [AR1,P#0.0]
L 0
T DBW [AR1,P#2.0]
prf: L DBW [AR1,P#0.0]
L DBW 20
==I
S #warda
L P#2.0
+AR1
TAR1
L 128 // 16 SLD3 ==>128, da 18 letzer Registerplatz
<=I
SPB sl
U #warda
O #austragen
BEB
L DBW 20
T DBW 18
Was soll denn funktionieren?also habs grad in den Simulator geladen, da funzts...
Was soll denn funktionieren?
Ich dachte wir reden davon wenn ein Ofen deaktiviert wurde, er in der Liste ausgetragen wird und die Liste neu sortiert wird.
Oder was genau soll der Code bewirken?
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen