//-------------
SIMATIC STEP7 FREEWARE ------------------
// by
// www.sprick01.de
// mail@sprick01.de
//
//------------- SIMATIC STEP7 FREEWARE ------------------
//
//
//AENDERUNGEN AUSSER UMBENENNUNG SIND NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIE BAUSTEINE EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//
//CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//IN DER SIMATIC BIBLIOTHEK GIBT ES ASCII FUNKTIONEN.
//ABER LEIDER NUR FUER STRINGS.
//DIE FOLGENDEN FUNKTIONEN VERWENDEN INT ODER WORD
//DIE ANDEREN FUNKTIONEN GEHEN SPARSAMER MIT SPEICHER UM ALS
//DIE STEP7 BIBLIOTHEK.
//ALLE BAUSTEINE KOENNEN UMBENANNT WERDEN.
//
FC1025 = ASCII '0000'-'9999' NACH INT
// FC1027 = HEX 0000-FFFF NACH ASCII
// FC1035 = WERT ZWISCHEN MIN-MAX PRUEFEN
// FC1050 = ANALOGINPUT/WERTE SKALIEREN
// FC1080 = ZAEHLER ABFALLVERZOEGERT
// FC1081 = ZAEHLER EINSCHALTVERZOEGERT
//GERMANY - RINTELN 18.9.2002
// -----------------------------
FUNCTION "ASC-I" : VOID
TITLE =*ASCII '0000'-'9999' NACH INT
AUTHOR : SPRICK
VERSION : 0.0
VAR_INPUT
ASCII : DWORD ; //ASCII NUMMER 0000 - 9999
END_VAR
VAR_OUTPUT
NUM : INT ; //NUMMER GEWANDELT NACH INT
OK : BOOL ; //WANDLUNG FERTIG OHNE FEHLER
END_VAR
VAR_TEMP
A : STRUCT
OK : BOOL ; //WANDLUNG FERTIG OHNE FEHLER
END_STRUCT ;
END_VAR
BEGIN
NETWORK
TITLE =PRUEFEN UND DANN WANDELN
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
UN #A.OK; //OK SETZEN
S #A.OK;
L DW#16#30303030; //BYTE-0-4 <'0' (ASCII)
L #ASCII;
>D ;
R #A.OK;
RLD 8;
>D ;
R #A.OK;
RLD 8;
>D ;
R #A.OK;
RLD 8;
>D ;
R #A.OK;
L DW#16#39393939; //BYTE-0-4 >'9' (ASCII)
L #ASCII;
<D ;
R #A.OK;
RLD 8;
<D ;
R #A.OK;
RLD 8;
<D ;
R #A.OK;
RLD 8;
<D ;
R #A.OK;
L -1;
U #A.OK; //PRUEFUNG FEHLER
SPBN ENDE; //->AUSGANGSWERT=0
L #ASCII; //EINGANGSWERT
L DW#16#30303030; // - 30303030HEX (ASCII '0000'
-D ; //= ZAHL IN BCD
SLW 4; //ZUSAMMENSCHIEBEN
SLD 4;
SLW 4;
SRD 12;
SLW 4;
SRD 4;
BTD ; //BCD NACH INT
ENDE: T #NUM; //= AUSGEBEN
U #A.OK;
= #OK;
U #A.OK;
SAVE ;
END_FUNCTION
FUNCTION
"H-A" : VOID
TITLE =*HEX 0000-FFFF NACH ASCII
AUTHOR : SPRICK
VERSION : 0.0
VAR_INPUT
HEX : WORD ; //HEX NUMMER
END_VAR
VAR_OUTPUT
ASCII : DWORD ; //NUMMER GEWANDELT NACH ASCII
END_VAR
VAR_TEMP
DWORD1 : DWORD ; //UEBERGABE
END_VAR
BEGIN
NETWORK
TITLE =
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
L #HEX; //ASCII UMLADEN
T #DWORD1;
//-------ZURECHTSCHIEBEN
L LB 2; //HUNDERTER
L W#16#F;
UW ;
L LB 2; //TAUSENDER
SRW 4;
SLW 8;
OW ;
T LW 0;
L LB 3; //EINER
L W#16#F;
UW ;
L LB 3; //ZEHNER
SRW 4;
SLW 8;
OW ;
T LW 2;
//-------WANDELN
L W#16#9; //TAUSENDER
L LB 0;
>=I ;
L W#16#30;
TAK ;
SPB T;
L W#16#37;
T: +I ;
T LB 0;
L W#16#9; //HUNDERTER
L LB 1;
>=I ;
L W#16#30;
TAK ;
SPB H;
L W#16#37;
H: +I ;
T LB 1;
L W#16#9; //ZEHNER
L LB 2;
>=I ;
L W#16#30;
TAK ;
SPB Z;
L W#16#37;
Z: +I ;
T LB 2;
L W#16#9; //EINER
L LB 3;
>=I ;
L W#16#30;
TAK ;
SPB E;
L W#16#37;
E: +I ;
T LB 3;
L #DWORD1;
T #ASCII;
SET ;
SAVE ;
END_FUNCTION
FUNCTION
"CMPR_MIN-MAX" : VOID
TITLE =*WERT ZWISCHEN MIN-MAX
AUTHOR : SPRICK
VERSION : 0.0
VAR_INPUT
IN : INT ; //EINGANGSWERT
MAX : INT ; //OBERER WERT
MIN : INT ; //UNTERER WERT
END_VAR
BEGIN
NETWORK
TITLE =WERT PRUEFEN
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
//
WERT IM BEREICH -> BIE AUF EINS
// ABFRAGE IN KOP PARAMETER "ENO" (OBERSTER PARAMETER)
// ABFRAGE IN AWL - "U BIE" (BIE IST DER OPERAND)
CLR ;
L #MIN;
L #IN;
<=I ; //WERT >=MIN
U( ;
L #MAX;
<=I ; //WERT <=MAX
) ;
SAVE ; //->WERT IO
END_FUNCTION
FUNCTION
"ANA" : VOID
TITLE =*ANALOG INPUT/WERTE SCALIEREN
AUTHOR : SPRICK
VERSION : 0.1
VAR_INPUT
ANA : WORD ; //ANALOG EINGANG (+/-27648)
_100 : REAL ; //WERT BEI EINGANG +27648 (100%)
_0 : REAL ; //WERT BEI EINGANG 0
REL : BOOL ; //MESSWERT FREIGEBEN
TYP : BOOL ; //EINGANGSTYP 0=UNIPOLAR >0 / 1=BIPOLAR +/-
END_VAR
VAR_OUTPUT
WERT : INT ; //AUSGANGSWERT VON UGR BIS OGR
ERR : BOOL ; //BEREICHSUEBERSCHREITUNG
END_VAR
VAR_TEMP
ANA_R : REAL ; //ANALOGWERT ALS GLEITPUNKTZAHL
UEBERLAUF : BOOL ; //BEREICHSUEBERSCHREITUNG
UNTERLAUF_0 : BOOL ; //BEREICHSUNTERSCHREITUNG UNIPOLARER EINGANG
UNTERLAUF : BOOL ; //BEREICHSUNTERSCHREITUNG BIPOLARER EINGANG
PAFE : BOOL ; //PARAMETERFEHLER OGR<UGR
END_VAR
BEGIN
NETWORK
TITLE =ABFRAGE BEREICHUEBERSCHREITUNG
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
//DIESER
BAUSTEIN SKALIERT ANALOGWERTE IN ANDERE WERTE UM.
// !!! ER KANN AUCH GEGENSINNIGE KURVEN UMRECHNEN !!!
// ALSO Z.B 0-1000 NACH 500-0
CLR ;
= #PAFE;
= #ERR;
L 32511;
L #ANA;
<I ;
= #UEBERLAUF;
= #ERR; //-> UEBERLAUF POSITIV
U( ;
L -4864;
<I ;
UN #TYP;
) ;
= #UNTERLAUF_0;
S #ERR; //-> UNTERLAUF UNIPOLARER EINGANG (0-..)
TAK ;
L -32512;
<I ;
= #UNTERLAUF;
S #ERR; //-> UNTERLAUF BIPOLARER EINGANG (+/-)
NETWORK
TITLE =ABFRAGE BEREICHUEBERSCHREITUNG
CLR ;
= #PAFE;
= #ERR;
L 32511;
L #ANA;
<I ;
= #UEBERLAUF;
= #ERR; //-> UEBERLAUF POSITIV
U( ;
L -4864;
<I ;
UN #TYP;
) ;
= #UNTERLAUF_0;
S #ERR; //-> UNTERLAUF UNIPOLARER EINGANG (0-..)
TAK ;
L -32512;
<I ;
= #UNTERLAUF;
S #ERR; //-> UNTERLAUF BIPOLARER EINGANG (+/-)
NETWORK
TITLE =WERT EINLESEN+BEGRENZEN
L #ANA;
U #UEBERLAUF;
SPBN WB10;
L 32511;
WB10: U #UNTERLAUF_0;
SPBN WB12;
L -4864;
WB12: U #UNTERLAUF;
SPBN WB20;
L -32512;
WB20: ITD ;
DTR ;
T #ANA_R;
NETWORK
TITLE =NORMIERTEN WERT BERECHNEN
//
BERECHNUNGSFORMEL:
//
// (OGR-UGR) * ANA
// WERT = ------------------ + UGR
// MAX
//
// MAX = MAXIMALER EINGANGSWERT ( 27648 )
//
// FUNKTIONIERT AUCH BEI OGR < UGR
// WENN MESSWERT UND EINGANG GEGENLAEUFIG SIND
L #_100;
L #_0;
-R ;
L #ANA_R;
*R ;
L 2.764800e+004; // MAXIMALWERT
/R ;
L #_0;
+R ;
RND ;
U #REL; //AUSGABE FREIGEGEBEN UND KEIN PAFE
UN #PAFE;
SPB REL;
L 0;
REL: T #WERT; //-> UMGERECHNETER WERT
NETWORK
TITLE =ENO
UN #ERR;
SAVE ;
END_FUNCTION
FUNCTION
"Z_SA" : VOID
TITLE =*ZAEHLER ABFALLVERZOEGERT
AUTHOR : SPRICK
VERSION : 1.0
VAR_INPUT
SET : BOOL ; //ZAEHLER UND ENO(BIE) SETZEN
TAKT : BOOL ; //TAKT ZUM RUNTERZAEHLEN
WERT : INT ; //SETZWERT ZAEHLER
END_VAR
VAR_IN_OUT
ZAEHLER : WORD ; //ABWAERTSZAEHLER
END_VAR
VAR_TEMP
ZAEHLER_NULL : BOOL ; //ZAEHLER IST NULL
BIT1 : BOOL ; //SCHMIERMERKER
END_VAR
BEGIN
NETWORK
TITLE =KOMMENTAR
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
// IST "#SET" EINS
// WIRD "#ZAEHLER" AUF "#WERT" GESETZT
// WIRD DAS BIE (ENO IN KOP DES AUFRUFENDEN BAUSTEINS) EINS
// IST "#SET" NULL
// ZAEHLT "#ZAEHLER" MIT JEDEM "#TAKT" RUNTER
// IST "#ZAEHLER" NULL
// WIRD DAS BIE (ENO IN KOP DES AUFRUFENDEN BAUSTEINS) NULL
// "#ZAEHLER" BLEIBT STEHEN
NOP 0;
NETWORK
TITLE =ZAEHLER
U #SET; //SET IST EINS
SPBN Z_10;
R #ZAEHLER_NULL;
L #WERT;
T #ZAEHLER; //= ZAEHLER SETZEN
SPA Z_E; //->ENDE
Z_10: L 0;
L #ZAEHLER; //ZAEHLER == 0
==I ;
= #ZAEHLER_NULL; //= MERKER SETZEN
SPB Z_E; //->ENDE
U #TAKT; //SONST IM TAKT
SPBN Z_E;
L 1;
-I ;
T #ZAEHLER; //= ZAEHLER -1
L 0; //ZAEHLER == 0
==I ;
= #ZAEHLER_NULL; //= MERKER SETZEN
Z_E:
NOP 0;
NETWORK
TITLE =AUSGABE
UN #ZAEHLER_NULL; //ZAEHLER NICHT ABGELAUFEN
SAVE ; //= BIE
END_FUNCTION
FUNCTION
"Z_SE" : VOID
TITLE =*ZAEHLER EINSCHALTVERZOEGERT
AUTHOR : SPRICK
VERSION : 1.0
VAR_INPUT
INC : BOOL ; //ZAEHLER HOCHZAEHLEN
RESET : BOOL ; //ZAEHLER RESET (0)
WERT : INT ; //ZAEHLER ENDWERT
END_VAR
VAR_IN_OUT
ZAEHLER : INT ; //ABWAERTSZAEHLER
END_VAR
VAR_TEMP
ZAEHLER_END : BOOL ; //ZAEHLER >= WERT
BIT1 : BOOL ; //SCHMIERMERKER
END_VAR
BEGIN
NETWORK
TITLE =KOMMENTAR
NOP 0;
// -----------------------------
// Freeware by
// www.sprick01.de
// -----------------------------
// mail@sprick01.de
//DIESER BAUSTEIN IST FREEWARE. AENDERUNGEN AUSSER UMBENENNUNG SIND
NICHT ERLAUBT.
//BITTE ERZAEHLEN SIE MIR, WO SIE DIESEN BAUSTEIN EINSETZEN.
//KEINE HAFTUNG UND GARANTIE
//THIS
BLOCK IS FREEWARE. CHANGING EXCEPT RENAMING IS PROHIBITED.
//PLEASE TELL ME IN WHICH APPLICATION YOU USE THIS BLOCK.
//NO LIABILITY AND GUARANTEE
//GERMANY
- RINTELN 18.9.2002
// -----------------------------
//
IST "#INC" EINS
// WIRD "#ZAEHLER" BIS "#WERT" ERHOEHT
// IST "#INC" NULL
// IS DAS EGAL
//
IST "#RESET" EINS
// WIRD "#ZAEHLER" AUF 0 GESETZT
// IST "#RESET" NULL
// IS DAS EGAL
// IST "#ZAEHLER" >= "#WERT"
// WIRD DAS BIE (ENO IN KOP DES AUFRUFENDEN BAUSTEINS) EINS
// "#ZAEHLER" BLEIBT STEHEN
NOP 0;
NETWORK
TITLE =ZAEHLER
U #RESET; //RESET IST EINS
SPBN Z_10;
R #ZAEHLER_END;
L 0;
T #ZAEHLER; //= ZAEHLER RESET
SPA Z_E; //->ENDE
Z_10: L #ZAEHLER; //ZAEHLER HAT WERT ERREICHT
L #WERT;
>=I ;
= #ZAEHLER_END; //= MERKER SETZEN
SPB Z_E; //->ENDE
U #INC; //SONST WENN INC 1
SPBN Z_E;
L #ZAEHLER;
L 1;
+I ;
T #ZAEHLER; //= ZAEHLER +1
L #WERT; //ZAEHLER HAT WERT ERREICHT
>=I ;
= #ZAEHLER_END; //= MERKER SETZEN
Z_E:
NOP 0;
NETWORK
TITLE =AUSGABE
U
#ZAEHLER_END; //ZAEHLER NICHT ABGELAUFEN
SAVE ; //= BIE
END_FUNCTION
|