Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 616 a 630 (di 4,264 totali)
  • Autore
    Post
  • in risposta a: ModbusMaster_v2(55) – error S1305: Unknown function #68569
    Sergio Bertana
    Amministratore del forum

    Posso capire la difficoltà nel passare dalla programmazione di un sistema come il LOGO che ha macrooggetti predefiniti, alla programmazione standard IEC61131 dove si può spaziare tra 5 linguaggi diversi 3 grafici e 2 testuali che sono molto più potenti ma sicuramente più ostici dei linguaggi grafici. Di nostro abbiamo realizzato dei videocorsi dove cerchiamo di dare il più possibile informazioni (Ecco il link) inoltre è possibile accedere ad un supporto on-line per richieste specifiche (Link).

    Il manuale unico, è un retaggio del passato eccolo, lo abbiamo abbandonato perchè in un mondo che evolve velocemente preferiamo avere un manuale accessibile via Internet che modifichiamo e correggiamo giorno per giorno, link. In ogni oggetto (Funzione o FB) è riportata una serie di esempi in linguaggio ST che con un semplice Taglia/Incolla (Link) si possono portare in LogicLab ed utilizzare.

    Venendo al tuo problema tutti gli oggetti sono forniti in librerie, esiste la libreria eLLabMdbDevsLib che contiene il FB ModbusMaster_v2, per poterlo utilizzare in un programma occorre importare la libreria o l’oggetto (Vedi link). Il tuo errore deriva dal fatto che l’oggetto non è presente nel tuo progetto, quindi basterà importarlo per risolvere il problema.

    in risposta a: Conversione di una variabile INT in String #68564
    Sergio Bertana
    Amministratore del forum

    Si proprio la funzione SysVsnprintf è quello che devi utilizzare, visto che hai esperienza di programmazione in linguaggio C la funzione si comporta come la snprintf() del C. Unica differenza che gli argomenti non possono essere variabili ma deve sempre essere un unico argomento di cui occorre definirne il tipo.

    Venendo alla tua necessità se cerchi nel manuale troverai molti esempi di utilizzo di questa funzione ma ecco un esempio per la tua esigenza.

    PROGRAM MyProgram
    VAR
        i : UDINT; (* Auxiliary variable *)
        Counter : ARRAY[0..1] OF UINT := [10, 20]; (* Counter value *)
        Message : STRING[ 32 ]; (* Final message *)
    END_VAR
    
        // Esempio di concatenazione stringhe con funzioni.
    
        i:=SysVsnprintf(ADR(Message), SIZEOF(Message), ADR('Counter[0]: %d'), UINT_TYPE, ADR(Counter[0])); //'Counter[0]: 10'
        i:=SysCVsnprintf(ADR(Message), SIZEOF(Message), ADR(', Counter[1]: %d'), UINT_TYPE, ADR(Counter[1])); //'Counter[0]: 10, Counter[1]: 20'
    
        // Esempio di concatenazione stringhe con operatori di conversione.
    
        Message:=CONCAT('Counter[0]: ', TO_STRING(Counter[0])); //'Counter[0]: 10'
        Message:=CONCAT(Message, ', Counter[1]: '); //'Counter[0]: 10, Counter[1]: '
        Message:=CONCAT(Message, TO_STRING(Counter[1])); //'Counter[0]: 10, Counter[1]: 20'
    
    // [End of file]

    Come vedi ho ottenuto lo stesso risultato utilizzando le funzioni o gli operatori di conversione in stringa. Nell’esempio ho anche visualizzato come realizzare una concatenzione di valori, la funzione snprintf() del C ti avrebbe permesso di fare tutto in una unica riga di codice:

        i=snprintf(Message, SIZEOF(Message), "Counter[0]: %d, Counter[1]: %d", Counter[0], Counter[1]);
    in risposta a: Gestione ricette con SlimLine #68512
    Sergio Bertana
    Amministratore del forum

    L’argomento ricette con SlimLine è stato trattato in questo topic, ed in questo topic.

    In questa Knowledge c’è un esempio.

    Più in generale puoi anche scrivere dati su di un file in formato CSV che puoi poi leggere per estrarne i dati di ricetta. Il vantaggio di utilizzare un file CSV è che lo puoi anche valorizzare/consultare utilizzando Excel.

    Il programma ST_DataLoggerOnCSVFile è un esempio di scrittura dati su file CSV, il programma TagFinder è un esempio di lettura dati da file CSV.

    in risposta a: Missing the “SysGetSysTime” function #68466
    Sergio Bertana
    Amministratore del forum

    In questo periodo come è ben noto a tutti c’è una estrema difficoltà nel reperire i componenti elettronici, quindi siamo stati costretti a sostituire il processore CortexM7 utilizzato nei nostri sistemi con una nuova versione.

    Per rendere il prodotto perfettamente compatibile con i prodotti realizzati con la precedente versione di processore abbiamo dovuto realizzare una nuova versione di sistema operativo.

    in risposta a: Missing the “SysGetSysTime” function #68460
    Sergio Bertana
    Amministratore del forum

    Con la nuova versione di Logiclab sono stati introdotti gli operatori di gestione Data/Ora, quindi ne abbiamo rivisto la gestione. La funzione SysGetSysTime è stata sostituita dalle nuove funzioni di gestione tempo di sistema, che sono disponibili solo se esegui l’upgrade  del sistema operativo.

    Per compilare i progetti esistenti che utilizzano la funzione SysGetSysTime ed altre funzioni di gestione Data/Ora abbiamo realizzato la libreria eLLabDTimeAdjLib che deve essere aggiunta al progetto.

    Per il tuo problema sulla funzione ModbusMaster_v2, tu hai aggiornato la funzione utilizzando l’ultima versione rilasciata, ma non hai aggiornato il sistema operativo dello SlimLine, e quindi non sono presenti le nuove funzioni di gestione tempo di sistema a cui fanno riferimento tutte le nuove librerie.

    in risposta a: Abilitare licenza EasyAccess Trial con Activation Card #68451
    Sergio Bertana
    Amministratore del forum

    Se il pannello è gia attivato con una trial non serve collegarsi nella rete in cui si trova il pannello o usare PC activator, ma devi accedere al dominio e attivarlo da li.

    Per attivare in via definitiva una licenza su un pannello trial occorre:

    • Accedere al dominio nel quale è stato aggiunto e attivata la trial.
    • Andare nelle info del pannello e nel tab licenza selezionare attiva.
    • Quindi inserire il codice della card.
    in risposta a: Connessione seriale tra software CAM e macchina utensile #68404
    Sergio Bertana
    Amministratore del forum

    Il limite delle connessioni RS232 è 15 metri, ora se nella connessione non sono utilizzati i criteri di controllo (RTS, CTS) ma funziona utilizzando i classici 3 fili Rx, Tx, GND hai diverse opzioni.

    • Se puoi utilizzare una connessione cavo, puoi convertire la RS232 in una RS422 utilizando i convertitori Seriale/Seriale. Con due doppini la RS422 ti permette di avere distanze fino a 1200 metri.
    • Puoi utilizzare una coppia di radiomodem, utilizzando frequenze più basse rispetto al WiFi permettono di comunicare anche in presenza di ostacoli.
    • Puoi utilizzare una connessione ethernet con i convertitori Ethernet/Seriale, puoi utilizare una coppia di convertitori oppure 1 solo convertitore lato macchina utensile ed un software di VirtualCOM nel PC.
    • Puoi utilizzare una connessione WiFi con una coppia di convertitori WiFi/seriale, o se hai gia una rete WiFi esistente puoi usare 1 solo convertitore lato macchina utensile ed un software di VirtualCOM nel PC.

    La soluzione in RS422 è la più facile e con meno problemi.

    Nelle connessioni Ethernet/Seriale e WiFi/Seriale se utilizzi il VirtualCOM a volte ci sono problemi di coesione con altri programmi in Windows e devi perdere tempo nella configurazione o addirittura cambiare software di VirtualCOM. Sicuramente hai meno problemi con una coppia di convertitori in modalita Client/Server.

    in risposta a: Calcolo media di un valore analogico #68399
    Sergio Bertana
    Amministratore del forum

    Puoi scrivere una macro eseguita a tempo che esegue la lettura del valore analogico e lo memorizza in un array di valori float. Sull’array di valori puoi utilizzare le funzioni di media messe a disposizione dal Macro language.

    • AVERAGE(source[start], result, count). Gets the average value from array.
    • HARMEAN(source[start], result, count). Gets the harmonic mean value from array.
    • MEDIAN(source[start], result, count). Gets the median value from array.

    Trovi gli esempi nel manuale di EasyBuilderPro

    Sergio Bertana
    Amministratore del forum

    Due verifiche ovvie sono:

    Il PC dove esegui la simulazione è nella rete del PLC?, se esegui un ping del PLC da PC il ping riesce?

    Prova a disabilitare il firewall di Windows, magari quando EasyBuilder ti ha chiesto di creare al regola non l’ahi abilitata.

    in risposta a: Errore “eGetBYTE => Funzione sconosciuta” in compilazione #68389
    Sergio Bertana
    Amministratore del forum

    Mi sembra che non hai seguito bene l’esempio che citi, nell’esempio viene eseguita questa operazione:

    LBDTime[0]:=TO_LDATE_AND_TIME(SysDateGetNs()); //Long date and time buffer

    Ma la variabile di appoggio LBDTime[0] è di tipo LDATE_AND_TIME e non LDATETIMESTRUCT.

    Per valorizzare una variabile LDATETIMESTRUCT (Che è una struttura dati) devi eseguire come nell’esempio l’operazione:

    i:=SPLIT_DT(BDTime[0], ADR(LDTime[1].Year), ADR(LDTime[1].Month), ADR(LDTime[1].Day), ADR(LDTime[1].Hours), ADR(LDTime[1].Minutes), ADR(LDTime[1].Seconds));
    in risposta a: Errore “eGetBYTE => Funzione sconosciuta” in compilazione #68382
    Sergio Bertana
    Amministratore del forum

    Il programma che citi (Si trova in questo articolo) non era ancora  stato corretto, quindi il pointer Ptr definito come @BYTE, in realtà punta ad una variabile stringa RxTxBuf, e nel tuo progetto probabilmenti hai la flag Project->Option->Code Generation->Strict pointers check attiva. Con la versione 5.22 di LogicLab il controllo sui pointer è più rigoroso e quindi genera errore.

    Se togli come indicato in questo articolo la spunta sul controllo dei pointers il programma verrà compilato.

    Ho comunque provveduto a modificare l’esempio convertendo Ptr in un pointer PVOID, ed utilizzando le funzioni di gestione void pointer.

    in risposta a: Errore “eGetBYTE => Funzione sconosciuta” in compilazione #68377
    Sergio Bertana
    Amministratore del forum

    Tra le varie novità introdotte con l’uscita della versione 5.22.x.xx di LogicLab è stato introdotta la definizione PVOID per i puntatori. Si utilizza per definire i puntatori che possono indirizzare qualsiasi tipo di variabile.

    Nella libreria eLLabCommonLib poter accedere ai diversi tipi di variabili puntate da un puntatore PVOID sono state definite funzioni specifiche (Vedi manuale).

    Dall’errore credo che il tuo problema sia il non avere inserito la libreria eLLabCommonLib nel progetto.

    Sergio Bertana
    Amministratore del forum

    Il PLC Schneider m251 lavora in protocollo UDP che potrebbe essere gestito più lentamente dal pannello rispetto alla connessione TCP.

    Come consiglio per velocizzare si può provare a gestire gli allarmi come array di bit e non singoli bit di allarme, ed in generale è sempre preferibile per ottimizzare la comunicazione usare array di Tags rispetto a Tags allocate in modo disordinato.

    Per quanto riguarda la velocità sul cambio pagina, moltisimo dipende dalle immagini, conviene sempre avere immagini dimensionate esattamente sulla risoluzione del pannello in modo che non sia necessario eseguire un resize in visualizzazione.

    in risposta a: Condizionare ad autenticazione l’accesso al sistema da LogicLab #68253
    Sergio Bertana
    Amministratore del forum

    Aggiungo che disabilitando il protocollo Modbus il sistema non sarà più accessibile, quindi se hai connesso un pannello operatore oppure altri dispositivi, dovrai abilitare un server IP su una porta diversa da 502 ed abilitare un protocollo Modbus su questo server.

    Così puoi lasciare la porta 502 abilitata per il LogicLab e un’altra porta per l’eventuale terminale. Questo naturalmente se accedi da remoto con un port forwarding, perchè da locale tramite connessione ethernet chiunque conosca la nuova porta potrà connettersi anche con LogicLab.

    Se vuoi evitare che LogicLab possa connettersi allora devi istanziare un FB ModbusSlave connesso ad un SysTCPServer nel tuo programma, così Logiclab non potrà agire su questa connessione.

    in risposta a: Condizionare ad autenticazione l’accesso al sistema da LogicLab #68242
    Sergio Bertana
    Amministratore del forum

    LogicLab si connette con il protocollo Modbus che non prevede autenticazione, per ottenere quello che desideri è possibile agendo da pagina Web disabilitare il protocollo Modbus sulle connessioni che vuoi inibire (Screenshot).

    Ricordo che la connessione TCP ha di default 3 server attivi, infatti dalla pagina web ci sono 3 protocolli Modbus tutti connessi al server IP[0].

    Disabilitando il protocollo Modbus LogicLab non potrà più connettersi, per abilitare nuovamente la connessione dovrai da pagina Web a cui accedi con le credenziali abilitare il protocollo Modbus sulla connessione da cui si connette LogicLab.

Stai visualizzando 15 post - dal 616 a 630 (di 4,264 totali)