Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 961 a 975 (di 4,379 totali)
  • Autore
    Post
  • in risposta a: Utilizzo del comando UserConfig da Telnet per modifica password #62133
    Sergio Bertana
    Amministratore del forum

    Abbiamo cambiato la lettera del firmware da Sfw198Dxxx a Sfw198Exxx perchè è cambiata la gestione utenti, rimando all’articolo per una spiegazione dettagliata del comando UserConfig. Ecco le modifiche:

    • La gestione degli utenti si basa su 3 livelli di credenziali Admin, User, Guest.
    • Prima vi erano solo 3 utenti uno per ogni livello di credenziale
    • Ora si possono distribuire i livelli di crendenziali sui 4 utenti avendo quindi la possibilità di più utenti allo stesso livello.
    • Prima di default vi erano 3 utenti: Admin, User, Guest ognuno con il livello di credenziali omonimo. Ora si ha il solo utente Admin che può aggiungere e rimuovere a piacere altri utenti.
    • Prima il comando CfgCommit -d reimpostava a default gli utenti con credenziali minori o uguali a quella del’utente che eseguiva il comando. Adesso il comando se eseguito da un utente con credenziali di Admin elimina tutti gli utenti tranne se stesso assegnandosi  la password di default Admin. Se eseguito da un utente con credenziali inferiori non ha effetto sugli utenti.
    in risposta a: Rete di PLC distribuita con connessione Internet #62130
    Sergio Bertana
    Amministratore del forum

    Il primo requisito è che i due PLC geograficamente distribuiti siano raggiungibili tramite indirizzo IP. Quindi dovrai avere nei 2 siti una connessione Internet con IP pubblico e configurare il router per il port forwarding dalla porta pubblica verso la porta 502 del PLC.

    L’HMI dovrà potersi connettere ad Internet, quindi dovrai avere configurato correttamente il Gateway di rete. Il problema è che quando configuri il PLC all’interno dell’HMI puoi solo assegnare l’IP e non l’URL, quindi se le connessioni internet dei 2 PLC hanno un IP dinamico non potrai raggiungerli anche utilizzando un servizio come DynDNS.

    Il nodo Modbus dei vari PLC puoi lasciarlo ad 1 in tutti tanto raggiungerai ognuno di essi tramite una connessione TCP ed ognuno avrà indirizzo IP diverso dall’altro.

    Una considerazione, visto anche il problema dell’URL (Credo che le tue connessioni Internet ti daranno un IP pubblico ma sarà quasi certamente dinamico) perchè non creare una connessione tra i 3 sistemi SlimLine (In questo caso l’unico indirizzo IP pubblico sarà quello dello SlimLine connesso al pannello) mentre i 2 PLC remoti creeranno solo connessioni in uscita quindi funzionanti anche con IP NATtati e non dovrai aprire porte sul router. Dai una occhiata a questa nota.

    in risposta a: Conversione da DWORD a REAL con lo standard IEEE-754 #62122
    Sergio Bertana
    Amministratore del forum

    E’ il problema dell’endianness cui facevo riferimento prima, nel Modbus non è indicato come gestire il passaggio di variabili più lunghe di 16 bits, quindi di solito dipende dall’endiannes del dispositivo.

    Nel tuo caso il dispositivo da cui leggi ha un endiannes diverso dallo SlimLine.

    Per il calcolo del valore corretto espresso su variabile DINT puoi fare come hai fatto tu, ma ti consiglio di utilizzare la funzione VarSwap, passando come sorgente l’indirizzo del buffer Modbus e destinazione l’indirizzo della variabile DINT. In questo modo è garantita anche la gestione dei valori negativi.

    i:=VarSwap(DINT_TYPE, ADR(Temperature), ADR(buffer[0]));
    in risposta a: Conversione array di byte in una stringa #62119
    Sergio Bertana
    Amministratore del forum

    Se ho ben capito nell’array sono inseriti già dei caratteri ascii, quindi se li vuoi trasferire su di una stringa non occorre fare nulla, basta essere certi di avere il codice tappo 16#00 al termine dei caratteri ed eseguire un semplice Sysmemmove. Ecco un esempio con diverse possibilità.

    VAR
        Tag1 : STRING[ 32 ]; (* Tag value *)
        Tag2 : STRING[ 32 ]; (* Tag value *)
        Tag3 : STRING[ 32 ]; (* Tag value *)
        i : UDINT; (* Auxiliary variable *)
        BArray : ARRAY[0..7] OF BYTE; (* Array of Tag ASCII characters *)
    END_VAR
    
        BArray[0]:=16#31; //'1';
        BArray[1]:=16#32; //'2';
        BArray[2]:=16#33; //'3';
        BArray[3]:=0;
    
        // Tutti gli esempi sotto riportati danno come risultato la stringa "123".
        // Da notare che nella funzione "Sysmemmove" occorre copiare un byte in più
        // della lungheza stringa per copiare anche il codice tappo 16#00.
    
        i:=ArrayToFString(ADR(BArray), SIZEOF(BArray), BYTE_TYPE,  ADR(Tag1), SIZEOF(Tag1), ADR('%c'), ADR(''));
        i:=SysVsscanf(ADR(BArray), ADR('%s'), STRING_TYPE, ADR(Tag2));
        i:=Sysmemmove(ADR(Tag3), ADR(BArray), Sysstrlen(ADR(BArray))+1);

    Non capisco come mai nel tuo esempio:

       i:=ArrayToFString(ADR(BArray), SIZEOF(BArray), BYTE_TYPE,  ADR(Tag), SIZEOF(Tag), ADR('%c'), ADR(''));
    

    Mi dici che non funziona, nel mio esempio funziona.

    in risposta a: Rete di PLC distribuita con connessione Internet #62114
    Sergio Bertana
    Amministratore del forum

    Quindi se ho ben capito hai un HMI connesso in RS232 ad un PLC ed adesso aggiungi altri 2 PLC connessi in ethernet allo stesso HMI il tutto raggiungibile da Internet attraverso il port forwarding sul router.

    Intanto se possibile collegherei anche il primo PLC in ethernet e quindi sul HMI dovrai configurare 3 dispositivi PLC con protocollo ELSIST MODBUS TCP/IP (Vedi screenshot). Ad ogni PLC dovrai impostare l’indirizzo IP del PLC a cui si connette.

    Nei tuoi oggetti grafici nelle varie pagine farai riferimento al PLC cui desideri l’oggetto si riferisca.

    Un’altra curiosità… perchè utilizzi il port forwarding e non utilizzi invece EasyAccess che ti permette di accedere ai dispositivi senza dover aprire porte sul tuo router e funziona anche su connessioni NATtate o senza IP pubblico. Inoltre gestisce la crittografia sulla connessione incapsulando i dati scambiati all’interno di una VPN.

    in risposta a: Conversione struttura Tree di vecchi progetti #62100
    Sergio Bertana
    Amministratore del forum

    Nelle ultime versioni di LogicLab è possibile suddividere il tree di progetto in cartelle definibili a piacere e questo permette di avere una migliore suddivisione dei vari files di progetto. Nello screenshot un esempio di suddivisione progetto in cartelle.

    Se crei un progetto nuovo di default è già suddiviso in cartelle, se apri un vecchio progetto puoiu nelle proprietà selezionare Use customizable workspace per poterlo suddividere in cartelle. Se il progetto non è nel formato plcprj lo devi prima salvare scegliendo il nuovo formato di progetto.

    Per quanto riguarda invece la possibilità di definire le variabili in lista piuttosto che in tabella basta agire sui tasti a lato che ti permettono di passare dal formato tabella al formato lista od al formato view per vederne il valore in debug.

    Il formato lista è possibile anche sulle variabili globali (Esempio quelle allocate in DB100 che usi per Modbus).

    Purtroppo come dici tu non è possibile passare al formato lista nella definizione delle strutture dati.

    Aggiungo che selezionando l’opzione Multiple files project verrà creata una cartella src nella cartella di progetto con all’interno i vari files che compongono il progetto.

    in risposta a: Utilizzo variabili di sistema in blocchi funzione #62097
    Sergio Bertana
    Amministratore del forum

    Si certo la norma IEC prevede la possibilità di utilizzare all’interno di blocchi funzione variabili esterne. Occorre identificarle con il nome ed il tipo definito indicandole con l’attributo VAR_EXTERNAL, ecco un esempio di FB in cui gestisco una uscita UDINT con un conteggio che si incrementa ad ogni secondo.

    FUNCTION_BLOCK MyFB
    VAR
        Pulse : BOOL; (* Pulse flag *)
    END_VAR
    VAR_OUTPUT
        Counter : UDINT; (* Counter *)
    END_VAR
    VAR_EXTERNAL
        SysClock1000 : BOOL; (* Clock 1 second *)
    END_VAR
    
        IF (SysClock1000 = Pulse) THEN RETURN; END_IF;
        Pulse:=SysClock1000; //Pulse flag
        IF NOT(SysClock1000) THEN RETURN; END_IF;
        Counter:=Counter+1;

    Basterà istanziare il FB in un program per poterlo utilizzare.

    PROGRAM MyProgram
    VAR
        FBUse : MyFB; (* FB instance *)
    END_VAR
    
        FBUse(); //Execute the FB
    in risposta a: Accesso da pannello ad alcune funzioni di sistema #62090
    Sergio Bertana
    Amministratore del forum

    Purtroppo le funzioni che chiedi non sono accessibili da programma.

    1. Non è possibile gestire il contrasto, puoi solo agire sulla luminosità, registro LB9040 (+), registro LB9041 (-), registro LW9040 permette di settare direttamente il valore.
    2. Puoi attivare una pagina vuota per la pulizia del touch, la pagina non esiste la devi definire tu con sfondo nero.
    3. La procedura di calibrazione si attiva solo alla accensione del pannello tenendo un dito sullo schermo.
    in risposta a: Visualizzazione pannello da smartphone con EasyAccess #62084
    Sergio Bertana
    Amministratore del forum

    Personalmente utilizzo diversi viewers, VNC per Android e Mocha VNC Lite.

    Il Mocha VNC Lite è quello che mi dà la migliore esperienza di uso, purtroppo la versione Lite in modalità gratuita funziona solo per 5 minuti poi bisogna riavviare la connessione. Ecco alcuni screenshot di utilizzo.

    1. Si configura la connessione indicando l’indirizzo IP del dispositivo e la password di accesso. Se la password non è indicata verrà richiesta al momento della connessione.
    2. La visualizzazione grafica  dell’immagine del pannello. Nel mio caso è un pannello da 4,3″ quindi anche sullo schermo dello smartphone la visibilità è buona. Tutti comandi sono accessibili direttamente toccando la relativa icona. Con il tasto indietro di Android è possibile attivare la visualizzazione del menù.
    3. Agendo sul comando Full screen si ritorna alla visualizzazione del terminale.
    in risposta a: Lettura pagina attuale da PLC su cMT-3072x #62081
    Sergio Bertana
    Amministratore del forum

    Come indicato in questo topic l’ID della pagina attuale è presente in una variabile del pannello…

    Il registro LW-9050 (16bit) : current base window ID sui terminali normali (o il registro PLW-9050 sui terminale serie CMT che hanno una pagina diversa per ogni utente) contiene il numero di pagina attivo sul terminale. Con una operazione di Data transfer puoi trasferirne il valore in un registro del PLC.

    in risposta a: Acquisizione di variabili SIGNED64 bit da Modbus #62052
    Sergio Bertana
    Amministratore del forum

    Mi viene in mente qualcosa tipo questo:

    VAR
        WValue : ARRAY[0..3] OF WORD;
        IValue : ARRAY[0..1] OF LINT;
    END_VAR
    
        // Min value: -9223372036854775808 16#8000000000000000
    
        WValue[0]:=16#8000; //MSW
        WValue[1]:=16#0000;
        WValue[2]:=16#0000;
        WValue[3]:=16#0000; //LSW
    
        IValue[0]:=WValue[0];
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[1]);
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[2]);
        IValue[0]:=(IValue[0]*16#10000)+TO_ULINT(WValue[3]);
    
        // Max value: +9223372036854775807 16#7FFFFFFFFFFFFFFF
    
        WValue[0]:=16#7FFF; //MSW
        WValue[1]:=16#FFFF;
        WValue[2]:=16#FFFF;
        WValue[3]:=16#FFFF; //LSW
    
        IValue[1]:=WValue[0];
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[1]);
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[2]);
        IValue[1]:=(IValue[1]*16#10000)+TO_ULINT(WValue[3]);

    Nell’esempio ho riportato i due valori estremi di una variabile LINT.

    in risposta a: Più applicazioni sullo stesso Pannello #62048
    Sergio Bertana
    Amministratore del forum

    Quello che hai suggerito è difficilmente realizzabile, primo perchè le tre applicazioni potrebbero avere gli stessi numeri di pagina e quindi andrebbero in conflitto.

    Inoltre avresti un progetto corposo dove ci potrebbero essere macro, allarmi o oggetti generici in sovrapposizione tra i progetti che potrebbero causare problemi.

    Molto meglio salvare i tre progetti in 3 PenDrive oppure tutti e 3 su di una unica PenDrive ed accendendo il pannello con la PenDrive inserita caricare il progetto che si desidera.

    in risposta a: Connessione con inverter Toshiba TOSVERT VF-nC3 Series #62044
    Sergio Bertana
    Amministratore del forum

    Ti allego il programma NC3s_V3 che potrebbe fare al caso tuo.

    in risposta a: Invio dati tramite interfaccia CAN ad uno sniffer #62042
    Sergio Bertana
    Amministratore del forum

    Si certo il parametro Length indica il numero di bytes da inviare nel messaggio.

    in risposta a: Invio dati tramite interfaccia CAN ad uno sniffer #62037
    Sergio Bertana
    Amministratore del forum

    Con la funzione SysIsCANRxTxAv puoi verificare se l’interfaccia CAN ha ricevuto dei dati o se c’è spazio nel buffer di trasmissione.

    Per trasmettere dati devi utilizzare la funzione SysCANTxMsg che permette di inviare un messaggio CAN. I messaggi CAN possono avere fino ad 8 bytes di dati come vedi dalla definizione del tipo messaggio SYSCANMESSAGE.

    Quindi per ricevere ed inviare messaggi CAN ti bastano le funzioni di gestione CAN, I FB di gestione CAN Open utilizzano le funzioni base CAN ma gestiscono il protocollo CAN Open che nel tuo caso mi sembra di capire non serva.

Stai visualizzando 15 post - dal 961 a 975 (di 4,379 totali)