Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumIn questo topic puoi trovare altre considerazioni sui tempi necessari a gestire gli I/O logici.
Sergio Bertana
Amministratore del forumNella programmazione delo SlimLine esiste la possibilità di eseguire programmi in una task definita Fast. I programmi inseriti in questa task sono eseguiti di default ogni millisecondo. Quindi è evidente che campionando 1000 volte al secondo è possibile acquisire segnali (Con duty cycle del 50%) che hanno frequenza di 500 Hz (500 impulsi/secondo).
Poi se servisse con la funzione SysSetTaskLpTime è possibile modificare il tempo predefinito di esecuzione della task Fast potendo scendere fino a 100uS. Naturalmente con tempi cosi veloci di esecuzione bisogna fare una considerazione sulla quantità di operazioni da eseguire per evitare di avere degli overlap di esecuzione.
Il tempo di acquisizione degli I/O del modulo CPU è di 8uS mentre per acquisire 8 ingressi su di un modulo di estensione sono necessari 257uS (Ecco lo screenshot del programma con rilievi). Il tempo del rilievo oscillografico è maggiore del tempo reale perchè viene aggiunto il tempo necessario a gestire il segnale DTR della porta seriale utilizzato per il rilievo (Topic).
Il tempo di acquisizione degli ingressi sul modulo di estensione passa a 295uS per acquisire 16 ingressi.
Per la tua esigenza dovrai poi gestire un counter per ogni ingresso, ti ho preparato un esempio con la gestione di 6 counters uno per ogni ingresso del modulo CPU compact. Come vedi dallo screenshot il tempo per gestire i 6 counters è di 14uS. Allego il progetto IOAcquisitionTimes per il download.
Sergio Bertana
Amministratore del forumI tempi di variazione dello stato del segnale sono incompatibili con le uscite del modulo SlimLine. Le uscite digitali sono protette ed hanno un driver studiato appositamente per lo scopo, inoltre sono galvanicamente isolate e tutti questi componenti limitano tantissimo la frequenza massima in uscita.
Il modo più veloce di commutare gli I/O logici è di utilizzare la funzione SysSetPhrOut in un loop chiuso all’interno del programma, ma tieni presente che a specifica le uscite hanno come tempi TOn:4mS max, TOff:1mS max quindi una frequenza di 200 Hz.
Un segnale che è possibile gestire in modo più veloce può essere il DTR della porta seriale (Screenshot programma), ma anche in questo caso l’impulso minimo che si ottiene su di un modulo CPU Base LogicLab è di 3,24 uS (Vedi oscillogramma) ed essendo il segnale DTR un segnale conforme allo standard RS232 il segnale ha una ampiezza picco-picco di 11.5 volts (Download progetto DTRPositivePulse).
Dicembre 13, 2016 alle 4:05 pm in risposta a: Blocco funzione per acquisizione cella di carico #39788Sergio Bertana
Amministratore del forumNo, l’acquisizione cella di carico utilizza funzioni hardware che sono presenti solo nel modulo di espansione analogico. Naturalmente il modulomixed I/O può leggere una cella di carico che sia dotata del suo amplificatore e quindi con uscita in tensione e/o corrente ma non direttamente lo strain gauge.
Dicembre 13, 2016 alle 3:29 pm in risposta a: Protocollo Executive od MBD per lettore di tessere #39786Sergio Bertana
Amministratore del forumAbbiamo clienti che operano nel settore vending ed utilizzano i nostri sistemi SlimLine può essere che qualcuno abbia sviluppato una interfaccia con il protocollo Executive o MDB ma io non ho notizie in merito.
Sul protocollo Executive cercando su Google troverai anche le specifiche, non ho trovato nulla sul protocollo MDB. Ma perchè non utilizzi un lettore RFID che si interfaccia in altro modo magari semplicemente in seriale.
Dicembre 13, 2016 alle 3:06 pm in risposta a: Errore A4097 in compilazione utilizzando un timer #39785Sergio Bertana
Amministratore del forumIl problema nasce dall’aver utilizzato una libreria standard fornita da Axel, in effetti con la distribuzione della versione 2.4.0.0 erroneamente abbiamo distribuito anche una delle librerie standard di Axel che non possono essere utilizzate sul nostro sistema. Il timer da utilizzare è uno di quelli presenti nella nostra libreria eLLabStdLib, nel tuo caso è definito come eTON.
Per tua conoscenza trovi ampie discussioni sui timer in questo topic, topic, topic, topic.
Dicembre 12, 2016 alle 7:37 am in risposta a: Domande su utilizzo del blocco funzione ModbusMaster #39784Sergio Bertana
Amministratore del forumL’errore indica che il valore di File non è definito, ma hai passato al FB ModbusMaster il valore di File in uscita dal FB SysSerialPort ?Su lunghezze cosi corte il cavo non ha normalmente problemi, ora per capire il problema l’unica è spiare la comunicazione sulla RS485 oppure inviare i comandi Modbus da Toolly (Vedi l’ultimo post di questo topic) o con un programma di simulazione Modbus esempio l’ottimo Modbus Master Simulator.
Dicembre 9, 2016 alle 1:08 pm in risposta a: Calcolo quota su UDINT utilizzando il FB SysGetEncoder #39782Sergio Bertana
Amministratore del forumIl tuo è un problema di calcolo quota su rapporto circolare, argomento che ho trattato in questo topic ed in questo topic. In pratica acquisendo il valore di quota encoder su loop successivi di esecuzione programma si calcola lo spostamento in tacche che ha fatto l’encoder e si somma lo spostamento ad un valore di quota espresso in UDINT. Tutto il succo è in queste semplici operazioni:
EAcq(); (* Encoder acquisition *)
EOfs:=TO_INT(EAcq.EQuote-QteBf); (* Encoder offset (Pulses) *)
EQuote:=EQuote+TO_DINT(EOfs); (* Encoder quote (Pulses) *)
QteBf:=EAcq.EQuote; (* Quote buffer *)E’ importante che le variabili utilizzate siano del tipo indicato sotto, in caso contrario non funziona:
EOfs : INT; (* Encoder offset (Pulses) *)
QteBf : UINT; (* Quote buffer *)
EQuote : DINT; (* Encoder quote (Pulses) *)Nell’esempio uso una variabile DINT per la quota così può andare anche in negativo. Se la tua quota è solo positiva puoi usare una variabile UDINT modificando:
EQuote:=EQuote+TO_UDINT(EOfs); (* Encoder quote (Pulses) *)
Dicembre 9, 2016 alle 12:54 pm in risposta a: Domande su utilizzo del blocco funzione ModbusMaster #39781Sergio Bertana
Amministratore del forumGrazie per i complimenti… oggi giornata di ponte ed allora senza le telefonate si ha più tempo per il forum. Il frame modbus inviato non mi torna. il nodo è 02, ma il codice funzione è 04 non 03 come dici di avere impostato. L’indirizzo del registro come vedi è 9C44 che corrisponde a 40004 (Indirizzo impostato -1), chiedi un registro 00 01 ed il CRC è 5FBC.
Ma la risposta è errata, non deve affatto coincidere con la richiesta, sembrerebbe un echo fatto dal drive cosa che non deve assolutamente avvenire, perchè il FB si attende la risposta che dovrebbe essere del tipo 02 04 02 xx xx CRC. Cioè hai chiesto un registro ed il drive ti risponde con 02 bytes seguiti dal loro valore e dal CRC.
Puoi provare a spiare con una porta RS485 in parallelo sulla linea di comunicazione per vedere se dopo il frame di richiesta vi sia un frame di echo e poi effettivamente il frame di risposta. Il FB dopo il primo frame ricevuto lo controlla e se in errore abortisce in attesa del prossimo comando e quindi non ti visualizza l’eventuale frame corretto che segue.
Il perchè dell’errore è evidente sono attesi 7 bytes di risposta ed invece ne arrivano 8.
Dicembre 9, 2016 alle 7:32 am in risposta a: Domande su utilizzo del blocco funzione ModbusMaster #39779Sergio Bertana
Amministratore del forumSu XTarget_12 (Da firmware SFW184B000) per aprire la porta seriale è stato realizzato il FB SysSerialPort che permette oltre alla apertura anche di impostare i parametri di comunicazione. Anche se è corretto usare la Sysfopen ti consiglio di usare il nuovo FB (Eventualmente fai l’upgrade del firmware sul NetlogIII, Vedi FAQ). La porta Fieldbus è la porta COM2, l’errore 10007506 che tu vedi come riportato sul manuale si riferisce ad un errore in ricezione.10007500~7 Errore in ricezione frame risposta (Carattere errato, lunghezza errata, CRC).Ora tu mi dici che in Telnet con Toolly vedi “Answer frame too long”, quindi significa che hai attivato lo SpyOn e stai spiando la comunicazione modbus verso il drive. Quindi è visualizzato sia il frame di richiesta inviato che il frame di risposta ricevuto, se controlli questi frames seguendo le specifiche Modbus vedrai probabilmente che nella richiesta è stato richiesto un certo numero di registri e che nella risposta sono stati ricevuti più dati di quelli attesi. Perchè succede questo, dovrei vedere il report di spionaggio su Toolly, ma in generale, sei sicuro di avere impostato correttamente il modo di comunicazione (Baud rate, parità, bits), sei sicuro di usare il giusto codice di lettura e di usare il giusto indirizzo di registro (Ricordati l’offset di 1). Il FB ModbusMaster cita: “In accordo alle specifiche modbus l’indirizzo inviato nel frame dati è (Address-1)” Questo perché chi è Modbus compliant somma 1 all’indirizzo ricevuto, ma molti devices non fanno questa somma, quindi devi essere tu ad aggiungere 1 al valore di Address passato alla FB. Se mi mandi un printscreen della schermata di Toolly magari posso essere più preciso.
Sergio Bertana
Amministratore del forumSe cerchi la voce ModbusMaster (Il nome del blocco funzione che gestisce il modbus) troverai molti topics che ne parlano, ma ti ho preparato un piccolo programma di esempio (Vedi stampa). Come vedete nel programma ho creato la struttura MODBUSCONFIG in cui è possibile definire i parametri di ogni richiesta Modbus. Vedi esempio:
MdbCfg[0].Node:=1; (* Modbus node *)
MdbCfg[0].FCode:=16#03; (* Modbus function *)
MdbCfg[0].Address:=16#0001; (* Register address *)
MdbCfg[0].Points:=2; (* Numero di registri *)Definendo un array di strutture è possibile definire i parametri delle varie richieste Modbus. Come si vede eseguo la lettura di 2 registri (Valore sul display) e la scrittura di 2 registri per il set point 1 e 2 registri per il set point 2. Sulla condizione di Ok richiesta eseguo il trasferimento dei dati letti. Sulla condizione di inizio richiesta preparo i dati da inviare al counter (Download progetto).
Dicembre 6, 2016 alle 10:48 am in risposta a: Visualizzazione interfaccia grafica da web browser #39775Sergio Bertana
Amministratore del forumUna domanda ma utilizzi Explorer e Chrome sullo stesso PC oppure su due PC diversi ? perchè di solito il problema potrebbe essere nella impostazione della sicurezza nel pannello Java (Screenshot). Ma questa impostazione è comune a tutti i browser nello stesso PC.
Hai dato una occhiata a questo topic ?
Dicembre 6, 2016 alle 10:09 am in risposta a: Connessione con inverter Toshiba TOSVERT VF-nC3 Series #39773Sergio Bertana
Amministratore del forumEcco alcuni consigli e verifiche da fare:
Hai verificato indirizzo di Nodo, Baude Rate ?
Il protocollo lato inverter e HMI sono stati controllati ?
Tipo di modbus e variabile puntata su HMI ?
Verificato se il pin 4 e 5 non siano invertiti ?
Una volta impostato l’inverter è stato spento e riacceso ?Sergio Bertana
Amministratore del forumSicuramente Coster impiega un engine modem commerciale, non sono in molti a produrre engine modem, oltre a Gemalto, c’è Telit e pochi altri…
Se puoi aprirlo guarda che engine utilizza e fai riferimento a quello per i comandi AT.
Sergio Bertana
Amministratore del forumLo spreco stà sempre nel prezzo, al listino di oggi a poco più di 100€, acquisti un PLC con 6 ingressi digitali, 4 uscite digitali e 2 ingressi analogici. Connettività ethernet e tutta la libreria di funzioni disponibile con LogicLab.
-
AutorePost