Vai al contenuto
PLC Forum


Problemi Con Rslogix5000


jonny812

Messaggi consigliati

Salve a tutti, devo programmare un PLC CompactLogix utilizzando RSLOGIX 5000; fin'ora ho sempre utilizzato RSLOGIX 500 e mi trovo, adesso, in enorme difficoltà. Ad esempio io sono abituato a scrivere l'SFC e poi tradurlo in LADDER: però non riesco a trovare nell'RSLOGIX 5000 dove stanno i bit interni B3:0/0 e dove stanno gli ingressi I0:0 e le uscite O:0/0. Potete darmi una mano. Grazie

Link al commento
Condividi su altri siti


RSLOGIX 5000 non lavora piu' ad indirizzamento fisico

ma a dichiarazione simbolico di variabile

Attenzione che per I/O ti devi ( e di solito serve ) farti delle immagini di processo

Mi sembra che invece di andare avanti AB sta' tornando indietro

Ciao

Luca

Link al commento
Condividi su altri siti

I Data File B3, T4,C5,R6,N7 etc li puoi ricreare a tuo piacimento come nel SLC500 e come nel PLC5.

Devi semplicemente creare delle Tag di Array [0..255] di tipo Integer per i B3,

di tipo Timer per i T4, di tipo Counter, mentre per gli R6 non serve, perchè per ogni istruzione del ControlLogix ogni registro ha una particolare struttura anche molto differente dai classici Registri R6 che usavi nel SLC.

In Pratica non hai più nessun limite.

Puoi divertirti nel creare Casting di dati dai formati pià svariati

Non è buona cosa fare delle immagini di processo, perchè cosi facendo, rovini quelle caratteristiche di performance che ha il ControlLogix.

Devi sempre usare le Alias.

Altrimenti se hai più Task, ti trovi ad avere dei dati non sincronizzati, con il processo.

Penso che tra qualche giorno capirai ed userai perfettamente questa nuova architettura.

Il Vantaggio è enorme, perchè tutti i tuoi nuovi applicativi, non sono pià legati all' Hardware dell' impianto, e cosi facendo in software

lo potrai riutilizzare, facilmente.

Cioè Software senza Radici, non come piante con radici inestricabili.

Il Progresso che è stato fatto è evidente, e non mi sembra che la RockellSoftware stia tornando indietro, ma anzi vola.

Link al commento
Condividi su altri siti

Senza buttarla sulla polemica ma restando in ambito costruttivo

Non è buona cosa fare delle immagini di processo, perchè cosi facendo, rovini quelle caratteristiche di performance

farmi un'immagine degli Input a inizio programma , rovino le performance ???

a volte un ingresso che all'interno della scansione mi cambia , potrebbe darmi problemi , forse perche' tutti i plc che ho usato sino ad ora la facevano , preferisco un'immagine per evitare che mi capiti

Il Vantaggio è enorme, perchè tutti i tuoi nuovi applicativi, non sono pià legati all' Hardware dell' impianto

In qualsiasi plc esiste gia' da tempo la funzione trova I0.0 sostituisci con I10.0 e la configurazione HW non e' legata al SW

Ti diro' che la mia esperienza con questo SW e' risultata molto negativa , poiche' per capirci qualcosa ( che fosse facile anche per altri ) mi sono trovato a dare il simbolico come fosse un'indirizzo assoluto ( in modo che si possa fare una corrispondenza tra schema elettrico e programma PLC )

Il Progresso che è stato fatto è evidente

Le variabili si dichiaravano in quel modo nel mondo PC 20 anni fa'

Altrimenti se hai più Task, ti trovi ad avere dei dati non sincronizzati, con il processo

Nel metodo tradizionale cio' non ti puo' capitare

Credo che l'utilizzo dei task a tempo , aveva senso 10 anni fa' quando la potenza di calcolo dell CPU era limitata e per aver qualcosa di veloce dovevi fare qualcos'altro lento , Con le CPU di adesso non credo abbiano piu' senso

Il Progresso che è stato fatto è evidente

