Vai al contenuto
PLC Forum


s7-1200 linearizzazione curva 10 punti


Messaggi consigliati

Inserito:

Buongiorno a tutti, in step7 sugli s7 300 usavo una "FB50" che mi serviva per creare una curva di linearizzazione con 10 punti "x" e 10 punti "y" impostabili, quindi in base al PV "x" che gli davo in ingresso mi restituiva in uscita il rispettivo valore calcolato, oggi mi serviva questa funzione su Tia Portal su un 1200 ma non sono mica riuscito a trovarla da nessuna parte.., ho controllato nelle librerie ma non si trova niente di simile.. la NORM x e la SCALE X sono solo impostabili a 2 punti (min e max) e non a piu punti.. voi ne conoscete una che posso usare??? grazie 


Inserita:

ho trovato la funzione "TableChar" che però fa parte della libreria "Tia portal converting library" che è gratis ma non si puo scaricare dal sito siemens e deve essere richiesta ad un distributore che ovviamente non sa nemmeno che esista non essendoci uno codice articolo....

 

qualcuno ha questa liìbreria??

Inserita: (modificato)

cerca su wikypedia l'interpolazione lineare di Newton e scriviti la funzione che ti serve.

Se i nodi non sono molto distanti tra di loro ottieni una spezzata ,cioe un insieme di segmenti che partono dal nodo attuale a quello seguente oppure a quello precedente

Modificato: da walterword
Inserita:

mi sono fatto mandare la libreria cui sopra dal distributore locale siemens ed ho utilizzato la tablechar.. 

Inserita:

La funzione FB50 per il 300 di cui parli, è nella libreria dello step7, non la trovo.

Inserita:

ciao, è gratuita ma deve essere richiesta al proprio distributore.. se gli admin mi danno il consenso posso anche metterla su un sito di file sharing e postare qua il link.. 

comunque la FB50 di Step 7 dovrebbe essere siemens, nelle note della FB leggo: "generiert vom SCL Übersetzer Version:  SCL V5.1 + SP1 (C5.1.6.11)" forse devi scaricarla dal sito siemens..  

Inserita:

è scritta in SCL ed è distribuita in awl 

Inserita:

Se può essere utile, questa è una FB che ho scritto velocemente per la regressione lineare.

E' scritta in SCL per S7300.

Lavora con un numero arbitrario di campioni X Y (minimo 2).

 

Command=0 Cancella il buffer interno

Command=1 Aggiunge il campione (X e Y)

Command=2 Calcola i coefficienti della retta e la correlazione : dove Slope=m e Inter=n in una retta Y=mX+n.

 

Per chi non conosce l'antefatto, questo metodo serve per determinare la "migliore" retta passante per una popolazione di punti (XY) non allineati.

La correlazione CORRXY ci dice quanto i punti sono allineati e può essere usata per capire se la nostra calibrazione "ha un senso", varia da 0.0 a 1.0 (=1.0 quando i punti sono perfettamente allineati).

 

Quanti più campioni vengono inseriti tanto migliore sarà la retta.

Evitare sempre di inserire i campioni al limite della scala dove la precisione è minore e preferire l'intervallo reale di lavoro.

 

FUNCTION_BLOCK FB1000

VAR_INPUT
  X      : REAL:=0.0; // X Sample
  Y      : REAL:=0.0; // Y Sample
  COMMAND: INT :=0;   // Command 0 : Clear, 1 : Add, 2 : Calc
END_VAR

VAR_OUTPUT
  // Line coefficients y=mx+n
  SLOPE  : REAL:=0.0; // Line Slope      "m"
  INTER  : REAL:=0.0; // Line Intercept  "n"
  CORRXY : REAL:=0.0; // Correlation
END_VAR

VAR_IN_OUT
  ERROR : BOOL; // True if calc error
END_VAR

VAR
  SXY, SX, SY, SX2, SY2: REAL;
  CNT : INT;
END_VAR

VAR_TEMP
  D  : REAL;
  D1 : REAL;
END_VAR

    ERROR:=FALSE;

//-------------------------------------------------------------------
// CLEAR
//-------------------------------------------------------------------
    IF COMMAND=0 THEN
        SXY:=0.0;
        SX :=0.0;
        SY :=0.0;
        SX2:=0.0;
        SY2:=0.0;
        CNT:=0;
        RETURN;
    END_IF;
//-------------------------------------------------------------------
// SAMPLE ADD
//-------------------------------------------------------------------
    IF COMMAND=1 THEN
        SXY:=SXY + X * Y;
        SX :=SX + X;
        SY :=SY + Y;
        SX2:=SX2 + SQR(X);
        SY2:=SY2 + SQR(Y);
        CNT:=CNT + 1;
        RETURN;
    END_IF;
//-------------------------------------------------------------------
// CALC
//-------------------------------------------------------------------
    IF COMMAND=2 THEN
    // Slope calc
        D :=(CNT * SX2 - SQR(SX));

        IF D <> 0.0 THEN
            SLOPE:=((CNT * SXY) - (SX * SY)) / D;
        ELSE
            SLOPE:=0.0;
        END_IF;

    // Intercept calc
        D:=ABS(CNT * SX2 - SQR(SX));
        IF D > 0 THEN
            INTER:=((SY * SX2) - (SX * SXY)) / D;
        ELSE
            INTER:=0.0;
        END_IF;

    // Correlation calc
        CORRXY:=0.0;
        IF CNT>0 THEN
            D1:=(SY2-(SY*SY/CNT));
            IF D1>0.0 THEN
                D:=((SX*SY/CNT)-SXY)/D1;
                CORRXY:=ABS(D*SLOPE);
            END_IF;
        END_IF;

        ERROR:= NOT OK;
    END_IF;

END_FUNCTION_BLOCK

 

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...