Vai al contenuto
PLC Forum


Rs485 - Analizzatori Di Rete


PZAN

Messaggi consigliati

Premetto che sto cercando di implementare per la prima volta una comunicazione su rs485 utilizzando dispositivi Omron.

Il problema è il seguente:"devo leggere i valori istanatantanei Tensione, Correbte, Potenza Attiva e Fequenza da tre analizatori di rete Socomec modello Diris A40 collegati alla porta Rs485 del modulo di comunicazione seriale Omron SCU41-V1 e CPU Omron CJ1m CPU12 "

Attualmente ho implementato una FB che utilizza l'istruzione PMCR (Protocol Macro) e con essa riesco a leggere tali parametri da un singolo dispositivo; nel task ho implementato 3 istanze della FB una per dispositivo ma quando cerco di leggere in sequenza dai tre dispositivi mi cade la comunicazione. (NB:per ogni dispositivo ho utilizzato una porta logica distinta!)

In generale come devo gestire la logica di accesso agli slave, utilizzando un singolo task?

Grazie comunque per avermi letto

Saluti

Link al commento
Condividi su altri siti


Quando dici che hai usato 3 porte distinte intendi che la cfg del plc ha 3 moduli scu o intendi cosa diversa?

Se hai 3 porte distinte puoi lanciare l'interrogazione contenporameamente nello stesso task, altrimenti se la porta e una sola la devi coordinare con i bit AR di fine sequenza PMCR per far partire la successiva, allo scopo di non avere l'accavallamento dei richiami PMCR, ovvero richiami la successiva anche se la precedente non e ancora completata.

Saluti.

Link al commento
Condividi su altri siti

Ti ringrazio vivamente per la tua sollecita rx e per il tempo dedicatogli.

Per la comunicazione RS485 sto utilizzando: n°1 SCU41-V1 // PORTA FISICA 2 // PORTE LOGICHE 0-1-2 (una per dispositivo)

Attuale implementazione sw:

per la lettura dei parametri dal generico dispositivo ho implementato una FB "Mdb_DIRISA40_ReadVFPI" avente le seguenti caratteristiche:

********************************************************************************

**********************

"Mdb_DIRISA40_ReadVFPI"

********************************************************************************

**********************

Input:

1- ENB_PMCR_PORT2 -> flag abilitazione PMCR

2- PORTA_LOGICA-> flag abilitazione porta logica

3- DIRIS_ADDRESS->indirizzo dispositivo su bus RS485

4- PMCR_C1->parametro C1 della PMCR (indirizzo modulo SCU / N° porta fisica / N° porta logica)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Interne:

PMCR_C2_SEQNUM -> N° sequenza

PMCR_C1_SCUPARAMS -> parametro C1 della PMCR (indirizzo modulo SCU / N° porta fisica / N° porta logica)

PMCR_S5_I_CODE -> indirizzo modbus registro "corrente istantanea" su dispositivo remoto

PMCR_S4_PATT_CODE-> indirizzo modbus registro "potenza att. istantanea" su dispositivo remoto

PMCR_S3_F_CODE-> indirizzo modbus registro "freq istantanea" su dispositivo remoto

PMCR_S2_V_CODE-> indirizzo modbus registro "tensione istantanea" su dispositivo remoto

PMCR_S1_DIRIS_ADDRESS ->indirizzo dispositivo su bus RS485

PMCR_S0_NumChTX_Plus1->registro iniziale S

PMCR_D4_I ->valore letto I

PMCR_D3_P->valore letto P

PMCR_D2_F->valore letto F

PMCR_D1_V->valore letto V

PMCR_D0_NumChRX_Plus1-> n° byte rx

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Output:scrive nella cpu i valori delle variabili lette nel dispositivo attuale

1- V_INST

2- F_INST

3- P_INST

4- I_INST

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Logica:ogni 0,1s

//

Codice inizializzazione di primo ciclo

...

..

//

//lettura parametri da dispositivo remoto attuale

