Vai al contenuto

Come utilizzare gli esempi forniti con SlimLine

Home Forum Obsoleti SlimLine (CODESYS) Come utilizzare gli esempi forniti con SlimLine

Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Autore
    Post
  • #35652
    Anonimo
    Inattivo

    Buongiorno, ho scaricato dal sito gli esempi (PTP130A000) per il tool CODESYS, aprendo il pacchetto non ci sono esempi, dai manuali non riesco a capire se c’e’ da fare qualcosa.

    Potrei avere qualche informazione su come importare gli esempi ? (i file *.exp che si vedono nel manuale). Grazie in anticipo e scusate se non riesco da solo.

    #38496
    Sergio Bertana
    Amministratore del forum

    Il file di esempi è un file compresso (*.zip) scompattandolo ci si trova con una cartella al cui interno vi è il file Program sources.pro (File di progetto CODESYS), aprendo CODESYS dal menù Open è possibile aprire il file progetto e si presenterà una videata del tipo riportata nello screenshot.

    Può essere che a causa della dversità dei percorsi nella configurazione del programma venga visualizzato un errore nell’apertura della libreria di sistema eSLineC2SysLib_A000.lib, per correggere il problema, aperto il progetto selezionare il percorso corretto della libreria (Potrebbe essere C:Programmi (x86)3S SoftwareCoDeSys V2.3TargetsSlimLine Mps052LibraryScreenshot.

    Ora hai il progetto aperto con tutti i files di esempio così come riportato sul manuale di programmazione CODESYS. Naturalmente consiglio di esportare dal progetto i files di esempio che desideri utilizzare (Screenshot) per poi importarli nel tuo progetto.

    #39033
    Fabio
    Partecipante

    Salve, sul Vs manuale CODESYS fate riferimento as un file di esempio PTP131A100. Ho cercato nella sezione dei download ma non ho trovato nulla. Potete darmi un link valido qualora esista ?

    #39034
    Sergio Bertana
    Amministratore del forum

    Il programma dimostrativo PTP131A100 è ancora in sviluppo probabilmente hai visto il riferimento in qualche stralcio del manuale postato sul forum. Quindi non è ancora disponibile nella sezione download, ne posto una copia preliminare qui nel forum (Download programma).

    #39035
    Fabio
    Partecipante

    Nella libreria PTP131A100 mi serviva l’esempio del Modbus Master TCP. Non riesco a capire la linea di codice:

    Mdb.Address:=41156;  (* Indirizzo modbus (2312) *)

    Che correlazione c’è tra 41156 e 2312 ?

    #39036
    Sergio Bertana
    Amministratore del forum

    Nell’esempio il master Modbus si connette ad un sistema SlimLine LogicLab che agisce come slave. Ora nello SlimLine LogicLab il Modbus è gestito dal sistema operativo e l’area di memoria accessibile è la DB 100 che ha 4096 bytes di memoria.

    L’indirizzo Modbus per accedere a quest’area si ottiene sommando 40000 all’indirizzo di allocazione della variabile in memoria  nel caso di comandi Modbus con accesso a bit. Nel caso di comandi Modbus con accesso a WORD l’indirizzo di allocazione della variabile và diviso per 2. Ecco quindi che nel mio caso accedendo a due variabili WORD consecutive allocate a DB 100.2312. L’indirizzo Modbus diventa: 40000+(2312/2) =41156 (Topic).

    Ma se tu accedi a dispositivi commerciali dovrai fare riferimento alla documentazione del dispositivo che indicherà l’indirizzo Modbus da utilizzare. Attenzione, in accordo alle  specifiche Modbus il FB invia come frame di richiesta il valore Mdb.Address-1. Ma non tutti i sistemi slaves sommano 1 all’indirizzo ricevuto quindi molte volte devi falsare di 1 il valore di Mdb.Address.

    #39037
    Fabio
    Partecipante

    DB100 ? mmmm non ci si riesce a staccare proprio da Siemens!!! (scherzo ovviamente). Non conosco gli SlimLine Logiclab.
    Grazie sei gentilissimo!

    #39038
    Sergio Bertana
    Amministratore del forum

    Anche LogicLab si attiene alla normativa IEC61131 che indica anche come definire le aree di memoria. Esssendo Siemens il leader del mercato PLC, la normativa si è molto ispirata a loro.

    La famiglia SlimLine LogicLab utilizza l’ambiente di sviluppo LogicLab sviluppato da una azienda italiana. L’ambiene essendo conforme alla IEC61131 è molto simile al CODESYS. Crediamo molto in questo prodotto, ed proprio per la famiglia LogicLab abbiamo sviluppato tantissime funzioni e FB. Dando una occhiata al forum dedicato al prodotto troverai moltissimi esempi con relativo codice sorgente.

    #39039
    Fabio
    Partecipante

    Salve Bertaser, nell’esempio Modbus Master TCP stavo studiando il suo codice che opportunamente modificato per la connessione ad un apparecchio funziona senza grossi problemi. Noto due cose:

    – Effettua una interrogazione ogni 5 secondi, quindi un sistema lento. Ma è un esempio e probabilmente può essere velocizzato.
    – Si connette al server e poi una volta effettuata la lettura si sconnette e poi ricomincia. Perchè ? Non può rimanere connesso e continuare con le letture ?

    #39040
    Sergio Bertana
    Amministratore del forum

    Si certo è un esempio e vuole dimostrare come sia possibile gestire una connessione modbus in TCP. Non sono in ufficio e quindi non posso fare tests, ma guardando il codice basta modificare il case 3 nel modo:

    3: Mdb.Enable:=NOT(Mdb.Done);

    In pratica sul Done togli l’Enable che fà ripartire la richiesta. In questa fase puoi anche modificare i registri da leggere/scrivere. Naturalmente un occhio al CSk.Fault se cade il socket devi ripartire dall’inizio.

    #39041
    Fabio
    Partecipante

    Ok con la modifica che mi hai suggerito funziona molto bene. Il CSk.Fault non è sufficiente a capire se il socket cade, non so perchè! Ho dovuto modificare leggermente come indicato sotto. Così se la comunicazione cade si riconnette dopo qualche secondo.

    IF (CSk.Fault) OR (CSk.Connected) = FALSE  THEN CaseNr:=0; END_IF;

    Invece vorrei capire dove mette le variabili che và a leggere, nel mio caso 100 registri (Screenshot). Come vedi in buffer leggo il primo registro che è pari a 55. E gli altri registri ? Certo quello è un puntatore, ma non capisco a quale area di memoria punta.

    #39042
    Fabio
    Partecipante

    Allora, ho cambiato la linea di codice del tuo esempio da:

    MdbData: UDINT; (* Modbus data *) a MdbData: ARRAY [0..200] OF UINT; (* Buffer modbus *)

    e chiaramente ora nell’array vedo i valori che mi interessano.

Stai visualizzando 12 post - dal 1 a 12 (di 12 totali)
  • Devi essere connesso per rispondere a questo topic.