Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Giugno 16, 2015 alle 9:34 am in risposta a: Collegamento tramite radiomodem DL169 tra sistemi SlimLine #38969
Sergio Bertana
Amministratore del forumDa quello che hai scritto sembra tutto a posto, se ho ben capito hai provato i due radiomodem in connessione RS232 e tra di loro comunicano. Di fatto i radiomodem vengono forniti di default già per comunicare tra loro in RS232.
Hai realizzato un programma su di uno SlimLine dove immagino hai utilizzato il blocco funzione ModbusMaster e come dici collegando questo SlimLine con un altro con un cavo cross i due dialogano. Quindi se questo è vero vuol dire che il programma sullo SlimLine master è corretto. Non mi dici se sullo SlimLine slave utilizzi il modbus slave gestito dal sistema operativo o se hai realizzato un programma con un FB ModbusSlave.
Ora il dubbio che mi viene è questo i radiomodem hanno come modo seriale di default 9600, n, 8 mentre lo SlimLine ha 115200, e, 8. Hai provveduto ad impostare il corretto baud rate ed eliminato la parità sullo SlimLine, visto che il radiomodem al massimo arriva a 38400 ?
Per modificare i parametri seriali sullo SlimLine puoi accedere da pagina web, oppure utilizzare da programma il FB SetSerialMode, ma in questo caso sei obbligato ad utilizzare il FB ModbusSlave. Attenzione se modifichi il baudrate ricordati di adattare il valore di IFTime nel FB Modbus.
Sergio Bertana
Amministratore del forumThe Netlog III CPU module is sold as OEM module it’s the CPU module used on the Netlog III programmable controller. It has the same architecture and shares all the features you can find in the SlimLine LogicLab family products. This means that you can load and execute on it all the example programs available on this forum and developped for the SlimLine products. About your questions.
1) Yes it has a real time clock and a power CAP is capable to power it without power supply for about 1 month. The operating system automatically manages the time zone and daylight saving. A FB for SNTP syncronization is also available (See topic).
2) The operating system manages 4 different tasks Boot: Executed at the startup, Slow: Executed every 10 mS, Fast: Executed every 1 mS, Back: Executed on backgrond. The execution time of Slow and Fast tasks can be modified by program (See topic). You can add to every task all programs (Written in all 5 languages) you want.
3) Yes sure, all libraries are documented in the IEC61131-3 programming Manual. On the forum you can find some example of connection with commercial I2C devices (See topic) and other equipments.
4) No the C code is not available. I remind to you that the ST (Structured Text) language is similar to C and has pointer, data structures, bidimensional arrays, strings and many of statements like IF, FOR, CASE, WHILE tipicals of C language.
5) If you are registered to the site you can see the price directly. If you are not registered near every part code there is an € sign, by clicking on it the site automatically will send to you by email an quotation.
Sergio Bertana
Amministratore del forumPer collegare i moduli di espansione al modulo CPU serve un CBL074*000 per ogni modulo di espansione. Sull’ultimo modulo della serie sebbene possa essere utilizzato anche il CBL074*000 si può utilizzae ll CBL045*000 che a differenza dell’altro termina non lasciando connettori scoperti.
L’esempio è estremamente semplice, un FB SysGetAnInp acquisisce il valore di tensione analogica, e poi utilizzando il blocco di comparazione attivi l’usciti se il valore acquisito supera il valore di confronto (Ecco lo screenshot).
Giugno 15, 2015 alle 6:26 am in risposta a: Configurare le impostazioni di rete (Indirizzo IP) #38961Sergio Bertana
Amministratore del forumI 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.
Sergio Bertana
Amministratore del forumNon 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.
Sergio Bertana
Amministratore del forumNon è 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 questo, questo 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.
Sergio Bertana
Amministratore del forumCome 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.
Sergio Bertana
Amministratore del forumImmagino 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.
Sergio Bertana
Amministratore del forumL’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.
Sergio Bertana
Amministratore del forumVengo 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.
Sergio Bertana
Amministratore del forumL’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 REALMa 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.
Sergio Bertana
Amministratore del forumOperazione 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 LgtLgt=StringLength(inizio[0])
inizio[Lgt]=13 // CR
Lgt=Lgt+1
inizio[Lgt]=10 // LF
Lgt=Lgt+1
OUTPORT(inizio[0], “Free Protocol”, Lgt)Sergio Bertana
Amministratore del forumIntanto 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]));
Sergio Bertana
Amministratore del forumCome 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).
Sergio Bertana
Amministratore del forumL’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.
-
AutorePost