Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumHai provato a mischiare il master del vecchio modello con gli slaves del nuovo modello e viceversa. Tanto per capire se il problema è nella gestione del master o dello slave. Poi non ti rimane altro che compilare l’RMA ed inviarceli per dei tests. Io poi li proverò con un dipostivo Modbus per capire se funzionano.
Sergio Bertana
Amministratore del forumMolto strano quello che dici, se và in RS232 vuol dire che la comunicazione tra i due convertitori funziona, se il tuo dispositivo slave riceve i dati sembrerebbe che la comunicazione è corretta (quindi baud rate, parità, ecc).
Il fatto che il tuo dispositivo trasmetta la risposta ma questa non arrivi al master sembrerebbe indicare che il convertitore non riesce a capire il frame ricevuto dal tuo dispositivo. Questo è molto strano e strano sopratutto il fatto che i modelli che hai in casa funzionino.
Non sono sicuro sul tipo di comunicazione che hai tra il convertitore ed il tuo dispositivo, è una RS485 a due o quattro fili ?
Sergio Bertana
Amministratore del forumIl convertitore ATC-3200 è un convertitore ZigBee/Seriale, tramite il software a corredo è possibile configurare il dispositivo come master o come slave. Un dispositivo master può dialogare con tanti dispositivi slaves e questo permette di creare reti multidrop.
Naturalmente la rete funziona come la rete cablata, l’apparecchiatura connessa con il convertitore ATC-3200 master invia il pacchetto di interrogazione con l’ID del dispositivo slave da interrogare, tutti i convertitori ATC-3200 salve ricevono il pacchetto e lo inviano alla loro seriale. Ma solo l’apparecchiatura slave con l’ID richiesto risponderà ed il pacchetto verrà ricevuto dal master.
Ora da quello che scrivi, sembra che il pacchetto di interrogazione Modbus inviato dal PC master arrivi alla apparecchiatura slave ma non funziona l’invio della risposta al master. Per provare ti consiglio di utilizzare una classica connessione in RS232, sul convertitore ATC-3200 slave connetti un loopback (Cortocircuita tra di loro i pin 2 e 3 del connettore DB9 della seriale). In questo modo tutto quello che viene ricevuto viene ritrasmesso.
Sul PC utilizzando un programma di emulazione terminale (Esempio Toolly) invia dei caratteri verso la seriale del convertitore ATC-3200 master, dovresti ricevere il carattere indietro dallo slave. se non lo ricevi puoi collegare un’altro PC alla seriale del convertitore slave e sempre con Toolly verificare se i caratteri inviati dal master sono ricevuti dallo slave e puoi anche testare l’invio verso il master.
L’esito di queste prove ci danno l’idea del funzionamento del convertitore, poi possiamo passare al test con il Modbus.
Sergio Bertana
Amministratore del forumIl modo più semplice di scambiare dati tra diversi dispositivi SlimLine è utilizzare il FB UDPDataTxfer. Il FB utilizza il protocollo UDP per lo scambio dati ed è possibile definire la dimensione in bytes dell’area da scambiare tra i dispositivi (Topic, Topic). Naturalmente trattandosi di connessione in UDP non si parla di Client/Serrver ma di comunicazione peer to peer, però il concetto non cambia, i due sistemi si scambiano dati.
Se invece la tua domanda è più didattica, cioè vuoi capire come sfruttare le nuove caratteristiche del firmware che permettono di realizzare connessioni Client/Server TCP occorre fare alcune premesse. Il file pointer delle FBs SysTCPClient e SysTCPServer è uno stream di comunicazione tutto quello che invii (Funzioni Sysfputc, Sysfwrite) da un lato lo puoi leggere dall’altro con le funzioni Sysfgetc, Sysfread.
Ora per inviare dati da un sistema all’altro devi costruirti un protocollo, il mio consiglio è utilizzare ad esempio il Modbus che è già pronto, puoi usare il FB ModbusMaster, su di un sistema, mentre dall’altro il supporto del protocollo Modbus slave è già nativo. Ti posto una cartella con due progetti uno TCPModbus è la gestione del master modbus (Vedi stampa), l’altro SlaveSystem è il progetto da caricare sul sistema slave.
Nello slave mi sono limitato a copiare la word MW100.32 sulla MW100.0, il sistema master legge 16 words dallo slave ad indirizzo 40000 (Address reale 100.0) ed invia 16 words ad indirizzo 40016 (Address reale 100.32). Con il sistema master in debug come vedi dallo screenshot puoi forzare uin valore nella MdbWr e te lo ritrovi dopo un po nella MdbRd. Il programma esegue una comunicazione modbus ogni secondo MMdb.Delay:=1000; (* Communication delay *) ma tu puoi modificare il valore (Download progetto).
Sergio Bertana
Amministratore del forumSi certo, i testi di una List Box (Oggetti -> Pulsanti -> Opzioni) possono essere scelti da diverse opzioni (Screenshot), selezionando l’opzione Indirizzo Item è possibile acquisire i testi da variabili. Nel mio esempio utilizzo variabili terminale, come vedi ho definito una lunghezza per ogni voce di 4 words (16 caratteri).
La LW 0 è utilizzata per il controllo del List Box, sono utilizzate due words, LW 0 impostandola a 1 forza la visualizazione dei testi, nella LW 1 si definiscono il numero di linee da visualizzare. I vari testi iniziano dalla LW 10, quindi avremo LW 10-13 prima riga, LW 14-17 seconda riga, ecc…
Nel mio esempio (Testabile sul simulatore) puoi vedere il funzionamento del programma (Ecco lo screenshot), come vedi ci sono 4 caselle per l’impostazione dei testi. Nella casella Numero righe lista LW 2 devi indicare il numero di righe che vuoi visualizare. Puoi in simulazione modificare i vari testi e poi scrivendo 1 nella casella Aggiorna Lista LW 0, i testi definiti verranno visualizzati. Nel mio esempio come vedi ho appoggiato la selezione nella casella Indice selezionato LW 2, effettuando la selezione viene ritornata la linea, il conteggio parte da 0 (Download programma).
Sergio Bertana
Amministratore del forumLa finestra Cross Reference permette di avere una visualizzazione immediata di tutti gli oggetti utilizzati nel programma con la visualizzazione di dove l’oggetto è utilizzato (Screenshot).
Per utilizzare il Cross Reference occorre abilitarlo nelle opzioni di progetto, è possibile selezionare quali oggetti si desidera includere ed a ogni compilazione LogicLab crea un file di cross reference (Nella cartella di progetto viene creato un nuovo file con estensione crf).
Dalla finestra di Cross Reference è possibile selezionare l’oggetto che si desidera e viene visualizzato l’elenco di tutti i punti dove è utilizzato. Un click con il mouse sulla riga permete di aprire l’oggetto posizionadosi sul punto di utilizzo.
Sergio Bertana
Amministratore del forumSugli oggetti di Visualizzazione/Inputazione numerica è possibile definire come formato dati il tipo 32-bit Float, in questo modo il valore che definisci verrà trattato come un numero a virgola mobile. Come vedi in questo screenshot ho definito un oggetto di inputazione numerica per impostare il valore di Set appogiando il valore sulla LW 0.
Ho inserito un analogo oggetto per la visualizzazione del risultato indicando come indirizzo letto la LW 2. Nota: ho saltato la LW 1 perchè le variabili float sono a 32 bits e quindi utilizzano due LW (LW 0 e 1 per il Set, LW 2 e LW 3 per il risultato). Nella macro che esegue l’operazione eseguita ciclicamente ogni secondo ho scritto:
macro_command main()
float Var
GetData(Var, “Local HMI”, LW, 0, 1)
Var=Var/10.5
SetData(Var, “Local HMI”, LW, 2, 1)
end macro_commandCome vedi il valore delle LW 0/1 viene copiato nella variabile locale Var, viene poi eseguita la divisione per 10.5 ed il risultato è appoggiato nelle LW 2/3. Ecco lo screenshot del programma eseguito sul simulatore. Come vedi il numero 255.80 viene diviso per 10.5 dalla macro e viene visualizzato il risultato 24.36 (Download programma).
Sergio Bertana
Amministratore del forumCon la nuova versione del sistema operativo abbiamo inserito la gestione del DNS, ora è possibile definire nelle connessioni TCP/UDP oltre agli indirizzi IP anche gli URLs. Ecco quindi che il FB SNTPRequest ha la possibilità di definire nell’ingresso NTPServer un URL. Per permettere di definire URLSs di lunghezza variabile abbiamo trasformato il tipo dato da STRING a pointer @USINT. Occorre quindi passare l’indirizzo della stringa definizione server.
Nel manuale gli esempi solitamente sono in linguaggio Ladder, ma ho provveduto nella nuova versione del manuale a riportare anche un esempio in ST (Estratto manuale). Allego anche il progetto SNTPTime di esempio (Download progetto).
Sergio Bertana
Amministratore del forumProbabilmente succede quello che capita a molti specie usando EasyBuilder su PC portatili, la finestra delle impostazioni è grande e supera la dimensione dello schermo. In questo modo viene oscurata la parte in basso proprio quella con il tasto di Ok.
Di solito basta togliere la barra di Windows (Rendendola automatica o spostandola su di un lato dello schermo per guadagnare lo spazio sufficente a visualizzare il pulsante di Ok (Screenshot).
Dicembre 1, 2015 alle 8:45 am in risposta a: Visualizzazione di un oggetto condizionata da 2 bits #39231Sergio Bertana
Amministratore del forumUn modo per realizzare quello che tu chiedi è ad esempio di utilizzare una macro.
Fermo restando l’abiltazione alla visualizzazione del pulsante condizionata da un bit (Nell’esempio LB 0), ho realizzato una macro eseguita ciclicamente che esegue la AND tra due bits (LB 1 ed LB 2) ed invia il risultato della AND sul bit di abilitazione LB 0. In questo modo solo se entrambi i bits di abilitazione sono attivi il pulsante sarà visibile. Ecco il listato della macro.macro_command main()
short EnableSts[2] //Bits stato abilitazione
short EnableCmd //Bit comando abilitazioneGetData(EnableSts[0], “Local HMI”, LB, 1, 2) //Leggo stato LB 1 ed LB 2
EnableCmd=EnableSts[0] and EnableSts[1]
SetData(EnableCmd, “Local HMI”, LB, 0, 1) //Imposto stato LB 0
end macro_commandHo realizzato un progetto di esempio eseguibile in simulazione su PC (Download progetto).
Novembre 30, 2015 alle 7:43 am in risposta a: Protezione con credenziali di accesso su pagine #39230Sergio Bertana
Amministratore del forumNon mi spiego il motivo ho provato io stamattina a fare quello che hai fatto tu (Ecco lo screenshot) e non ho avuto problemi. Ne ero certo perchè è una soluzione che molti dei nostri clienti utilizzano.
Prova a fare un progetto nuovo e verifica se funziona per capire se è dovuto al progetto o all’installazione di EB8000. La versione che utilizzo io e la V4.65.07 Build 2013.06.25.
Sergio Bertana
Amministratore del forumNel LogicLab 4 Axel ha apportato alcune migliorie, una di queste riguarda la possibilità di avere il Workspace customizzabile. Con questa caratteristica è possibile creare cartelle proprie nel Workspace per meglio suddividere i programmi.
Attivando questa caratteristica anche le variabili vengono suddivise in cartelle separate in base al gruppo di appartenenza e non si ha più la visione globale di tutte le variabili come si aveva con le precedenti versioni di LogicLab. Personalmente preferisco questo tipo di personalizzazione che mi permette di razionalizzare sia i programmi che le variabili secondo uno schema logico.
Ma nessuna paura, puoi scegliere di continuare ad usare la vecchia soluzione di Workspace togliendo il tick di spunta nelle opzioni di progetto (Screenshot).
Novembre 27, 2015 alle 3:08 pm in risposta a: Gestire un conteggio veloce su ingresso digitale #39227Sergio Bertana
Amministratore del forumIl FB SysGetCounter permette di sfruttare il circuito hardware di conteggio presente in alcuni moduli, per vedere i moduli che dispongono del counter devi fare riferimento al manuale di descrizione hardware del modulo.
Il modulo CPU ha un solo counter hardware sull’ingresso Di00, quindi è utilizzabile, però non dispone degli ingressi di Reset e di Reverse. Quindi ecco perchè impostando Mode a 8192 il FB ti dava errore.
Il fatto che conti due impulsi giro con Mode a 0 mi suggerisce un problema di rimabalzi sulla lettura, essendo il counter hardware molto veloce basta anche un impulso piccolissimo per generare un clock. Sono sicuro che se mettessi un oscilloscopio sull’ingresso vedresti i due impulsi.
Attenzione, il counter hardware gestisce il conteggio in modo autonomo, quindi il programma che esegue il FB SysGetCounter può essere tranquillamente messo sia nella task Slow che nella Back.
Novembre 27, 2015 alle 2:57 pm in risposta a: Gestire un conteggio veloce su ingresso digitale #39225Sergio Bertana
Amministratore del forumCome dici tu il sensore magnetico legge un solo punto sull’albero, quindi non devi utilizzare la frequenza come parametro di riferimento, ma il tempo di attivazione del sensore. Per assurdo se il punto di controllo è puntiforme la durata dell’impulso può essere di pochi mS.
Considerando che gli ingressi digitali hanno un filtro hardware di 4,7 mS e che sono acquisiti nella task Slow ogni 10 mS capisci che l’impulso può andare perso. Per essere certi di acquisire impulsi molto brevi devi acquisire direttamente gli ingresi con la funzione SysGetPhrDI come indicato in questo topic.
Novembre 27, 2015 alle 2:24 pm in risposta a: Collegare 2 PC ad un registratore di cassa per scontrino #39223Sergio Bertana
Amministratore del forumSe è così come dici potrebbe funzionare…Ma se la connessione Ethernet non è una condizione essenziale puoi anche utilizzare una connessione in RS422, utilizzando 3 convertitori RS232/RS422 tipo l’ATC-105, puoi creare una rete tra le seriali dei 2 PC e la stampante. In alternativa se non hai la seriale sul PC puoi utilizzare l’ATC-850 che esce già in RS422. Questa soluzione ha l’indubbio vantaggio di non utilizzare il software Virtual COM che più di una volta ha già manifestato problemi di incompatibilità con alcuni applicativi sul PC. Non abbiamo prodotti usati, per il diritto di recesso abbiamo la formula “Soddisfatti o Rimborsati“.
-
AutorePost