Vai al contenuto

Sergio Bertana

Risposte nei forum create

Stai visualizzando 15 post - dal 961 a 975 (di 4,309 totali)
  • Autore
    Post
  • in risposta a: Variabili ritentive su Raspberry con LogicLab #60690
    Sergio Bertana
    Amministratore del forum

    Si 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.

    in risposta a: Indirizzo IP gateway con DHCP Server attivo #60686
    Sergio Bertana
    Amministratore del forum

    Se 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.

    in risposta a: Configurazione HWg-SMS-GW3 gateway SMS #60684
    Sergio Bertana
    Amministratore del forum

    Oltre 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
    in risposta a: Configurazione HWg-SMS-GW3 gateway SMS #60683
    Sergio Bertana
    Amministratore del forum

    Utilizzando 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:\>
    in risposta a: Configurazione HWg-SMS-GW3 gateway SMS #60682
    Sergio Bertana
    Amministratore del forum

    Il 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>
    in risposta a: Comandi AT su Ethernet con connessione TCP/IP #60681
    Sergio Bertana
    Amministratore del forum

    Il 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).

    in risposta a: Indirizzo IP gateway con DHCP Server attivo #60676
    Sergio Bertana
    Amministratore del forum

    Effettivamente 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.

    in risposta a: Utilizzo del timer in un programma #60673
    Sergio Bertana
    Amministratore del forum

    Elsist 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.

    in risposta a: Utilizzare FB HttpClient per connessione in HTTPS #60669
    Sergio Bertana
    Amministratore del forum

    Stiamo 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.

    in risposta a: Visualizzare su pagina web stato variabili usando puntatori #60661
    Sergio Bertana
    Amministratore del forum

    Essendo 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.

    in risposta a: Protocollo Ethernet/IP su serie cMT #60652
    Sergio Bertana
    Amministratore del forum

    Premesso 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.

    in risposta a: Connessione a webserver remoto tramite blocco HTTP codesys #60646
    Sergio Bertana
    Amministratore del forum

    Purtroppo 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.

    in risposta a: Protocollo Ethernet/IP su serie cMT #60643
    Sergio Bertana
    Amministratore del forum

    ODVA è 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.

    in risposta a: Lettura scrittura file su USB o SDCard #60574
    Sergio Bertana
    Amministratore del forum

    Intanto 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.

    in risposta a: Trasferimento variabile REAL da S7 a CMT-SVR #60539
    Sergio Bertana
    Amministratore del forum

    Non 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.

Stai visualizzando 15 post - dal 961 a 975 (di 4,309 totali)