Non lo vedo come progresso , Poiche' il PLC usando M20.0 era' un po' piu' comodo che BIT_MEM_PARTEN_MOTOR_ON , sia da ricordarsi che da cercare per chi non aveva fatto il programma.

Da schema se non va' la valvola collegata all'uscita A20.0 , con un serch di A20.0 in 10 secondi vedevo perche' , con questo sistema e' un po' piu' complicato poiche' devi capire come e' stata chiamata ,

Mi sembra che in questo modo il SW diventa piu' "personale" ( del tipo che ci capisce qualcosa solo quello che l'ha fatto )

Ovviamente sono punti di vista e pareri dettati anche dal gusto personale .

Ciao

Luca

Link al commento
Condividi su altri siti

Hi Luca

Sembra che non digerisci le novità che quasi tutti i grandi gruppi dell’automazione tendono

di apportare.

Comunque vedrai che col tempo, anche gli altri costruttori seguiranno questa strada,

oppure la hanno già intrapresa.

Ora cerco di dire il perché devi fare le cose in questa maniera:

Fare le immagini degli Inputs e aggiornare gli Outputs in un punto solo del

Processo comporta che se tu hai delle Task che girano ad esempio in pochissimi ms,

(si può arrivare sino a 0.1ms per una task. Periodica), questi dati sono fuori sincronismo con i vari processi.

Inoltre devi pensare che oltre alle Task Periodiche, vi sono le Task ad evento,

queste ultime se acquisiscono istantaneamente un evento, le Tags devono essere immediatamente

aggiornate.

Poi anche altri Processi come il Motion-Planner porta avanti dei processi che sono svincolati dal

Processo portato avanti nelle Task.

Molte Tags devono essere prodotte e condivise tra più CPU (MultiProcessor)

Per questo motivo se vincoli in un solo punto l’aggiornamento delle Tags ti trovi ad usare un

ControlLogix come un normale PLC, quindi non ha senso usare tale Strumento per

Applicazioni cosi Banali come in un PLC classico.

Infatti ora questi strumenti come il ControlLogix non vengono chiamati PLC ma ora si usa

Il Termine PAC ( Programmable Automation Controllers )

Infatti devi pensare al ControlLogix come un qualcosa che è molto diverso da un semplice PLC,

è molto più performante in diverse tipologie di Processi.

Per questo motivo più che essere limitate le performance, questo strumento viene

Piuttosto usato in maniera non appropriata, e declassato delle sue eccezionali caratteristiche.

Poi il Ricablaggio degli I/O comporta molto tempo, e possibilità di errore,

Con la Famiglia Logix semplicemente usi le tue vecchie sorgenti super collaudate, nel tuo nuovo progetto, senza vincoli.

Infatti non devi staccare tutte le Radici della tua pianta (Ricablaggio degli I/O), e il trapianto

di una parte o tutta delle tue sorgenti è indolore e rapidissimo.

Qualche persona potrebbe avere delle difficoltà nel gestire delle Tag che sono flottanti in

In una esecuzione completa nella Main-task Ciclica, ma se una persona sa programmare

Con metodo e con gli opportuni criteri, non troverà nessuna differenza rispetto all’aggiornamento

Con un immagine di processo classica di un PLC.

Le Dichiarazioni delle Tags è molto facile, ed è una buona cosa.

Se tu pensi anche 20 anni fa le macchine avevano moltissime parte cablate in maniera Elettromeccanica, e Riutilizzare tale funzioni in una nuova macchina comportava molto tempo e denaro. Per questo Motivo si è usato la Logica Programmabile come i PLC

Con lo stesso principio Oggi si cerca di svincolare il più possibile Hardware (Indirizzamento degli I/O) dal Software di Controllo, ed è per questo motivo che si utilizza questo metodo.

Anche in Altri PLC non si dovrebbe mai usare direttamente nel sorgente del Software richiami

Diretti agli I/O, ma si preferisce fare delle attribuzioni su degli Appoggi come DataBlock o altro

(DB Siemens ) In questa maniera il tuo software non ha delle radici con l’ Hardware del Sistema.

E nel prossimo Riutilizzo ti trovi a perdere molte meno ore di adattamento Software.

