Proteus Plus

La sintassi priva di operatori di Proteus, pur permettendo una notevole versatilità e precisione (nonché una maggiore velocità di interpretazione dei programmi), potrebbe talvolta risultare meno comoda  in tutti quei casi dove l'utilizzo del calcolo numerico è preponderante rispetto alle altre funzionalità.

Per venire incontro a queste necessità, è stato realizzato un metalinguaggio basato su Proteus, che ne mutua sostanzialmente la sintassi, introducendo alcune specifiche eccezioni per permettere l'utilizzo degli operatori aritmetici.

Naturalmente, con l'uso degli operatori diviene indispensabile ammettere anche l'introduzione delle parentesi, per specificare correttamente l'ordine di priorità nell'esecuzione delle operazioni.

I programmi Proteus Plus dovrebbero avere sempre estensione .prp; per poterli eseguire non è necessario un altro interprete: è sufficiente lanciare su di essi il programma prp.prt che provvederà a convertirli in un programma Proteus standard, eseguibile con il consueto interprete.

Queste sono le differenze più significative introdotte da Proteus Plus:

esempio: SWITCH  s STREQ()

Questi sono gli operatori ammessi e le corrispondenti funzioni, in ordine di precedenza:

(massima precedenza)

( )    operatore di grouping

[Operatori unari]

! NOT
~ NNOT
++ INC
-- DEC
+ ABS
- NEG

[Operatori binari]

* MUL
/ FDIV
\ DIV
% MOD
^^ POW
+ ADD
; STRCAT
- SUB
<< SHIFTLT
>> SHIFTRT
< LT
<= LE
> GT
>= GE
$ IN
== EQ
= EQ
!= NEQ
$= STREQ
!$ STRNEQ
& NAND
^ NXOR
| NOR
&& AND
|| OR
:= ISET
*= MUL@
/= FDIV@
\= DIV@
%= MOD@
+= ADD@
-= SUB@
&= NAND@
^= NXOR@
|= NOR@
<<= SHIFTLT@
>>= SHIFTRT@

(minima precedenza)

La sintassi per eseguire il convertitore da Proteus Plus a Proteus è la seguente:

proteus prp.prt source.prp [dest.prt | = [parametri..]]

Se si specifica il parametro dest.prt, il programma convertito sarà memorizzato in questo file; se invece si indica il carattere "=" al suo posto, il programma sarà convertito in un file temporaneo ed eseguito direttamente con i parametri eventualmente indicati; il file temporaneo sarà rimosso al termine dell'esecuzione. 

Codice di esempio in Proteus Plus

FUNCTION PVSF(TEMP)

PRIF = 101325.0
T = TEMP + 273.16
Z = 273.16 / T
IF T < 273.16
  P1 = -9.096936 * (Z - 1)
  P2 = -3.56654 * LOG10(Z)
  P3 = 0.876817 * (1.0 - (1.0 / Z))
  P4 = -2.2195983
ELSE
  P1 = (10.79586 * (1.0 - Z)) - 2.2195983
  P2 = 5.02808 * LOG10(Z)
  A1 = -8.29692 * ((1.0 / Z) - 1.0)
  P3 = "1.5047E-04" * (1.0 - (10.0 ^^ A1))
  A2 = 4.76955 * (1.0 - Z)
  P4 = "0.42873E-03" * ((10.0 ^^ A2) - 1.0)
FI
SUM = P1 + P2 + P3 + P4
RETURN PRIF * (10 ^^ SUM)


FUNCTION WBFF(W, DB)

WB1 = DB
REPEAT
  WS1 = XSAT(WB1)
  W1 = ( (WS1 * (2501 - (2.364 * WB1))) + (1.006 * (WB1 - DB)) ) / (2501 + (1.83 * DB) - (4.194 * WB1))
  Y1 = W - W1
  IF ABS(Y1) <= 0.00003
    RETURN WB1
  FI
  IF Y1 = 0
    RETURN WB1
  FI
  IF Y1 > 0
    WB1 = WB1 + 0.5
    CONTINUE
  FI
  REPEAT
    WB2 = WB1 - 1
    WS2 = XSAT(WB2)  
    W2 = ( (WS2 * (2501 - (2.364 * WB2))) + (1.006 * (WB2 - DB)) ) / (2501 + (1.83 * DB) - (4.194 * WB2))
    Y2 = W - W2
    IF ABS(Y2) <= 0.00003
      RETURN WB2
    FI
    IF Y2 = 0
      RETURN WB2
    FI
    IF (Y1 * Y2) < 0
      Z = ABS(Y1 / Y2)
      RETURN ((WB2 * Z) + WB1) / (Z + 1)
    FI
    IF (Y1 * Y2) = 0
      IF Y1 != 0
        RETURN WB2
      ELSE
        RETURN WB1
      FI
    ELSE
      WB1 = WB2
      Y1 = Y2
    FI
  UNTIL 0
