Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumIn questo topic trovi alcune informazioni e links verso altri topics utili. Ma in merito al tuo problema, ipotizzando di salvare ogni 100 mS un record del tipo HH/MM/SS,m VV.VVV; avresti una 20 di caratteri ad ogni salvataggio che ammontano a 200 al secondo 720Kbytes all’ora oltre 17Mb al giorno.
Per evitare di avere file troppo grandi ti consiglierei di creare un file per ogni ora e magari di mettere nel file solo i dati nominando il file con il valore di ora. Ad esempio nel programma SimplyLogger (Stampa) è stato fatto qualcosa di molto simile a quello che ti serve (Download programma).
Sergio Bertana
Amministratore del forumPurtroppo la porta LAN2 del pannello non può far transitare dati verso la porta LAN1, ora se vuoi che il PLC possa connettersi ad Internet ed eventualmente collegarsi lui stesso ad un server NTP lo dovresti connettere alla stessa rete connessa alla porta LAN1 (Utilizzando uno switch).
In alternativa puoi utilizzando l’oggetto DataTransfer a base tempo del pannello trasferire i valore di data/ora dal pannello al PLC proprio come indicato nei posts precedenti di questo topic.
Sergio Bertana
Amministratore del forumRedando il manuale abbiamo utlizzato il file di descrizione della nuova versione del sistema operativo, versione a cui stiamo lavorando da un pò…
Così per errore ci siamo ritrovati con un manuale che riporta informazioni più nuove rispetto a quelle atttualmente disponibili. Purtroppo non ho ancora una previsione sulla data di rilascio della nuova versione del sistema opearativo.
Sergio Bertana
Amministratore del forumNon ho l’inverter ma utilizzo un nostro sistema SlimLine connesso in ethernet con protocollo Modbus TCP, ed ho fatto la stessa tua prova. Ecco la mia macro
macro_command main()
unsigned int Hzinverter
float HZGetData(Hzinverter, “SlimLine”, 3x, 40008, 1)
HZ=Hzinverter
HZ = HZ/100
SetData(HZ, “Local HMI”, LW, 210, 1)
end macro_commandCome vedi unica differenza è l’indirizzo di lettura della variabile Hzinverter.
Però nota che ho appoggiato il valore Hzinverter nella variabile HZ (Di tipo float) prima della divisione in questo modo considero anche i decimali. Se eseguo subito la divisione per 10o sul valore intero come hai fatto tu si perdono i decimali. Ecco lo screenshot del programma MacroTest simulato, ti allego anche il progetto con i sorgenti.
Sergio Bertana
Amministratore del forumIn effetti in Toolly viene detto di rimuovere il jumper e non di posizionarlo in OFF. Ma la posizione di OFF in realtà consiste in due pin non connessi ad alcun segnale che sono stati posti solo come magazzino di appoggio del jumper.
Quindi il rimuoverlo o il posizionarlo su OFF si equvalgono funzionalmente.
Febbraio 4, 2019 alle 2:18 pm in risposta a: Inviare dati JSON in GET o POST ad un servizio REST #46559Sergio Bertana
Amministratore del forumLa domanda è un pò fuori topic, qui stiamo parlando di inviare e ricevere stringe JSON dal PLC che agisce come client (Agisce come un browser) verso un servizio REST che è un server HTTP.
A te invece serve che il PLC agisca da server HTTP ed il tuo SCADA è un client, in questo caso puoi utilizzare la tecnica delle pagine dinamiche vedi questo topic.
Anche se solitamente gli SCADA dialogano con i PLC con protocolli di comunicazione diversi, e noi a questo scopo gestiamo standard il protocollo Modbus.
Sergio Bertana
Amministratore del forumSul manuale di EasyBuilder sono riportate tutte le possibilità offerte dal linguaggio macro (Estratto manuale). Nel tuo caso la funzione POW esegue quello che ti serve, ecco l’estratto del manuale.
POW(source1, source2, result)
Calculate source1 to the power of source2.
source1 and source2 can be a constant or a variable.
result must be a variable.
source1 and source2 must be a nonnegative value.Sergio Bertana
Amministratore del forumLa funzione SysRMAlloc è disponibile sia sui sistemi basati su ARM che sui sistemi basati su Cortex.
Sui sistemi ARM (Software SFW184****) si hanno a disposizione 16KBytes di memoria, sui sistemi Cortex (Software SFW198****) si hanno a disposizione 32KBytes di memoria. Ricordo che l’area di memoria è utilizata anche dal sistema operativo quindi la dimensione disponibile per il programma utente è una parte della memoria totale.
Sui sistemi ARM dalla versione SFW184B090, e sui sistemi Cortex dalla versione SFW198C000 la funzione SysRMalloc provvede automaticamente ad inizializzare a 0 la memoria allocata.
Sergio Bertana
Amministratore del forumLa visualizzazione delle cifre decimali non è dinamica, quindi la soluzione più veloce è usare una macro, leggere i 2 valori e poi in base al valore di scala dividere per 10-100-1000 ecc… quindi visualizzare il risultato.
Sergio Bertana
Amministratore del forumUn’idea che mi viene in mente è gestire un ricettario per ogni sottoprogramma e poi nel ricettario di commessa andranno caricati i riferimenti ai vari sottoprogrammi.
Però per fare questo devi operare con le macro, non c’è la possibilità di farlo direttamente dalla gestione del ricettario.
Gennaio 28, 2019 alle 1:10 pm in risposta a: Inviare dati JSON in GET o POST ad un servizio REST #46516Sergio Bertana
Amministratore del forumIl FB RESTClient non è trasparente, il FB aggiunge ai dati delle ulteriori informazioni che sono utilizzate per controllare il dialogo con il server. In pratica viene aggiunto un identificativo di messaggio una versione di messaggio ed il numero di reinvio in caso di errore.
Ma quello che ti serve lo puoi tranquillamente realizzare utilizzando il FB HTPClient che può gestire sia richieste GET che PUT e POST. Ma attenzione al momento non è gestito l’https, quindi se il server REST accetta anche richieste HTTP lo puoi sicuramente gestire. Ecco un esempio di richiesta GET:
HTTPRq.Method:=0; (* Request method, GET *) HTTPRq.HostAddress:=ADR('webhook-service.photoforse.online'); (* Main coordinator *) HTTPRq.HostName:=HTTPRq.HostAddress; (* Hostname *) HTTPRq.HostPort:=80; (* Server port *) HTTPRq.Page:=ADR('webhooks/custom/6eb07212-b85c-4ca1-866f-0521e3af07b9'); (* Web page *) HTTPRq.Request:=ADR('idAzienda=1$26idOrdine=12345'); (* Request string *) HTTPRq.DBSize:=256; (* Data buffer size *) HTTPRq.Timeout:=10000; (* Execution timeout *)Sergio Bertana
Amministratore del forumCon l’ultima versione di LogicLab PCK033I000, Pacchetto installazione suite IEC61131-3 Vers. 3.0.0 (LogicLab Ver. 5.8.0.17) l’operazione funziona. Abbiamo clienti che la utilizzano normalmente e per ulteriore scrupolo ho anche provato personalmente.
Per eseguire l’upload hai due soluzioni usare la procedura di Import project from target selezionando il protocollo Modbus 2.0 e collegandoti con lo SlimLine.
In alternativa ti connetti in FTP con lo SlimLine e scarichi dalla cartella C:/Plc il file Project.rsm, poi da LogicLab apri il progetto selezionando come tipo file rsm.
Non capisco quale possa essere il tuo problema, il tuo progetto era protetto da password ? eventualmente puoi inviare il file rsm (Scaricato in FTP) a noi oppure al supporto Axel per vedere se è possibile aprirlo.
Sergio Bertana
Amministratore del forumVediamo le diverse possibilità.
Potresti allocarti un array di memoria con l’attributo RETAIN (Massima dimensione 1 KByte), ed a ogni loop di programma (O solo su variazioni) copiare il contenuto della memoria da DB100.0 a DB100.xxx in questo array, puoi usare la funzione Sysmemmove. Ed alla accensione fare l’operazione opposta. Se vuoi eseguire la copia solo su variazioni puoi usare il FB BufferModified per il controllo.
Usando sempre l’area non ritentiva della DB100 puoi copiarla su di un file su disco utilizzando il FB FileMemoryDump. In questo caso conviene eseguire la copia solo sulle variazioni. Poi alla accensione esegui la copia inversa da file in memoria.
Puoi allocare un array in memoria non ritentiva della dimensione che ti serve e poi sempre con il FB FileMemoryDump trasferirlo su file come detto precedentemente. In questo caso per poter raggiungere questo array che non si trova in DB100 da Modbus devi utilizzare il FB ModbusSlave_v1 agganciandolo ad un FB TCPServer istanziato appositamente. Naturalmente dovrai utilizzare un’altra porta TCP non la 502.
Sergio Bertana
Amministratore del forumSi l’operazione è equivalente, ma il problema non è nello SlimLIne, il problema è nel tool LogicLab, la versione che hai tu probabilmente ha un bug e non riesce ad aprire il file .rsm.
Ti consiglio di scaricare dal nostro sito l’ultima versione ed eseguire l’upgrade. Con questa versione il problema dovrebbbe risolversi.
Sergio Bertana
Amministratore del forumQuello che hai fatto è corretto, ma avendo formattato con FAT_32 puoi usare solo nomi di files da 8+3 caratteri tutto in maiuscole.
Non è che nel tuo programma utilizzi nomi scritti in maiuscole/minuscole magari di 14 caratteri ? prchè per poterli utilizzare devi formattare in FAT_32_ELS.
-
AutorePost