Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Giugno 9, 2011 alle 9:18 am in risposta a: Valori errati su visualizzazione registri SAP Selema #36779
Sergio Bertana
Amministratore del forumHo dato una occhiata all’estratto della documentazione Selema che mi hai mandato ed ho notato che utilizza registri a 32 bits, quindi ogni registro occupa lo spazio di indirizzamento di due registri Modbus (Modbus usa registri a 16 bits).
Registro 10 profile_acceleration, Indirizzo: 0x800A, Range: [0,…,0x7FFFFFFF]
Registro 11 profile_deceleration, Indirizzo: 0x800B, Range: [0,…,0x7FFFFFFF]
Registro 12 profile_velocity, Indirizzo: 0x800C, Range: [0,…,0x7FFFFFFF]Il pannello Weintek può gestire registri a 32 bits sia come doppia word sia come variabile float, però quando si utilizza l’indirizzamento a 32 bits vengono letti due registri modbus consecutivi. Ora il problema stà nel fatto che Selema probabilmente per mantenere la compatibilità con il suo formato standard di comunicazione S-Net ha previsto l’indirizzamento dei registri ad indirizzi consecutivi, e non utilizzando solo indirizzi pari (Saltando ciòè un indirizzo per mantenere l’indirizzamento a 16 bits tipico del modbus).
Se inserisci più oggetti di visualizzazione in una pagina del terminale, il software del terminale per ottimizzare la comunicazione raggruppa le interrogazioni eseguendo una sola interogazione di più registri consecutivi. Ma il registro 0x800B (32779) per il terminale usa metà valore del registro 0x800A (32778), e questo ti crea il problema.
La prova più semplice è quella di inserire un solo oggetto di visualizzazione in una pagina e verificare che funzioni correttamente, essendoci un solo oggetto non vengono effettuate ottimizzazioni in lettura quindi se visualizzi il registro 0x800A il terminale richiederà due registri modbus a partire da indirizzo 32778.
Sergio Bertana
Amministratore del forumAggiungo una ottimizzazione su quanto detto in merito alla possibilità di gestire una sorgente di real time clock esterna al terminale. In alternativa al trasferimento dati ciclico è possibile definire nel menù Edit -> Parametri di sistema -> Modello, nella voce Tempo una sorgente esterna di clock (Vedi screenshot).
Per gestire correttamente la sorgente esterna di clock è importante che i dati del real time clock siano allocati nel dispositivo esterno su 6 word consecutive, riporto estratto manuale.
[External device] means the time signal comes from external device. To correctly set source address of time signal is necessary. Take the illustration below as an example: It indicates the source of time signal is from “TV” of the “Local PLC”. The source address “V” starts from address 0 contains 6 consecutive words and each of them contains the following information:
TV 0: Second (the limited range: 0~59)
TV 1: Minute (the limited range: 0~59)
TV 2: Hour (the limited range: 0~23)
TV 3: Day (the limited range: 1~31)
TV 4: Month (the limited range: 1~12)
TV 5: Year (the limit range: 1970~2037)Ricordo che se il PLC è uno SlimLine basterà definire l’indirizzo 100 cosi come riportato nello screenshot.
Giugno 9, 2011 alle 7:00 am in risposta a: FB di comunicazione con inverter Aurora Power One (ABB) #36777Sergio Bertana
Amministratore del forumA titolo dimostrativo ho scritto un semplice programma in ST che esegue la lettura di tutti i registri da un inverter Aurora e li memorizza in un array di REAL, ecco il sorgente ed programma per il download.
(* Eseguo gestione comunicazione con inverter. *)
RdReg(Enable:=TRUE, Start:=AcqOn, File:=Fp, Address:=1); (* Lettura registro *)
AcqOn:=FALSE; (* Acquisizione attiva *)
IF (RdReg.Done) THEN RegsValue[RegIDx]:=RdReg.Value; END_IF;
(* Gestione comando di acquisizione, si attiva su fine esecuzione lettura. *)IF ((RdReg.Done) OR (RdReg.Fault) OR (SysFirstLoop)) THEN
AcqOn:=TRUE; (* Acquisizione attiva *)
RegIDx:=RegIDx+1; (* Register index *)
IF (RegIDx > 37) THEN RegIDx:=0; END_IF;CASE (RegIDx) OF
0:RdReg.Measure:=1; (* Grid Voltage (For three-phases systems is the mean) *)
1:RdReg.Measure:=2; (* Grid Current (For three-phases systems is the mean) *)
2:RdReg.Measure:=3; (* Grid Power (For three-phases systems is the mean) *)
3:RdReg.Measure:=4; (* Frequency (For three-phases systems is the mean) *)
4:RdReg.Measure:=5; (* Vbulk (For Inverter with more Bulk is the sum) *)
5:RdReg.Measure:=6; (* Ileak (Dc/Dc) *)
6:RdReg.Measure:=7; (* Ileak (Inverter) *)
7:RdReg.Measure:=21; (* Inverter Temperature *)
8:RdReg.Measure:=22; (* Booster Temperature *)
9:RdReg.Measure:=23; (* Input 1 Voltage (Input Voltage for single channel module) *)
10:RdReg.Measure:=25; (* Input 1 Current (Input Current for single channel module) *)
11:RdReg.Measure:=26; (* Input 2 Voltage (Input Voltage for single channel module) *)
12:RdReg.Measure:=27; (* Input 2 Current (Input Current for single channel module) *)
13:RdReg.Measure:=28; (* Grid Voltage (Dc/Dc) *)
14:RdReg.Measure:=29; (* Grid Frequency (Dc/Dc) *)
15:RdReg.Measure:=30; (* Isolation Resistance (Riso) *)
16:RdReg.Measure:=31; (* Vbulk (Dc/Dc) *)
17:RdReg.Measure:=32; (* Average Grid Voltage (VgridAvg) *)
18:RdReg.Measure:=33; (* VbulkMid *)
19:RdReg.Measure:=34; (* Power Peak *)
20:RdReg.Measure:=35; (* Power Peak Today *)
21:RdReg.Measure:=36; (* Grid Voltage neutral *)
22:RdReg.Measure:=37; (* Wind Generator Frequency *)
23:RdReg.Measure:=38; (* Grid Voltage neutral-phase *)
24:RdReg.Measure:=39; (* Grid Current phase r *)
25:RdReg.Measure:=40; (* Grid Current phase s *)
26:RdReg.Measure:=41; (* Grid Current phase t *)
27:RdReg.Measure:=42; (* Frequency phase r *)
28:RdReg.Measure:=43; (* Frequency phase s *)
29:RdReg.Measure:=44; (* Frequency phase t *)
30:RdReg.Measure:=45; (* Vbulk + *)
31:RdReg.Measure:=46; (* Vbulk – *)
32:RdReg.Measure:=47; (* Supervisor Temperature *)
33:RdReg.Measure:=48; (* Alim. Temperature *)
34:RdReg.Measure:=49; (* Heat Sink Temperature *)
35:RdReg.Measure:=61; (* Grid Voltage phase r *)
36:RdReg.Measure:=62; (* Grid Voltage phase s *)
37:RdReg.Measure:=62; (* Grid Voltage phase t *)
END_CASE;
END_IF;Sergio Bertana
Amministratore del forumI due prodotti sono esteticamente, dimensionalmente e funzionalmente identici, la versione PoE si differenzia per il fatto che può accettare l’alimentazione oltre che dall’apposito alimentatore fornito a corredo anche dal cavo ethernet.
La presenza del circuito di alimentazione da PoE è un circuito aggiuntivo nel prodotto e quindi ne fà lievitare il costo.
Pertanto se non è necessario alimentarlo da cavo ethernet (PoE), ma si può utilizzare l’alimentatore a corredo, consiglio di scegliere il modello senza PoE.
Sergio Bertana
Amministratore del forumPer la conversione dei dati scaricati da FTP ricordo che puoi utilizzare il programma di conversione EasyConverter di cui è possibile il download dal nostro sito nella pagina del terminale nella sezione download.
Oppure puoi attivare il pulsante Conversione eventi dati, dalla finestra principale del programma EasyManager. Attivando il convertitore dovrai scegliere il file dati da convertire (Esempio 20110607.dtl) e premendo Ok verrà visualizzato un elenco di tutti i dati presenti (Vedi screenshot). Con il tasto di conversione in Excel i dati verranno esportati in un file Excel.Giugno 7, 2011 alle 9:00 am in risposta a: Acquisizione encoder e gestione del valore di quota #36774Sergio Bertana
Amministratore del forumPer gestire valori di quota con valori superiori a 16 bits, occorre gestire il contagiri dell’encoder, in pratica ad ogni roll-over della lettura quota encoder occorre aggiungere o sottrarre il valore di 65536.
Attualmente non vi è un FB specifico, ma ne ho realizzato uno appositamente per questa richiesta, il FB oltre a gestire il contagiri, permette anche di effettuare su comando logico il preset di un valore di quota. Riporto il sorgente ST del blocco funzione ed il programma completo per il download.
VAR_INPUT
Preset : BOOL; { DE:”Preset command” }
EQuote : UINT; { DE:”Encoder quote” }
PQuote : UDINT; { DE:”Preset quote” }
END_VARVAR_OUTPUT
Quote : UDINT; { DE:”Quote” }
END_VARVAR
QMemo : UINT; { DE:”Quote memo” }
Space : INT; { DE:”Spazio percorso” }
END_VAR{ CODE:ST }
(* Calcolo spazio percorso in tacche. *)Space:=TO_INT(EQuote-QMemo); (* Spazio percorso *)
QMemo:=EQuote; (* Quote memo *)
IF (Space > 16#4000) THEN Space:=0-Space; END_IF;(* Comando preset, su attivazione quota è impostata al valore di preset. *)
IF (Preset) THEN Space:=0; Quote:=PQuote; END_IF;
Quote:=Quote+TO_UDINT(Space); (* Quote *)Sergio Bertana
Amministratore del forumTra la gamma di radiomodem ZigBee abbiamo recentemente inserito il modello ATC-3200 che ha ottime caratteristiche radio offerte ad un prezzo molto competitivo. Il radiomodem dispone di connessioni RS232/422/485 pertanto è adatto a tutti i tipi di inverter. La comunicazione ZigBee ad elevata velocità di scambio dati lo rende sicuramente adatto alla comunicazione con qualsiasi inverter. E’ possibile configurare l’identificativo di rete PAN ID, dei vari radiomodem, in questo modo più reti di radiomodem possono operare contemporaneamente nella stessa zona.
Sergio Bertana
Amministratore del forumPer quanto riguarda il router WiFi consiglio un prodotto Ubiquiti, puoi scegliere tra la Picostation o la NanoStation Loco.
Per il trasferimento dei dati dallo SlimLIne al PC centrale è possibile utlizzare il protocollo Modbus Over IP nativo nel prodotto, in questo caso devi sviluppare il master modbus nel PC.
In alternativa puoi usare una semplice connessione UDP (Vedi post).
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.
-
AutorePost