Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Problema Scheda Analogica Sm334 8bit (assegnazione Ing ?) - problema lettura, assegnazione ingressi/uscite digitali 8 bit


Messaggi consigliati

Inserito:

Ho un problema "software" con la scheda SM334 (4 ING 8bit - 2 USC 8bit),

premetto che è la prima volta che ho a che fare con moduli analogici.

Il manuale della scheda indica che ogni ingresso occupa 2 byte, pertanto

ho impostato gli ingressi come PIW320, PIW322, PIW324 e le uscite

come PAW320 e PAW322 (byte iniziale più 2 di offset come riportato nel manuale)

L'assistenza tecnica mi ha consigliato di utilizzare per gli ingressi delle WORD anche

se, visto che la scheda è a 8 bit il valore misurato/assegnato è di un byte (256 steps)

Secondo voi devo leggere / assegnare i canali come byte o come word ?

Venerdì ho provato il programma sulla macchina scritto con ingressi e uscite

WORD, ma in test (controlla/comanda; tasto destro su scheda analogica nella finestra

hardware ) i sensori (4-20 mA) mi davano sempre zero e comandando le uscite (0 - 10 V)

(ho provato con diversi valori 127,255,32777,65535, ecc ) la scheda misurava 8,8 v solo con

il valore hex 6096 - dec 24726, con altri valori intermedi non dava in uscita nessuna tensione.

Mi hanno anche detto che visto che sto utilizzando una word (65536) e leggendo/comandando una

scheda a 8 bit quindi byte (256) devo assegnare alle uscite un valore da 0 a 255 moltiplicato per 256

e leggere i sensori dividendo per 256.

Il tecnico mi ha anche accennato che la maniera più semplice per la conversione

è quella di utilizzare una tabella di variabili VAT, ho provato a creare la tabella

ma ho verificato che in questa tabella (non l'avevo mai utilizzata prima) si possono

solo comandare visualizzare le variabili e non eseguire operazioni su di esse.

Spero di essere stato chiaro, potete postarmi anche qualche link ad esempi di

programmazione con moduli analogici...

AIUTO ................. :blink:


Inserita:

Gli indirizzi così come li hai asseganti vanno bene, quindi dovrai lavorare su delle word e non su dei byte.

La vat è un'interfaccia che ti permette di controllare lo stato delle variabili e di forzarne i valori e non puoi

utilizzarla per nussun'altra operazione,va anche detto cha da una vat non puoi scrivere un'uscita analogica

quindi per provare lavora su una word di appoggio che continua a trasferire il suo valore all'uscita.

es.(L MW 100

T PAW 320)

La MW 100 sarà la variabile che utilizzerai nella tua vat.

Ti dò una funzione che spero possa esserti utile. Copiala in un sorgente e compilalo.

FUNCTION FC 11 : VOID

TITLE =ANALOGIC

VERSION : 0.1

VAR_INPUT

InValue : INT ;

InMinValue : INT ;

InMaxValue : INT ;

OutMinValue : INT ;

OutMaxValue : INT ;

END_VAR

VAR_OUTPUT

OutValue : INT ;

OutBitHigh : BOOL ;

OutBitLow : BOOL ;

END_VAR

VAR_TEMP

INPUT_RANGE : REAL ;

OUTPUT_RANGE : REAL ;

RATE : REAL ;

OFFSET : REAL ;

MINRATE : REAL ;

END_VAR

BEGIN

NETWORK

TITLE =

//Input, sopra il valore massimo

L #InValue;

L #InMaxValue;

>=I ;

= #OutBitHigh;

//Input, sotto il valore minimo

L #InValue;

L #InMinValue;

<=I ;

= #OutBitLow;

//Salta e carica i valori minimo o massimo di uscita

U #OutBitHigh;

SPB S001;

U #OutBitLow;

SPB S002;

//Calcolo il range dei volori di input

L #InMaxValue;

L #InMinValue;

-I ;

ITD ;

DTR ;

T #INPUT_RANGE;

//Calcolo il range dei valori di output

L #OutMaxValue;

L #OutMinValue;

-I ;

ITD ;

DTR ;

T #OUTPUT_RANGE;

//Calcola Rapporto

L #OUTPUT_RANGE;

L #INPUT_RANGE;

/R ;

T #RATE;

//Moltiplica il valore minimo di ingresso e il Rapporto

L #InMinValue;

ITD ;

DTR ;

L #RATE;

*R ;

T #MINRATE;

//Calcola offset di uscita

L #OutMinValue;

ITD ;

DTR ;

L #MINRATE;

-R ;

T #OFFSET;

//CALCOLO VALORE USCITA

L #InValue;

ITD ;

DTR ;

L #RATE;

*R ;

L #OFFSET;

+R ;

RND ;

SPA S003;

S002: L #OutMinValue;

SPA S003;

S001: L #OutMaxValue;

S003: T #OutValue;

BE ;

END_FUNCTION

Da un'altro blocco del tuo programma la richiamerai in questo modo per gli ingressi:

CALL FC 11

InValue :=PEW.. //ingresso analogico

InMinValue := //min.valore input (dec)

InMaxValue := //max.valore input (dec)

OutMinValue:= //min.valore output (dec)

OutMaxValue:= //max.valore output (dec)

OutValue :=MW.. //valore convertito (dec)

OutBitHigh :=M.. //valore max superato

OutBitLow :=M.. //valore min superato

e in questo modo per le uscite:

CALL FC 11

InValue :=MW.. //valore da convertire(dec)

InMinValue := //min.valore input (dec)

InMaxValue := //max.valore input (dec)

OutMinValue:= //min.valore output (dec)

OutMaxValue:= //max.valore output (dec)

OutValue :=PAW.. //uscita analogica

OutBitHigh :=M.. //valore max superato

OutBitLow :=M.. //valore min superato

Spero ti sia chiaro

Buon lavoro

Ciao

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...