L’ Uso delle Tasks o le ripartizioni delle Risorse di un Sistema è sicuramente una buona cosa.

Altrimenti potresti a tua insaputa (nella Realizzazione del Software) utilizzare tutte le risorse

Per cose banali, ed a essere penalizzato, su quei processi che richiedono tempi di risposta estremamente veloce. (Guarda agli OB a Tempo presenti in Siemens)

Luca se vuoi usare il ControlLogix come ad esempio un Siemens lo puoi fare benissimo,

Marker creai una Tag Chiamata “M” , Type:= Base; DataType := SINT[65536]; Style:= Binary

Timer creai una Tag Chiamata “T” , Type:= Base; DataType := Timer[65536]

Counter creai una Tag Chiamata “Z” , Type:= Base; DataType := COUNTER[65536]

DB creai una Tag Chiamata “DB1” , Type:= Base; DataType := SINT[65536];

Quindi per Esempio:

Nel tuo programma puoi usare il Marker M[20].0 che corrisponde al tuo M20.0

oppure il Timer T[125] che corrisponde al tuo Timer T125

Poi ricorda che la Task Ciclica è paragonabile all' OB1

Le Task Periodiche sono similari agli OB35

Le Task ad Evento può essere paragonata al OB40

Poi fai come hai detto tu una Coppia dei vari Inputs in una Tag di questo tipo:

Input creai una Tag Chiamata “E” , Type:= Base; DataType := SINT[65536]

Una cosa similare la fai per le Uscite in questa maniera:

Output creai una Tag Chiamata “A” , Type:= Base; DataType := SINT[65536]

In questa maniera crei le Immagini di Processo degli I/O

Per Creare delle DB strutturate o DB associate a Funzioni (Istanza) ti crei

Una Struttura UDT e poi usi questa Struttura per costruire una TAG chiamata ad esempio DB201.

Se vuoi avere delle FB parametrizzate ed istanziate puoi crearti una Instruction ADD-ON

In questa maniera il metodo di programmazione sarà molto simile al Ambiente Step7

Se studi bene questo prodotto vedrai che potrai crearti tutto il tuo mondo di Programmazione che più di soddisfa.

Modificato: da Henon
Link al commento
Condividi su altri siti

ma come faccio ad associare un tag ad un ingresso o uscita fisica? dove sta il bit first pass S:1/15 di attivazione del PLC? ma poi, leggendo il manuale è veramente possibile programmare direttamente in SFC senza passare per la traduzione in Ladder?

Link al commento
Condividi su altri siti

Ciao Henon

e grazie della bella risposta , non del solito tipo "preferisco questo , quello non mi piace " ma dal tipo che conosce bene la cosa

Sembra che non digerisci le novità che quasi tutti i grandi gruppi dell’automazione tendono

di apportare.

In effetti hai ragione , spero che non tutti i gruppi vadano su quella strada

Poiche' io credo che il PLC deve essere piu' semplice ed intuitivo possibile , se questa e' la strada che tutti prenderanno , ha poco senso usare dei PLC , ma puoi passare direttamente ad un PC .

ControlLogix come un normale PLC, quindi non ha senso usare tale Strumento per

Applicazioni cosi Banali come in un PLC classico.

Effettivamente io lo uso come un plc classico , poiche' faccio macchine relativamente semplici .

