PZAN Inserito: 27 agosto 2008 Segnala Share Inserito: 27 agosto 2008 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 lettoSaluti Link al commento Condividi su altri siti More sharing options...
RDA Inserita: 27 agosto 2008 Segnala Share Inserita: 27 agosto 2008 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 More sharing options...
PZAN Inserita: 28 agosto 2008 Autore Segnala Share Inserita: 28 agosto 2008 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 PMCR2- 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 remotoPMCR_S4_PATT_CODE-> indirizzo modbus registro "potenza att. istantanea" su dispositivo remotoPMCR_S3_F_CODE-> indirizzo modbus registro "freq istantanea" su dispositivo remotoPMCR_S2_V_CODE-> indirizzo modbus registro "tensione istantanea" su dispositivo remotoPMCR_S1_DIRIS_ADDRESS ->indirizzo dispositivo su bus RS485 PMCR_S0_NumChTX_Plus1->registro iniziale S PMCR_D4_I ->valore letto IPMCR_D3_P->valore letto PPMCR_D2_F->valore letto FPMCR_D1_V->valore letto VPMCR_D0_NumChRX_Plus1-> n° byte rx ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Output:scrive nella cpu i valori delle variabili lette nel dispositivo attuale 1- V_INST 2- F_INST3- P_INST4- I_INST////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Logica:ogni 0,1s //Codice inizializzazione di primo ciclo.....////lettura parametri da dispositivo remoto attualeif ((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 DG1if(P_On)ReadVFPI_DG2; //legge parametri da dispositivo per DG1if(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 nuovamenteSaluti Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 28 agosto 2008 Segnala Share Inserita: 28 agosto 2008 Input: 1- ENB_PMCR_PORT2 -> flag abilitazione PMCR2- PORTA_LOGICA-> flag abilitazione porta logicaMa 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 ARCosì a naso mi sembra un problema di contemporaneità di utilizzo della stessa porta fisica.ciao Link al commento Condividi su altri siti More sharing options...
PZAN Inserita: 29 agosto 2008 Autore Segnala Share Inserita: 29 agosto 2008 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 PMCR2- PORTA_LOGICA-> flag abilitazione porta logica3- DIRIS_ADDRESS->indirizzo dispositivo su bus RS4854- PMCR_C1->parametro C1 della PMCR (indirizzo modulo SCU / N° porta fisica / N° porta logica)////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Interne:PMCR_C2_SEQNUM -> N° sequenzaPMCR_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 remotoPMCR_S4_PATT_CODE-> indirizzo modbus registro "potenza att. istantanea" su dispositivo remotoPMCR_S3_F_CODE-> indirizzo modbus registro "freq istantanea" su dispositivo remotoPMCR_S2_V_CODE-> indirizzo modbus registro "tensione istantanea" su dispositivo remotoPMCR_S1_DIRIS_ADDRESS ->indirizzo dispositivo su bus RS485PMCR_S0_NumChTX_Plus1->registro iniziale SPMCR_D4_I ->valore letto IPMCR_D3_P->valore letto PPMCR_D2_F->valore letto FPMCR_D1_V->valore letto VPMCR_D0_NumChRX_Plus1-> n° byte rx////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Output:scrive nella cpu i valori delle variabili lette nel dispositivo attuale1- V_INST2- F_INST3- P_INST4- I_INST////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Logica:ogni 0,1s//Codice inizializzazione di primo ciclo.....////lettura parametri da dispositivo remoto attualeif ((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 DG1if(P_On)ReadVFPI_DG2; //legge parametri da dispositivo per DG1if(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 dispositiviIn 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 nuovamenteSaluti Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 29 agosto 2008 Segnala Share Inserita: 29 agosto 2008 Questo lo avevi già scritto, ma non hai risposto al mio quesito....1- ENB_PMCR_PORT2 -> flag abilitazione PMCR2- PORTA_LOGICA-> flag abilitazione porta logica Link al commento Condividi su altri siti More sharing options...
PZAN Inserita: 29 agosto 2008 Autore Segnala Share Inserita: 29 agosto 2008 ISTANZA 1ENB_PMCR_PORT2 = 1519.15PORTA LOGICA 0 = A202.0ISTANZA 2ENB_PMCR_PORT2 = 1519.15PORTA LOGICA 1 = A202.1ISTANZA 3ENB_PMCR_PORT2 = 1519.15PORTA LOGICA 2 = A202.2 Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 29 agosto 2008 Segnala Share Inserita: 29 agosto 2008 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 More sharing options...
PZAN Inserita: 29 agosto 2008 Autore Segnala Share Inserita: 29 agosto 2008 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 sbaglioCiao Link al commento Condividi su altri siti More sharing options...
pcontini Inserita: 29 agosto 2008 Segnala Share Inserita: 29 agosto 2008 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 PMCRFacci sapere Link al commento Condividi su altri siti More sharing options...
PZAN Inserita: 29 agosto 2008 Autore Segnala Share Inserita: 29 agosto 2008 Grazie appena posso vi faccio sapere.Ciao e buon fine settimana. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
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 accountAccedi
Hai già un account? Accedi qui.
Accedi ora