UNTIL 0
RETURN


FUNCTION PSDBRH(@DB, @WB, @DP, @PB, @PV, @W, @H, @V, @RH)

IF RH = 0
  RH = 0.001
FI
IF (RH < 0.001) || (RH > 100)
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBRH : DB=" ; PFORMAT("6.2f", DB) ; "  RH=" ; PFORMAT("6.2f", RH)
  CONSOLELN "Umidità relativa non compatibile"
  ABORT 0
FI
PVS = PVSF(DB)
X = RH - 100.0
IF ABS(X) <= 0.09
  RH = 100.0
FI
PV = (RH / 100.0) * PVS
W = (0.62198 * PV) / (PB - PV)
V = (8314.32 / 28.9645) * (DB + 273.16) * (1.0 + (1.6078 * W)) / PB
H = (DB * 1.006) + ((2501 + (1.83 * DB)) * W)
DP = DPF(PV)
WB = WBFF(W, DB)
RETURN


FUNCTION PSDBW(@DB, @WB, @DP, @PB, @PV, @W, @H, @V, @RH)

IF W = 0
  W = "1.E-07"
FI
IF W < "1.E-07"
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBW : DB=" ; PFORMAT("6.2f", DB) ; "  H=" ; PFORMAT("10.3e", W)
  CONSOLELN "Umidità specifica non compatibile"
  ABORT 0
FI
XS = 0.62198 * PVSF(DB) / (PB - PVSF(DB))
IF W > XS
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBW : DB=" ; PFORMAT("6.2f", DB) ; "  H=" ; PFORMAT("10.3e", W)
  CONSOLELN "Umidità specifica non compatibile"
  ABORT 0
FI
H = 1.006 * DB + (2501.0 + 1.83 * DB) * W
V = 8314.32 / 28.9645 * (DB + 273.16) * (1.0 + 1.6078 * W) / PB
PV = W * PB / (0.62198 + W)
RH = PV / PVSF(DB) * 100.0
WB = WBFF(W, DB)
DP = DPF(PV)
RETURN

Codice equivalente tradotto in Proteus da prp.prt

FUNCTION PVSF(TEMP)

PRIF = 101325.0
T = ADD(TEMP,273.16)
Z = FDIV(273.16,T)
IF LT(T,273.16)
  P1 = MUL(-9.096936,SUB(Z,1))
  P2 = MUL(-3.56654,LOG10(Z))
  P3 = MUL(0.876817,SUB(1.0,FDIV(1.0,Z)))
  P4 = -2.2195983
ELSE
  P1 = SUB(MUL(10.79586,SUB(1.0,Z)),2.2195983)
  P2 = MUL(5.02808,LOG10(Z))
  A1 = MUL(-8.29692,SUB(FDIV(1.0,Z),1.0))
  P3 = MUL("1.5047E-04",SUB(1.0,POW(10.0,A1)))
  A2 = MUL(4.76955,SUB(1.0,Z))
  P4 = MUL("0.42873E-03",SUB(POW(10.0,A2),1.0))
FI
SUM = ADD(ADD(ADD(P1,P2),P3),P4)
RETURN MUL(PRIF,POW(10,SUM))


FUNCTION WBFF(W, DB)

WB1 = DB
REPEAT
  WS1 = XSAT(WB1)
  W1 = FDIV(ADD(MUL(WS1,SUB(2501,MUL(2.364,WB1))),MUL(1.006,SUB(WB1,DB))),SUB(ADD(2501,MUL(1.83,DB)),MUL(4.194,WB1)))
  Y1 = SUB(W,W1)
  IF LE(ABS(Y1),0.00003)
    RETURN WB1
  FI
  IF EQ(Y1,0)
    RETURN WB1
  FI
  IF GT(Y1,0)
    WB1 = ADD(WB1,0.5)
    CONTINUE
  FI
  REPEAT
    WB2 = SUB(WB1,1)
    WS2 = XSAT(WB2)
    W2 = FDIV(ADD(MUL(WS2,SUB(2501,MUL(2.364,WB2))),MUL(1.006,SUB(WB2,DB))),SUB(ADD(2501,MUL(1.83,DB)),MUL(4.194,WB2)))
    Y2 = SUB(W,W2)
    IF LE(ABS(Y2),0.00003)
      RETURN WB2
    FI
    IF EQ(Y2,0)
      RETURN WB2
    FI
    IF LT(MUL(Y1,Y2),0)
      Z = ABS(FDIV(Y1,Y2))
      RETURN FDIV(ADD(MUL(WB2,Z),WB1),ADD(Z,1))
    FI
    IF EQ(MUL(Y1,Y2),0)
      IF NEQ(Y1,0)
        RETURN WB2
      ELSE
        RETURN WB1
      FI
    ELSE
      WB1 = WB2
      Y1 = Y2
    FI
  UNTIL 0