Solo che non capisco come mai quando un cliente chiede AB , vuole il control con la CPU piu' grossa , anche in una macchina che potrebbe andare con il 200 , forse e' solo un caso ( gia' 4 clienti ) ma altri clienti quando hanno a specifica non AB , ti chiedono solo il brand , poi il prodotto lo scegli tu.

Con lo stesso principio Oggi si cerca di svincolare il più possibile Hardware (Indirizzamento degli I/O) dal Software di Controllo

certo , ma c'e' modo e modo . Un blocco parametrizzato con variabile di ingresso il sensore non va' bene ???

E comunque , preferisco sempre il ricablaggio , poiche' il programma resta molto piu' leggibile

Poi il Ricablaggio degli I/O comporta molto tempo, e possibilità di errore

Sul molto tempo non sono d'accordo , sulla posiibilita' di errore invece si'

Nel tuo programma puoi usare il Marker M[20].0 che corrisponde al tuo M20.0

questo e' proprio il modo che il 90% dei programmi che ho visto ( e fatto ) usato , poiche' sicuramente piu' intuitivo e tra un blocco e l'altro , M20.0 me la ricordo , ma allora mi chiedo : perche' non lasciare tutto come prima ??? perche' devo escogitare trucchetti per indirizzare in "pseudo" assoluto ???

Siccome la realta' in cui io lavoro e' quella del prototipo e del poco tempo di consegna , quindi adoro le cose semplici e veloci ( non solo siemens , ma anche omron ed il vecchio SLC500 )

Comunque , per finire , ti faccio solo un piccolo esempio ( molto reale )

In una ditta ci sono 3 programmatori che fanno SW , Con AB la Memoria di partenza motori e' :

Prog 1 MEM_MOT_STA

Prog 2 BIT_MOT_RUN

Prog 3 MEM_CONS_PART_MOT

In SIEMENS da circa 18 anni ( anche in S5 ) E' la M21.7

E pensa che questi 3 lavorano nella stessa ditta , pensa ad un utilizzatore finale che ha macchine provenienti da molte ditte sparse per tutto il mondo , quando il povero manutentore dovra' trovare perche' quella elettrovalvola non si attiva.

Ciao

Luca

Link al commento
Condividi su altri siti

onestamente io capisco di più MEM_MOT_STA che non M21.7, quest'ultimo non mi dice niente, la tag precedente mi sembra palese che indichi una memoria motore start. Tu vorresti che tutti e tre i programmatori si allineino: fatelo!

Non ti è chiaro MEM_MOT_STA PRIM FRIC LES : ci si mette d'accordo START_MOTORE come a suo tempo si è stabilito M21.7

Tieni conto che il fatto di usare memoria non allocata permette una maggiore flessibilità della memoria del processore con conseguente aumento della velocità (come in effeti il buon AB). E' un miglioramento enorme.

E' solo questione di abitudine: il mio capo era (ed è) come te però con Telemecanique: a lui piace %MWxxx e riesce a sento a programmare senza i suoi indirizzi.

Link al commento
Condividi su altri siti

Tieni conto che il fatto di usare memoria non allocata

scusa , ma non viene comunque allocata all'avvio della cpu ???

con conseguente aumento della velocità (come in effeti il buon AB). E' un miglioramento enorme

Ma ce ne era bisogno di un aumento di velocita' ??? ( da SLC500 probabilmente si , ma e' un prodotto vecchio )

Non ti è chiaro MEM_MOT_STA PRIM FRIC LES : ci si mette d'accordo START_MOTORE

Il problema e' che quando il SW ti da' piu' liberta' , ognuno si sbizzarisce facendo del suo meglio.

Da non scordarsi che Siemens se vuoi lo usi in simbolico o in assoluto a seconda di cosa stai facendo al momento.

Prova a tenere aperti 2 blocchi di 2 programmi e visualizzarne uno in simbolico , con il copia incolla del simbolo ti cambia direttamente l'indirizzo assoluto.

START_MOTORE

e' in italiano , ad un inglese non gli va bene . Cosa devo fare , devo ridichiarare tutte le variabili se la macchina va' in italia o all'estero ???

Ciao

Luca

Link al commento
Condividi su altri siti

Guarda che se controbatti le mie dichiarazioni , ho solo piacere , poiche' non credo di essere nel giusto al 100% ma secondo me e' un sistema DIVERSO che mi comporta dei problemi che magari hai gia' affrontato e risolto ( tipo quello della lingua , visto che il cliente grosso ultimamente vuole anche il SW tradotto )

L'importante è fare programmi funzionanti e il più possibile comprensibili

volevo solo aggiungere che ultimamente a quello che dici si e' anche aggiunto "nel minor tempo possibile"

Ciao

Luca

Link al commento
Condividi su altri siti

Ciao Johnny812

Visto che ho un attimo di tempo, ti riporto un esempio che già avevo messo da parte

