Vai al contenuto
PLC Forum


Plc Visualizzati Kernel - Qualcuno li conosce?


MarcoEli

Messaggi consigliati

Ho visto che ci sono dei blocchi, per esempio la gestione dei motori passo passo, che sono scritti in C e che l'utente può richiamare e utilizzare. anch'io non ho trovato niente di più. Nella prova fatta hai utilizzato i blocchi per i motori passo passo? Nella documentazione non ho trovato la frequenza degli ingressi encoder, ne sapete qualcosa? Sto valutando di provarne uno. grazie.

Link al commento
Condividi su altri siti


Ciao a tutti,

Nel "set di istruzioni" di Flash . è indicato che puoi fare una chiamata C_CALL LABEL; è una chiamata di subroutine scritta in linguaggio C. L'utente comunque le utilizza in modo automatico e senza entrare nella programmazione C o in una libreria C. L'utente indica, secondo il programma alla condizione del ramo 'acceso' (ON), di eseguire questa SubRoutine. Automaticamente il compilatore provvederà a fare il resto.

C_CALL step_ramp ;; Chiamata di una funzione esterna in linguaggio 'C'

Nella pagina di "FUNZIONI SPECIALI" "Motore Passo-Passo" di Flash . sono indicati i data corrispondenti che puoi leggere o scrivere, oppure i flag che puoi leggere o scrivere, per descrivere il movimento.

Se in successione cambi questi dati e fai ripartire il motore farà movimenti diversi.

DATA_990/991 Numero di passi Corrente Controllo Motore Passo (long 32 bit)

DATA_988/989 Numero di passi Target Controllo Motore Passo (long 32 bit)

DATA_987 Frequenza Massima impulsi Controllo Motore Passo [Hz]

DATA_986 Numero impulsi rampa addelerazione Controllo Motore Passo

DATA_985 Numero impulsi rampa decelerazione Controllo Motore Passo

SYS_48 Funzione step attiva, solo per uso interno

SYS_49 Posizionamento in corso

SYS_50 Posizionamento finito

con il VTP_402 l'uscita in frequenza è Step Out OUT_09

Esempio di programmazione:

LD INP_00 ; condizione prima di iniziare il movimento

MOV #12000,DATA_988 ;Numero di passi da effettuare = 12000

MOV #1000,DATA_987 ;Frequenza massima = 1000 Hz

MOV #400,DATA_986 ;Rampa di accelerazione = 400 impulsi

MOV #200,DATA_985 ;Rampa di decelerazione = 200 impulsi

LD INP_01 ; condizione di comando movimento

C_CALL STEP_RAMP ;chiamata della funzione

LD SYS_49 ;Durante il posizionamento

OUT LED_01 ;Accende LED_01

LD KEY_05 ;se key_05 (TASTO F5) premuto,

C_CALL STEP_MANUAL ;esegue posizionamento manual

Lorenzo B. :huh:

Link al commento
Condividi su altri siti

Ciao a tutti,

Nella documentazione del VTP402 ho trovato che la frequenza per ogniuno di tutti e due gli ingressi encoder bidirezionali è di Max Freq: 10KHz

Ingressi dedicati INP_08, INP_09, INP_07,INP_10.

vedi documentazione Funzioni speciali in Flash .

Lorenzo B. :huh:

Link al commento
Condividi su altri siti

A proposito del controllo dei motori passo passo con questi DLC : dovendo controllare un asse legando la sua velocità a quella di un mandrino, che a sua volta riceve un riferimento analogico da un pedale, come posso cambiare il riferimento di velocità all'asse senza interruzioni del moto?

Link al commento
Condividi su altri siti

ifachsoftware
vengono salvate su eprom automaticamente ogni tanti millisecondi

Mi sembra strano che il programma salvi ogni x millisecondi su eeprom in quanto che le eeprom hanno una certa vita media e se gli scrivi sopra ogni x millisecondi rischi di non arrivare a fine anno con tale memoria (e' lo stesso problema dei PC industriali con dischi a stato solido che se gli scrivi in continuazione log di ricette & co rischi di ammazzarli prematuramente ...).

Probabilmente usano degli altri accorgimenti ...

Ciao :)

Link al commento
Condividi su altri siti

Ciao a tutti,

e Ciao a Samumcr

