Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumI terminali MT6050i/MT8050i non sono equipaggiati con il real time clock, ma è possibile utilizzare il real time clock del PLC a cui sono connessi. All’interno dei terminali vi sono delle word riservate appositamente alla gestione del tempo (Vedi estratto manuale).
Occorre nel progetto terminale impostare il Trasferimento dati ciclico, per trasferire variabili di data e ora dalle word del PLC alle relative word del terminale. Tra l’altro questa soluzione garantisce la corrispondenza dell’ora e data tra il PLC ed il terminale e consiglio di utilizzarla anche quando si utilizzano i terminali provvisti di real time clock.
Se il PLC è un nostro dispositivo SlimLine, occorrerà definire un unico trasferimento contemporaneo di 6 words, per trasferire tutte le variabili data ed ora (Vedi screenshoot).
Sergio Bertana
Amministratore del forumPer connettersi al terminale in FTP (Estratto manuale) occorre utilizzare un comune client FTP (Esempio FreeFTP, Filezilla, ecc), per autenticarsi occorre definire:
Nome utente uploadhis.
Password definita nel terminale (Default 111111).Sergio Bertana
Amministratore del forumSulle CPU SlimLine è implementato il supporto del protocollo Modbus sia Ascii che RTU su porta seriale e over IP da porta ethernet. Tutta la memoria interna della CPU nella DB100 è accessibile da modbus (Estratto manuale), basterà allocare le variabili (I tre contatori) in questa zona di memoria e poi sarà possibile eseguirne lettura e scrittura da modbus. In alternativa al protocollo modbus, da programma utente SlimLine è possibile gestire comunicazioni sia in seriale che ethernet con protocollo UDP, basterà quindi realizzare un programma che invia ciclicamente su porta seriale o su porta UDP il valore dei 3 contatori e da PC tramite .NET acquisirne i valori (Vedi post).
Giugno 6, 2011 alle 7:36 am in risposta a: Sistema di telecontrollo per applicazione in cantiere edile #36767Sergio Bertana
Amministratore del forumSoluzioni basate su invio messaggi SMS tramite modem GSM. E’ la soluzione più economica e friendly, le informazioni possono essere ricevute direttamente sul proprio telefono cellulare senza bisogno di realizzare programmi. E’ possibile inviare SMS o chiamate all’impianto per richiedere l’invio di uno stato, è possibile anche inviare un SMS con una “password” per definire il nuovo numero a cui l’impianto deve inviare i reports (Comoda per la gestione dei turni del personale, il personale reperibile informa l’impianto sul proprio numero di telefono). SlimLineUn nostro prodotto programmabile SlimLine (Il modulo CPU ha 2 ingressi 2 uscite), interfacciato tramite seriale alla centralina del cliente, riceve i dati, li memorizza, e provvede tramite un modem GSM ad inviare un SMS con il report dei dati. La scheda del cliente non viene modificata ed il software è interamente sviluppato sullo SlimLine, esempio invio SMS. Modem GSM/GPRSSi collega un modem GSM alla porta seriale della scheda del cliente, il software della scheda andrà modificato per gestire i comandi AT del modem (Vedi post) per inviare il messaggio SMS con il report dei dati. Soluzioni basate su connessioni dati con router GPRS/UMTS. Questa soluzione permette di avere una connessione TCP/IP sull’impianto, quindi oltre a veicolare i dati sarà possibile installare telecamere IP. I routers hanno la possibilità di avere una interfaccia seriale visibile come porta TCP/IP (Vedi post) che può essere connessa alla porta seriale della scheda del cliente. I routers possono gestire connessione a DynDNS per rendere statico il proprio indirizzo IP e/o possono gestire VPN. Tutti i prodotti consigliati sono prodotti industruiali con range di alimentazione e di temperatura elevato adatto all’impiego richiesto. Naturalmente sono da installare in un armadietto stagno per avere la protezione IP richiesta.
Giugno 6, 2011 alle 6:37 am in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36766Sergio Bertana
Amministratore del forumPer il test su PC, è possibile utilizzare la nostra utility Toolly. E’ possibile utilizzarlo sia come normale emulazione terminale seriale, che come client o server sia TCP/IP che UDP.
Nello screnshoot è visualizzato nella configurazione UDP server in ascolto sulla porta 120 della stringa in arrivo dallo SlimLine.
Giugno 6, 2011 alle 6:18 am in risposta a: Sistema di videosorverglianza wireless con telecamere IP #36765Sergio Bertana
Amministratore del forumMi sembra di averlo spiegato bene nel post precedente. Devono essere configurate come station, ognuna di esse avrà un indirizzo IP diverso, ed avrà la configurazione wireless (Canale, SSID e password), configurate per accedere alla postazione base (Configurata come access point).
Giugno 4, 2011 alle 9:21 am in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36762Sergio Bertana
Amministratore del forumRicordo che SlimLine gestisce il protocollo Modbus Over-IP, quindi è sempre possibile con un client modbus effettuare la lettura dei registri via TCP/IP. Ma se tu vuoi una soluzione tipo seriale dove lo SlimLine invia i dati su rete ethernet, puoi utilizzare una connessione UDP.
In pratica utilizzando il blocco funzione SysUDPSktSend, UDP socket send è possibile inviare con protocollo UDP dei dati verso un indirizzo IP ed una porta definiti. Sul PC basta avere la porta aperta in attesa di dati da socket UDP. Il blocco funzione che eseguiva l’uscita dei dati su porta seriale è stato modificato nella parte di uscita verso seriale.
NrOfCh:=SysVarsnprintf(ADR(SOut), 32, ‘%04.1f mA$r$n’, REAL_TYPE, ADR(Current));
NrOfCh:=SysUDPSktSend(File, ADR(SOut), TO_UINT(NrOfCh),’192.168.0.31′, 120);Come si vede la funzione SysVarfprintf è stata sostituita dalla SysVarsnprintf che stampa i dati in una stringa e di seguito la funzione SysUDPSktSend invia la stringa verso la porta UDP 120 del dispositivo con indirizzo 192.168.0.31.
Allego il progetto precedente modificato per inviare i dati sia su porta seriale che su porta UDP, download.
Giugno 4, 2011 alle 5:13 am in risposta a: Collegamento inverter PowerOne convertitore Ethernet/Seriale #36760Sergio Bertana
Amministratore del forumDevi impostare l’indirizzo IP del convertitore all’interno del range di indirizzi della tua rete, l’ATC2000 di default ha indirizzo IP 192.168.168.125, username admin e password admin. Per impostare l’indirizzo nel convertitore ti conviene connetterlo direttamente al to PC, impostare l’indirizzo IP del PC ad esempio a 192.168.168.10, e poi dal browser digitando l’indirizzo IP del convertitore accedere alla pagina web del prodotto e modificarne l’IP, dai una occhiata a questa FAQ.
Se installi il software virtual COM è anche possibile cambiare l’IP del convertitore direttamente dall’utility del programma virtual COM come indicato nel post.
Giugno 4, 2011 alle 4:21 am in risposta a: Trasmissione stringa su porta seriale con valore di corrente #36758Sergio Bertana
Amministratore del forumRicordo che SlimLine gestisce il protocollo Modbus sia Rtu che Ascii, pertanto è possibile da PC inviare comando modbus lettura registri codice 03, Read holding registers, ed acquisire valori da variabili allocate nella DB 100 dello SlimLine dove si può appoggiare il valore di corrente acquisito dal blocco funzione SysGetAnInp, get analog input.
Ma se per semplicità preferisci che sia SlimLine ad inviare una stringa ascii con il valore di corrente acquisito, ecco una semplice FB che invia su seriale una stringa del tipo xx.x mA<CR><LF>, allego programma per download.
VAR_INPUT
Send : BOOL; { DE:”Comando di invio stringa” }
File : FILEP; { DE:”File pointer” }
Current : REAL; { DE:”Current value” }
END_VARVAR
SPulse : BOOL; { DE:”Send pulse” }
i : INT; { DE:”Auxiliary variable” }
END_VAR{ CODE:ST } (* Gestione impulso di “Send” ed uscita stringa. *)
IF NOT(Send) THEN SPulse:=FALSE; RETURN; END_IF;
IF SPulse THEN RETURN; END_IF;
SPulse:=TRUE; (* Send pulse *)
i:=SysVarfprintf(File, ‘%4.1f mA$r$n’, REAL_TYPE, ADR(Current));Giugno 3, 2011 alle 9:58 am in risposta a: Computo e visualizzazione potenza istantanea da contatore #36757Sergio Bertana
Amministratore del forumHo realizzato un blocco funzione che effettua il calcolo della potenza istantanea in base alla frequenza di ingresso del contatto. Viene eseguita anche una media sugli ultimi 10 valori acquisiti, allego il progetto per il download.
VAR_INPUT
PTick : BOOL; { DE:”Power tick” }
TPower : REAL; { DE:”Tick power (Kw)” }
END_VARVAR_OUTPUT
IPower : REAL; { DE:”Instant power (Kw)” }
END_VARVAR
Delay : UDINT; { DE:”Delay time (uS)” }
TPulse : BOOL; { DE:”Tick pulse” }
TimeBf : UDINT; { DE:”Time buffer” }
PValues : ARRAY[ 0..9 ] OF REAL; { DE:”Power values (Kw)” }
RSeq : USINT; { DE:”Read sequencer” }
i : USINT; { DE:”Auxiliary counter” }
END_VAR{ CODE:ST }
(* Eseguo controllo fronte salita ingresso conteggio. *)IF (PTick = TPulse) THEN RETURN; END_IF;
TPulse:=PTick; (* Tick pulse *)
IF NOT(PTick) THEN RETURN; END_IF;(* Fronte attivazione impulso, calcolo ritardo impulsi. *)
Delay:=SysGetSysTime(TRUE)-TimeBf; (* Delay time (uS) *)
TimeBf:=SysGetSysTime(FALSE); (* Time buffer *)(* Incremento sequenziatore letture e calcolo potenza istantanea. *)
RSeq:=RSeq+1; (* Read sequencer *)
IF (RSeq >= 10) THEN RSeq:=0; END_IF;
PValues[RSeq]:=(3600000000.0/TO_REAL(Delay))*TPower; (* Power values (Kw) *)(* Calcolo valore medio di potenza istantanea su 10 letture. *)
IPower:=0.0; (* Instant power (Kw) *)
FOR i:=0 TO 9 DO IPower:=IPower+PValues[i]; END_FOR;
IPower:=IPower/10.0; (* Instant power (Kw) *)Giugno 3, 2011 alle 8:51 am in risposta a: Visualizzazione in verticale su terminali serie MT6000/8000 #36756Sergio Bertana
Amministratore del forumIl tool di sviluppo EasyBuilder permette l’impostazione del modo di visualizzazione con possibilità di scelta tra la modalità orizzontale (Landscape) o verticale (Portrait).
Da menù Edit -> Parametri di sistema, nel tab Modello definire modo verticale.
Dal menù settaggi del terminale, accessibile agendo sulla freccia posta a destra in basso sullo schermo (Icona con l’ingranaggio), impostando la password (Default 111111) si può accedere alle impostazioni del terminale.
Dal menù System settings, attivando il tab Firmware settings, è possibile impostare l’orientamento del display, vedi note.
Sergio Bertana
Amministratore del forumProbabilmente usi due variabili Fp locali definite nei due programmi, quindi nella task di Boot esegui correttamente il set della porta seriale, ma poi nella task in Slow essa viene riaperta con il baud rate di default 115200, e, 8, 1.
Ti consiglio di usare la variabile Fp definita come globale e non eseguire più la open della porta nel file eseguito in Slow.
Altro consiglio è di gestire le porte seriali nella task di Back, è inutile caricare di lavoro le task Fast e Slow per gestire la comunicazione.
Allego un programma di esempio per il download.
Sergio Bertana
Amministratore del forumGli I/O presenti sul modulo CPU dello SlimLine non sono mappati in memoria in immagine di processo come tutti gli altri I/O dei moduli di estensione.
Per acquisire gli ingressi occorre utilizzare la funzione embedded SysGetPhrDI, get peripheral digital input definendo Address 255 e Mode DI_8_LL.
Per gestire le uscite occorre utilizzare la funzione embedded SysSetPhrDO, set peripheral digital output definendo Address 255 e Mode DO_8_LL.
Nella libreria PLCUtyLib, si trova il blocco funzione CPUModuleIO, CPU module I/O management che gestisce sia la acquisizione degli ingressi che la gestione delle uscite.
Nel guida Sline programming help che si attiva da LogicLab evidenziando la funzione ed agendo con il tasto F1, è possibile trovare esempi di utilizzo sia delle funzioni embedded che del blocco funzione.
Maggio 27, 2011 alle 12:32 pm in risposta a: Conversione da formato esadecimale a decimale (Hex to Dec) #36753Sergio Bertana
Amministratore del forumNon capisco bene la domanda, cerco di interpretarla. Immagino che tu debba con un comando di read da protocollo Hostlink, restituire il valore di variabili in memoria PLC.
A questo scopo dovrai allocare le variabili nella memoria del PLC ad indirizzi noti, per uniformarsi al protocollo Modbus nativo di SlimLine, potremo dire che da protocollo HostLink andiamo a leggere variabili allocate in DB 100, magari interponendo un offset sull’indirizzamento. Per quanto riguarda la conversione del valore indirizzo e numero di variabili dalla stringa ricevuta in variabili nel formato esadecimale, consiglio questi semplici statements.
Address:=TO_UINT(RxString[5]-16#30)*4096; (* Variable address *)
Address:=Address+TO_UINT(RxString[6]-16#30)*256; (* Variable address *)
Address:=Address+TO_UINT(RxString[7]-16#30)*16; (* Variable address *)
Address:=Address+TO_UINT(RxString[8]-16#30); (* Variable address *)NrOfVars:=TO_UINT(RxString[9]-16#30)*4096; (* Numero variabili da leggere *)
NrOfVars:=NrOfVars+TO_UINT(RxString[10]-16#30)*256; (* Numero variabili da leggere *)
NrOfVars:=NrOfVars+TO_UINT(RxString[11]-16#30)*16; (* Numero variabili da leggere *)
NrOfVars:=NrOfVars+TO_UINT(RxString[12]-16#30); (* Numero variabili da leggere *)Per ottenere il valore in decimale, dovrai moltiplicare per 1000, 100, 10 al posto di 4096, 256, 16.
Per inviare su seriale i dati letti dalla memoria consiglio questi statements:Ptr:=ADR(%MX100.0)+Address; (* Pointer *)
FOR i:=0 TO TO_INT(NrOfVars) DO
Ch:=Sysfputc(TO_INT(@Ptr), Fp); (* Character *)
Ptr:=Ptr+1; (* Pointer *)
END_FOR;Allego un programma di esempio per il download.
Sergio Bertana
Amministratore del forumUlteriori informazioni in questo post.
-
AutorePost