Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumNel FB SysTCPClient, i parametri RxSize e TxSize definiscono la dimensione dei buffer di ricezione e trasmissione dati in byte, quindi determinano la dimensione del pacchetto TCP. Il loro valore non influisce sulla dimensione dei dati in transito, in quanto nelle comunicazioni TCP i dati possono essere suddivisi in più pacchetti TCP che poi vengono “riassemblati” dal gestore della comunicazione.
Nel tuo caso il gestore della comunicazione è il FB ModbusMaster che la gestisce, siccome i pacchetti Modbus possono avere come lunghezza massima 250 coils (32 bytes) o 125 registri (250 bytes) è inutile definire valori maggiori in RxSize e TxSize. E se il valore è inferiore alla dimensione del pacchetto Modbus, il pacchetto verrà frazionato.
Ora veniamo al tuo problema che credo sia riferito ad un BUG del FB ModbusMaster_v3 presente nel package Pck055a040, il BUG è stato risolto e verrà rilasciato con la nuova versione di package Pck055a050 disponibile in versione beta scaricabile dal sito.
Giugno 30, 2025 alle 2:51 pm in risposta a: Errore S1305 in conversione programma da XTarget a XUnified #83160Sergio Bertana
Amministratore del forumIl passaggio dall’architettura XTarget alla XUnified è stato trattato in questo articolo, nel passaggio sono state apportate modifiche ad alcuni oggetti di libreria vedi tabella Oggetti libreria modificati.
Nel tuo caso la funzione SysSpyData probabilmente utilizzata nel FB ModbusTCPGateway, è stata sostituita dalla funzione SysWrSpyData, ecco il motivo dell’errore. Ma se nel tuo progetto aggiungi la libreria eLLabXTargetAdjLib l’errore verrà eliminato.
Il FB ModbusTCPGateway come vedi in questo articolo fà ormai parte dei FB obsoleti, sicuramente è presente nel tuo progetto in gli oggetti di libreria o le intere librerie un tempo venivano incorporati nel progetto LogicLab, ora è preferibile utilizzare la raccolta librerie. Ora puoi scegliere tra queste tre opzioni:
- Aggiungi la libreria eLLabXTargetAdjLib e ricompili il progetto senza modifiche.
- Elimini dal progetto tutte le librerie includi l’ultima versione della raccolta librerie disponibile, aggiungi la libreria eLLabXTargetAdjLib e ricompili il progetto senza modifiche.
- Se il programma esegue unicamente un gateway tra Modbus TCP e Modbus RTU puoi realizzare un nuovo programma utilizzando il FB ModbusGateway. A tal proposito ti basterà includere nel progetto il programma ST_ModbusGateway.
Giugno 30, 2025 alle 11:14 am in risposta a: Termometro con interfaccia web a programmazione settimananale #83104Sergio Bertana
Amministratore del forumIl sistema di monitoraggio IP WiFi HWg-STE2 R2/Plus che è l’evoluzione del prodotto STE che avete ha molte delle caratteristiche che cercate:
- Possibilità di collegarlo alla rete aziendale; (Si)
- Visualizzazione del valore di temperatura da remoto con possibilità di impostare la temperatura desiderata (Si) e programmazione settimanale; (No)
- Possibilità di inviare una e-mail in caso di superamento di una temperatura di allarme (Si)
- Uscita di comando (per azionare gli aerotermi) (No)
Per gestire una programmazione settimanale ed una uscita logica di comando occorre utilizzare un dispositivo Perseus, il dispositivo permette l’impostazione di schedulazioni giornaliere, settimanali, mensili, annuali.
Solo se si ha esperienza nella programmazione di pannelli operatore e PLC, è possibile realizzare uno schedulatore ad hoc utilizzando un pannello Weintek abbinato ad un PLC SlimLine per l’acquisizione della temperatura e la gestione delle uscite di comando (Vedi articolo).
Con il solo sistema SlimLine è possibile realizzare pagine web dinamiche per gestirsi il proprio schedulatore come hanno fatto alcuni ns clienti di cui riporto la pagina di impostazione valori (Screenshot).
Giugno 30, 2025 alle 10:21 am in risposta a: Cambio indirizzi IP rete cliente in teleassistenza #83091Sergio Bertana
Amministratore del forumNon mi è chiara la posizione del driver brushless come mai ha lo stesso indsirizzo IP del PLC, è un refuso?
Immagino che nel pannello la LAN1 sia connesa ad Internet tramite la connessione cliente o con un router LTE, mentre la LAN2 sia utilizzata per la connessione ai dispositivi di macchina (PLC, driver brushless, ecc..). La manovra così come riportata mi pare corretta, le sequenze da eseguire sono:
- Con configurazione attuale cambi IP ai vari dispositivi connessi al pannello, PLC, driver brushless, ecc… con la procedura specifica del dispositivo, tool di configurazione, pagina web, ecc…
- A questo punto puoi cambiare l’indirizzo IP della LAN2 del pannello.
- Ora puoi impostare i nuovi indirizzi nella configurazione IP pass through di EasyAccess per poter nuovamente raggiungere da remoto i dispositivi..
- Ora dovrai modificare il programma HMI con EasyBuilder per impostare il nuovo indirizzo IP di comunicazione con i dispositivi di macchina (PLC, driver brushless, ecc..).
Giugno 30, 2025 alle 7:55 am in risposta a: Scelta simboli da esportare da progetto LogicLab a EasyBuilder #83075Sergio Bertana
Amministratore del forumIl Symbols converter nella versione attuale include nel file di TAGs terminale tutti i simboli che nel programma LogicLab sono allocati nella DB100 che attualmernte è l’unica indirizzabile da Modbus. Nella creazione delle TAGs nel caso di array il programma genera un TAG per ogni elemento dell’array quindi una dichiarazione del tipo:
VAR_GLOBAL MyArray AT %MW100.16 : ARRAY[0..3] OF UINT; END_VARGenererà 4 TAGs
MyArray[0],MyProgram,%MW,40008,,16-bit Unsigned MyArray[1],MyProgram,%MW,40009,,16-bit Unsigned MyArray[2],MyProgram,%MW,40010,,16-bit Unsigned MyArray[3],MyProgram,%MW,40011,,16-bit Unsigned
In realtà nel programma HMI quando si accede ad arrays molte volte si utilizzano i registri indice, quindi l’unica TAG a cui ci si riferisce è quella ad indice 0.
Attualmente non è possibile effettuare impostazioni che permettano di escludere simboli e/o non espandere gli arrays. Comunque il numero delle TAGs importate nel programma HMI non incide ne sull’impegno di risorse ne sulla velocità di comunicazione del pannello con il PLC. Il pannello utilizza solo le variabili abbinate a oggetti grafici utilizzati nel programma.
Giugno 27, 2025 alle 2:14 pm in risposta a: Sostituzione PLC serie Picosyst con serie SlimLine #83054Sergio Bertana
Amministratore del forumCome si vede dalla nostra storia, la famiglia di controllori Picosyst nata nel 1991 è ormai vecchia di 35 anni, e dalla prima serie all’ultima abbiamo sempre mantenuto la compatibilità sia hardware che software. Nel 2009 abbiamo rilasciato la nuova famiglia di controllori SlimLine.
- Compatibilità software: Il nuovo ambiente di programmazione LogicLab è conforme alla normativa EC61131-3 e purtroppo è stata persa la compatibilità software con la famiglia precedente. Il linguaggio a lista istruzioni dei sistemi Picosyst può essere utilizzato solo come base per riscrivere il programma in linguaggio IL (Instruction list) della norma IEC61131.
- Compatibilità hardware: La famiglia SlimLine ha un formato diverso rispetto al suo predecessore, ma mantiene molte similitudini con la modularità degli I/O. Inoltre essendo molto più piccolo è sicuramente possibile installarlo al suo posto. Abbiamo parecchi clienti che specie su macchine di serie hanno realizzato un kit plug and play da inserire al posto del vecchio prodotto.
Per le connessioni elettriche visto che i morsetti della nuova serie sono diversi da quelli della serie precedente ci sono due possibilità:
- Si sconnette il cablaggio esistente e si ricabla sui nuovi morsetti. Ma potrebbero esserci problemi sulla lunghezza cavi e comunque è un lavoro che và fatto da personale esperto (Quindi non plug and play).
- Si realizza un cablaggio che utilizza connettori femmina tipo i WR-TBL Series 3485 – 5.08 mm Reversed Gender della Wurth elektronik con l’approppriato numero di pin in modo da inserire i connettori volanti maschio che prima si inserivano nel Picosyst. Realizzando il cablaggio che riporta i segnali sui nuovi connettori della serie SlimLine.
Sergio Bertana
Amministratore del forumLa funzione MID estrae una sottostringa da una stringa di partenza, indicando la lunghezza della sottostringa e la posizione nella stringa di partenza. Il suo prototipo è:
ANY_STRING MID(IN:=ANY_STRING, L:=UINT, P:=UINT)
Quindi non puoi appoggiare il ritorno di MID in una variabile INT. Come ho già detto in altri topic con le nuove versioni LogicLab introduce sempre correzioni e nuovi controlli sintattici. Per estrarre un numero da una stringa puoi usare la funzione SysVsscanf. Vediamo nel tuo esempio:
VAR MsgID : INT; AStr : STRING[ 16 ]; RxMessage : STRING[ 32 ]; END_VAR RxMessage:='Message ID:12, This is a message'; AStr:=MID(IN:=RxMessage, L:=2, P:=12); eTO_JUNK(SysVsscanf(ADR(AStr), ADR('%d'), INT_TYPE, ADR(MsgID))); eTO_JUNK(SysVsscanf(SysStrFind(ADR(RxMessage), ADR('ID:'), FIND_GET_END), ADR('%d'), INT_TYPE, ADR(MsgID)));Come vedi ho fatto due esempi, nel primo estraggo la sottostringa con i due numeri asccii “12” e poi eseguo la SysVsscanf sulla sottostringa, nel secondo in una sola riga di programma cerco nella stringa il riferimaento “ID;” ed estraggo il valore.
Il secondo esempio ha molti vantaggi, intanto cerca il riferimento e quindi se cambia la testa del messaggio comunque individua sempre il campo che lo segue, inoltre converte il numero qualunque sia il numero di cifre che lo compongono.
Se controlli il ritorno di SysVsscanf puoi verificare se è stato acquisito correttamente il numero e gestire di conseguenza eventuali errori, inoltre nella acquisizione del numero puoi utilizzare anche le regular expressions (Vedi topic).
Sergio Bertana
Amministratore del forumLa dicitura “Sottotensione BUS DC” su un inverter INVT GD350 indica che la tensione del bus DC (la parte in corrente continua del circuito dell’inverter) è inferiore al valore minimo richiesto per il funzionamento corretto. Di solito è legato a problemi di tensione di rete insufficiente:
- La rete in ingresso (AC) fornisce una tensione troppo bassa
- Ci sono problemi sulla linea di alimentazione o cadute di tensione
Puoi provare ad impostare:
- P11.00=000: Phase-loss protection. In questo modo disabiliti tutti i controlli su una eventuale momentanea mancanza di fase sull’alimentazione.
- P11.01=1: Frequency-drop at transient power down. In questo modo permetti all’inverter di modificare la frequenza in uscita su una momentanea sottotensione.
Sergio Bertana
Amministratore del forumSul disco C:/ ci dovrebbe anche essere la cartella Plc, che versione hai di sistema operativo sullo SlimLine. Puoi eventualmente eseguirne l’upgrade vedi qui.
Comunque ricordo che l apresenza del codice sorgente (Il progetto LogicLab) sullo SlimLiner dipende da come si è impostato nel progetto l’opzione di download codice sorgente.
Il fatto che non via sia il file di progetto mi fà pensare che si sia al momento del download del programma sul sistema nel progetto fosse selezionata la voce Never, e quindi non si sia eseguito il download.
Giugno 24, 2025 alle 8:09 am in risposta a: Composizione stringa con valore di 64 bytes in esadecimale #82964Sergio Bertana
Amministratore del forumE’ un esempio per evidenziare la differenza tra l’utilizzo del cast TO_STRING e la semplice copia.
Con TO_STRING viene ritornato il valore esadecimale (con 2 caratteri ascii) del carattere ascii, mentre con la copia si copia il carattere. In pratica se verifichiamo la lunghezza delle due stringhe:
StrLgt[0]:=LEN(AsciiString); StrLgt[1]:=LEN(HexString);- StrLgt[0]=6, La stringa ascii ha lunghezza 6 caratteri.
- StrLgt[1]=70, La stringa hex ha lunghezza 70 caratteri. I primi 6 (La stringa “Hello!”) convertita in hex ha lunghezza 12 caratteri (2 per ogni carattere ascii), poi seguono i 64-6=58 caratteri presenti nei bytes di CCArrivato che esendo tutti azzerati producono 58 caratteri ascii “0” (Hex code 30).
Ricordati che le stringhe vanno sempre terminate con il “tappo” valore esadecimale 0. Se esegui il programma con le stringhe inizializzate a 0 ti troverai automaticamente già il codice tappo al termine. Se invece le stringhe sono già valorizzate potresti avere problemi, quindi ti consiglio di terminarle per sicurezza:
TO_JUNK(eSetBYTE(eTO_POINTER(ADR(AsciiString))+LEN(AsciiString), 16#00)); TO_JUNK(eSetBYTE(eTO_POINTER(ADR(HexString))+LEN(HexString), 16#00));Sergio Bertana
Amministratore del forumSe per regolazione PID a 3 punti ti riferisci ad un sistema di controllo in cui il PID comanda uscite discrete, come comandi digitali (es. Apri, Stop, Chiudi), credo tu possa efficacemente utilizzare FB PIDMng. Cerco di immaginare lo scenario:
- Il il PID classico come il ns PIDMng, produce un’uscita analogica continua.
- Il PID a 3 punti produce comandi digitali (es. Apri, Stop, Chiudi).
Quindi tu potresti semplicemente controllare l’uscita OValue del FB PIDMng con due soglie di valore:
- Se l’errore è positivo oltre una certa soglia, comando 1 (es. Apri).
- Se l’errore è negativo oltre una certa soglia, comando 2 (es. Chiudi).
- Se l’errore è all’interno di una zona morta (isteresi) comando 0 (es. Stop).
Supponiamo di controllare la temperatura di un serbatoio con una valvola motorizzata che apre o chiude il vapore, il PID calcola l’errore (differenza tra temperatura desiderata e attuale).
- Se la temperatura è troppo bassa, comanda “Apri” per scaldare.
- Se è troppo alta, comanda “Chiudi”.
- Se è nella zona di isteresi, non fa nulla.
Giugno 23, 2025 alle 2:49 pm in risposta a: Composizione stringa con valore di 64 bytes in esadecimale #82946Sergio Bertana
Amministratore del forumI puntatori sono la causa maggiore di crash dei programmi, un puntatore “impazzito” può fare davvero grossi danni in un programma andando a sovrascrivere locazioni di memoria con dati errati. Quindi può essere che la nuova versione di LogicLab abbia introdotto controlli più restrittivi sul tipo dati nell’utilizzo dei puntatori. Generando errori e/o warning nel caso di incongruenza.
Ora vista la tua richiesta ho realizzato il progranma StrConcat che credo si aesplicativo:
PROGRAM StrConcat VAR i : UDINT; (* Auxiliary counter *) HexString : STRING[ 256 ]; (* Hexadecimal string *) AsciiString : STRING[ 256 ]; (* Ascii string *) CCArrivato : ARRAY[0..64] OF BYTE; END_VAR CCArrivato[0]:=16#48; //H CCArrivato[1]:=16#65; //e CCArrivato[2]:=16#6C; //l CCArrivato[3]:=16#6C; //l CCArrivato[4]:=16#6F; //0 CCArrivato[5]:=16#21; //! HexString:=''; //Hexadecimal string // Stringa composta da 64 byte esadecimali... // HexString:='48656C6C6F210000 ... 0000' FOR i:=0 TO 63 DO HexString:=CONCAT(HexString, TO_STRING(CCArrivato[i])); END_FOR; // Stringa ascii... // AsciiString:='Hello!' eTO_JUNK(Sysmemmove(ADR(AsciiString), ADR(CCArrivato), 64)); // [End of file]Come vedi HexString contiene il valore Hex di CCArrivato, mentre AsciiString contiene esattamente il carattere ascii corrispondente. Siccome eseguo un CONCATdevo entrare nel loop di concatenazione con HexString inizializzato.
Il tuo errore è avere eseguito un cast di Result a STRING, TO_STRING(Result), Result è già di tipo stringa. Sinceramente non ho verificato se nella vecchia versione di LogicLab questo era tollerato, da quanto dici sembrerebbe di si.
Sergio Bertana
Amministratore del forumLeggo da Internet, l’elenco dei messaggi ISOBUS è definito dallo standard ISO 11783, che è diviso in più parti. I messaggi ISOBUS si basano sul protocollo CAN (Controller Area Network) e usano il formato J1939, con una struttura ben definita basata su PGNs (Parameter Group Numbers).
A quanto pare utilizza lo standard J1939 utilizzato sugli automezzi, abbiamo trattato questo argomento in questo articolo, e come vedi nell’articolo con il programma SAEJ1939Spy puoi connetere il bus CAN del modulo CPU con l’ISOBUS e spiare i vari messaggi in transito. Nella specifica SAE trovi anche l’indicazione dei vari parametri PGN.
Quindi con un po di buona volontà potresti riuscire ad individuare i messaggi che ti interessano. Solitamente i dispositivi CAN inviano dati in modo autonomo, ma non so se il dispositivo Topcon invia di propria iniziativa tutti i suoi dati o se alcuni devono essere sollecitati da richieste che arrivano dal monitor sul trattore.
Giugno 19, 2025 alle 8:36 am in risposta a: Acquisizione variabili da strumenti Modbus e storage su disco #82900Sergio Bertana
Amministratore del forumIl FB ACModbus è nato appositamente per permettere di gestire comunicazioni Modbus con apparecchiature connesse in multidrop su porta seriale. Riferendoti all’esempio riportato nella pagina del manuale devi definire un array di strutture ACMODBUS_DATA una per ogni indirizzo di nodo e comando da eseguire. In questo modo puoi gestire più nodi e più comandi per ogni nodo.
Nella esecuzione il FB ACModbus itera su tutte le strutture dato definite gestendo i relativi comandi. Il parametro Delay del FB ModbusMaster definisce il tempo di pausa tra l’esecuzione dei comandi. Il parametro Timeout del FB ModbusMaster definisce il tempo di attesa risposta dal dispositivo prima di generare errore. Nel caso di un errore nella esecuzione di un comando quel comando verrà ignorato nelle sequenze successive per il tempo definito nel parametro RTime, in questo modo un eventuale nodo in errore non rallenta la comunicazione con gli altri.
Per il salvataggio dei dati acquisiti su disco puoi prendere ad esempio il programma ST_DataLoggerOnCSVFile che trovi in questo articolo. Potrai salvare file ad ogni mese come nell’esempio oppure ogni giorno, ogni ora, ecc. Potrai leggere i dati salvati connettendoti in FTP allo SlimLine oppure inviarli automaticamente ad un server FTP remoto (Vedi articolo).
Quando si utilizza il disco è preferibile aggiungere una SDCard al sistema perchè come noto i dischi su memoria FLASH come il disco C: o anche le SDCard hanno una “vita” cioè un numero di operazioni in scrittura definito (Circa 100.000). Ma se scrivi ogni minuto avendo implementato il wear leveling sul disco hai una vita torica di circa 100 anni. Ma se scrivessi ogni secondo la vita sarebbe solo di 20 mesi.
Giugno 18, 2025 alle 2:09 pm in risposta a: Approccio alla programmazione dispositivi SlimLine #82883Sergio Bertana
Amministratore del forumIl prodotto che citi è un prodotto molto vecchio credo abbia una decina di anni, come si vede dal sito da cui è possibile scaricare tutta la documentazione tecnica, abbiamo a magazzino ancora alcuni esemplari del MPS050B020 che è lo stesso prodotto con qualche upgrade. Vediamo cosa puoi fare per utilizzarlo efficacemente.
- Eseguire l’upgrade all’ultima versione del firmware XUnified. Da questa pagina puoi scaricare l’upgrade, collegandolo in seriale al PC con il programma Toolly puoi eseguire l’aggiornamento firmware. Non eseguire l’aggiornamento bootloader.
- Per la programmazione si utilizza il programma gratuito LogicLab, in questa pagina una quick start guide all’utilizzo. Ti ricordo che LogicLab dispone di un simulatore SimuLab che ti permette di testare i programmi anche senza lo SlimLine. La simulazione su PC non gestisce le comunicazioni sia seriali che ethernet.
- Purtroppo il tuo modello non dispone di porta ethernet quindi per la comunicazione con il PC per la programmazione puoi utilizzare la porta seriale (115200, e, 8 ,1). In alternativa ti consiglio la connessione USB che istanzia nel PC un driver RNDIS di rete (Vedi topic) che dovrai impostare con indirizzo IP 192.168.1.10, sulla rete troverai connesso il modulo con IP 192.168.1.122.
- Con nella cartella di installazione di LogicLab troverai la cartella Examples con all’interno una raccolta di programmi di esempio (I programmi hanno codice Ptpxxx).
- Nella Knowledge Base del ns sito trovi tutte le informazioni sulle funzioni e blocchi funzioni da noi forniti con LogicLab in librerie. Per ogni oggetto è riportato uno o più programmi di esempio (I programmi sono in linguaggio ST per poterli facilmente importare nel proprio progetto). Ma come vedi ogni esempio riporta il programma Ptpxxx in cui risiede. Nello stesso programma è possibile trovare esempi simili in altri linguaggi IL, LD, FBD che potrai facilmente importare nel tuo progetto con il comando Import di LogicLab.
- Se hai qualche domanda la puoi postare qui sul forum, prima però fai una ricerca per verificare che alla tua domanda non sia già stata data una risposta.
- Se ti serve un aiuto diretto puoi acquistare un pacchetto di supporto cosi che un ns tecnico può supportarti nello startup di un programma o nel superare un particolare problema.
-
AutorePost