Fra le chiamate a una funzione esterna in linguaggio 'C' c'è anche la C_CALL step_manual, per fare girare sempre il motore passo-passo (con il VTP_402 l'uscita in frequenza è StepOut OUT_09), inoltre viene passato un flag di run, che puoi lasciare sempre attivo.

Se sei interessato ad affrontare in modo semplice il problema puoi guardare gli indirizzi sul sito di KernelSistemi e mandi una e-mail in sede o ad un solution providers.

Lorenzo B. :huh:

Link al commento
Condividi su altri siti

Caio a tutti

e Ciao a Ifachsoftware

Hai ragione su eeprom il numero di scritture è limitato (100.000 o 1.000.000 a seconda dei tipi [che Kernel usa]) e dopo si brucia e non funziona piu'.

Rettifico e correggo quanto scritto alla parte A) del Messaggio #20

A ) Nei DLC Kernel ha il Sistema operativo e il programma utente residente in eeprom;

.) I data-utente da DATA_0 a DATA_1023 sono manipolati all'immediato in memoria RAM interna del processore. Un certo numero di questi sono dedicati alle funzioni speciali.

.) Le locazioni da DATA_0 a DATA_431 sono volatili.

.) Le locazioni da DATA_432 a DATA_511 sono automaticamente copiate nella RAM tamponata dell'orologio calendario ogni 100 msec e ricaricate alla accensione con l'ultimo valore memorizzato (se e' attivato SYS_18).

.) Le locazioni da DATA_512 a DATA_1023 sono automaticamente copiate in EEPROM esterna se scritte dal lato terminale-visualizzatore al comando da tastiera e sono pertanto non volatili, alla riaccensione del DLC riprendono l' ultimo valore memorizzato. Dal lato del programma PLC e' possibile salvare il valore in EEPROM con un semplice comando.(SET SYS_20; flag di scrittura in eeprom, ... deve essere attivato dal PLC con una operazione di SET, viene resettato automaticamente al termine della operazione. Il DATA_22 deve contenere l' indirizzo del primo DATA da salvare. Il DATA_23 deve contenere l' indirizzo dell'ultimo DATA da salvare.

esempio

LD #610,DATA_22

LD #620,DATA_23

SET SYS_20

; salva in eeprom dal DATA_610 al DATA_620

.) i flag-utente, da FLAG_128 a FLAG_255 sono volatili

i flag-utente, da FLAG_0 a FLAG_127 sono automaticamente copiate nella RAM tamponata dell'orologio calendario ogni 100 msec e ricaricate alla accensione con l'ultimo valore memorizzato.

.) i data-delle-ricette fino a 16 KByte o a 64 KBytes a seconda dei modelli.

E' possibile utilizzare la eeprom esterna per memorizzare ricette o programmi di lavorazione (blocchi). Una ricetta (o blocco) e' costituita da un insieme contiguo di DATA memory, ciascuno con il suo significato. Esistono delle funzioni per leggere/scrivere un blocco di DATA memory sulla eeprom attivate dai relativi flag di sistema.

SYS_58 flag di scrittura in eeprom, deve essere attivato dal PLC son una operazione di SET, viene resettato automaticamente al termine della operazione

SYS_59 flag di lettura dalla eeprom, deve essere attivato dal PLC son una operazione di SET, viene resettato automaticamente al termine della operazione

DATA_22 deve contenere l' indirizzo del primo DATA da salvare

DATA_23 deve contenere la dimensione del blocco (numero di DATA memory)

DATA_24 deve contenere il numero del blocco

esempio

#MOV #80,DATA_22

#MOV #14,DATA_23

RISE KEY_02

MOV #1,DATA_24

SET SYS_58 ;salva su block n. 1

;alla condizione di RISE(fronte di salita) del tasto F2 (KEY_02) esegue l'operazione

;salva il DATA_80 e i seguenti (contandone in tutto) 14, sul blocco 1 delle ricette

.) L'altra parte di RAM viene utilizzata per le operazioni immediate e per l'orologio

Lorenzo B. :huh:

Link al commento
Condividi su altri siti

Ciao,

mi rivolgo a Lorenzo B, che vedo ferrato sull'argomento:

i 5kHz dell'uscita per il controllo dei motori passo passo non mi bastano. devo quindi buttarmi su una comunicazione seriale. L'azionamento riceve stringhe numeriche esadecimali (vorrei usare un azionamento serie APSN della SHS). esiste la possibilità di comunicare con questo azionamento con un DLC Kernel?

