Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 166 a 180 (di 4,232 totali)
  • Autore
    Post
  • in risposta a: Weincloud assegnazione permessi accesso pannelli agli utenti #77943
    Sergio Bertana
    Amministratore del forum

    Il portale Weincloud è stato oggetto di modifiche ultimamente e avendo cambiato alcuni menù si sono creati alcuni problemi di gestione. Ora per l’assegnazione dei diritti agli utenti occorre accedere al menù Directory dove sono visualizzati tutti i pannelli connessi al dominio.

    Selezionando il pannello vengono visualizzati gli utenti che hanno permessi sul pannello, con il tasto Add Permission è possibile aggiungere utenti.

    Come si vede dallo screenshot, per ogni utente è possibile selezionare i diritti di accesso al pannello.

    in risposta a: Come funzionano gli index per gestire array #77937
    Sergio Bertana
    Amministratore del forum

    Con protocollo assoluto l’array del PLC Siemens non è 1-2-3-4  ma bisogna puntare al valore assoluto della Tag.

    Esempio:
    DB 10 array [0..10] of word
    Partendo  da indirizzo assoluto 0 avremo:  0,  2,  4,  6, ..

    Quindi sul pannello occorre mettere come Tag iniziale la prima DB10.word 0,  abilitare l’Index e su questo andrà forzato il valore corretto cioè (0,  2,  4,  6, ..) che è il salto necessario per passare all’oggetto successivo.

    in risposta a: Weincloud pannello disattivato Vs pannello rimosso #77931
    Sergio Bertana
    Amministratore del forum

    Dal portale Weincloud è possibile effettuare diverse operazioni sui pannelli vediamole:

    • Remove: Il pannello viene rimosso dal dominio ma mantiene il riferimento HWKey codice attivazione (Activation card), quindi può essere nuovamente connesso al dominio o connesso ad altro dominio utilizzando i valori di SessionID e Password visualizzabili con la pagina 76 del progetto EasyBuilderPro.
    • Transfer: Permette di trasferire il pannello da un dominio ad un’altro.
    • Deactivate: La licenza sul pannello viene disattivata, sarà possibile ricollegare il pannello al dominio o ad altro dominio utilizzando HWKey e codice di attivazione (Activation card). Ricordo che l’activation card permette fino a 3 attivazioni dello stesso pannello o di pannelli diversi ma naturalmente l’attivazione deve essere univoca cioè un solo pannello puo essere attivato con quella activation card.
    in risposta a: Relè controllato da web con richieste GET/POST #77850
    Sergio Bertana
    Amministratore del forum

    La soluzione più semplice è utilizzare un sistema SlimLine, grazie al server web nativo è possibile creare una pagina htm che ritorna su richiesta GET lo stato del relè. In pratica occorre creare una pagina con il seguente contenuto:

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    Relay status:<!--['%d', BOOL, 2048]-->
    </body>
    </html>

    Come si evince da questo articolo alla richiesta della pagina al posto del TAG <!–[‘%d’, BOOL, 2048]–> viene ritornato il valore presente nella variabile BOOL allocata nella memoria dello SlimLine in DB100.2048.

    Inviando un POST Content-Type: application/x-www-form-urlencoded con body BOOL+2048=x, verrà settata la variabile con il valore x (0/1), gli indirizzi da 2048 a 4095 sono tamponati, quindi il valore settato rimarrà memorizzato anche allo spegnimento del sistema.

    Nel programma dello SlimLine basterà eseguire la copia della variabile sull’uscita reale. Ecco il semplice programma:

    VAR
        RCommand AT %MX100.2048 : BOOL; (* Relay command from WEB *)
        Do00CPU AT %QX255.0 : BOOL; (* Output 00 CPU module *)
    END_VAR
    
        Do00CPU:=RCommand;
    in risposta a: Visualizzazione ora:minuti:secondi con scalatura a macro #77832
    Sergio Bertana
    Amministratore del forum

    Siccome in molti mi chiedono la macro complementare alla visualizzazione ora per poter impostare HHMMSS da terminale (Nella impostazione non si possono separare i campi con : ma vanno definiti di seguito e sempre a 2 cifre), ecco le 2 macro.

    sub unsigned int TimeRead(unsigned int Value)
    unsigned int VSecs=0, VMins=0, VHour=0, VResult=0
    
    VSecs=Value%60
    VMins=(Value/60)%60
    VHour=Value/3600
    VResult=(VHour*10000)+(VMins*100)+VSecs
    return VResult
    end sub
    sub unsigned int TimeWrite(unsigned int Value)
    unsigned int VSecs=0, VMins=0, VHour=0, VResult=0
    
    VSecs=Value%100
    VMins=(Value/100)%100
    VHour=Value/10000
    VResult=(VHour*3600)+(VMins*60)+VSecs
    return VResult
    end sub

    Nel programma in LogicLab occorre gestire una variabile UDINT a cui indirizzare l’oggetto di visualizzazione numerica nel mio esempio la variabile HMIVars.ClockTime. Come si vede viene trasferito nella variabile solo il valore di ora della SysDateTime, Data/Ora di sistema.

    Su variazione del valore della variabile HMIVars.ClockTime (Sicuramente si è impostato un nuovo valore da terminale) viene aggiornato il valore di SysDateTime, Data/Ora di sistema. Questo programma và eseguito in task Back.

        IF (HMIVars.ClockTime <> ClockTime) THEN
            SysDateTime:=(SysDateTime-MOD(SysDateTime, 86400))+HMIVars.ClockTime;
        END_IF;
    
        ClockTime:=MOD(SysDateTime, 86400); //Clock time
        HMIVars.ClockTime:=ClockTime; //Clock time
    in risposta a: Domande su configurazione inverter #77727
    Sergio Bertana
    Amministratore del forum

    Gli inverter GD350 hanno una infinità di parametri a volte è difficile orientarsi ma quasi sempre agendo opportunamente si riesce ad ottenere ottimi risultati. Vediamo alcuni consigli per i tuoi “problemini”.

    1. La regolazione della frenatura in DC si regola da P01.9 a P01.12, ma credo che il tuo problema riguardi il flusso magnetico, puoi provare ad agire sul P08.50: Coefficiente di frenatura del flusso magnetico, impostando valori da 100 a 150. Maggiore è il coefficiente, maggiore è la forza frenante.
    2. Puoi provare ad agire su P05.24: Lower limit value of AI1, tutti i segnali analogici hanno un offset, quando il range di velocità (Quindi Hz in uscita) è basso valori minimi di offset sono trascurabili, ma avendo un range di frequenza molto alto 600Hz anche un minimo valore di offset genera qualche Hz in uscita.
    3. La prontezza della regolazione dipende dalla impostazione del parametro P00.00: Modalità di controllo della velocità.
      Se P00.00=2: Controllo SVPWM (scalare V/F) adatta in applicazioni che non richiedono grande accuratezza di controllo, l’unico parametro su cui puoi agire è il P04.09: Guadagno di compensazione scorrimento V/F aumentando il valore si ha maggiore prontezza.
      Se P00.00=1: Vettoriale SVC 1 adatta in caso di alte prestazioni, puoi agire sui parametri da P03.00 a P03.05 cercando sperimentalmente la configurazione migliore.
    in risposta a: Personalizzare il messaggio di accesso negato #77720
    Sergio Bertana
    Amministratore del forum

    Non è possibile cambiare il numero di pagina che appare in pop-up quando si accede ad un oggetto protetto.

    Ma tutte le pagine predefinite sono modificabili quindi puoi tranquillamente copiare il contenuto della pagina 70 nella pagina 7. Siccome la pagina 70 ha dimensioni maggiori dovrai prima definire le dimensioni corretta alla pagina 7 (Screenshot).

    in risposta a: Unità ingegnerista in campo visualizzazione numerica #77714
    Sergio Bertana
    Amministratore del forum

    Puoi scegliere nell’introduzione numerica nel TAB Format, il tipo Customized dove si andranno a definire il numero di cifre e la definizione dell’unità ingegneristica (Screenshot).

    in risposta a: Diagnostica FB gestione Modbus #77703
    Sergio Bertana
    Amministratore del forum

    L’uscita Fault del FB ModbusMaster si attiva per un loop di programma ad ogni errore di comunicazione contemporaneamente viene incrementato il contatore di errori Errors.

    L’uscita Done si attiva comunque sia che il comando sia andato a buon fine che in errore, questo permette di gestire il modello a cascata. L’uscita Ok si attiva solo alla ricezione della risposta corretta da parte del dispositivo slave.

    L’uscita Fault come in tutte le FB permette utilizzando la funzione SysGetLastError di catturare il codice di errore riscontrato, codice di errore di cui è possibile trovare informazioni in questa pagina. Le eccezioni non generano Fault e non incrementano il counter degli errori.

    Per una diagnosi completa della comunicazione Modbus consiglio di utilizzare la console di spionaggio, che permette di visualizzare i dati inviati al dispositivo e i dati ricevuti in risposta. Nella console di spionaggio verranno anche visualizzati gli eventuali codici di errore e le eventuali risposte di eccezione, permettendo una analisi completa della comunicazione.

    in risposta a: Arresto in rampa del motore #77692
    Sergio Bertana
    Amministratore del forum

    I parametri da controllare sono:

    • P01.08 Selezione di arresto.
      0: Decelerazione fino all’arresto: dopo che il comando di arresto diventa valido, l’inverter decelera per ridurre la frequenza di uscita durante
      il tempo impostato. Quando la frequenza scende l avalore del parametro P01.15, l’inverter si arresta.
      1: Arresto per inerzia: dopo che il comando di arresto diventa valido, l’inverter cessa immediatamente l’uscita ed il carico si arresta per inerzia meccanica.
    • P01.15 Velocità di arresto.
      Sotto questa velocità l’inverter cessa l’uscita ed il carico si arresta per inerzia meccanica.

    Verifica i valori impostati in questi due parametri.

    in risposta a: Problemi nella parametrizzazione inverter #77681
    Sergio Bertana
    Amministratore del forum

    Non sapendo esattamente di che tipo di motore si tratti eviterei di dare troppa importanza alla sequenza di autotuning, puoi utilizzare l’autotuning statico. Considera che anche impostando il tipo di motore errato non si creano problemi all’inveter farei queste prove.

    • Assumo che si tratti di un motore asincrono (Molto più probabile) quindi imposterei i suoi parametri (Almeno quelli che conosco).
    • Ricorda che i parametri per il motore asincrono si impostano da P02.01 a P02.14 mentre quelli del motore sincrono da P02.15 a P02.23.
    • Senza fare autotuning provo a fare ruotare il motore partendo da velocità molto basse e salendo piano piano per verificare se il motore gira correttamente.
    • Se non gira correttamente provo la stessa sequenza impostando motore sincrono. Ricorda che per il motore sincrono occorre impostare anche il numero di coppie di poli parametro P02.17.
    in risposta a: Possibilità di comando 2 motori #77674
    Sergio Bertana
    Amministratore del forum

    Si come si evince da questo articolo, la serie GD350 ha la possibilità di configurare i parametri di 2 motori e di selezionare il motore attualmente connesso all’inverter. Vediamo quali sono i parametri da utilizzare

    • P08.31 (Default 0) che abilita selezione da ingresso logico, consiglio di utilizzare l’ingresso S4 impostando il parametro P05.04=35.
    • Gruppo di parametri P02.xx per i parametri del motore 1
    • Gruppo di parametri P12.xx per i parametri del motore 2

    Naturalmente occorrerà effettuare l’autotuning di entrambi i motori.

    in risposta a: Parsing stringa da porta seriale #77655
    Sergio Bertana
    Amministratore del forum

    Si certo puoi realizzare dei FB o delle funzioni per gestire le varie decodifiche stringa ma come hai detto tu per poter accedere a variabili esterne da FB o funzione le variabili devono essere globali. Non puoi accedere con la definizione EXTERN da FB o funzione a variabili locali di un program.

    in risposta a: Utilizzo regular expressions in SysVsscanf #77648
    Sergio Bertana
    Amministratore del forum

    Ho realizzato un semplice programma di esempio dove per estrare la descrizione ho utilizzato le regular expressions, poi ho estratto tutti gli altri campi eseguendo la funzione SysStrFind per la ricerca ricorsiva dei separatori “;”.

    PROGRAM FieldsExtract
    VAR
        i : UDINT; (* Auxiliary variable *)
        APtr : @STRING; (* Auxiliary pointer *)
        Title : @STRING; (* Title field *)
        Record : @STRING; (* Record field *)
        Description : STRING[ 32 ]; (* Description *)
        Node : USINT; (* Node *)
        Type : USINT; (* Type *)
        Value : USINT; (* Value *)
        Name : STRING[ 32 ]; (* Name *)
    END_VAR
    
        Title:=ADR('Description;Node;Type;Value;Name'); //Title field
        Record:=ADR('InputCard; 1; 2; 3; Card name'); //Record field
    
        i:=SysVsscanf(Record, ADR('%32[^;]'), STRING_TYPE, ADR(Description));
    
        APtr:=SysStrFind(Record, ADR(';'), FIND_GET_END);
        IF (APtr = eNULL) THEN RETURN; END_IF; //Error
           i:=SysVsscanf(APtr, ADR('%d'), USINT_TYPE, ADR(Node));
    
        APtr:=SysStrFind(APtr, ADR(';'), FIND_GET_END);
        IF (APtr = eNULL) THEN RETURN; END_IF; //Error
        i:=SysVsscanf(APtr, ADR('%d'), USINT_TYPE, ADR(Type));
    
        APtr:=SysStrFind(APtr, ADR(';'), FIND_GET_END);
        IF (APtr = eNULL) THEN RETURN; END_IF; //Error
        i:=SysVsscanf(APtr, ADR('%d'), USINT_TYPE, ADR(Value));
    
        APtr:=SysStrFind(APtr, ADR(';'), FIND_GET_END);
        IF (APtr = eNULL) THEN RETURN; END_IF; //Error
        i:=SysVsscanf(APtr, ADR('%32[ a-zA-Z]'), STRING_TYPE, ADR(Name));

    Come si vede nella acquisizione delle variabili stringa ho utilizzato la sintassi %nn dove si indica la dimensione della variabile di appoggio del risultato per evitare di sforarne la dimensione. SE la stringa è più lunga verrà troncata al valore indicato.

    in risposta a: Problema lettura variabili da macro #77572
    Sergio Bertana
    Amministratore del forum

    Verifica che nella macro siano stati dichiarati i giusti tipi di variabili.

    Classicamente nel database hai variabili INT per i dati a 16bit ma nelle macro i dati a 16 bit devono essere dichiarati short e non int.

Stai visualizzando 15 post - dal 166 a 180 (di 4,232 totali)