UNTIL 0
RETURN


FUNCTION PSDBRH(@DB, @WB, @DP, @PB, @PV, @W, @H, @V, @RH)

IF EQ(RH,0)
  RH = 0.001
FI
IF OR(LT(RH,0.001),GT(RH,100))
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBRH : DB=" PFORMAT("6.2f",DB) "  RH=" PFORMAT("6.2f",RH)
  CONSOLELN "Umidità relativa non compatibile"
  ABORT 0
FI
PVS = PVSF(DB)
X = SUB(RH,100.0)
IF LE(ABS(X),0.09)
  RH = 100.0
FI
PV = MUL(FDIV(RH,100.0),PVS)
W = FDIV(MUL(0.62198,PV),SUB(PB,PV))
V = FDIV(MUL(MUL(FDIV(8314.32,28.9645),ADD(DB,273.16)),ADD(1.0,MUL(1.6078,W))),PB)
H = ADD(MUL(DB,1.006),MUL(ADD(2501,MUL(1.83,DB)),W))
DP = DPF(PV)
WB = WBFF(W,DB)
RETURN


FUNCTION PSDBW(@DB, @WB, @DP, @PB, @PV, @W, @H, @V, @RH)

IF EQ(W,0)
  W = "1.E-07"
FI
IF LT(W,"1.E-07")
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBW : DB=" PFORMAT("6.2f",DB) "  H=" PFORMAT("10.3e",W)
  CONSOLELN "Umidità specifica non compatibile"
  ABORT 0
FI
XS = FDIV(MUL(0.62198,PVSF(DB)),SUB(PB,PVSF(DB)))
IF GT(W,XS)
  CONSOLELN ""
  CONSOLELN "ERRORE IN PSDBW : DB=" PFORMAT("6.2f",DB) "  H=" PFORMAT("10.3e",W)
  CONSOLELN "Umidità specifica non compatibile"
  ABORT 0
FI
H = ADD(MUL(1.006,DB),MUL(ADD(2501.0,MUL(1.83,DB)),W))
V = FDIV(MUL(MUL(FDIV(8314.32,28.9645),ADD(DB,273.16)),ADD(1.0,MUL(1.6078,W))),PB)
PV = FDIV(MUL(W,PB),ADD(0.62198,W))
RH = MUL(FDIV(PV,PVSF(DB)),100.0)
WB = WBFF(W,DB)
DP = DPF(PV)
RETURN
Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico
Midnight Lake iPhone Case Black Women Shoes Black Flat Shoes Leather Flats Black Patent Ballerinas Black Ballet Shoes Casual Shoes Black Shoes Women Balle Record Player Cufflinks Best iPhone XR Clear Cases iPhone XS/XS Max Leather Cases Sale Best iPhone 8/8 Plus Silicone Cases iPhone 7/7 Plus Cases & Screen Protector New Cases For iPhone 6/6 Plus iPhone 8 Case Sale iPhone Xr Case Online iPhone 7 Case UK Online iPhone X Case UK Sale iPhone X Case Deals iPhone Xs Case New Case For iPhone Xr UK Online Case For iPhone 8 UK Outlet Fashion Silver Cufflinks For Men Best Mens Cufflinks Outlet Online The Gold Cufflinks Shop Online Cheap Shirt Cufflinks On Sale Nice Wedding Cufflinks UK Online Top Black Cufflinks UK Online Mens Cufflinks Online Silver Cufflinks For Men Men Cufflinks UK Sale Gold Cufflinks UK Online Gold Cufflinks UK Silver Cufflinks UK Shirt Cufflinks Discount Online Mens Cufflinks Deals & Sales Girls Shoes For Dance Fashion Ballet Dance Shoes Best Ballet Flats Shoes UK Online Cheap Ballet Pointe Shoes UK Online Best Ballet Shoes Outlet Best Dance Shoes Sale Cheap Ballet Flats Sale UK Best Pointe Shoes Online UK Ballet Dance Shoes UK Shoes For Dance UK Best Ballet Slippers Shop Best Yoga Shoes Hotsell