if ((clock=0,1 s) and ((not(ENB_PMCR_PORT2)= true)) and (PORTA_LOGICA=true)

(

[at]PMCR(PMCR_C1_SCUPARAMS, PMCR_C2_SEQNUM, PMCR_S0_NumChTX_Plus1, PMCR_D0_NumChRX_Plus1);

MOV( PMCR_D1_V V_INST);

MOV (PMCR_D2_F F_INST);

MOV (PMCR_D3_P P_INST);

MOV (PMCR_D4_I I_INST);

)

********************************************************************************

**********************

********************************************************************************

**********************

TASK PRICIPALE

.......

.......

if(P_On)

ReadVFPI_DG1; //legge parametri da dispositivo per DG1

if(P_On)

ReadVFPI_DG2; //legge parametri da dispositivo per DG1

if(P_On)

ReadVFPI_SC; //legge parametri da dispositivo per DG1

********************************************************************************

**********************

********************************************************************************

**********************

SOA: la FB funziona se ne attivo una sola (es: P_Off, P_On, P_Off) mentre la comunicazione si blocca nel caso (P_On, P_On, P_On)

ossia sembra che questo codice non riesca a gestire il polling sui tre dispositivi

In sostanza la domanda é :

Il polling lo devo implementare a parte andando ad agire sui flag di abilitazione delle FB?

Se si, hai qualche spunto?

Scusami se mi sono dilungato troppo ma è la mia prima applicazione con tecnologia Omron.

Grazie nuovamente

Saluti

Link al commento
Condividi su altri siti

Input:

1- ENB_PMCR_PORT2 -> flag abilitazione PMCR

2- PORTA_LOGICA-> flag abilitazione porta logica

Ma a questi due input che indirizzo fisico gli passi? Perchè sembra che, come dice RDA

se la porta e una sola la devi coordinare con i bit AR

Così a naso mi sembra un problema di contemporaneità di utilizzo della stessa porta fisica.

ciao

Link al commento
Condividi su altri siti

Ti ringrazio vivamente per la tua sollecita rx e per il tempo dedicatogli.

Per la comunicazione RS485 sto utilizzando: n°1 SCU41-V1 // PORTA FISICA 2 // PORTE LOGICHE 0-1-2 (una per dispositivo)

Attuale implementazione sw:

per la lettura dei parametri dal generico dispositivo ho implementato una FB "Mdb_DIRISA40_ReadVFPI" avente le seguenti caratteristiche:

********************************************************************************

**********************

"Mdb_DIRISA40_ReadVFPI"

********************************************************************************

**********************

Input:

1- ENB_PMCR_PORT2 -> flag abilitazione PMCR

2- PORTA_LOGICA-> flag abilitazione porta logica

3- DIRIS_ADDRESS->indirizzo dispositivo su bus RS485

4- PMCR_C1->parametro C1 della PMCR (indirizzo modulo SCU / N° porta fisica / N° porta logica)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Interne:

PMCR_C2_SEQNUM -> N° sequenza

PMCR_C1_SCUPARAMS -> parametro C1 della PMCR (indirizzo modulo SCU / N° porta fisica / N° porta logica)

PMCR_S5_I_CODE -> indirizzo modbus registro "corrente istantanea" su dispositivo remoto

PMCR_S4_PATT_CODE-> indirizzo modbus registro "potenza att. istantanea" su dispositivo remoto

PMCR_S3_F_CODE-> indirizzo modbus registro "freq istantanea" su dispositivo remoto

PMCR_S2_V_CODE-> indirizzo modbus registro "tensione istantanea" su dispositivo remoto

PMCR_S1_DIRIS_ADDRESS ->indirizzo dispositivo su bus RS485

PMCR_S0_NumChTX_Plus1->registro iniziale S

PMCR_D4_I ->valore letto I

PMCR_D3_P->valore letto P

PMCR_D2_F->valore letto F

PMCR_D1_V->valore letto V

PMCR_D0_NumChRX_Plus1-> n° byte rx

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Output:scrive nella cpu i valori delle variabili lette nel dispositivo attuale

1- V_INST

2- F_INST

3- P_INST

4- I_INST

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Logica:ogni 0,1s

//

Codice inizializzazione di primo ciclo

...

..

//

//lettura parametri da dispositivo remoto attuale

if ((clock=0,1 s) and ((not(ENB_PMCR_PORT2)= true)) and (PORTA_LOGICA=true)

(

[at]PMCR(PMCR_C1_SCUPARAMS, PMCR_C2_SEQNUM, PMCR_S0_NumChTX_Plus1, PMCR_D0_NumChRX_Plus1);

MOV( PMCR_D1_V V_INST);

MOV (PMCR_D2_F F_INST);

MOV (PMCR_D3_P P_INST);

MOV (PMCR_D4_I I_INST);

)

********************************************************************************

**********************

********************************************************************************

**********************

TASK PRICIPALE

.......

.......

if(P_On)

ReadVFPI_DG1; //legge parametri da dispositivo per DG1

if(P_On)

ReadVFPI_DG2; //legge parametri da dispositivo per DG1

if(P_On)

ReadVFPI_SC; //legge parametri da dispositivo per DG1

********************************************************************************

**********************

********************************************************************************

**********************

SOA: la FB funziona se ne attivo una sola (es: P_Off, P_On, P_Off) mentre la comunicazione si blocca nel caso (P_On, P_On, P_On)

ossia sembra che questo codice non riesca a gestire il polling sui tre dispositivi

In sostanza la domanda é :

Il polling lo devo implementare a parte andando ad agire sui flag di abilitazione delle FB?

Se si, hai qualche spunto?

Scusami se mi sono dilungato troppo ma è la mia prima applicazione con tecnologia Omron.

Grazie nuovamente

Saluti

Link al commento
Condividi su altri siti

Questo lo avevi già scritto, ma non hai risposto al mio quesito....

1- ENB_PMCR_PORT2 -> flag abilitazione PMCR

2- PORTA_LOGICA-> flag abilitazione porta logica

Link al commento
Condividi su altri siti

ISTANZA 1

ENB_PMCR_PORT2 = 1519.15

PORTA LOGICA 0 = A202.0

ISTANZA 2

ENB_PMCR_PORT2 = 1519.15

PORTA LOGICA 1 = A202.1

ISTANZA 3

ENB_PMCR_PORT2 = 1519.15

PORTA LOGICA 2 = A202.2

Link al commento
Condividi su altri siti

Quando mi è capitato di fare un lavoro simile al tuo ho utilizzato anche il flag "Sequence End Completion Flag" (nel tuo caso 1519.11).

Utilizzandone il fronde di salita puoi gestire dei flag che abilitano in sequenza le 3 chiamate.

Le tre chiamate contmporanee secondo me non sono corrette in quanto il flag ENB_PMCR_PORT2 = 1519.15 viene aggiornato al ciclo di scansione successiva del programma.

ciao

Link al commento
Condividi su altri siti

Grazie per il consiglio. Attualmente ho implementato una FB di polling che gestisce a tempo i flag di abilitazione delle FB di comunicazione; quindi tu mi stai dicendo di gestire il polling sul fronte in salita del flag 1519.11?

Corregimi se sbaglio

Ciao

Link al commento
Condividi su altri siti

Esatto. Invece del tempo, che comunque ti avrà risolto il problema, utilizzi il fronte del flag 1519.11 che viene abilitato alla fine esecuzione della sequenza chiamata dalla PMCR

Facci sapere

Link al commento
Condividi su altri siti

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