Ecco l'esempio:

Se tu hai un modulo di uscite digitali 1756-OB32

inserito nello per esempio nello slot2

Quando usi RsLogix5000 devi inserire nella sezione “I/O Configuration” un Nuovo Modulo,

premi il pulsante destro del mouse e ti esce la voce “New Module …”.

Cosi facendo potrai inserire nello Slot2 il tuo modulo 1756-OB32, l’inserimento del nuovo Hardware è facilitato perché c’è un Menu di selezione ed aiuto, diviso per classi.

Quando inserisci il Modulo, in maniera automatica nelle Tags del Controllore “Controller Tags”

Ti troverai una Struttura dati che si Chiama “Local:2”

Questa Tag contiene tutti i dati riguardanti questo modulo.

Local:2:O è un DINT dove tu puoi scrivere e comandare le Uscite Digitali

Local:2:I sono gli stati attuali delle Uscite (Viene usato quando un altro Porocessore deve leggere

Lo stato di uscite digitali, di un Modulo di cui non è proprietario)

Local:2:C sono le Configurazioni delle uscite, (Filtri,Cos,Fusibile Elettronico,etc..)

Su Alcuni Moduli trovi oltre alle Sigle O;I;C anche la Sigla S, indicano gli Stati “States” del Modulo.

Quindi ha Programma in un Rung puoi comandare un Uscita scrivendo (OTE Local:2:O.Data.12)

In questo caso comandi il Bit12 del Modulo Locale 2.

Chiaramente in questo modo hai sempre un vincolo Hardware

Nella sorgente del tuo Programma.

Per evitare di essere vincolati al Hardware e dove ogni volta Ricablare tutti gli I/O del tuo Software

Ti consiglio di creare una TAG con Associazione all’ Indirizzo Fisico “Local:2:O.Data.12”.

In questo modo il tuo software può funzionare anche senza la parte hardware, quindi può essere testato senza avere fisicamente tutti i moduli presenti (In una CPU oppure con l’emulatore).

Quando devi Riutilizzare il Sorgente creato in un'altra applicazione, non hai nessun vincolo, e

Il tempo si riduce moltissimo (Si Risparmia, come tempo e come flessibilità nell’ eventuale fusione

di più parti di software).

Per Creare questa Tag devi fare in questa maniera :

Se vuoi avere una tag condivisa tra più task o Processori in rete: Devi crearla nella Sezione “Controller-Tags”.

Se invece la devi usare solo in un Programma facente parte di una Task: Allora la devi creare

Nella “Program-tags“ del Programma desiderato (Ogni task può contenere sino a 32 programmi)

Quindi con il tasto destro Seleziona “New Tag…”

Ora nel Name inserisci il Nome della Tag (Crea sempre un Nome in Inglese, perché internazionale)

Il Commento “Description” invece potrà essere anche in Doppia Lingua (Inglese/Altra)

Nella Voce “Type” seleziona “Alias” (Perché appunto devi creare l’associazione con Hardware)

Alla Voce “Alias for” devi inserire indirizzo Fisico (Aiutati con il Browser Freccetta in giù)

Ed infatti devi scrivere “Local:2:O.Data.12”

La Voce “Data Type” sarà solo Bool,

La Voce “Scope :” indica su quale Programma o Controllore creare questa Tag.

Lo Stile “Stile” può essere scelto a seconda di come preferisci la rappresentazione del dato.

Per il Nome devi usare delle Regole ed infatti

La sintassi per creare questo nome deve avere uno standard. Ad esempio quello Ungherese o similare,

Io per Esempio ho introdotto queste Modifiche:

Il Nome non deve essere molto Lungo (Max 16 caratteri)

Il Nome Contiene dei Suffissi Che indicano :

L’Ordine o la Sintassi è la Seguente : Suffisso + Ubicazione + NomeDispositivo + Azione

In Pratica prima Specificare il Suffisso del Dispositivo in Esame , Poi Specificare quale parte o dispositivo di Controllo fa parte,

In Nome del Dispositivo (Se Pompa, PompaAcqua, Evacuatore1, ScaricatoreFinale, etc), l’ Azione che Esegue (Alza, Abbassa, Start, Stop, etc)

