Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Novembre 25, 2021 alle 2:28 pm in risposta a: WL-R210, utilizzo delle 2 porte Ethernet in modalità switch #62347
Sergio Bertana
Amministratore del forumIl router WL-R210 come tutti i router basati su firmware Tomato (Tra quelli da noi distribuiti il WL-R200), ha 2 porte ethernet indicate come LAN e WAN/CON, è possibile utilizzarle entrambe come porte ethernet in switch.
In pratica i dispositivi connessi alle due porte si “vedono” tra di loro e possono utilizzare il modem LTE per connettersi ad Internet.
Allego un estratto del manuale How to utilizzato internamente dai ns tecnici che descrive la configurazione.
Sergio Bertana
Amministratore del forumIl mio suggerimento precedente era secondo me la soluzione più semplice ma se tu vuoi avere uno switch che cambia colore oppure cambia disegno in base al valore di una word puoi usare il Multi-State Switch.
Sergio Bertana
Amministratore del forumNon sò se ho capito bene il tuo problema…
Mi sembra che ti possa venire in aiuto la funzione Linearize, definendo come parametri le varie posizioni relative ai vari tempi.
Sergio Bertana
Amministratore del forumBravo ad avere utilizzato la console di spionaggio che permette di avere una visione completa del funzionamento. Ricordo che per una spiegazione degli errori occorre riferirsi a questa pagina. Oppure più semplicemente aprire il browser sull’indirizzo IP dello SlimLine e nella pagina di Logs troverete accanto ai vari errori il link diretto alla pagina di visualizzazione.
Il tuo errore indica che non si riesce ad inviare il frame di interrogazione Modbus sullo stream di comunicazione, probabilmente non era aperta la comunicazione con il Logo.
Sergio Bertana
Amministratore del forumNon so che versione della libreria tu abbia, ma se scarichi dal sito l’ultima versione trovi sicuramente il FB di gestione Modbus master.
Ora si chiama ModbusMaster_v1, chi ha dimestichezza con le nostre librerie conosce che ogni volta che in un oggetto di libreria (Funzione o FB) vengono modificati i parametri di I/O viene cambiato anche il nome dell’oggetto aggiungendo una versione, come in questo caso “_v1“.
Se in un vecchio progetto si è utilizzato un oggetto precedente esempio ModbuMaster è possibile recuperarlo dalla libreria eLLabObsoleteLib.
Inutile dire che in caso di revisione di un vecchio progetto converrebbe comunque utilizzare sempre le ultime versioni disponibili.
Sergio Bertana
Amministratore del forumDirei che dalle domande mi sembra che hai le idee molto chiare. Vediamo i vari punti.
- Puoi utilizzare un unico FB SysTCPClient modificando di volta in volta l’indirizzo IP a cui connettersi, in questo modo risparmi memoria dati ma certo hai un tempo di connessione al dispositivo. Questa soluzione è obbligatoria se dovessi comunicare con molti dispositivi ma avendo solo 2 dispostivi puoi anche istanziare 2 FB client.
- Si il Done si attiva al termine della esecuzione del comando ed è da utilizzare per passare ad un eventuale comando successivo. E’ l’uscita Ok ad indicare che la comunicazione ha avuto esito positivo.
- Si direi proprio che la soluzione migliore è realizzare una macchina a stati utilizzando l’operatore CASE e passare di stato in stato sull’uscita di Done attiva. Nel passaggio tra i vari stati se usi un solo client dovrai anche modificare l’indirizzo IP a cui connetterti.
Sergio Bertana
Amministratore del forumHo visto dal tuo progetto che hai inserito un certo numero di trasferimenti ciclici (Screenshot).
La funzione di trasferimento ciclico và usata con parsimonia, il pannello la esegue con la stessa priorità della grafica, quindi se è molto pesante (O se il dialogo con il PLC è lento) ti porta ad un rallentamento significativo delle prestazioni grafiche.
Il alternativa al data transfer ti consiglio di inserire i trasferimenti in una macro eseguita a tempo, la macro ha una priorità di esecuzione inferiore alla grafica, quindi non avrai rallentamenti sulla gestione grafica. Ecco un esempio di macro:
macro_command main() short Var //Variabile di appoggio // Ripetere queste due funzioni per ogni trasferimento. GetData(Var, "PLC2_Siemens S7-1200", "MArea-AUT_CMD_BR2", 1) SetData(Var, "PLC3_Siemens S7-1200", "DB14_HMI2(forno2)_to_PLC3[DB14]-Reg_Ciclo_Generale_PLC2", 1) end macro_command
Come vedi ho eseguito il trasferimento da un PLC all’altro, ma puoi anche trasferire da PLC a HMI e viceversa. Naturalmente devi ripetere la coppia GetData, SetData per ogni variabile. Per diminuire il numero di istruzioni puoi raggruppare le variabili in posizioni consecutive così con un unica coppia di istruzioni puoi trasferire molte variabili.
Novembre 17, 2021 alle 2:10 pm in risposta a: Utilizzo del comando UserConfig da Telnet per modifica password #62133Sergio Bertana
Amministratore del forumAbbiamo 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.
Novembre 17, 2021 alle 12:18 pm in risposta a: Rete di PLC distribuita con connessione Internet #62130Sergio Bertana
Amministratore del forumIl 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.
Novembre 15, 2021 alle 4:43 pm in risposta a: Conversione da DWORD a REAL con lo standard IEEE-754 #62122Sergio Bertana
Amministratore del forumE’ 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]));
Sergio Bertana
Amministratore del forumSe 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.
Novembre 15, 2021 alle 2:27 pm in risposta a: Rete di PLC distribuita con connessione Internet #62114Sergio Bertana
Amministratore del forumQuindi 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.
Sergio Bertana
Amministratore del forumNelle 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.
Novembre 11, 2021 alle 8:01 am in risposta a: Utilizzo variabili di sistema in blocchi funzione #62097Sergio Bertana
Amministratore del forumSi 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
Novembre 9, 2021 alle 8:42 am in risposta a: Accesso da pannello ad alcune funzioni di sistema #62090Sergio Bertana
Amministratore del forumPurtroppo le funzioni che chiedi non sono accessibili da programma.
- Non è possibile gestire il contrasto, puoi solo agire sulla luminosità, registro LB9040 (+), registro LB9041 (-), registro LW9040 permette di settare direttamente il valore.
- Puoi attivare una pagina vuota per la pulizia del touch, la pagina non esiste la devi definire tu con sfondo nero.
- La procedura di calibrazione si attiva solo alla accensione del pannello tenendo un dito sullo schermo.
-
AutorePost