Risposte nei forum create
-
AutorePost
-
Sergio Bertana
Amministratore del forumScusa se ho un po corretto il tuo post riportando solo le cose essenziali, cioè la stringa da inviare al display. Nel tuo programma l’errore era che nell’utilizzare la funzione Sysfputc non hai usato il corretto file pointer. Ho corretto il tuo programma utilizzando la funzione Sysfwrite.
VAR Start : BOOL; (* Comando start *) Pulse : BOOL; (* Pulse *) i : UDINT; (* Auxiliary variable *) DData : ARRAY[0..7] OF BYTE; (* Display data *) Serial : SysSerialPort; (* Serial port management *) END_VAR // ***************************************************************************** // PROGRAM "DisplayOut" // ***************************************************************************** // Questo programma esegue l'invio di una stringa ad una stampante. // ----------------------------------------------------------------------------- // ------------------------------------------------------------------------- // INITIALIZATION // ------------------------------------------------------------------------- IF (SysFirstLoop) THEN // Inizializzo porta seriale. Serial.COM:=ADR('COM0'); //COM port definition Serial.Baudrate:=9600; //Baudrate Serial.Parity:='N'; //Parity Serial.DataBits:=8; //Data bits Serial.StopBits:=1; //Stop bits Serial.DTRManagement:=DTR_AUTO_WO_TIMES; //DTR management Serial.DTRComplement:=FALSE; //DTR complement Serial.EchoFlush:=FALSE; //Received echo flush Serial.DTROnTime:=0; //DTR On time delay (mS) Serial.DTROffTime:=0; //DTR Off time delay (mS) Serial.FlushTm:=0; //Flush time (mS) Serial.RxSize:=0; //Rx buffer size Serial.TxSize:=0; //Tx buffer size // Preparo messaggio da inviare. DData[0]:=13; //0D HEAD 1 DData[1]:=3; //03 HEAD 2 DData[2]:=1; //01 HEAD 3 DData[3]:=1; //01 ID DData[4]:=1; //01 COMMAND 1 = NEXT 2= ON DEMAND DData[5]:=1; //01 NUMERO PAGINA O NEXT SE 1 E COMMAND 1 DData[6]:=0; //00 DData[7]:=0; //00 END_IF; // ------------------------------------------------------------------------- // ESEGUO INVIO MESSAGGIO // ------------------------------------------------------------------------- // Controllo variazione comando start. IF (Start <> Pulse) THEN Pulse:=Start; //Pulse // Eseguo invio solo su fronte attivazione. IF (Start) THEN i:=Sysfwrite(ADR(DData), 8, 1, Serial.File); END_IF; END_IF; // [End of File]Sergio Bertana
Amministratore del forumAggiungo che utilizzando un nostro sistema SlimLine è possibile con il FB FPTClient eseguire il trasferimento automatico di un file da un server FTP (Esempio il pannello operatore) su di un’altro server FTP (Esempio il PC).
In fondo alla pagina di manuale si trova il programma FTPFileTransfer che esegue proprio questa operazione tra due pannelli operatore Weintek. Basta copiare ed incollare l’esempio nel proprio programma LOgicLab ed eseguirlo.
Ottobre 13, 2020 alle 10:06 am in risposta a: Trasferimento automatico dati da terminale a PC #57900Sergio Bertana
Amministratore del forumCon i pannelli iE/xE/iP puoi usare il server di stampa remota, installi il programma EasyPrinter (Lo trovi nella cartella di installazione di EasyBuilder) su di un PC in rete, tramite l’oggetto Backup puoi inviare il file direttamente al PC che lo salverà in una cartella predefinita.
Per quanto riguarda la serie CMT usando un action trigger è possibile trasferire file presenti su una USB connessa al pannello ad un server FTP di un PC in rete tramite la funzione trasferimento file.
Sergio Bertana
Amministratore del forumQuesto è dovuto al fatto che la stampante può essere gestita direttamente solo dal client principale (che in questo caso è il pannello cMT-FHD).
Come workaround puoi aggiungere nelle funzioni PLC una funzione di stampa pagina quindi inserire nella pagina del terminale un pulsante per impostare ad ON il bit di attivazione della funzione. In questo modo non utilizzi più la funzione di stampa diretta.
Sergio Bertana
Amministratore del forumLogicLab non esegue nessuna codifica unicode sui caratteri, usa la codifica ASCI in accordo con la ISO 8859-1, anche detta ISO Latin-1.
_0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ 0_| | | | | | | | | | | | | | | | | 1_| | | | | | | | | | | | | | | | | 2_| SP| ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | 3_| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | 4_| @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | 5_| P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | 6_| ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | 7_| p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | | 8_| | | | | | | | | | | | | | | | | 9_| | | | | | | | | | | | | | | | | A_| | ¡ | ¢ | £ | ¤ | ¥ | ¦ | § | ¨ | © | ª | « | ¬ |SHY| ® | ¯ | B_| ° | ± | ² | ³ | ´ | µ | ¶ | · | ¸ | ¹ | º | » | ¼ | ½ | ¾ | ¿ | C_| À | Á | Â | Ã | Ä | Å | Æ | Ç | È | É | Ê | Ë | Ì | Í | Î | Ï | D_| Ð | Ñ | Ò | Ó | Ô | Õ | Ö | × | Ø | Ù | Ú | Û | Ü | Ý | Þ | ß | E_| à | á | â | ã | ä | å | æ | ç | è | é | ê | ë | ì | í | î | ï | F_| ð | ñ | ò | ó | ô | õ | ö | ÷ | ø | ù | ú | û | ü | ý | þ | ÿ | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+Quando scrivi una stringa in LogicLab con la “à” il carattere viene convertito nel codice ascii 224 (16#E0) che è il codice inviato al server. Quando stampi con Toolly la stringa in spionaggio Toolly sostituisce i caratteri non stampabili (Da 128 a 255) con un “.”, se vuoi vedere il codice ascii del tuo carattere devi aprire con il tasto di Config la finestra di configurazione ed attivare il tick Substitute unprintable chars.
Sergio Bertana
Amministratore del forumL’errore A4099 ” spazio vars Auto esaurito”, indica che hai superato lo spazio di memoria RAM a disposizione del compilatore. Hai allocato troppe variabili o troppi blocchi funzione, devi rimodulare il programma per cercare di risparmiare memoria.
Ti ricordo che è possibile utilizzare la memoria rilocabile con le funzioni SysMAlloc e SysRMAlloc che rendono disponibile ulteriore memoria.
Mentre per l’errore “Indice non valido nel blocco dati”, non riesco a capire da cosa derivi, se mi invii la ria di programma che genera l’errore ti posso aiutare.
Ottobre 9, 2020 alle 2:30 pm in risposta a: Conversione da DWORD a REAL con lo standard IEEE-754 #57878Sergio Bertana
Amministratore del forumLa dichiarazione TO_REAL è corretta, probabilmente stai prendendo un abbaglio in quello che vedi, eccco nello screenshot un esempio di conversione.
Come vedi ho caricato il valore 12345678 nella DWORD e lo stesso valore l’ho definito nel campo You entered della utility web. Come risultato della conversione avrò che la variabile REAL RVar ha valore 12345678.0 ma se utilizzando un puntatore di tipo DWORD ne visualizzo il valore esadecimale ottengo 16#4B3C614E che è lo stesso valore visualizzato nel campo Hexadecimal Representation.
Ho utilizzato il puntatore solo per poter vedere contemporaneamente sia il valore REAL che il suo valore esadecimale, ma tu puoi anche andare nella finestra watch e selezionare la variabile e con il tasto destro del mouse scegliere Format e formato Hexadecimal per vedere la stessa cosa.
Aggiungo che se ti serve maggior risoluzione dalla versione XUnified dei sistemi abbiamo introdotto i numeri a 64 bits sia interi che floating.
Sergio Bertana
Amministratore del forumPremesso che il driver RNDIS in Windows a volte dà problemi, e che io non lo utilizzo più da molto tempo visto che ormai quasi tutti i nostri moduli CPU sono dotati di porta Ethernet. Per scrupolo ho recuperato un vecchio modulo MPS046B100 e l’ho collegato ad un PC Windows 10.
Il driver si è immediatamente installato (Screenshot), assegnato l’indirizzo IP del PC (192.168.1.10) è possibile pingare il modulo che di default ha indirizzo 192.168.1.122. Naturalmente se ci sono altre reti attive bisogna accertarsi che la nuova rete non rientri in una delle classi delle altre reti attive.
Nel tuo post non mi dici se il lLED vicino al connettore USB si illumina quando lo connetti al PC. Come consiglio posso dirti di connettere il cavo USB al PC con il modulo SlimLine già acceso ed eventualmente estrarre l connettore dal PC attendere un attimo e poi reinserirlo.
Sergio Bertana
Amministratore del forumCon il passaggio alla versione XUnified (Vedi articolo) abbiamo modificato i nomi di alcuni oggetti (Funzioni e FB) e di alcune dichiarazioni di tipo, nel tuo caso il FB ModbusMaster che stai utilizzando è quello sviluppato per i sistemi XTarget, mentre probabilmente stai sviluppando su un sistema XUnified. Cosa fare..
a) Puoi inserire nel progetto la libreria eLLabXUnifiedAdjLib che contiene l’adattamento degli oggetti alla nuova libreria.
b) Puoi sostituire il FB ModbusMaster con quello presente nella libreria eLLabObsoleteLib, che è esattamente uguale al precedente ma è stato riscritto per renderlo compatibile con la nuova architettura XUnified.
c) Puoi sostituire il FB ModbusMaster con la nuova versione (Vedi articolo) effettuando le opportune modifiche sui parametri.
E’ ovvio che per sfruttare tutte le caratteristiche della nuova architettura XUnified consiglio di utilizzare l’opzione “c”.
Sergio Bertana
Amministratore del forumCon il passaggio alla versione XUnified (Vedi articolo) abbiamo modificato i nomi di alcuni oggetti (Funzioni e FB) e di alcune dichiarazioni di tipo, nel tuo caso il file pointer da FILEP è diventato eFILEP.
Tu probabilmente stai realizzando un programma per un sistema XTarget12 ma stai utilizzando il FB HWgHTemp485 preso dalla libreria eLLabUtyLib della nuova distribuzione di LogicLab che è già convertita per l’utilizzo su sistemi XUnified.
Abbiamo previsto per questi casi e per tutti i casi in cui si desideri utilizzare gli esempi del manuale on line sui sistemi XTarget12 una libreria apposita, devi inserire nel tuo progetto la libreria eLLabXTargetAdjLib.
Sergio Bertana
Amministratore del forumPer ogni oggetto di libreria funzione o FB se fai riferimento al manuale On-Line, qui ad esempio il FB ByteToBit e qui il BitToByte, vedrai che è indicata la libreria in cui l’oggetto si trova, in questo caso entrambi si trovano nella eLLabUtyLib.
Ora puoi inserire l’intera libreria nel tuo progetto oppure come io consiglio solitamente puoi importare i soli oggetti che ti servono all’interno del tuo progetto, in questa pagina è indicato come fare.
Sergio Bertana
Amministratore del forumSi certo nel blocco funzione devi definire il parametro di ingresso con il suo tipo preceduto dal simbolo “@”, esempio @USINT, @UINT, @REAL, ecc…
All’interno del FB per agire sul parametro, esempio per incrementarne il valore usi la sintassi:
@Par:=@Par+1;
Quando passi l’indirizzo al parametro all’interno del tuo programma utilizzi l’operando ADR(MyVar).
Sergio Bertana
Amministratore del forumSi certo devi riferirti a questi bits
LB-10100 PLC 4 status (ethernet), set on to retry connection
LB-10400 PLC 5 status (ethernet), set on to retry connection
LB-10700 PLC 6 status (ethernet), set on to retry connectionTutte le informazioni sui registri di sistema si trovano nel manuale EasyBuilder al capitolo 22 System Registers.
Sergio Bertana
Amministratore del forumDopo aver cambiato IP con le word menzionate devi renderle attive con i relativi bit di conferma…
LB-10070 forced to reconnect PLC 4 (ethernet) when IP or system parameters changed on-line (set ON)
LB-10071 forced to reconnect PLC 5 (ethernet) when IP or system parameters changed on-line (set ON)
LB-10072 forced to reconnect PLC 6 (ethernet) when IP or system parameters changed on-line (set ON)
….Sergio Bertana
Amministratore del forumSi utilizzano vartiabili di IN_OUT quando il FB deve agire sul valore della variabile, le utilizzi esattamente come le variabili di ingresso e di uscita.
Se dichiari ad esempio la variabile IOVar di tipo VAR_IN_OUT, questa variabile sarà accessibile sia come ingresso al FB che come uscita.
DB_MY_FUNC.IOVar:=0; //Assegno un valore alla variabile di ingresso DB_MY_FUNC(); //Eseguo il blocco funzione Var:=DB_MY_FUNC.IOVar; //Trasferisco valore della variabile di uscita
Personalmente non utilizzo mai variabili di IN_OUT, quando il FB o la funzione devono agire sul valore di una variabile preferisco passare in ingresso su una variabile IN l’indirizzo della variabile e all’interno della funzione o del FB utilizzo il puntatore alla variabile.
-
AutorePost