Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 4,006 a 4,020 (di 4,209 totali)
  • Autore
    Post
  • in risposta a: Utilizzo variabili globali in una function #36505
    Sergio Bertana
    Amministratore del forum

    Le Function nello standard IEC61131 a differenza delle Function Block non possono operare su variabili globali. Tutti i valori devono essere passati per variabili ed è previsto un solo valore di ritorno. Ecco un esempio di funzione che effettua la somma tra due valori e ritorna il risultato.

    FUNCTION FctAdd: UINT

    VAR_INPUT
        FirstAddend: UINT;  { DE:”First addend” }
        SecondAddend: UINT;  { DE:”Second addend” }
     END_VAR

    { CODE:ST }
    FctAdd:=FirstAddend+SecondAddend;

    END_FUNCTION

    Ecco il codice che utilizza la funzione:

    IOVar:=FctAdd(100, 200);

    Nella variabile IOVar sarà trasferito il valore 300.

    in risposta a: Accesso variabili word da terminale Weintek #36504
    Sergio Bertana
    Amministratore del forum

    Il protocollo modbus sia TCP su seriale che OverIP su rete ethernet permette l’accesso a tutte le variabili relative alla memoria utente (MX100), come si evince dal manuale Programmazione IEC su sistema SLine di cui allego stralcio.

    Attenzione! Siccome l’allocazione delle variabili nella memoria del PLC è eseguita a byte, mentre la lettura dei registri da modbus è eseguita a word, per indirizzare nel terminale le variabili PLC occorre dividerne per 2 l’indirizzo di allocazione. Vediamo per semplificazione una tabella di definizione variabili sul PLC ed il relativo indirizzo nel terminale:

    Variabili su PLC                          Indirizzo HMI
    Name  Type  Address
    Var0     UINT  %MW100.0          3x 40000
    Var1     UINT  %MW100.10        3x 40005
    Var2     UINT  %MW100.100      3x 40050
    Var3     UINT  %MW100.2048    3x 41024
    Var4     UINT  %MW100.4094    3x 42047

    Ricordo che la memoria da %MW100.2048 ad %MW100.4095 è memoria ritentiva, pertanto i valori presenti nelle variabili allocate in questo range di indirizzi sono mantenuti allo spegnimento del sistema.

    in risposta a: Come rilevare ed impostare l’indirizzo IP sulla CPU Slimline #36503
    Sergio Bertana
    Amministratore del forum

    Riporto lo screenshot dei comandi così come visualizzati nel programma di emulazione terminale:

    Login: Admin
    Password: *****
    [Admin]>

    [Admin]> ifconfig
    ————————————————————-[Interface:  eth]–
    Interface:…. On board Ethernet interface
    MAC address:.. 00-50-C2-C3-C0-0E
    IP address:… 192.168.0.122
    Subnet mask:.. 255.255.255.0
    Gateway:…… 192.168.0.1
    ————————————————————-[Interface: slip]–
    Disabled

    [Admin]> ifconfig eth -a 192.168.0.124
    IP address: 192.168.0.124
    Use “cfgcommit” and “reboot” commands to apply settings

    [Admin]> cfgcommit
    System configuration saved

    [Admin]>

    Adesso è possbile spegnere e riaccendere il sistema per rendere operative le impostazioni effettuate.

    in risposta a: Gestire temporizzazioni in linguaggio ST #36502
    Sergio Bertana
    Amministratore del forum

    Esistono comunque anche i blocchi funzione eTOF, Timer Off ed eTON, Timer On che possono essere utilizzati in tutti e 5 i linguaggi della IEC61131. Entrambi i blocchi funzione eseguono temporizzazioni con tempo definibile in mS.

    in risposta a: Gestire temporizzazioni in linguaggio ST #36501
    Sergio Bertana
    Amministratore del forum

    Esiste anche la funzione SysGetSysTime() che permette la lettura di un tick di sistema che si incrementa ogni uS, in questo caso il programma precedente può essere modificato nel modo.

    (* Init the reference time at first program loop. *)

    IF SysFirstLoop THEN
        RefTimeBuf:=SysGetSysTime(TRUE); (* Save the reference time *)
    END_IF;

    (* Check if 1 Sec is passed and invert the logic DoOOM00 state. *)

    IF (SysGetSysTime(TRUE) > (RefTimeBuf+1000000)) THEN
        RefTimeBuf:=SysGetSysTime(FALSE); (* Save the reference time *)
        Do00M00:=NOT(Do00M00);
    END_IF;

    Da notare la chiamata a SysGetSysTime() con la flag FALSE per avere lo stesso tempo utilizzato nel confronto e non perdere i uS di tempo necessari alla esecuzione delle istruzioni di confronto.

    in risposta a: Gestire temporizzazioni in linguaggio ST #36500
    Sergio Bertana
    Amministratore del forum

    La funzione IsMsecTimeOver() si basa sul controllo del tick di sistema che nei sistemi Picolog si incrementa automaticamente ogni 1 mS.

    Nei sistemi SlimLine è possibile da linguaggio ST testare la variabile di sistema SysTime di tipo UDINT che si incrementa ad ogni mS raggiunto il valore massimo si reinizializza. In pratica per eseguire la temporizzazione similarmente a quanto facevi in “C” sui sistemi Picolog puoi fare qualcosa simile al programma sottoriportato che esegue l’inversione della uscita Do00M00 ogni secondo. La variabile RefTimeBuf deve essere dichiarata di tipo UDINT.

    (* Init the reference time at first program loop. *)

    IF SysFirstLoop THEN
        RefTimeBuf:=SysTime; (* Save the reference time *)
    END_IF;

    (* Check if 1 Sec is passed and invert the logic DoOOM00 state. *)

    IF (SysTime > (RefTimeBuf+1000)) THEN
        RefTimeBuf:=SysTime; (* Save the reference time *)
        Do00M00:=NOT(Do00M00);
    END_IF;

    in risposta a: Connessione terminale MT8150 in Profibus #36499
    Sergio Bertana
    Amministratore del forum

    No nessun terminale touch screen Weintek da noi distribuito supporta la rete Profibus.
     
    I terminali touch screen serie i MT80xx, che sono provvisti di interfaccia Ethernet, supportano la rete ProfiNet, quindi possono dialogare con i PLC Siemens utilizzando la rete ProfiNet.

    in risposta a: Raccolta dati logici/analogici da campo con Modbus TCP #36498
    Sergio Bertana
    Amministratore del forum

    Guardando tra i nostri prodotti posso ipotizzare l’utilizzo dei nostri sistemi SlimLine, in merito ai costi puoi, essendo registrato al sito, vederli direttamente dalle nostre pagine web. La nuova gamma di prodotti SlimLine dispone di modulo CPU con interfaccia ethernet direttamente collegabile ad un dispositivo wireles. Il modulo supporta il protocollo Modbus over IP ed al modulo CPU come vedi possono essere collegati moduli di acquisizione logica ed analogica. Naturalmente il prodotto è programmabile in IEC61131 e quindi potresti oltre ad acquisire gli I/O anche gestire logiche locali.

    in risposta a: Acquisizione RTU con connessione dati GPRS #36493
    Sergio Bertana
    Amministratore del forum

    La soluzione proposta è fattibile, non conosco il protocollo 101 nei dettagli, ma abbiamo sicuramente già realizzato applicazioni simili con il protocollo modbus.

    In modalità TCP i due convertitori ATC2000 vanno configurati come Client/Server, il convertitore che funziona da Client si connetterà al convertitore che funziona da Server creando una connessione TCP sulla quale verranno veicolati i dati seriali tra le apparecchiature (SCADA e RTU).

    Essendo il protocollo 101 sicuramente in grado di controllare gli errori di trasmissione, per minimizzare il traffico TCP/IP è anche possibile realizzare una connessione UDP. In questo modo si evitano i messaggi di acknowledge del protocollo TCP diminuendo traffico e costo.

    Come router GPRS e/o UMTS consiglio di dare una occhiata ai prodotti da noi commercializzati nella famiglia dei routers Conel, questi modelli hanno la possibilità di essere ordinati con una scheda di espansione seriale all’interno. Utilizzando questa opzione è possibile realizzare la connessione seriale to seriale direttamente con il router senza utilizzare il convertitore ATC2000.

    in risposta a: Riportare alle impostazioni di default su ATC2000 #36492
    Sergio Bertana
    Amministratore del forum

    La connessione Client/Server tra due convertitori ethernet avviene utilizzando il protocollo TCP o UDP che sono protocolli standard, pertanto non vi sono vincoli tra i dispositivi da utilizzarsi lato Client e lato Server.

    Quindi è possibile “mischiare” dispositivi diversi tra di loro, sia dello stesso produttore che di produttori differenti.

    In pratica però è preferibile scegliere un modello e realizzare reti con modelli uguali, se non altro per avere una unica interfaccia utente sui diversi dispositivi della rete.

    in risposta a: Riportare alle impostazioni di default su ATC2000 #36490
    Sergio Bertana
    Amministratore del forum

    La procedura per ripristinare le condizioni di default sul convertitore ATC2000 è la seguente:

    Aprire il convertitore (Fare riferimento alla foto).
    Individuare sul circuito stampato le piazzole denominate RESET e GND.
    A convertitore spento cortocircuitare con un filo di rame le due piazzole.
    Accendere il convertitore mantenendo le piazzole cortocircuitate per almeno 5 secondi.
    A questo punto è possibile rimouovere il cortocircuito tra le piazzole.

    Ora l’ATC è impostato con i suoi parametri di default, indirizzo IP 192.168.168.125, username admin e password admin.

    in risposta a: Comunicazione modbus RTU master #36489
    Sergio Bertana
    Amministratore del forum

    Ho realizzato un progetto che in linguaggio SFC realizza una semplice comunicazione con un nodo slave utilizzando il function block di comunicazione modbus.

    Nel programma vi sono 3 actions, una di apertura porta seriale e definizione parametri di comunicazione, una di gestione lettura registri da nodo slave ed una di scrittura registri su nodo slave.

    Il passaggio tra le varie actions è condizionato dal termine della esecuzione del comando definito per il blocco funzione di comunicazione, download programma.

    in risposta a: Programmazione remota tramite router GPRS/UMTS #36487
    Sergio Bertana
    Amministratore del forum

    Si questa è una tipica applicazione del router RUT10x, la possibilità di raggiungere via Internet con connessione TCP/IP qualsiasi apparecchiatura dotata di interfaccia di rete Ethernet. Per poter accedere al terminale MT8070i occorre mettere in rete il terminale con il router, assegnando indirizzi IP appartenenti alla stessa rete. Esempio:

    Router
    IP: 192.168.0.1
    Mask: 255.255.255.0

    Terminale
    IP: 192.168.0.10
    Mask: 255.255.255.0
    Gateway: 192.168.0.1 (Indirizzo IP del router)

    Il terminale Weintek utilizza per la programmazione la porta 20248, quindi sul router occorre eseguire un port forwarding su protocollo TCP, tra la porta in ingresso 20248 verso indirizzo IP 192.168.0.10 (Indirizzo IP terminale).

    in risposta a: Drivers per Windows 7 convertitori USB-Seriale Trycom #36486
    Sergio Bertana
    Amministratore del forum

    Il convertitore TRP-C08S ha effettivamente una porta RS232 ed una porta RS422/485 che sono mappate dal driver come due porte COM nel PC, e possono essere utilizzate contemporaneamente.

    Come già riportato in un post precedente, il convertitore modello TRP-C08S utilizza il chips MCS7820 della Moschip, presso il sito del produttore del chip sono disponibili i drivers per Windows 7 sia versione 32 bit che 64 bit. Ho comunque provveduto a rendere disponibili per il download dal nostro sito la nuova versione dei drivers.

    in risposta a: Chiarimenti sul funzionamento del sensoreTemp-485 Box2 #36484
    Sergio Bertana
    Amministratore del forum

    Il sensore di temperatura Temp-485 Box2 è interrogato inviando stringhe ascii, ed il sensore risponde inviando stringhe ascii.

    Stringa richiesta temperatura: T<address>I (Esempio TAI)
    Stringa risposta: *<address><temp><CR> (Esempio *A+025.51C<CR>)
    Stringa risposta se errore: *<address>Err<CR> (Esempio *AErr<CR>)

    <address> é un carattere da ‘A’…’Z’ con eccezzione del carattere ‘T’.
    <CR> è il carattere di carriage return 0x0D o 13 decimale.
    <temp> è il valore di temperatura nel formato “segno, 3 cifre intero, punto, 2 cifre decimali, C”.

    Quindi valori di temperatura validi possono essere: +025.51C, +102.10C, -002.35C.

Stai visualizzando 15 post - dal 4,006 a 4,020 (di 4,209 totali)