Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 3,661 a 3,675 (di 4,360 totali)
  • Autore
    Post
  • in risposta a: Gestire uscite logiche con indirizzamento ad indice #37199
    Sergio Bertana
    Amministratore del forum

    L’errore è spiegato con quanto detto sull’imagine di processo, l’emulatore non ha la gestione dell’immagine di processo, pertanto l’indirizzo reale degli I/O è sempre lo stesso per tutte le tasks.

    Lo SlimLine esegue la gestione degli I/O con immagine di processo nella task Slow e nelle altre tasks usa una copia della immagine. Quindi al di fuori della task Slow non è possibile accedere all’indirizzo reale degli I/O, se si esegue il programma in una task diversa ti darà l’errore che mi hai riportato.

    Ho modificato il tuo progetto eseguendo il programma Main nella task Slow, e funziona perfettamente, allego Stampa e Download programma.

    in risposta a: Gestire uscite logiche con indirizzamento ad indice #37197
    Sergio Bertana
    Amministratore del forum

    Per delegare a LogicLab l’onere di gestire correttamente l’immagine di processo (Questo è preferibile su sistemi targets che gestiscono molte tasks concorrenti), si può definire un array di appoggio delle uscite logiche e poi con un programma logico anche in LD appoggiare i dati dall’array di appoggio sulle uscite reali. Nel mio programma di esempio ho definito l’array OImage che contiene l’immagine delle uscite, il ciclo FOR di gestione uscite sarà:

    FOR i:=0 TO 3 DO
      OImage[Serbatoi[i].Uscita]:=Serbatoi[i].IsAperto;
    END_FOR;

    Un appostito programma ladder provvederà poi a copiare l’immagine delle uscite sulle uscite reali. In questo caso come si vede dal programma di esempio è possibile gestire le uscite anche da task Back, mentre l’esempio precedente funziona solo se la gestione delle uscite è nella task Slow la stessa che ne gestisce l’appoggio sulle periferiche. Stampa e Download programma sorgente. Riporto anche lo screenshot del debug del programma.

    in risposta a: Gestire uscite logiche con indirizzamento ad indice #37196
    Sergio Bertana
    Amministratore del forum

    L’argomento è complesso in quanto tira in ballo la gestione della immagine di processo gestita automaticamente da LogicLab. Cerco di spiegare il concetto, nella gestione degli I/O un sistema PLC opera ad immagine di processo, gli ingressi sono copiati in memoria ad inizio loop e le uscite sono gestite a fine loop, questo garantisce che lo stato di un I/O sia stabile per tutto il loop di esecuzione.

    Ma LogicLab gestisce il multitasking, quindi abbiamo più di una task in esecuzione (E solo una delle task gestisce fisicamente gli I/O), per garantire l’immagine di processo sono gestite diverse aree di appoggio I/O, il tutto avviene in modo trasparente al programma utente. Ma l’accesso diretto alla locazione di memoria dell’I/O funziona solo se viene eseguita nella task dove realmente sono gestiti gli I/O, nel caso di SlimLine gli I/O sono gestiti nella task Slow.

    Quindi l’accesso alla locazione di memoria dell’I/O può essere gestita solo nella task Slow, dove per gestire l’indirizzamento ad indice dell’output dei 4 serbatoi puoi realizzare un programma del tipo.

    FOR i:=0 TO 3 DO
      Ptr:=ADR(%QX0.0)+Serbatoi[i].Uscita;
      @Ptr:=Serbatoi[i].IsAperto;
    END_FOR;

    Ti allego la Stampa ed il Download programma sorgente.

    in risposta a: Comunicazione su TCP/IP con protocollo proprietario ascii #37195
    Sergio Bertana
    Amministratore del forum

    Su SlimLine utilizzando il blocco funzione SysSktListen è possibile mettere in ascolto su di una porta TCP un socket e gestire lo scambio dati su di esso. In questo modo è possibile creare una propria gestione di un qualsiasi protocollo usando i metodi classici Sysfopen, Sysfgetc, Sysfputc, SysVarsscanf, SysVarfprintf è possibile ricevere e trasmettere dati sul socket.

    Ho realizzato un programma che mette in ascolto sullo SlimLine un socket sulla porta TCP 2000, connettendosi con un telnet (Esempio il nostro Toolly), alla porta 2000 viene ritornato il messaggio Welcome !.

    Inviando un comando del tipo Sk<CR>, su slim line viene attivata l’uscita indicata da k (Esempio S1<CR> attiva l’uscita 1, S10<CR> attiva l’uscita 10 e così via).

    Inviando un comando del tipo Rk<CR>, su slim line viene disattivata l’uscita indicata da k (Esempio R1<CR> disattiva l’uscita 1, R10<CR> disattiva l’uscita 10 e così via).

    Il programma viene fornito in codice sorgente e può essere facilmente modificato secondo le proprie necessità (Stampa e Download programma).

    in risposta a: Invio di notifiche verso server Syslog #37194
    Sergio Bertana
    Amministratore del forum

    L’estratto manuale presente nel primo post era una versione preliminare e riportava la descrizione di una libreria che è stata fatta appositamente per un cliente (Ho provveduto a sostituirlo con la nuova versione). Con la versione 1.8.0 del pacchetto di installazione LogicLab (Codice PCK033G200) viene rilasciata la libreria eLogLib. In questa libreria troverai il blocco funzione SysLogReport, oltre ad altre funzioni e blocchi funzione per la gestione dei logs. Tutto il software LogicLab e le relative librerie sono scaricabili gratuitamente, ma alcune funzioni e blocchi funzioni sono a pagamento, sul Manuale programmazione IEC61131-3 su sistema SlimLine, troverai l’indicazione per ogni oggetto se è gratuito oppure no. Per poter eseguire il test di funzionamento, tutti gli oggetti protetti funzionano per 30 minuti.

    in risposta a: Simple hours counter, with a value return on string #37191
    Sergio Bertana
    Amministratore del forum

    I’ve developed the HourCounter FB, this FB calculates the work time of a device. The device start signal must be passed to the FB, since the hours counter has to be RETAIN and is not possible to define RETAIN variables in a FB, so the hours counter variable must be a RETAIN variable the address of which must be passed to the FB. 

    The FB returns also a string that reports the working time expressed as: hhhhhhhhhh:mm:ss;

    The example program I made use the logic input %IX0.0 as a device start signal and it’s possible to see the results by debugging the program. Here the print out of the program and the source code.

    in risposta a: Problem with RETAIN variables #37190
    Sergio Bertana
    Amministratore del forum

    Now some suggestions for your program.

    In the Count_marche FB you use the R_TRIG FB, but is easiest to detect the raising edge of Start input, directly in the FB by using a memo variable. Here the code:

    IF (Start <> Pulse) THEN
      Pulse:=Start; (* Pulse on trigger *)
      IF (Start) THEN @Var:=@Var+1; END_IF;
    END_IF;

    In the ladder program you can use the Almaclean input as a normal contact, the -]P[- contact must be used if the FB doesn’t control the raising edge.

    If the FB that have at least an output, you can avoid the EN/ENO junctions by deselecting the EN/ENO icon in the FBD toolbar.

    In the ADR function to avoid the EN/ENO junctions, you can put the function in the ladder and then by using the right button of the mouse select the Properties menu, and deselect the EN/ENO tick.

    Don’t use Network label to comment the ladder rung. There is the Comment icon (*-*) to insert comments in the ladder. The Network label must be used to reach ladder rung in Jump instructions.

    You can download a source program modified.

    in risposta a: Problem with RETAIN variables #37189
    Sergio Bertana
    Amministratore del forum

    In the PR_Almaclean program, it’s used your own FB (Count_marche) to manage the RETAIN variable Alma_M_Count and this it isn’t correct.

    The Count_marche FB, copies its internal value of Count to the variable Count_marche. So when you start the program the value of Count is 0 and this value is copied to the Count_marche variable, this resets its retained value.

    When a FB has to manage RETAIN variables, a pointer must be used, so the FB can directly manage the variable value. In this way when the system is powered, all the RETAIN variables are set to their stored values, and when the FB has to manage them it manages their real values. Here your program modified by using the pointer in a FB (Download program).

    in risposta a: Client per accesso al server Ftp su SlimLine #37188
    Sergio Bertana
    Amministratore del forum

    Oltre a FileZilla come client FTP è possibile utilizzare anche TotalCommander, un file manager per Windows, disponibile in versione gratuita presso il sito del fornitore http://www.ghisler.com.

    Riporto uno screenshot di FileZilla e di TotalCommander così come si presentano quando sono connessi ad un sistema SlimLine.

    in risposta a: Questions about SlimLine system #37187
    Sergio Bertana
    Amministratore del forum

    As you mention, one of the advantages of the IEC61131 norm, is the possibility to use the 5 different program languages, to cooperate in develop the PLC program. So it’s very useful the possibility to create own functions and/or function blocks by using the ST language and then use them in a ladder program.

    This allows, in a development of a complex program, to divide the responsibilities in programming, the experienced programmer can develops functions and function blocks in ST language, while the installer technician, with a more friendly language as the ladder, can adapt the program to the plant. Moreover functions and function blocks can be crypted and reused in different programs.

    About the firmware upload on SlimLine module we know that the Toolly program has some difficulties, so sometime, the upload firmware procedure aborts and it must be repeated. We are working to solve this problem and a new Toolly version will be released.

    About the IP connection it’s a very strange problem, all the configurations are stored in a EEPROM and they are reloaded when the system starts. And as you report the IP after the software upgrade was correctly configured.  Sincerely I don’t know why the system was not reachable by the IP connection (Telnet). Anyway by reconfiguring the IP using the terminal utility of Toolly (By serial connection) has solved the problem.

    About your 2 problems, for the RETAIN variables please see this post. SlimLine accept SDCard up to 2Gb but it manages only 512 Mb on it. The MCIStats command returns information about the SDCard inserted in the system as you can see in this Toolly screenshot.

    To fomat the SDCard you have to use the Format command, the Format s, c command, formats the 2 disks managed by the system (s=”Storage” c=”SDCard”). It’s possible to have up to 12 files in total, you can share this amount of files between the Storage area and the SDCard. So the command Format 2, 10 will enable to create up 2 files in the Storage area and up to 10 in SDCard. You can see the result of Format command by the Dir command as reported in the Toolly screenshot. Attention! After sent the Format command you must confirm it by sending the Y character otherwise the format is not executed.

    After the formatting you can operate on the system by using a FTP client like TotalCommander or Filezilla (See Post).

    in risposta a: Differenze tra i convertitori Ethernet-seriale ATC-1000/2000 #37186
    Sergio Bertana
    Amministratore del forum

    Una differenza importante tra l’ATC-1000 e l’ATC-2000 è il differente comportamento nel funzionamento in UDP.

    ATC-1000, opera sia come server che come client contemporaneamente, permette lo scambio bidirezionale in UDP con un altro prodotto, sia esso un’altro ATC-1000 o altro. Nella pagina web di configurazione UDP (Screenshot), è possibile definire la porta su cui il convertitore accetta i dati UDP (Nel nostro caso la porta 21) i dati ricevuti su questa porta saranno inviati in uscita sulla seriale.

    Ed è possibile definire fino a 10 indirizzi IP di dispositivi con relativa porta a cui il convertitore invia i dati ricevuti dalla porta seriale. Tutti i dati ricevuti verranno inviati a tuti i dispositivi in elenco (Nel nostro caso all’indizzo IP 192.168.0.59 ed all’indizzo IP 192.168.0.100). Questo permette di realizzare reti multicast (Vedi post).

    ATC-2000, opera o come server o come client ma non contemporaneamente, quindi non è possibile in UDP avere uno scambio dati bidirezionale. Esistono due pagine di configurazione web (Screenshot).

    Nella pagina di configurazione UDP Server, è possibile definire la porta UDPO su cui il convertitore è in ascolto, i dati ricevuti su questa porta saranno inviati in uscita sulla seriale.

    Nella pagina di configurazione UDP Client, è possibile definire l’indirizzo IP e la porta del sistema server a cui il convertitore invia i dati ricevuti dalla porta seriale.

    in risposta a: Standard utilizzato per calcoli in virgola mobile (floating) #37185
    Sergio Bertana
    Amministratore del forum

    Riporto la formula da iutilizzarsi per l calcolo del valore REAL di un numero decimale.

    Calcolo esponente
    Occorre trovare l’esponente di 2 per cui dividendo il numero si ottiene un risultato maggiore di 1 e minore di 2.

    Calcolo mantissa
    Si divide il numero per 2 elevato all’esponente trovato e si sottrae dal risultato 1.
    Si moltiplica il numero per 2 elevato alla 23.

    Calcolo valore REAL
    Si somma 127 al valore di esponente trovato.
    Si moltiplica per 2 elevato alla 23 il risultato e si somma al valore della mantissa.

    Esempi
    Numero decimale 123.87, l’esponente è 6.
    Mantissa (123.87/2^6)=1,93546875 sottraggo 1 diventa 0.93546875. (0.93546875*2^23) in hex 16#77BD71
    Valore REAL ((127+6)*2^23) in hex 16#42800000, sommando la mantissa 16#42800000+16#77BD71=16#42F7BD71

    Se il numero è negativo si somma 16#80000000

    Attenzione! Su SlimLine i numeri sono rappresentati in Little-Endian quindi il valore REAL di 123.87 rappresentato come  sequenza di bytes sarà 16#71, 16#BD, 16#F7, 16#42. Come si vede dallo screenshot eseguendo un programma che ha allocate allo stesso indirizzo dell’area DB100 tre diverse variabili una REAL, una DWORD ed un array di BYTES. Caricando il programma sullo SlimLine e definendo nella finestra di Watch diversi valori della variabile REAL si può vedere la rappresentazione del valore (Download programma).

    in risposta a: Rilevamento temperature in stanze di edifici #37184
    Sergio Bertana
    Amministratore del forum

    Il bus 1-Wire è un bus multidrop più dispositivi possono essere connessi in parallelo sul bus, quello che puoi fare è connettere un adattatore 1-Wire a RS232 sulla porta seriale dello SlimLine e connettere tutti sensori a questo convertitore.

    Per la realizzazione del bus 1-Wire Dallas raccomanda di utilizzare un cavo CAT5 non schermato, si consiglia di collegare i sensori con un unico cavo continuo che và da sensore a sensore (daisy chain), questo consente di ridurre le riflessioni sul cavo. Quindi non puoi realizzare una topologia di connessione a stella. Collegando più di 10-15 sensori si possono causare problemi dovuti al caricamento del bus dati, per minimizzare questo effetto è possibile posizionare una resistenza da 100-120 ohm in serie al segnale di data di ciascun sensore.

    Attenzione! Guardati la nota relativa alle specifiche del bus 1-Wire che trovi in questo post, ma ricorda che tipicamente la rete 1-Wire non può superare i 60 metri. La risoluzione dei sensori di temperatura è 0.01°C, e la loro precisione nel range da -10°C a +85°C è di 0.5°C.

    Se la tua rete è molto distribuita è meglio utilizzare i sensori connessi in RS485 che offrono maggiori garanzie sulla distanza. Ma anche nel caso di connessioni in RS485 non puoi realizzare una topologia di connessione a stella ma deve sempre essere una connessione di tipo Daisy-chain.

    in risposta a: Rilevamento temperature in stanze di edifici #37182
    Sergio Bertana
    Amministratore del forum

    Nelle sonde Pt100 essendo molto bassa la differenza di resistenza da misurare vi è sicuramente un problema di compensazione della resistenza dei cavi. Per questo motivo consiglierei di utilizzare un cablaggio a 4 fili in modo da compensare la caduta resistiva del cavo.Una alternativa è l’uso delle sonde Pt1000 che avendo una resistenza 10 volte maggiore subiscono meno l’influenza della resistenza dei cavi.In entrambi i casi per evitare o minimizzare gli effetti dei disturbi elettromagnetici consiglio l’utilizzo di un cavo schermato e twistato per la connessione delle sonde.Se per la gestione delle temperature utilizzi un nostro sistema SlimLine un modulo espansione I/O analogico di tipo PCB126*130 può acquisire sino a 10 sonde Pt100 e/o Pt1000, più moduli di espansione possono essere connessi al sistema.Con l’adattatore 1-Wire a RS232, puoi utilizzare come sonde di temperatura e di umidità le sonde 1-Wire (Vedi pagina), appositi blocchi funzioni permettono di gestire le sonde direttamente da SlimLine (Vedi post).In alternativa alle sonde di temperatura, puoi utilizzare il prodotto Temp-485 Box2 (Vedi datasheet) per la misurazione della sola temperatura oppure il prodotto HTemp-485 Box2 che permette di acquisire sia la temperatura che l’umidità. I dispositivi possono essere connessi in RS485, un apposito blocco funzione ne permette l’acquisizione da SlimLine (Vedi post). Se l’edificio è cablato in rete Ethernet, è possibile utilizzare il prodotto HWg-STE2, ogni dispositivo può leggere la temperatura ed aggiungendo una sonda anche l’umidità, anche per questo dispositivo un apposito blocco funzione ne permette l’acquisizione da SlimLine (Vedi post).

    in risposta a: Invio di notifiche verso server Syslog #37181
    Sergio Bertana
    Amministratore del forum

    It’s available the new version of the manual MNL151C*20 SlimLine system IEC61131-3 programming Manual (English). In this manual version, the SysLogReport function block is explained.

    You can download this manual from our web site, in the download area of the SlimLine ARM7 IEC61131-3 CPU page (Go to page).

Stai visualizzando 15 post - dal 3,661 a 3,675 (di 4,360 totali)