Link al commento
Condividi su altri siti

Io vorrei utilizzare la seriale a bordo (VTP804), per passare e ricevere quote all'azionamento (che ho conosciuto da poco, ma ritengo buoni prodotti e con una buona documentazione, disponibile in rete dove si possono trovare i protocolli di comunicazione) comandi etc.. Si dovrebbe utilizzare un protocollo libero a quanto vedo, devo costruirmi delle stringhe esadecimali da inviare all'azionamento. Mi chiedo se è possibile fare ciò.

Link al commento
Condividi su altri siti

Ciao a tutti,

Ciao a samumcr,

Conosco gli SHS, ma non conosco il protocollo; un anno fà abbiamo chiesto se era implementato il Modbus e ci fu risposto che a breve sarebbe stato possibile; a tutt'oggi li abbiamo usati con altri sistemi ma non con seriale.

Con un DLC Kernel puoi comunicare con protocolli dedicati, (come ad esempio con il protocollo Kernel, con MODBUS DI MODICON in RTU mode, con Hostlink di Omron).

Invece per avere un protocollo libero (trasmettere una stringa interamente costruita da te) è meglio che chiedi ai responsabili assistenza Kernel.

Dal lato Visualizzatore-Display la lettura-scrittura è automatica, scritto quale è il canale della Com. e scritto qual'e' il DATA_ del dispositivo esterno, impostato nel progetto il protocollo, la stringa di trasmissione viene completata dal DLC.

Dal lato del PLC diverse cose sono automatiche, comunque una parte della stringa deve essere costruito dal programma, e dal programma devono essere dati i comandi di partenza della trasmissione.

Nell' . in linea di Flash trovi scritto che:

Comunicazione con dispositivi esterni.

E' possibile collegare un DLC con altri dispositivi esterni dotati di linea seriale (termoregolatori, espansioni, inverters, etc) per scambiare comandi e parametri. La comunicazione avviene sempre attivando alcuni flag di sistema e appoggiando le variabili su alcuni DATA memory.

Sono possibili due operazioni: lettura e scrittura. La lettura puo' essere singola o a blocchi mentre la scrittura e' solo singola. La comunicazione avviene secondo il protocollo selezionato in opzioni progetto, il DLC si comporta in questo caso da master, e' pertanto possibile collegare piu' dispositivi slave in una rete master/slave, ciascuno con il suo indirizzo di nodo. La comunicazione avviene in background, senza rallentare il ciclo del PLC e viene sincronizzata per mezzo dei flag di sistema.

SYS_51 Comando lettura su COM_0

SYS_52 Comando di scrittura su COM_0

DATA_33 Scambio dati per lettura su COM_0 : indirizzo PLC esterno

DATA_34 Indirizzo di memoria da leggere

DATA_35 numero locazioni da leggere

DATA_36 dato letto (lettura singola)

DATA_37 puntatore a blocco dati letto ( lettura multipla)

DATA_38 indirizzo di memoria da scrivere

DATA_39 dato da scrivere (solo scrittura singola)

SYS_53 Comando lettura su COM_1

SYS_54 Comando di scrittura su COM_1

DATA_40 Scambio dati per lettura su COM_1 : indirizzo PLC esterno

DATA_41 Indirizzo di memoria da leggere

DATA_42 numero locazioni da leggere

DATA_43 dato letto (lettura singola)

DATA_44 puntatore a blocco dati letto ( lettura multipla)

DATA_45 indirizzo di memoria da scrivere

DATA_46 dato da scrivere (solo scrittura singola)

Vedere anche gli esempi di programmazione: Lettura/scrittura su COM_0

;;;;;; rw com 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SBR RW_COM_0

LD SYS_16 ;ogni 100 msec

MOV #1,DATA_33 ;legge dal PLC_addr 1

MOV #10,DATA_34 ;all'indirizzo 10

MOV #4,DATA_35 ;per 4 word

MOV #40,DATA_37 ;risultato dal DATA_40

SET SYS_51

LD KEY_05 ;alla pressione di F_5

MOV #1,DATA_33 ;scrive sul PLC_addr 1

MOV #10,DATA_38 ;all'indirizzo 10

MOV DATA_512,DATA_39 ;il contenuto di DATA_512

SET SYS_52

ENDSBR

Lorenzo B. :huh:

Modificato: da Lorenzo B
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...