Questa Sintassi è utile perchè normalmente ordinando le TAGs in Ordine Alfabetico, è molto più facile individuarle.

Esempio : LS_Pmp3_MnLvl

Panoramica dei Suffissi usati per i Dispositivi :

Sonde Termice, Xlicson, PTC o altro [bOOL] TProb_ Tprob_MotSlave, Tprob_Pump

Proximity,sensori in generale LS_ LS_Wagon_LimitPos

Lampade Lamp_ Lamp_Line_Automatic, Lamp_Faults

ElettroValvole EV_ EV_Burner_Enable, EV_Mandrel_Unlock

Selettori Sel_ Sel_Pump1_Enable, Sel_ManAuto

Pulsanti But_ But_StartPump, But_Pump_Start

Contatto TL (Stato del TL) TL_ TL_Form_Driver, TL_Fling_Inverter

Uscita per TL TL_ TL_Driver_Slave

Chiaramente tra Contatto e TL

la Tag sarà un Input oppure Output

Riferimenti analogici Ref_ Ref_120M3, Ref_Pumps

Asse (Master,Slave etc sono più che accettabili) Axle_ Master, Slave, Axle_Mandrel1, Axle_Roll

Uscite di Segnale per Consensi ad Esterno Out_ Out_GoodPipe, Out_LineRun

Ingressi Generici di Consenso o Altro Inp_ Inp_WaterOK, Inp_DecoilerReady, Inp_WelderReady

Allarmi Alarm Alarm_Bull[5].29, Alarm_Gunter[15].31

Dif, OneShot, etc Ons Ons_UpRoll, Ons_Automatic

Timer Timer Timer_delay_Auto, Timer

Time_Out

T

Delay, Dly

Pulse, Pls

In Pratica sono tutti quei criteri che usano anche chi programma con linguaggi più evoluti.

In ogni azienda si hanno delle convenzioni, e si cerca di adottare uno standard, per tutte

Quelle persone che dovranno usare questo sofware, o Riutilizzare.

I Criteri si usati sono quelli in linguaggi come VisualBasic, C, Delphi, etc.

Le Associazioni o Alias possono essere comprendere anche altre Tag, le quali a loro

Volta possono avere delle Associazioni.

Comunque eseguendo una ricerca “Go To Cross Reference” tutti i punti dove vengono usate

Queste Tag vengono trovati, e vengono trovate anche le Tag ad esse associate.

Link al commento
Condividi su altri siti

Scusa se il testo precedente ha perso un pò le Tabulazioni e gli spazi, in alcuni punti non si capisce molto,

però spero di essereti stato utile.

Ciao Johnny812

Link al commento
Condividi su altri siti

Io mi associo a cio' che ha detto Henon.

Programmando sia con S7 che con RSLogix5000 preferisco il secondo.

Specialmente quando devo copiare parte di un programma in un'altra macchina. Con dei drag&drop si fa in un attimo senza perdere ore a controllare se i Merker o i DB sono gia' in uso ed eventulamente modificare il programma.

Certo che utilizzare RSLogix5000 per azionare 5-10 pompe e mettere tutt onella ContinuosTask e' come vedere un vecchietto in Ferrari a 40km/h.

La potenza delle cpu ho potuto vederla in azione con motori (fino a 15) con diverse camme elettroniche e suddivisi in diverse cpu.

Ron

Link al commento
Condividi su altri siti

Rispondo a Johnny812 su come usare il Bit di Sistema "First-Pass"

che nel SLC è S:1/15

Nella ControlLogix ma anche per gli altri controllori della famiglia Logix (FlexLogix,CompactLogic,etc..)

devi scrivere "S:FS"

S:FS First Scan flag

S:N Negative flag

S:Z Zero flag

S:V Overflow flag

S:C Carry flag

S:MINOR Minor Fault flag

Comunque puoi creare anche un Programma nella Sezione "Power-Up Handler"

questo programma viene eseguito al riavvio del Controllore.

Mentre la Flag S:Fs la puoi usare dove vuoi nel programma.

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