Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumLa gestione pagine dei pannelli CMT è un pò più complessa di quella dei pannelli delle altre serie dove l’argomento è stato trattato nel topic. Nella serie CMT è possibile avere fino a 3 clients che operano sul pannello in modo indipendente uno dall’altro, quindi hai la possibilità di comandare il cambio pagina per tutti i clients oppure sul singolo client. Per poter gestire le operazioni sul singolo client è stato creato un nuovo tipo di variabili le PLW. Quindi le variabili LW sono comuni a tutti i clients, mentre le variabili PLW sono relative al solo sul client da cui stai operando. Ho realizzato il programma CMTPageChange (Download) che dimostra come funziona il cambio pagina. Come vedi dallo screenshot nella Common Window ho inserito un Option List che agisce sulla PLW 0 con la possibilità di selezionare 3 diverse pagine. Per cambiare la pagina ho utilizzato il PLC Control di cambio pagina collegandolo alla PLW 0, in questo modo quando un utente cambia il valore della sua PLW 0 la sua pagina verrà cambiata (Solo la sua). Se nel PLC Control si utilizzasse una LW oppure una variabile PLC modificandone il valore verranno cambiate le pagine di tutti i clients connessi.
Marzo 13, 2018 alle 9:38 am in risposta a: Domanda da principiante in riferimento al libro PLC in pratica #40044Sergio Bertana
Amministratore del forumIl supporto al cliente è un punto nobilitante della nostra offerta, specificatamente ai prodotti programmabili (Famiglie SlimLine e Netsyst) abbiamo inaugurato e pubblicizzeremo sul sito l’offerta gratuita di 15-30 minuti di supporto tecnico On-Line con TeamViewer unitamente al primo acquisto di un prodotto. Per avere il supporto occorre utilizzare la nostra versione di TeamViewer (Scaricabile da qui), è una versione portabile, quindi può essere eseguita senza installazione. Contattandoci telefonicamente ci si accorda per l’assistenza, molte volte viene effettuata al momento (Dipende dall’impegno dei nostri tecnici).
Riteniamo questa offerta interessante sia per chi si avvicina per la prima volta alla programmazione sia per chi ha già un po di esperienza, perchè è un modo per avere informazioni su come iniziare la programmazione dei nostri prodotti in ambiente LogicLab. Quindi disponendo di un nostro prodotto come primo cliente se vuoi puoi contattarci e vediamo insieme via TeamViewer di capire il tuo problema.
Marzo 12, 2018 alle 7:21 am in risposta a: Domanda da principiante in riferimento al libro PLC in pratica #40042Sergio Bertana
Amministratore del forumSul modulo CPU come pure su tutti i moduli di estensione i vari I/O sono sempre indicati con Di00, Di01, …, Do00, Do01, … perchè si fà riferimento al numero progressivo di I/O del modulo. Ma ogni modulo ha un suo indirizzo, nei moduli di estensione si imposta con dei dip switches posti sotto al frontale del modulo, mentre il modulo CPU ha indirizzo 255.
Gli I/O secondo la normativa IEC61131 sono identificati con il prefisso %IX se ingressi o %QX se uscite, seguito dall’indirizzo del blocco di memoria (Che corrisponde all’indirizzo di modulo) seguito da I/O progressivo sul modulo. Ecco perchè nel programma LogicLab si definisce come %IX255.0 l’ingresso Di00 del modulo CPU, 255 è l’indirizzo di modulo e 0 è l’ingresso Di00 del modulo, similarmente l’uscita 0 del modulo CPU sarà definita come %QX255.0. Se invece volessi riferirti ad I/O posti sui moduli di estensione dovresti utilizzare l’indirizzo del modulo seguito dal progressivo di I/O, ti rimando a questo topic per altre informazioni.
Ora se il tuo programma funziona in simulazione, ed hai definito gli I/O come 255.x allora deve funzionare anche sul PLC reale.
Sergio Bertana
Amministratore del forumNon abbiamo un convertitore che esegua la conversione tra ModbusTCP e COMLI, però se hai esperienza di programmazione con un modulo CPU SlimLine puoi facilmente svilupparti il convertitore che ti serve. Nel forum puoi trovare degli spunti di programma che ti possono aiutare a sviluppare il tuo programma di conversione. Ad esempio in questo topic viene spiegato come realizzare un semplice protocollo di comunicazione. Il suggerimento è di realizzare un FB che esegue la conversione di protocollo (Come ad esempio il nostro ModbusTCPGateway), in questo topic ne viene spiegato l’utilizzo.
Molto utile al tuo scopo può essere questo topic, dove viene spiegato come realizzare un FB di conversione tra protocollo Modbus RTU e Ascii.
Marzo 10, 2018 alle 8:04 am in risposta a: Effettuare il Ping di un indirizzo IP statico su internet #40040Sergio Bertana
Amministratore del forumNon esiste una funzione specifica che permetta di conoscere il MAC address dei dispositivi in rete, ma tra le novità del nuovo sistema operativo SFW198C000 del modulo CPU Cortex M7, è prevista la possibilità di connettersi via TCP al local host (127.0.0.1) che può essere usato dalle applicazioni per comunicare con lo stesso sistema su cui sono in esecuzione.
Questo permette di utilizzare il FB SysTCPClient per connettersi alla porta 23 (Telnet) dello stesso modulo CPU, in questo modo con il FB CLIManager (Topic) potrai autenticarti ed utilizzare il comando arp per conoscere i MAC address relativi agli indirizzi IP presenti in tabella ARP. Eseguendo il FB SysIPReach puoi forzare l’inserimento in tabella arp dell’indirizzo IP che desideri. Ecco un esempio di risposta al comando ARP (Ho oscurato alcuni numeri).
[Admin]> arp
IP:192.168.0.xxx MAC:00-xx-8C-xx-25-78 [118 (Sec)]
IP:192.xxx.0.33 MAC:74-xx-EA-BC-36-xx [120 (Sec)]
IP:192.168.xxx.xxx MAC:00-50-xx-C3-C4-xx [120 (Sec)]
3 ARP entrie(s) foundSergio Bertana
Amministratore del forumProbabilmente hai dichiarato la variabile ma non l’hai utilizzata in nessun program, nella compilazione LogicLab verifica che le variabili dichiarate siano effettivamente utilizzate e se non lo sono non le alloca risparmiando memoria. Naturalmente non essendo allocate le variabili non esistono fisicamente e quindi non possdono essere visualizzate nella finestra di watch.
Linko questo topic che non centra con la visualizzazione in watch ma che spiega il funzionamento delle variabili RETAIN. Mentre in questo topic sono riportate informazioni sui limiti della finestra di watch.
Sergio Bertana
Amministratore del forumPer la gestione degli ingressi analogici si utilizza il FB SysGetAnInp, per la gestione delle uscite analogiche si utilizza il FB SysSetAnOut. Devi definire come parametro l’indirizzo hardware (Impostato con i dip switches) del modulo ed il canale da gestire. Nel parametro Mode per gli ingressi è possibile definire il modo di acquisizione (Corrente, tensione, temperatura, resistenza), per le uscite il tipo di uscita (Corrente, tensione).
Aggiungo una nota per quanto riguarda gli I/O digitali, il sistema operativo li gestisce in immagine di processo allocandoli automaticamente nei data block di ingresso e di uscita. Quindi basta mappare gli ingressi come %IXmc e %QXmc per le uscite (m:Indirizzo di modulo, c:Canale), quindi l’ingresso 5 del modulo con indirizzo 1 sarà %IX1.5 mentre l’uscita 7 del modulo 4 sarà %QX4.7. Da ricordare che l’indirizzo modulo della CPU è 255, quindi l’ingresso 1 del modulo CPU sarà %IX255.1.
Anche per gli I/O digitali è comunque possibile acquisire/gestire direttamente il valore utilizzando il FB SysGetPhrDI per la lettura degli ingressi e SysSetPhrDO per la gestione delle uscite. Consiglio la lettura di: topic, topic, topic.
Sergio Bertana
Amministratore del forumNo purtroppo nei terminali Weintek è possibile impostare solo l’indirizzo IP del server Modbus, non è possibile impostare degli URLs. Puoi però come dici giustamente tu utilizzare un ns sistema SlimLine per questo scopo, vediamo le diverse possibilità.
Utilizzo FB ModbusMaster (Estratto manuale): Istanzi una o più FB ModbusMaster che tramite FB TCPClient interrogano via ModbusTCP i tuoi dispositivi definendone l’URL, i dati letti o da scrivere dai/verso i dispositivi verranno appoggiati su variabili dello SlimLine ed il pannello Weintek agirà su di esse connettendosi via IP. Nel forum trovi molti esempi di utilizzo del FB ModbusMaster.
Utilizzo FB DataStreamExch (Estratto manuale), Istanzi una o più FB DataStreamExch_v1, questo FB connette tra di loro due stream di comunicazione, su di uno attivi un server TCP e sull’altro connetti un TCPClient che connetterai definendone l’URL al tuo dispositivo remoto. Sul pannello Weintek definirai uno i più PLC che in realtà saranno sempre lo SlimLine ma definendo diverse porte TCP potrai dialogare con i tuoi dispositivi remoti. Questa soluzione è molto valida perchè in pratica permette al pannello di cumunicare direttamente con il dispositivo remoto.
Sergio Bertana
Amministratore del forumIl tuo array di numeri in realtà altro non è che una stringa, quindi basta semplicemente utilizzare la funzione SysVarsscanf, come vedi nel progetto ArrayToNumber che ti allego (Download) utilizzo la funzione passando l’indirizzo dell’array, e la funzione mi ritorna il numero su di una variabile UINT. Allego lo screenshot del programma in simulazione su PC c on l’ambiente SimuLab integrato in LogicLab (Topic).
Sergio Bertana
Amministratore del forumNon diamo una distanza massima per il bus I2C, per la distanza molto dipende dal “rumore” elettrico in cui il cavo di bus si trova, è chiaro che in un laboratorio dove non vi sono disturbi posso allungare anche di molto il cavo, mentre in un ambiente industriale (Ambiente dove i nostri prodotti operano abitualmente) devo utilizzare distanze inferiori.
Il cavo di estensione di 1 mt è un cavo terminale quindi ne puoi usare solo 1 al termine del blocco di moduli (Tutti interconnessi tra di loro con i cavi di estensione). Proprio per migliorare l’immunità ai disturbi il cavo da 1 mt è un cavo twistato, volendo utilizzare cavi di lunghezza superiore consiglio di utilizzare sempre un cavo twistato e magari inserilo in una calza di schermo.
Febbraio 28, 2018 alle 3:44 pm in risposta a: Connettere dispositivi I2C al bus di espansione SlimLine #39967Sergio Bertana
Amministratore del forumNon diamo una distanza massima per il bus I2C, tra i nostri cavi di espansione puoi trovare anche il cavo da 1 metro. Naturalmente questi sono cavi terminali quindi ne puoi usare solo 1 al termine del blocco di moduli (Tutti interconnessi tra di loro con i cavi di estensione).Detto questo per la distanza molto dipende dal “rumore” elettrico in cui il cavo di bus si trova, è chiaro che in un laboratorio dove non vi sono disturbi posso allungare anche di molto il cavo, mentre in un ambiente industriale (Ambiente dove i nostri prodotti operano abitualmente) devo stare molto più attento (Topic).
Sergio Bertana
Amministratore del forumNel forum trovi degli esempi di programmi che funzionano con il simulatore (Vedi topic, topic, topic) e nei topics che ti ho riportato troverai informazioni utili sull’uso di SimuLab che è l’ambiente di simulazione di LogicLab. Anche se le risposte ad alcune tue domande sono già in questi topics vediamo le risposte.
Di solito le variabili sui dichiarano di tipo Auto, per il debug utilizzo la finestra di watch in LogicLab o i pannelli di SimuLab, semplicemente trascinando la variabile all’interno della finestra o del pannello. Le variabili si allocano definendo l’indirizzo solo per gli I/O reali o per le variabili che devono essere raggiunte da un sistema esterno, pannello operatore (Vedi topic) o SCADA che si allocano nella DB100 (Vedi topic).
Gli I/O del modulo CPU sono allocati anche loro mella immagine di processo, vanno dichiarati come Data block 255. Quindi avremo %IX255.0 per l’ingresso 0 e poi di seguito, e QX255.0 per l’uscita 0 e poi di seguito (Vedi topic).
La spunta Memory è proprio per allocare le variabili che devono essere accessibili da Modbus, al momento l’unica memoria accessibile è il Data block (DB) 100.
Sergio Bertana
Amministratore del forumI segnali di controllo presenti sul connettore RJ45 delle porte seriali RS232 dei nostri moduli SlimLine e Netsyst sono:
Pin 3: DTR (Segnale in uscita)
Pin 7: CTS (Segnale in ingresso)
Pin 8: RTS (Segnale in uscita)In realtà i segnali DTR e RTS sono connessi tra di loro. Per la gestione di questi segnali vi sono delle funzioni apposite. SysSetSerialDTR permette di attivare/disattivare il segnale DTR e di conseguenza anche RTS. SysGetSerialCTS permette di acquisisre lo stato del segnale CTS.
Aggiungo una nota per quanto riguarda il segnale DTR, il FB SysSerialPort permette di definire il comportamento del segnale DTR, permettendo di invertirne lo stato e di gestirlo in modo automatico con o senza l’interposizione di tempi. Quindi il comportamento del segnale dipende da come lo hai impostato nella apertura della porta. Lo puoi attivare definendo DTRManagement:=DTR_ON, oppure disattivare definendo DTRManagement:=DTR_OFF, oppure farlo gestire automaticamente dal sistema definendo DTRManagement:=DTR_AUTO_WO_TIMES o DTRManagement:=DTR_AUTO_W_TIMES.
La gestione automatica è prevista per poter abilitare il driver in trasmissione nelle comunicazioni RS485 multidrop e/o per attivare la trasmissione nelle comunicazioni con radiomodem. Quindi se lo vuoi gestire tu da porogramma non devi abilitare la gestione automatica altrimenti questa prevale sulla tua funzione SysSetSerialDTR.
Febbraio 17, 2018 alle 7:28 am in risposta a: Connettere dispositivi I2C al bus di espansione SlimLine #40031Sergio Bertana
Amministratore del forumIl bus di espansione dei sistemi SlimLine e dei sistemi Netsyst è un bus I2C standard, quindi è possibile interfacciare qualsiasi dispositivo con interfaccia I2C. Il bus opera con una frequenza di 400KHz quindi i dispositivi devono supportare questa frequenza di comunicazione.
Nella libreria di funzioni supportate da LogicLab vi è la funzione SysI2CWrRd (Estratto manuale) che permette di leggere e scrivere dati verso i dispositivi connessi al bus. Nel forum trovi parecchi topics che trattano l’argomento con progetti di esempio per la gestione di moduli commerciali. In questo topic, un programma per gestire un PIO PCF8574. In questo topic un programma per gestire display LCD SainSmart compatibile Arduino.
Probabilmente la tua confusione è nata da questo post dove si tratta l’argomento opposto, ossia la possibilità di gestire i nostri moduli di espansione da un modulo CPU I2C master proprietario. In questo caso anche se il bus I2C è standard il protocollo di comunicazione tra la CPU ed i moduli di espansione è una soluzione proprietaria di cui non forniamo le specifiche.
Febbraio 12, 2018 alle 9:38 am in risposta a: Gestione di molte ricette con grandi quantità di dati #40029Sergio Bertana
Amministratore del forumPer la gestione del ricettario ti rimando a questa Knowledge dove puoi trovare sicuramente uno spunto interessante. Come vedi nel progetto riportato viene utilizato un pannello operatore per operare su files di ricetta presenti nel file system di un sistema SlimLine. Nella mia risposta considero di utilizzare un modulo MPS054A100 con la nuova versione del sistema operativo (Che rilasceremo a breve e che incrementa notevolmente le capacità del sistema). Se utilizzi una SDCard come directory di memorizzazione dei files di ricetta puoi sicuramente contenere più di 300 files, ma puoi anche utilizzare l’FB FTPClient per trasferire i files di ricetta su di un server FTP.
Veniamo ora alla dimensione di ogni ricetta, 3500 strutture composte da un valore (Utilizzerei un UDINT) e da un numero (Utilizzerei un UINT) richiedono 21 Kbytes di memoria. La DB 100 non ha tutta questa dimensione disponibile e lo stesso Modbus standard non prevede la gestione di un’area così grande. Io consiglio di allocare dinamicamente un’area di memoria (Funzione RMalloc) e istanziando un FB ModbusSlave permettere di accedere a tutta l’area di memoria allocata. Poco importa che l’area non sia ritentiva tanto con il FB FileMemoryDump la trasferirai nel file system. Tu chiedi file di tipo csv, è fattibile ma dovrai realizzare tu un FB che trasferisce la struttura di ricetta in un file di tipo csv (Vedi topic).
Naturalmente nessun problema a gestire gli I/O logici, lo SlimLine è nato per questo, mentre per la connessione remota ti consiglio un router UMTS o LTE.
-
AutorePost