Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 2,521 a 2,535 (di 4,374 totali)
  • Autore
    Post
  • in risposta a: Configurare le impostazioni di rete (Indirizzo IP) #38961
    Sergio Bertana
    Amministratore del forum

    I moduli CPU Slimline sono venduti con indirizzo di default 192.168.0.122, netmask 255.255.255.0, gateway 192.168.0.1. Se create una rete peer to peer con un PC ed impostate nel PC un indirizzo IP ed un netmask compatibile con l’indirizzo di Slimline (Vedi FAQ), potrete accedere direttamente alla pagina di configurazione da web (Screenshot). Come si vede le credenziali di default sono Admin, Admin. Definiti i nuovi parametri dalla pagina Network Setup dopo il tasto Save occorre eseguire un reboot del sistema (Basta spegnere e riaccendere il sistema) per rendere attive le nuove impostazioni.

    Più semplice è impostare i parametri di network con il programma Toolly tramite l’utility Discover (Screenshot) vengono visualizzati tutti i dispositivi Elsist trovati in rete indipendentemente dalla classe di rete del PC che esegue il programma. La ricerca è eseguita a livello broadcast ed è compatibile con tutti gli switches di rete. Per sicurezza cioè per impedire modifiche fraudolente alle configurazioni dei sistemi, l’operazione è posibile solo per i primi 10 minuti di accensione del sistema.

    Per qualsiasi evenienza è sempre possibile accedere al sistema tramite una connessione seriale di emergenza (Topic) da cui con semplici comandi testuali è possibile impostare i parametri di configurazione.

    in risposta a: Accesso da protocollo modbus agli I/O logici #38959
    Sergio Bertana
    Amministratore del forum

    Non sò quale sia il programma EasyProtocol che tu citi ma ritengo possa trattarsi del programma DIOManage (Stampa) riportato in questo topic. In effetti questo programma fà esattamente quello di cui tu hai bisogno infatti come vedi dalla stampa le variabili

    DInputs AT %MW100.16 : UINT; (* Digital inputs *)
    DOutputs AT %MW100.18 : UINT; (* Digital outputs *)

    Contengono lo stato dei 16 I/O digitali di un modulo di epansione con indirizzo 0. Le variabili sono già allocate nella DB100 che è l’area accessibile da Modbus quindi non devi riallocarle (Ma se vuoi spostarle di posizione puoi farlo).

    Ora il concetto più complesso è capire come raggiungere da Modbus queste variabili, come vedi leggendo il topic per acquisire lo stato degli ingressi devi eseguire un comando 03 Read holding registers al registro 40008, per settare le uscite devi eseguire un comando modbus 10 Preset multiple registers al registro 40009. Attenzione, modbus per sua definizione ha offset 1, solitamente i drivers di comunicazione degli SCADA gestiscono questo offset ma non sò se LabVIEW lo gestisce quindi può anche darsi che devi sottrarre 1 all’indirizzo (Quindi avrai 40007 e 40008).

    Per vedere se gli I/O sono gestiti basta utilizzare la finestra di watch di LogicLab e scrivere un valore nella variabile DOutputs e vedrai attivarsi le uscite logiche.

    in risposta a: Problema con funzione SysVarsnprintf #38957
    Sergio Bertana
    Amministratore del forum

    Non è un tuo errore ma è una anomalia del compilatore LogicLab, il problema tira in ballo la gestione dell’immagine di processo degli I/O digitali. Questo argomento lo abbiamo già trattato in altri topics (Vedi questoquesto e questo).

    In pratica tu stai gestendo correttamente la funzione SysVarsnprintf in una task in Back mentre gli I/O sono automaticamente acquisiti in Slow, quindi tu visualizzi non l’ingresso reale ma la sua immagine di processo ricreata automaticamente da LogicLab prima di eseguire i programmi della task Slow. Il bug è che il compilatore avendo tu utilizzato l’attributo ADR per la variabile non si accorge del’uso della stessa ed in una eccessiva ottimizzazione non esegue l’aggiornamento della immagine di processo lasciando la variabile sempre a 0.

    Workaround, puoi semplicemente dichiarare una variabile Dummy di tipo BOOL ed aggiungere nel tuo programma in Back il codice

    IF (FALSE) THEN Dummy:=PresenzaTensione; END_IF;

    Se hai piu ingressi, nella IF puoi copiare ogni ingresso sempre su Dummy, tanto non conta che la copia sia eseguita (La IF non viene mai eseguita) ma il compilatore “vede” l’utilizzo della variabile allocata sull’ingresso reale e provvede automaticamente ad aggiornare l’immagine di processo. Provvedo ad informare Axel del problema.

    in risposta a: Differenze tra DB 100.xx, MX, MB, MW, MD #38956
    Sergio Bertana
    Amministratore del forum

    Come tutti i server HTTP il server gestito da SlimLine analizza l’estensione del file indirizzato e ritorna un header adatto alla sua visulizzazione (Se è un file visualizzabile) oppure indica al browser di salvarlo su disco se non è visualizzabile.

    Solo nel caso dell’estensione htm il file viene parsato dal server alla ricerca delle TAGs di visualizzazione che sono sostituite con il valore della variabile durante l’invio del file al browser.

    in risposta a: Differenze tra DB 100.xx, MX, MB, MW, MD #38954
    Sergio Bertana
    Amministratore del forum

    Immagino che la versione del sistema operativo che stai utilizzando sia superiore all SFW184A700, da questa versione è stato gestito il singolo apice nella definizione delle TAGs nelle versioni precedenti era obbligatorio il doppio apice.

    La directory dove trasferisci la pagina htm non ha importanza può essere sia Storage che SDCard, comunque ti allego il sorgente pagina htm (File DPage.htm) prova ad usare il mio file. Nel mio file per sicurezza ho utilizzato i doppi apici così funziona con qualsiasi versione del sistema operativo.

    in risposta a: Acquisizione encoder da modulo di I/O #38952
    Sergio Bertana
    Amministratore del forum

    L’uscita a Line-Driver non è nient’altro che una doppia uscita push-pull per ognuno dei segnali encoder. In pratica un componente elettronico fa da driver di linea su ognuno dei segnali encoder (A, B, tacca di zero) e per ognuno dei segnali viene presentato in uscita il suo stato reale ed il suo stato negato (A ed ANegato, B e BNegato, C e CNegato). Questa configurazione permette se acquisita da un Line-Receiver di avere la compensazione del rumore e del cross-talk tra i segnali grazie ad una acquisizione differenziale di ognuno di essi. Soluzione indispensabile per lavorare in ambienti “rumorosi” dal punto di vista elettrico, per trasferire segnali ad elevata frequenza e per gestire lunghe tratte di cavi di collegamento, ma se nella tua applicazione l’encoder è vicino alla scheda di acquisizione, e la frequenza dello stesso non è elevata puoi tranquillamente collegare anche un encoder con Line-Driver ad un modulo di espansione I/O (Esempio modulo espansione I/O uscite relè).Come vedi dal manuale del modulo gli ingressi 12, 13, 14 e 15 hanno dei ponticelli (Da LK1 a LK4) che  se inseriti permettono di acquisire segnali a 5V (Quindi puoi anche utilizzare un encoder con Line-driver ad uscita 5V). Naturalmente per attivare l’ingresso occorre che il Line-Driver sia in grado di pilotare una corrente di almeno 5 mA. E’ evidente che non avendo come ingresso sul modulo un Line-Receiver dovrai utilizzare solo i segnali A, B e C dell’encoder lasciando scollegati i relativi segnali negati.

    in risposta a: Differenze tra DB 100.xx, MX, MB, MW, MD #38950
    Sergio Bertana
    Amministratore del forum

    Vengo ora alla domanda sulla visualizzazione in pagina web, quello che tu vedi se capisco correttamente e qualcosa di simile a questo screenshot.

    Questo difetto si manifesta copiando ed incollando nella pagina htm il testo riportato nel manuale di programmazione (Ecco l’estratto). Se si presta attenzione c’è una stranezza (Messa nel manuale appositamente per verificare l’attenzione del lettore). In realtà è il traduttore pdf che ha modificato il simbolo del doppio apice in un carattere doppio apice unicode utf-8. Il browser visualizzando la pagina con un charset=iso-8859-1 sostituisce il carattere con il punto interrogativo, ecco l’estratto pagina corretto.

    in risposta a: Differenze tra DB 100.xx, MX, MB, MW, MD #38949
    Sergio Bertana
    Amministratore del forum

    L’area DB 100 è al momento l’unica area di memoria (Data block) in cui possono essere allocate variabili. Seguendo le specifiche imposte dalla normativa IEC le variabili allocate assumono una rappresentazione che segue il loro tipo, quindi avremo:

    %IX db.i: Ingressi logici (db, datablock i, indice)
    %QX db.i: Uscite logiche (db, datablock i, indice)
    %MX db.i: Memoria a bit (db, datablock i, indice), per variabili BOOL
    %MB db.i: Memoria a byte (db, datablock i, indice), per variabili BYTE, SINT e USINT
    %MW db.i: Memoria a word (db, datablock i, indice), per variabili WORD, INT e UINT
    %MD db.i: Memoria a doppia word (db, datablock i, indice), per variabili DWORD, DINT, UDINT e REAL

    Ma si tratta solo di una convenzione nella rappresentazione dell’indirizzo della variabile, in realtà DB 100, MX 100, MB 100, MW 100 e MD 100 si riferiscono alla stessa area di memoria.

    in risposta a: Realizzare una macro per invio di una eMail #38948
    Sergio Bertana
    Amministratore del forum

    Operazione complessa anche se fattibile, un nostro cliente l’ha realizzata in passato, ma erano tempi in cui i terminali non inviavano le eMail. Ora tutti i terminali hanno nativa la gestione dell’invio di eMail (Topic) tra l’altro molti server utilizzano la crittografia e qui è davvero un’opera immane pensare di poterla realizzare con una macro. Comunque a livello di lavoro accademico può essere utile vedere la potenzialità del linguaggio macro del terminale.

    Venendo la tuo programma ho visto che non puoi utilizzare una variabile che si chiama to[50] dà errore in compilazione. Ho cambiato nome alla variabile ed ho fatto una simulazione utilizzando il nostro Toolly come server. In questo modo è possibile vedere in simulazione cosa il terminale invia al server (Porta 2525) ed inviare risposte al terminale (Screenshot).

    Intanto vedo che le stringhe non sono terminate con CR e LF, il server  di posta richiede la terminazione, poi nel tuo programma non attendi la risposta del server ma metti solo un tempo di attesa e non è detto che sia sufficente. Fermandomi ad un solo comando ecco come terminarlo con CR LF.

    char inizio[30]=”EHLO smtpcorp.com”
    int Lgt

    Lgt=StringLength(inizio[0])
    inizio[Lgt]=13 // CR
    Lgt=Lgt+1
    inizio[Lgt]=10 // LF
    Lgt=Lgt+1
    OUTPORT(inizio[0], “Free Protocol”, Lgt)

    in risposta a: Ricezione dati da radiocomando con protocollo CAN #38947
    Sergio Bertana
    Amministratore del forum

    Intanto devi essere sicuro che la variabile ritornata dal radiocomando sia effettivamente un DINT.

    Ora dovendo acquisire valori espressi su più bytes da sistemi diversi, occorre tenere presente l’endianness dei dati dei due sistemi. L’architettura ARM utilizzata nei sistemi SlimLine è di tipo Little-Endian, quindi il byte meno significativo si trova ad indirizzo più basso rispetto al byte più significativo (Questo topic dà ulteriori informazioni).

    Quindi per acquisire un dato espresso su più bytes puoi fare riferimento alle funzioni LEArrayToVar o BEArrayToVar (Devi utilizzare quella adatta all’endianness del tuo radiocomando). La funzione adatta automaticamente l’endianness del dato a quello del sistema SlimLine.

    In pratica ipotizzando di definire nel programma di prima una variabile Weight di tipo DINT per il valore di peso, ed ipotizzando che il radiocomando invii un dato nel formato Big-Endian dovrai scrivere.

    Ok:=BEArrayToVar(DINT_TYPE, ADR(Weight), ADR(Msg.Data[0]));

    in risposta a: Ricezione dati da radiocomando con protocollo CAN #38945
    Sergio Bertana
    Amministratore del forum

    Come riportato in questo topic per Per utilizzare il CAN occorre inizializzarlo definendo la velocità ed i filtri, tipicamente viene impostato per ricevere tutti i messaggi SysCANSetMode(CAN_125KBIT, 16#00000000, 16#00000000).

    Ora il CAN controller riceve tutti i pacchetti CAN e li memorizza in automatico in un suo buffer di ricezione sarà possibile estrarre dal buffer i messaggi con la funzione SysCANRxMsg(Mask, ID, ADR(Msg)). Naturalmente se se desidera leggere solo i messaggi con un certo ID occorre definire l’ID ed il Mask nella funzione.

    La variabile Msg deve essere di tipo SYSCANMESSAGE e se messaggio ricevuto al suo interno i campi:
    Length: Indica la lunghezza in byte del messaggio CAN ricevuto (Campo Data).
    MsgID: Ritorna l’ID del messaggio, il bit 31 è il bit di FF.
    Data: Array con i dati ricevuti (Vedi Length per la lunghezza).

    Ecco la stampa di un programma minimale per la ricezione di tutti i pacchetti CAN (Download sorgente).

    in risposta a: Perdita configurazione su dispositivi Ubiquiti #38944
    Sergio Bertana
    Amministratore del forum

    L’architettura interna dei dispositivi Ubiquiti non mi è nota ma credo che la configurazione sia memorizzata in una memoria FLASH, a quanto ne sò i dispositivi sono difficilmente apribili e non hanno ne batterie ne power CAP al loro interno. Il problema della riconfigurazione di default alla riaccensione è un problema che ho visto trattato sul forum ufficiale della Ubiquiti dove un tecnico ha risposto.

    Usually a radio resetting is caused by cabling, PoE injector, or noise interference. Replace the cable or use shielded cable if you aren’t already and try to swap out the PoE injector if you have a spare. If the issue persists, as a last resort, you can disable remote reboot in the ‘System’ tab of airOS (put keep in mind to perform a reset if this option is disabled, you need physical access to the radio).

    In pratica inputano il problema a possibili interferenze sul cavo o ad un problema sul PoE injector, da altre parti ho trovato anche un cliente con lo stesso problema che aveva infiltrazioni di acqua nel cavo ethernet. Ricordo che per comodità il pulsante di reset è remotato tramite il cavo sul PoE injector quindi è possibile che disturbi sul cavo o  peggio contatti generati dall’acqua possano simulare un comando di reset e quindi forzino la riconfigurazione del prodotto a default.

    Per provare seguirei il consiglio di disabilitare il comando di reset (Screenshot). Per riportare il sistema alla configurazione di default si dovrà agire dul pulsante di Reset ma attenzione occorre ricordarsi dell’indirizzo IP e delle credenziali di accesso.

    in risposta a: Connessione sensore fumi con termometro IP #38943
    Sergio Bertana
    Amministratore del forum

    Aggiungo che l’STE Plus può essere connesso al portale gratuito SensDesk (Topic) e tramite l’acceso alla dashborad del portale è possibile monitorare lo stato di tutti i sensori (Screenshot).

    in risposta a: Connessione sensore fumi con termometro IP #38942
    Sergio Bertana
    Amministratore del forum

    Il termometro IP HWg-STE Plus dispone di 2 ingressi digitali a cui è possibile connettere contatti puliti, nel tuo caso puoi connettere il contatto in uscita del sensore di fumi (Vedi sito del produttore). Ti allego uno schema di connessione con i codici di ordinazione dei prodotti.

    Connessi i sensori ai due ingressi digitali è possibile da pagina web configurare il testo abbinato all’ingresso e lo stato di normale e di allarme. Indicando in quale condizione l’STE deve inviare la mail di allarme (Screenshot). In presenza della condizione indicata in Alarm Alert, verrà inviata una email con lo stato del sistema (Screenshot).

    in risposta a: Configurazione I/O dopo cambio target su progetto #38941
    Sergio Bertana
    Amministratore del forum

    Il messaggio “__not_found__” (Screenshot) appare nella configurazione PLC quando non è stato scelto nessun target. Ed è ovvio il motivo, CODESYS non può presentare alcuna configurazione hardware in quanto non conosce su che tipo di hardware si sviluppa il progetto. Questione diversa invece quando si cambia il tipo di hardware su un progetto già sviluppato, cambiando target si perde la configurazione PLC, gli eventi associati e le librerie che nel nuovo target non esistono piu. Ecco le informazioni che riporta CODESYS.

    If you change the Target System of an existing CoDeSys Project there are three things which you have to consider:

    1) After changing the Target System the PLC Configuration gets lost. Open the PLC Configuration (in the Ressource Tab) and click on the menu item “Standard Configuration” in the “Extras” menu. Then the PLC Configuration of the new Target System will be loaded.

    2) All Registered Events will get lost. So if you are using Events in your project, you have to assign the event function afresh after changing the target system.

    3) Remove all “old” Libraries in the Library Manager which are left over from the Target System before and does not exist in the new Target System.

    In pratica dopo aver cambiato il target nel progetto, bisogna aprire PLC Configuration (nel Tab Ressource), scegliere nel menù in alto la voce Extras, e clickare sul menù Standard Configuration (Vedi screenshot). In questo modo la configurazione standard del target selezionato verrà caricata.

Stai visualizzando 15 post - dal 2,521 a 2,535 (di 4,374 totali)