Sergio Bertana
Risposte nei forum create
-
AutorePost
-
Febbraio 25, 2022 alle 11:23 am in risposta a: Suggerimenti su come eseguire il parsing di una stringa #64024
Sergio Bertana
Amministratore del forumProvo a buttare giù un’idea utilizzando lo funzioni SysStrFind e SysVsscanf. Ecco il programma StringParse, spero possa servire come base di partenza.
PROGRAM StringParse VAR Pos : @BYTE; (* Position *) Error : USINT; (* Error number *) SString : @STRING; (* Source string *) Value : ARRAY[0..3] OF USINT; (* Valiue *) END_VAR // ***************************************************************************** // PROGRAM "StringParse" // ***************************************************************************** // 01G01$1,0002,0,0,0,0,0,0#1,0001,0,0,0,0,0,0#1,000E,5,5,5,5,0,0#1,0004,0,0,0,0,0,0$71 // // Quello che dovrei ottenere è una cosa del tipo // 1,0002,0,0,0,0,0,0 // 1,0001,0,0,0,0,0,0 // 1,000E,5,5,5,5,0,0 // 1,0004,0,0,0,0,0,0 // // Per poi estrapolare // 0002 e 0 per memorizzarli come 2 e 0 // 0001 e 0 per memorizzarli come 1 e 0 // 000E e 5 per memorizzarli come 14 e 5 // 0004 e 0 per memorizzarli come 4 e 0 // ----------------------------------------------------------------------------- SString:=ADR('01G01$1,0002,0,0,0,0,0,0#1,0001,0,0,0,0,0,0#1,000E,5,5,5,5,0,0#1,0004,0,0,0,0,0,0$71'); //Source string // Cerco "$1," Pos:=SysStrFind(SString, ADR('$1,'), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=10; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[0]))) THEN Error:=11; RETURN; END_IF; // Cerco successiva "," Pos:=SysStrFind(Pos, ADR(','), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=20; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[1]))) THEN Error:=21; RETURN; END_IF; // Cerco "#1," Pos:=SysStrFind(SString, ADR('#1,'), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=30; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[2]))) THEN Error:=31; RETURN; END_IF; // Cerco successiva "," Pos:=SysStrFind(Pos, ADR(','), FIND_MODE#FIND_GET_END); //Position IF (Pos = eNULL) THEN Error:=40; RETURN; END_IF; IF NOT(SysVsscanf(Pos, ADR('%d'), USINT_TYPE, ADR(Value[3]))) THEN Error:=41; RETURN; END_IF; // ... Eccetera // [End of file]
Sergio Bertana
Amministratore del forumC’è un bug nel firmware, il comando viene accettato solo se l’utente si è loggato come User.
Quindi dovresti loggarti come utente User (User:User come credenziali di default se versione firmware precente alla SFW198E000).
Per le versioni successive occore definire un utente con credenziali User utilizzando il comando UserConfig.
Febbraio 24, 2022 alle 5:49 pm in risposta a: Connessione pannello cMT-3072XH con PLC SE TM241 in ethernet #64003Sergio Bertana
Amministratore del forumProva a disattivare l’accesso utente sul PLC.
Questa impostazione è da fare sul software Machine expert.
Sergio Bertana
Amministratore del forumAl momento sui nostri sistemi SlimLine abbiamo la possibilità di gestire solo 2 uscite PWM in hardware, le uscite sono presenti sui moduli CPU MPS054 e MPS056. L’hardware di gestione permette di generare frequenze elevate (Fino a 100Khz) ma l’hardware di uscita presente sul modulo (OptoMOS) taglia la frequenza massima a 2Khz. Per la configurazione dei PWM out gestiti in hardware è previsto il FB SysSetPWMOut.
All’interno dell’ambiente LogicLab è possibile gestire programmi in una Task fast (Eseguita ogni 1mS), il tempo di esecuzione può essere modificato e portato fino a 100uS con il FB SysSetTaskLpTime. Utilizzando il FB PWMOut è possibile gestire all’interno di questa task uscite digitali per generare segnali PWM.
4 PWM out su modulo CPU: essendo le uscite presenti sul modulo possiamo scendere con il tempo di esecuzione task a 200uS, la frequenza massima gestibile in uscita è di 2500Hz. Come si vede dallo screenshot a causa della “granulosità” della esecuzione 5000 volte al secondo si ha un errore sulla frequenza tanto più elevato quanto ci avviciniamo alla frequenza massima di 500Hz.
16 PWM out su modulo PCB124B100: Dovendo gestire il modulo di espansione (L’accesso al bus richiede ca 250 uS) non si può scendere con il con il tempo di esecuzione task. Eseguendo la task ogni 1mS la frequenza massima gestibile in uscita è di 500Hz. Come si vede dallo screenshot gestendo 16 uscite con FB PWMOut a causa della “granulosità” della esecuzione 1000 volte al secondo si ha un errore sulla frequenza tanto più elevato quanto ci avviciniamo alla frequenza massima. Il tempo di esecuzione task è di 108uS con un massimo di 430uS, quindi si potrebbe anche impostare un tempo di esecuzione task inferiore diminuendo la granulosità.
Se anzichè usare l’FB PWMOut gestisco le uscite sincrone con l’esecuzione della task ho una frequenza molto più precisa (Screenshot) ma avrò variazioni solo a multipli del tempo di esecuzione task (500, 250, 167, 125, 100, 83, 71, 62.5, 55.5, 50… Hz).
Sergio Bertana
Amministratore del forumYes it’s true there’s a mismatch in the product data.
To extend the data memory to 20 Kb it’s possible to buy the CPU program code extension option (See here).
Sergio Bertana
Amministratore del forumIn effetti è strano, mi sembra di capire che il server FTP è lo stesso per tutti i sistemi, ma i vari SlimLine sono su reti e connessioni diverse.
Non mi dici se dai sistemi che funzionano hai provato ad inviare un file di grosse dimensioni.
Potresti provare ad impostare un MTU sull aconessione ad un valore inferiore al valore di default che è 1500. Perchè molte volte nella rete dei dispositivi che gestiscono la connessione ad Internet ci sono dispositivi che hanno problemi con MTU di 1500. Per impostare l’MTU utilizza il comando IfConfig 0 -mtu 1024 (Od inferiore) vedi manuale.
Sergio Bertana
Amministratore del forumNon trovi l’errore nella pagina elenco errori perchè abbiamo rilasciato una nuova versione della libreria eLLabNetworkLib (La puoi scaricare dal sito) con una nuova versione del FB FTPClient.
L’errore 10063215 adesso è diventato 10063415 ed identifica un errore dovuto al fatto che su comando Store durante il trasferimento del file sul server il server ha chiuso la comunicazione.
Febbraio 16, 2022 alle 4:50 pm in risposta a: Configurazione dongle USB 3G/4G su Weintek cMT3072x #63929Sergio Bertana
Amministratore del forumSe il dongle USB DLink ha ultimo firmware lavora come thetering. Occorre verificare:
LW-11380 (16bit) : stop (set 0)/start (set 1) connection (USB tethering)
LW-11381 (16bit) : connection status (0:no device, 1:disconnect, 2:connected, 3:fail, 4:OS not support, 5:HMI not support) (USB tethering)
Se la LW 11381 è 1 è indica che è stata riconosciuta dal pannello, basterà mettere a 1 la LW 11380.
Sergio Bertana
Amministratore del forumUnfortunately there’s an error on the product data. The MPS056A320 has only 12Kb of data memory.
LogicLab report 8Kb because there’s 8Kb of memory available for the LogicLab’s linker and additional 4Kb are for the DB100 area. This area is preallocated in the system and it’s not reported by LogicLab.
But remind over the 12Kb there’s also additional 4Kb that can be used by allocating buffers on it with the SysMAlloc function. And up to 32Kb that can be used by allocating buffers on it with the SysRMAlloc function.
It’s possible to buy an option that extends memory up to 255Kb of code and 20Kb of data memory (16Kb for LogicLab’s linker and 4Kb for DB100 area). The availbale area for the malloc functions still remain unchanged.
Sergio Bertana
Amministratore del forumIl grosso vantaggio dell’RNDIS (Remote Network Driver Interface Specification) è che permette di avere una connessione in rete TCP utilizzando una semplice connessione USB.
Purtroppo con il RNDIS ci è già successo con alcuni PC ci siano dei problemi. In effetti sulle nuove linee di prodotti stiamo abbandonandolo spostandoci verso la connessione ethernet.
Sergio Bertana
Amministratore del forumPer vedere la versione del firmware devi connetterti in telnet alla porta 23 (Screenshot).
Accedendo in telnet hai la possibiltà di gestire tutti i comandi supportati dall’interprete comandi. Il manuale si riferisce all’ultima versione del firmware disonibile sui sistemi CortexM7 è possibile che alcuni comandi non siano supportati sul tuo sistema ARM7.
Febbraio 14, 2022 alle 3:09 pm in risposta a: Attivazione pannello diagnostico su pannello cMT #63905Sergio Bertana
Amministratore del forumSi certo è possibile abilitare la diagnostica sul programma in funzione sul pannello, direi che è stata pensata apposta per questo.
Con il Diagnoser è possibile eseguire debug sui protocolli di comunicazione con i PLC, sui pacchetti MQTT, e sopratutto è possibile eseguire il debug delle macro inserendo brakpoints sulla esecuzione.
Per utilizzarlo occorre abilitarlo nel progetto EasyBuilder menù System Parameters->Remote, poi dalla finestra di cMTViewer sarà possibile attivarlo con il tasto destro del mouse (Screenshot).
Sergio Bertana
Amministratore del forumMi puoi dire che versione hai di firmware, eventualmente prova ad eseguire l’upgrade all’ultima versione XTarget_12 o XUnified (Vedi articolo).
Ti ricordo che se usi XUnified devi probabilmente aggiornare tutti gli oggetti di libreria e/o aggiungere nel progetto la libreria eLLabXUnifiedAdjLib (Vedi articolo).
Sergio Bertana
Amministratore del forumStai scaricando sul target solo il programma compilato oppure anche i sorgenti ?
Vedi informazioni in questo topic.
Sergio Bertana
Amministratore del forumIl modello di CPU non ha porta ethernet, come ti colleghi alla CPU, utilizzi il cavo USB con l’RNDIS oppure la seriale?
Quanto ti connetti al modulo CPU su LogicLab in basso adestra compare la scritta CONNECTED in verde?
Hai impostato il sistema corretto nelle impostazioni di LogicLab Project->Select Target?
-
AutorePost