Come utilizzare gli esempi forniti con SlimLine
Home › Forum › Obsoleti › SlimLine (CODESYS) › Come utilizzare gli esempi forniti con SlimLine
- Questo topic ha 11 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 9 mesi fa da
Fabio.
-
AutorePost
-
Novembre 3, 2014 alle 1:30 pm #35652
Anonimo
InattivoBuongiorno, 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.
Novembre 3, 2014 alle 1:38 pm #38496Sergio Bertana
Amministratore del forumIl 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 Mps052Library) Screenshot.
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.
Agosto 10, 2015 alle 1:13 pm #39033Fabio
PartecipanteSalve, 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 ?
Agosto 10, 2015 alle 2:27 pm #39034Sergio Bertana
Amministratore del forumIl 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).
Agosto 11, 2015 alle 6:58 am #39035Fabio
PartecipanteNella 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 ?
Agosto 11, 2015 alle 7:34 am #39036Sergio Bertana
Amministratore del forumNell’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.
Agosto 11, 2015 alle 10:01 am #39037Fabio
PartecipanteDB100 ? mmmm non ci si riesce a staccare proprio da Siemens!!! (scherzo ovviamente). Non conosco gli SlimLine Logiclab.
Grazie sei gentilissimo!Agosto 11, 2015 alle 3:09 pm #39038Sergio Bertana
Amministratore del forumAnche 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.
Agosto 12, 2015 alle 6:22 am #39039Fabio
PartecipanteSalve 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 ?Agosto 12, 2015 alle 6:37 am #39040Sergio Bertana
Amministratore del forumSi 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.
Agosto 12, 2015 alle 8:31 am #39041Fabio
PartecipanteOk 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.
Agosto 12, 2015 alle 10:48 am #39042Fabio
PartecipanteAllora, 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.
-
AutorePost
- Devi essere connesso per rispondere a questo topic.