Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumSi certo, la gestione delle variabili ritentive è gestito dal run time LogicLab, attualmente abbiamo reso ritentiva un’area di 2048 bytes per le variabili definite RETAIN ed i soliti 2048 bytes nell’area DB100 da 2048 a 4095.
Siccome il backup è eseguito su di un file per evitare di stressare l’SDCard viene eseguito ogni 20 secondi.
Sergio Bertana
Amministratore del forumSe guardi attentamente l’esempio riportato nel manuale riferito al FB CLIClient, vedrai che il programma si connette all’localhost porta 23.
TCPClient.PeerAdd:=ADR('127.0.0.1'); //Peer address TCPClient.PeerPort:=23; //Peer port
Quindi lo SlimLine emula una connessione Telnet (Proprio come faresti con Toolly) a se stesso e dopo essersi autenticato invia il comando IFConfig. Il comando ritorna tutte le informazioni di connessione e la prima occorrenza del campo Gateway, riporta proprio l’indirizzo IP assegnato dal server DHCP. Ecco il codice che esegue l’invio del comando e acquisisce l’indirizzo.
// --------------------------------------------------------------------- // SEND COMMAND // --------------------------------------------------------------------- // Send the RMalloc statistics request command, every answer row ends // with so they are wait. 10: CLI.CStr:=ADR('IFConfig$r'); CLI.PStr:=ADR('[Admin]>'); CLI.EAStr:=NULL; CLI.CSend:=TRUE; IF NOT(CLI.EOL) THEN RETURN; END_IF; CLI.CSend:=FALSE; //Command send // Reads the gateway IP. IF NOT(SysVsscanf(SysStrFind(CLI.ABPtr, ADR('Gateway:............ '), FIND_GET_END), ADR('%s'), STRING_TYPE, ADR(Gateway))) THEN ErrorNr:=50; END_IF; CaseNr:=0; //Program case
Includo il progetto WhoIsTheGateway per il download.
Sergio Bertana
Amministratore del forumOltre ad inviare SMS è anche possibile eseguire la chiamata, facendo suonare il telefono, questo può essere comodo per avvertire il destinatario dell’arrivo di un SMS oppure per gestire un heartbeat di funzionamento.
Il chiamato sentirà squillare il telefono e vedrà il numero del chiamante, se non risponde alla chiamata questa dopo alcuni secondi viene interrotta. In caso di risposta la chiamata viene interrotta immediatamente.
Per eseguire la chiamata si utilizzanlo le stesse tecniche viste per l’invio di SMS ma si sostituisce il comando con Call e non si definisce il testo.
http:\\xxx.xxx.xxx.xxx\values.xml?Cmd=Call&Nmr=00420123456789
Sergio Bertana
Amministratore del forumUtilizzando il programma Wget è possibile inviare SMS direttamente da linea di comando ecco un esempio.
C:\>wget "http://192.168.1.99/values.xml?Cmd=SMS&Nmr=12345678&Text=Hello World!" --2021-07-28 10:00:38-- http://192.168.1.99/values.xml?Cmd=SMS&Nmr=12345678&Text=Hello%20World! Connecting to 192.168.1.99:80... connected. HTTP request sent, awaiting response... 200 Ok Length: unspecified [text/xml] Saving to: 'values.xml@Cmd=SMS&Nmr=12345678&Text=Hello World!' values.xml@Cmd=SMS&Nmr=335217 [ <=> ] 118 --.-KB/s in 0s 2021-07-28 10:00:38 (2,07 MB/s) - 'values.xml@Cmd=SMS&Nmr=12345678&Text=Hello World!' saved [118] C:\>
Sergio Bertana
Amministratore del forumIl modo più semplice per inviare SMS utilizzando HWg-SMS-GW3 Gateway SMS è utilizzando il metodo HTTP GET da un comune browser.
L’HTTP GET è un metodo in cui tutti i parametri vengono passati direttamente nell’URL, viene spesso utilizzato per applicazioni semplici perché consente un semplice debug ed è facile da codificare. Da un browser si invoca semplicemente l’indirizzo del dispositivo con i parametri necessari, esempio:
http:\\xxx.xxx.xxx.xxx\values.xml?Cmd=SMS&Nmr=00420123456789&Text=Hello World!
Si riceverà in risposta un documento xml del tipo:
<?xml version="1.0" encoding="utf-8"?> <Root> <QueueAddResponse> <Rslt>1</Rslt> <ID>1</ID> </QueueAddResponse> </Root>
Sergio Bertana
Amministratore del forumIl modo più semplice ed economico per gestire l’invio di comandi AT da connessione Ethernet è di utilizzare un convertitore Ethernet/Seriale come questo abbinato ad un modem come questo.
Ma se vuoi avere una soluzione più compatta puoi utilizzare un router come ad esempio WL-R220L che grazie al suo sistema operativo OpneWRT permette di essere configurato per la gestione dei comandi AT da connessione ethernet (Vedi topic).
Se vuoi invece un sistema di invio SMS gestibile da richieste HTTP puoi utilizzare HWg-SMS-GW3 interamente gestibile da interfaccia web, basterà inviare al dispositovo richieste HTTP in GET od in POST con il numero a cui inviare ed il testo del messaggio da inviare. Una comoda pagina web permette di inviare messaggi direttamente da browser (Vedi topic).
Sergio Bertana
Amministratore del forumEffettivamente come dici nella pagina web occorre sempre definire dei valori per i campi IP, Mask, Gateway anche se hai selezionato l’acquisizione da server DHCP.
In merito al valore ritornato dalla funzione SysOSIDValue con il valore di OSID, OSID_ETH0_GATEWAY, effettivamente viene ritornato il valore definito da pagina web e non quello acquisito dal server DHCP. Esistono altri OSID che al momento sono gestiti solo da pagina web per le informazioni che ti occorrono. Rilasceremo in prossime versioni del firmware questi nuovi OSID.
Come workaround per il tuo problema ti consiglio di dare una occhiata al FB CLIClient, come vedi dall’esempio è possibile realizzare un semplice programma che si connette in telnet a localhost ed inviando il comando IFConfig acquisisce tutte le informazioni che ti occorrono.
[Admin]> ifconfig ------------------------------------------------------------------------[eth0]-- Actual settings: Description:........ On board ethernet controller Status:............. Ready (DHCP) Linked:............. 1 Up:................. 1 MAC address:........ 70-B3-D5-4C-97-29 IP address:......... 192.168.1.24 Subnet mask:........ 255.255.254.0 Gateway:............ 192.168.0.1 MTU:................ 1500 DNS Prim. IP addr.:. 192.168.0.3 DNS Sec. IP addr.:.. 8.8.8.8 DHCP server:........ 192.168.0.3 DHCP lease time:.... 172800 seconds DHCP expire time:... 172774 seconds Config settings: MAC address:........ 70-B3-D5-4C-97-29 IP address:......... 1.1.1.1 Subnet mask:........ 255.255.255.0 Gateway:............ 1.1.1.1 MTU:................ 1500 DNS Prim. IP addr.:. 8.8.8.8 DNS Sec. IP addr.:.. 8.8.4.4 DHCP:............... 1 DHCP on DNS:........ 1
Tutti i valori della sezione Actual settings sono quelli assegnati dal server DHCP.
Sergio Bertana
Amministratore del forumElsist per l’ambiente di sviluppo LogicLab mette a disposizione svariate librerie con funzioni e blocchi funzione per gli usi più svariati, l’elenco completo diviso per categorie si trova qui.
Esistono diversi FB per la gestione timer, il piu utilizzato cioè il timer ritardato alla eccitazione si chiama eTON e questa è la sua pagina di manuale. Come vedi dal manuale il FB si trova nella libreria eLLabStdLib, quindi puoi collegare la libreria oppure importare l’oggetto nel tuo progetto (In questo tutorial video spieghiamo la differenza).
Nel manuale in fondo alla pagina si trovano anche degli esempi di utilizzo del timer in diversi linguaggi, l’esempio in linguaggio ladder và ricreato nel tuo progetto, mentre gli esempi nei linguaggi testuali possono essere direttamente copiati ed incollati nel tuo progetto (Vedi spiegazione).
Ma se noti in testa ad ogni esempio è indicato il programma dimostrativo che lo contiene (Per il timer è il Ptp115).
Visto che stai iniziando con LogicLab ti consiglio di guardare i nostri video tutorial.
Luglio 23, 2021 alle 2:55 pm in risposta a: Utilizzare FB HttpClient per connessione in HTTPS #60669Sergio Bertana
Amministratore del forumStiamo lavorando sulla crittografia SSL, in pratica stiamo modificando tutti i FBs che gestiscono protocolli per permettere di inserire il FB SysTLSClient tra il FB di gestione connessione e quello di gestione protocollo permettendo così connessioni criptate sui vari protocolli HTTP, SMTP, MQTT, FTP, ecc.
Sul manuale on-line che tu hai citato c’è già indicata questa possibilità sul protocollo HTTP ma al momento non l’abbiamo ancora rilasciata.
Nella roadmap rilasceremo il FB SysTLSClient iniziando dal modulo SlimLine basato su Raspberry, speriamo di rilasciarlo prima del periodo di ferie estive.
Stiamo valutando il porting anche sui moduli basati su processori Cortex ma abbiamo problemi di velocità nella esecuzione dei calcoli, quindi al momento non siamo ancora in grado di indicare se sarà possibile avere il porting e se si, quando sarà disponibile.
Luglio 23, 2021 alle 10:52 am in risposta a: Visualizzare su pagina web stato variabili usando puntatori #60661Sergio Bertana
Amministratore del forumEssendo i nostri sistemi basati su architettura a 32 bits un puntatore (Pointer, indicato come @xxxx) occupa 4 bytes di memoria e se allocato in DB100 và allocato sempre ad indirizzi divisibili per 4.
Come correttamente hai fatto notare il server web agisce solo su variabili allocate in DB100, ma se tu allochi un pointer il server web non ha previsto la visualizzazione del valore della variabile a cui il pointer punta. Quindi se lo visualizzi come DWORD vedresti l’indirizzo della variabile ma non il suo valore.
Quindi il modo corretto è di appoggiare gli ingressi su variabili BOOL. Ti consiglio di allocare un array di variabili BOOL nella DB100 e poi con un semplice ciclo FOR potrai trasferire dall’array di pointer alle variabili in DB100. E così saranno accessibili da web server agli indirizzi 100.32, 100.33, ecc.
VAR i : UDINT; (* Auxiliary variable *) G_DoorStatus : ARRAY[0..31] OF @BOOL; (* Door status BOOL pointer *) A_DoorStatus AT %MX100.32 : ARRAY[0..31] OF BOOL; (* Door status BOOL variable *) END_VAR FOR i:=0 TO (SIZEOF(G_DoorStatus)/SIZEOF(G_DoorStatus[0]))-1 DO A_DoorStatus[i]:=@G_DoorStatus[i]; END_FOR;
Come in tutti isistemi PLC gli I/O sono gestiti in immagine di processo, e siccome il task real time è lo slow l’immagine di processo è eseguita in task slow. Quando ti riferisci a variabili di I/O in task diverse dall slow LogicLab crea automaticamente una immagine di processo virtuale per garantire che lo stato delle variabili sia costante per tutta l’esecuzione del task.
Se ti riferisci a variabili di I/O con il loro indirizzo (Esempio %IX0.0) in task diverse, se visualizzi in debug l’indirizzo vedrai che per lo stesso I/O si hanno indirizzi diversi per ogni task sarà LogicLab a trasferirne il valore automaticamente. Ma attenzione il trasferimento del valore nella immagine di processo virtuale delle task diverse dalla slow avviene solo se LogicLab si accorge che la variabile è utilizzata quindi vedi lo scenario.
VAR MyBOOL : BOOL; (* BOOL value *) MyBOOLADR : @BOOL; (* BOOL pointer *) END_VAR MyBOOL:=%IX0.0; //LogicLab si accorge che è usata MyBOOLADR:=ADR(%IX0.0); //LogicLab non si accorge che è usata
Quindi affinchè il tuo programma funzioni ti consiglio di eseguirlo in task slow.
Sergio Bertana
Amministratore del forumPremesso che non conosco l’Ethernet/IP in quanto tutti i nostri prodotti lavorano con protocollo Modbus/TCP ho tentato di capirne un po di più e ti consiglio di fare queste prove. Intanto imposta un dispositivo con protocollo ODVA General Ethernet/IP (Implicit messaging).
Come vedi dallo screenshot questa impostazione ti permette di definire i registri con il loro indirizzo. Ora riferendomi al manuale vedo che il peso lordo è riportato nel formato Big endian nei bytes 3, 4, 5, 6 (Indirizzi 1, 2 registri input a 16 bit) quindi quando imposti l’oggetto di vsualizzazione numerica definirai nel campo indirizzo il valore Input, 1 e come formato 32bit unsigned, potrebbe anche essere 32bit signed.
Ora potrebbe esserci un problema, il formato considerato dal pannello potrebbe essere Little endian e quindi vedresti un numero errato. Allora dovrai scomporre il valore a 32 bits in 2 interi a 16 bits, leggi il registro input 1 e input 2 e con una macro componi il valore a 32 bits moltiplicando il valore del registro input 1 per 65536 sommando poi il valore del registro 2.
Luglio 21, 2021 alle 8:36 am in risposta a: Connessione a webserver remoto tramite blocco HTTP codesys #60646Sergio Bertana
Amministratore del forumPurtroppo non ho esperienza cosi approfondita di CODESYS, per i nostri prodotti programmabili con LogicLab abbiamo sviluppato librerie apposite sia per il DNS (Vedi DNSRequest) che per le richieste HTTP (Vedi HTTPClient).
Da quello che scrivi vedo un possibile errore nell’URL che passi al blocco DNS_Client, credo che devi indicare solo l’URL senza il resto https:/ /httpbin.org.
Quando ti colleghi al tuo webserver intendi un web server pubblico e quindi raggiungibile da internet oppure privato aziendale, perchè in tal caso meglio usare l’IP diretto.
Sergio Bertana
Amministratore del forumODVA è l’organizzazione che definisce le regole del protocollo Ethernet/IP, quindi il protocollo è corretto. Naturalmente è importante che il sistema di pesatura sia conforme alle specifiche del protocollo Ethernet/IP cosi come definite da ODVA. Ma siccome mi dici che hai fatto prove e funziona direi che non ci sono problemi.
Ora il tuo sistema di pesatura avrà una tabella con gli indirizzi ed i tipi delle variabili a cui fare riferimento, se usi una connessione di tipo ODVA General Ethernet/IP (Implicit messaging) potrai accedere direttamente alle variabili definendone l’indirizzo.
Sergio Bertana
Amministratore del forumIntanto non formattare il disco C: quello interno al sistema perchè contiene i dati di configurazione oltre alle pagine web. Sia che utilizzi l’SDCard che il disco USB (In questo caso garantiamo il funzionamento solo se utilizzi il Lettore/scrittore micro SD-Card) devi inserire il disco a sistema spento.
Se la formattazione non ti dà errori dovresti collegandoti in FTP vedere il disco e poter trasferire dati da PC a disco e viceversa. Se questo funziona tutto è Ok.
L’esempio più semplice lo trovi nella funzione SysFfopen, l’esempio ST_SysFfopen apre il file indicato (Puoi usare un file che avrai prima trasferito in FTP) e ne legge i primi 32 caratteri. Nella stessa funzione trovi l’esempio ST_MemoryDump che permette il trasferimento di una zona di memoria su di un file sia in scrittura che in lettura. Altri esempi nella funzione StringToLogFile, o nella SysStrFind.
Ricorda che la gestione del disco deve essere messa in programmi eseguiti in task Back.Ma se hai errori nel programma collegati al sistema in Telnet e con il comando SysLog verifica che errori hai qui elenco completo errori.
Sergio Bertana
Amministratore del forumNon conoscendo il mondo Siemens ho chiesto lumi ad un ns cliente, ti giro la risposta che mi ha dato.
Se il dato è su DB occorre usare come tipo dati DBDn. Quindi nr DB+4 cifre per il registro.
Esempio DB12.DBD54 sarà 120054
Spero che ti sia di aiuto.
-
AutorePost