Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumIl nuovo modulo CPU Cortex M7 LogicLab IEC61131-3 ha nativa l’interfaccia 1-Wire, quindi è possibile acquisire tutti i sensori della corda termometrica direttamente con il modulo CPU.
Gennaio 9, 2017 alle 5:12 pm in risposta a: Limiti di visualizzazione variabili nella finestra watch #39814Sergio Bertana
Amministratore del forumIl limite di visualizzazione di LogicLab per le variabili è di 220 caratteri, variabili di lunghezza maggiore non sono visualizzate. Ma occorre fare una precisazione, per cercare di ottimizzare le richieste Modbus, LogicLab accoda nella richieste le variabili in watch che sono allocate consecutivamente.
Quindi nel caso vengano messe in watch piu stringhe tutte allocate consecutivamente può succedere che la dimensione totale superi i 220 caratteri anche se ogni singola stringa è di dimensione minore. In questo screenshot ho cercato di riprodurre l’evento. Nel caso servisse come nell’esempio visualizzare in watch sia String1 che String2 contemporaneamente si dovrà allocare le variabili lontane tra di loro magari allocandone una nella DB 100.
Naturalmente nel mio semplice programma di esempio StringDebug che allego per il download, è facile capire l’allocazione delle variabili, ma in programmi più complessi e/o con FB risulta più difficile capire e soluzionare il problema.
Ho proveduto ad informare la Axel che ci fornisce LogicLab per vedere se è possibile trovare una soluzione al problema.
Gennaio 9, 2017 alle 7:33 am in risposta a: Comunicazione Modbus RTU tra MT6070iP e Pixsys ATR243 #39812Sergio Bertana
Amministratore del forumLe specifiche Modbus indicano che il dispositivo slave deve incrementare di 1 l’indirizzo ricevuto, ecco perchè il terminale invia gli indirizzi ofsettandoli con un -1. Purtroppo molti vendors gestiscono il protocollo Modbus non tenendo conto di questo offset creando confusione.
Weintek ha proprio per questo scopo inserito anche il protocollo MODBUS RTU (zero-based addressing) che non esegue l’offset. Sinceramente non avendolo mai utilizato non mi ero accorto che non aveva la funzione 6x_Bit. Però ha le funzioni 3x_Bit e 4x_Bit che credo vadano bene per la tua applicazione.
In caso contrario puoi utilizzare un data transfer dal sistema al terminale e poi utilizzare le RW_Bit o LW_Bit.
Gennaio 5, 2017 alle 2:46 pm in risposta a: Utilizzare ATC1000 per aggiungere porte seriali a SlimLine #39811Sergio Bertana
Amministratore del forumNon esistono assolutamente problemi, puoi utilizzare qualunque Convertitore Ethernet-Seriale per aggiungere porte seriali ai nostri sistemi SlimLine, vediamo come fare.Se configuri il convertitore come server TCP devi utilizzare sullo SlimLine il FB SysTCPClient per connetterti al convertitore e poi potrai utilizzare il file pointer in uscita al FB per gestire il tuo protocollo di comunicazione. Ecco lo screenshot del programma COMRemote che utilizza un ATC-1000 per gestire un dispositivo Modbus (Download programma).Nel mio esempio ho scelto una configurazione dove il convertitore Ethernet/Seriale agisce da server TCP e lo SlimLine da Client, ma naturalmente puoi invertire i ruoli. Oppure puoi utilizzare una connessione UDP. Se hai più porte seriali da aggiungere dovrai istanziare più FB SysTCPClient, una per ogni porta COM aggiuntiva.Naturalmente il modo di comunicazione RS232/RS485 ed i parametri, baudrate, parità, bits vanno impostati tramite la pagina web di configurazione del convertitore.
Sergio Bertana
Amministratore del forumHo tratto spunto da questo topic per realizzare un blocco funzione da utilizzare sui nostri sistemi programmabili SlimLine che esegua la conversione tra i due tipi di protocollo Modbus.
La realizzazione del blocco funzione è stato più che altro un esercizio per dimostrare la flessibilità dei nostri prodotti che grazie alla disponibilità di un gran numero di funzioni e blocchi funzione orientati alla comunicazione, al networking ed alla connessione web su cloud sono utilizzati proprio per realizzare questo tipo di applicazioni.
Ho inserito il FB nella nostra libreria, ma visto l’obbiettivo propedeutico ho inserito un topic apposito nella sezione del forum relativa alla programmazione dove riporto anche il programma di un convertitore Ascii/RTU realizzato ad hoc con tutti i programmi sorgente.
In questo topic si può eseguire il download del programma del convertitore Modbus Ascii/RTU.
Gennaio 4, 2017 alle 9:10 am in risposta a: Utilizzo delle porte seriali per comunicare con HMI #39809Sergio Bertana
Amministratore del forumModificare il baud rate di comunicazione dello SlimLine è semplicissimo, basta connettersi con un browser e digitando l’IP dello SlimLine agire sulle pagine di configurazione. Per eseguire il login di default usare Username e password Admin (Case sensitive) Screenshot.
Nella pagina Hardware Setup (Screenshot) puoi impostare i parametri di comunicazione per le varie porte seriali. Dopo l’impostazione dei parametri devi spegnere e riaccendere il sistema.
Per accedere alla pagina web se hai il modello con ethernet devi solo impostare correttamente l’IP (Topic) se non hai un modello con Ethernet devi utilizzare la connessione USB installando il driver RNDIS (Topic).
Naturalmente è possibile anche la soluzione da te ipotizzata, cioè realizzare un programma che utilizza il FB ModbusSlave_v1 l’esempio è quello del manuale (Estratto manuale). Naturalmente in questo modo puoi definire anche l’offset modbus oltre all’area del buffer accessibile dai comandi Modbus.
Gennaio 3, 2017 alle 1:18 pm in risposta a: Gestire potenziometro digitale I2C sul bus di espansione #39806Sergio Bertana
Amministratore del forumAndiamo per ordine, il risultato dei tests in Telnet è corretto, viene rilevato il tuo DS1803 all’indirizzo 16#28 quindi vuol dire che è connesso correttamente al bus e che l’indirizzo è corretto (Avendo i pins A0, A1, A2 connessi a GND). Non vedi alcun modulo perchè non hai altri moduli connessi, nel mio esempio come ti ho detto avevo un modulo di estensione connesso.
Guardando il tuo programma vedo che hai realizzato una FB solo per appoggiare i valori da scrivere via I2C, Ok soluzione che può anche essere accettabile, ma nel tuo FB scrivi: Write:= ADR(Wiper); Dove Write è di tipo USINT. Ma compilando ti troverai una warning del tipo:
AUMENTA_DIMINUSCI(3) – warning G0065: WRITE => Destination may be too small to store current result
Questo è un grave errore, l’operando ADR() ritorna un indirizzo che è un valore a 32 bits non lo puoi ritornare in una variabile a 8 bits. Quindi devi usare per Write un tipo DWORD o meglio @USINT. Ma visto che usi il linguaggio ST per la FB perchè non fare tutto in ST ? Ecco un sempio di scrittura di un potenziometro.
WrData[0]:=16#A9; (* Command byte *)
WrData[1]:=16#55; (* Valore potenziometro 0 *)
Result[0]:=SysI2CWrRd(16#28, 2, ADR(WrData), 0, NULL);Ti allego il programma DigitalPot di esempio per il download.
Gennaio 3, 2017 alle 8:08 am in risposta a: Gestire potenziometro digitale I2C sul bus di espansione #39804Sergio Bertana
Amministratore del forumLa versione software SFW184B040 è l’ultima disponibile. I nostri moduli di espansione sono mappati nel range da 16#20 a 16#2F e naturalmente se esiste uno dei nostri moduli allo stesso indirizzo non è possibile collegare altri dispositivi. La funzione SysI2CWrRd comunque esegue un controllo sulla presenza di un nostro modulo e nel caso si tentasse di indirizzarlo darebbe errore 9953105.
Ma l’errore 9953100 che tu citi è proprio una semplice verifica sul valore di Address passato alla funzione, quindi mi viene il dubbio che tu passi effettivamente un valore maggiore di 16#7F. Sarebbe utile avere il tuo programma, se vuoi puoi inviarlo a support. Come vedi in questo screenshot se si passa il valore 2#00101000 non si ha alcun errore.
Ti consiglio comunque di verificare con i comandi Telnet I2CSts ed SlineInfos se sul tuo bus di espansione viene individuato correttamente il tuo DS1803 (Screenshot). Come vedi nello screenshot vi è un modulo PCB122B100 connesso al bus di espansione I2C extension bus, il modulo ha indirizzo 0x0 (Indirizzo I2C 16#20).
Il bus indicato come I2C auxiliary bus è un bus I2C interno al modulo CPU a cui sono connessi dispositivi interni, in questo caso il chip di real time clock.
Li avrai già visti ma ti rimando a questo topic ed a questo topic, per informazioni utili. Comunque cercando con la chiave I2C nel forum potrai trovare altre informazioni.
Sergio Bertana
Amministratore del forumVisti i tempi di movimentazione e la corsa, la tua applicazione è molto diversa da quella trattata precedentemente, dovendo distribuire la colla nella corsa dei 200 mm dovrai accelerare il motore prima di iniziare l’erogazione colla e decelerarlo al termine della erogazione e per avere spazi minini di accelerazione/decelerazione dovrai utilizzare un driver in grado di fare erogare al motore coppia sufficente.
Visto che parli di utilizzare motori Penta ho visto che la Motor Power fornisce anche i drivers da abbinare ai loro motori, ad esempio la famiglia FLEXI PRO Servo Drive ha un ingresso analogico ±10 per l’impostazione di velocità, ed ha l’uscita di encoder simulato Equivalent encoder output che sfrutta il sensore di posizione interno al motore brushless.
Ora con un modulo espansione I/O Analogico puoi gestire l’ingresso di riferimento di velocità, a scelta puoi usare l’inversione di segno per la direzione, oppure usare una uscita logica connessa all’ingresso di direzione del driver. Come encoder usi l’uscita simulata del driver, siccome sono segnali differenziali mentre la scheda encoder accetta segnali a modo comune, utilizzerai solo i segnali A+, B+ e Z+.
Tra l’altro è diponibile anche la famiglia SKA COMPACT di motori lineari, che mi sembra ottima per la tua applicazione.
Gennaio 2, 2017 alle 10:52 am in risposta a: Come attivare un trigger su ultimo giorno del mese #39801Sergio Bertana
Amministratore del forumPuoi creare nella macro un array di 12 short con l’indicazione dei giorni di ogni mese:
esempio short mese[12] mese[0]=31 mese[1]=28. . .
Poi esegui un getdata della LW del mese e la usi per trovare nell’array i giorni del mese. Naturalmente ti rimane il problema dell’anno bisestile ma ci sono in rete algoritmi per determinare se l’anno è bisestile oppure no.
Il calendario gregoriano prevede che ogni anno perfettamente divisibile per 100, ad esempio 1900, sia un anno bisestile solo se perfettamente divisibile anche per 400. Ecco un esempio di calcolo su di un nostro sistema SlimLine (Stampa programma).
LeapYear:=((MOD(Year, 4) = 0) AND (MOD(Year, 100) <> 0) OR (MOD(Year, 400) = 0));
Dicembre 28, 2016 alle 3:21 pm in risposta a: Collegamento con PLC Fatek B1 porta RS485 integrata #39799Sergio Bertana
Amministratore del forumNon conosco il PLC Fatek (Noi utilizziamo i nostri prodotti SlimLine), ma ho chiesto ad un amico che utilizza Fatek che mi ha detto che i pin sul PLC partendo dall’alto sono D+ D- e GND.
La porta sul PLC è vista come PORT2, quindi verificane i settaggi.
Dicembre 28, 2016 alle 2:32 pm in risposta a: Rilasciato FB MQTTClient per gestione protocollo MQTT #39798Sergio Bertana
Amministratore del forumProprio per dimostrare come sia possibile trasferire variabili tra diversi sistemi utilizzando il protocollo MQTT ho realizzato il programma MQTTExchange. Questo programmasi connette ad un broker gratuito broker.mqttdashboard.com ed esegue la pubblicazione dello stato di un ingresso logico sul topic IOCommand.
Il programma si sottoscrive allo stesso topic così ne riceve dal broker lo stato ad ogni variazione, e lo stato ricevuto comanda una uscita logica. In questo modo lo stato dell’ingresso è riportato sull’uscita passando dal broker. E’ possibile trasferire lo stesso programma su diversi sistemi e gestendo opportunamente la pubblicazione e la sottoscrizione dei topic sui sistemi è possibile realizzare uno scambio dati.
Eseguendo il programma su di un sistema attivando Di01CPU si comanda la connessione al broker, a connessione avvenuta si attiva Do01CPU. Attivando Di00CPU ne viene pubblicato lo stato che è ricevuto e trasferito su Do00CPU. Quindi lo stato dell’ingresso è copiato sulla uscita passando attraverso la pubblicazione sul broker (Stampa programma, Download programma).
Attenzione, per evitare di andare in conflitto con altri utenti che testano il programma conviene modificare il nome del topic e l’identificativo utente. Ci può solo essere un utente con lo stesso identificativo sullo stesso broker.
Dicembre 28, 2016 alle 10:14 am in risposta a: Una libreria per la gestione del servizio REST #39797Sergio Bertana
Amministratore del forumRimando a questo topic per la disponbilità del bocco funzione MQTTClient, l’MQTT (Message Queuing Telemetry Transport) di IBM è lo standard di riferimento per la comunicazione per l’Internet delle Cose. Quindi una valida alternativa al servizio REST.
Sergio Bertana
Amministratore del forumI pannelli della serie iP hanno una connessione seriale diversa rispetto a tutti gli altri terminali, ecco lo schema di connessione.
Per quanto riguarda le impostazioni seriali sono corrette Modbus RTU, nodo 1, seriale 115200, e, 8, 1.Un’altra possibilità della comparsa dell’errore di comunicazione è quando definisci una variabile modbus nel pannello ad indirizzo errato. Ti consiglio di inserire un solo oggetto nel progetto per prova. Esempio un pulsante toggle comando modbus 0x indirizzo 40016. Magari utilizza il progetto di startup (Topic).
Dicembre 19, 2016 alle 7:17 am in risposta a: Errore A4097 in compilazione utilizzando un timer #39795Sergio Bertana
Amministratore del forumi FB del timer hanno UDINT come tipo variabile definita per il parametro PT, ma tu puoi utilizzare sia variabili USINT che UINT dipende dal range del valore che devi impostare. LogicLab provvederà in compilazione eseguire il cast del valore in modo automatico.
Dovendo impostare il valore da terminale e/o da supervisore via Modbus, ti consiglio di allocare una variabile esempio un UDINT in area di backup (Esempio DB 100.2048). La variabile poi andrà appoggiata all’ingresso PT del timer e sarà posibile da modbus accedervi con l’indirizzo 41024.
In questo topic trovi un progetto SlimLine e pannello operatore che ha una gestione del timer come tu desideri, ti ricordo che il programma EasyBuilderPro ti permette anche di emulare il funzionamento del pannello HMI sul PC (Screenshot) e quindi di testare il funzionamento.
-
AutorePost