SanGer Inserito: 1 febbraio 2024 Segnala Inserito: 1 febbraio 2024 Ciao a tutti e grazie in anticipo. Ho un S7-1500 che comunica con un S7-300 con una serie di PUT e GET gestiti dall'S7-1500. Nell'S7-300 c'è una DB contenente 96 stringhe da 50 byte l'una, scritte da un pc. A me servirebbe leggere una di quelle stringhe, ma non sempre la stessa: a volte devo leggere la prima, altre la numero 40, altre l'ultima. Posso scrivere su un intero il numeor di stringa che devo andare a leggere, quindi moltiplicando l'intero per 50 posso ottenere il byte da utilizzare per il GET. Ma come faccio poi ad utilizzare questa informazione per il GET? Il tipo di dati che servono al GET è un remote, e io l'ho sempre usato assegnando ad esempio P#DB1.DBX0.0 CHAR 150 all'ADDR_1. È possibile utilizzare invece un indirizzamento dinamico? Altrimenti credo che dovrei rassegnarmi e fare una svalangata di GET per importarmi tutta la DB e poi operare su quella, ma mi chiedevo se ci fosse una soluzione più semplice. Grazie in anticipo e buona giornata
Mattia Spoldi Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 non credo che si possa fare così alla svelta, prova a ragionarla al contrario, leggi costantemente le 96 stringhe, le appoggi in una db dove avrai dichiarato un'array di 96 stringhe da 50 caratteri l'una, quando devi accedere ad una delle stringhe, invece di accedere a quelle remote, le leggi dal tuo array con la sintassi db_stringhe.stringa[indice_stringa] e dovresti essere a cavallo.
84paolo Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 Altrimenti esistono i "magici" puntatori any. Un po' difficili da usare ma funzionano
acquaman Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 Al blocco GET passi un puntatore ANY, guarda l'istruzione Variant_TO_ANY se fa al caso tuo oppure lo puoi compilare e rendere dinamico, lo avevo fatto sul 300.
SanGer Inserita: 1 febbraio 2024 Autore Segnala Inserita: 1 febbraio 2024 3 ore fa, Mattia Spoldi ha scritto: non credo che si possa fare così alla svelta, prova a ragionarla al contrario, leggi costantemente le 96 stringhe, le appoggi in una db dove avrai dichiarato un'array di 96 stringhe da 50 caratteri l'una, quando devi accedere ad una delle stringhe, invece di accedere a quelle remote, le leggi dal tuo array con la sintassi db_stringhe.stringa[indice_stringa] e dovresti essere a cavallo. Eh quella sarebbe la soluzione lunga ma semplice. Volevo sapere, per conoscenza mia e poterlo fare anche in futuro, se c'era un metodo più veloce e più "da programmatore".
SanGer Inserita: 1 febbraio 2024 Autore Segnala Inserita: 1 febbraio 2024 3 ore fa, 84paolo ha scritto: Altrimenti esistono i "magici" puntatori any. Un po' difficili da usare ma funzionano Ho provato a guardare un po' di cose ma sarò io che non ci arrivo e i puntatori li ho usati solo in C, ma non ho trovato molte risorse. Oltre al fatto che il tipo di dati Any, Remote o Puntatore me li fa mettere solo come Input e non li posso dichiarare in una DB. Non è che sai se ci sono risorse che posso guardare?
SanGer Inserita: 1 febbraio 2024 Autore Segnala Inserita: 1 febbraio 2024 2 ore fa, acquaman ha scritto: Al blocco GET passi un puntatore ANY, guarda l'istruzione Variant_TO_ANY se fa al caso tuo oppure lo puoi compilare e rendere dinamico, lo avevo fatto sul 300. Grazie, sembrerebbe quello che fa al caso mio, ma da Tia Portal (ho la V16) mi fa solo selezionare l'istruzione VARIANT_TO_DB_ANY che però si usa per ricavare il numero di una DB, quindi non sembra quello che mi serve per indicizzare il puntatore.
84paolo Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 (modificato) Devi dichiarare una variabile #Temp nell'FC di tipo ANY. Per farlo dall'fc dove lo inserisci selezioni proprietà e disabiliti accesso ottimizzato. Di seguito un esempio da me usato in TIA. il puntatore è dichiarato come prima variabile temp e quindi la LW0 Nella prima word metti 1002 che significa 10 (codice puntatore) e 02 (quantità in byte LW2 (numero di byte) LW4 (numero DB) LB6 (Codice per area DBX) Il resto devi mettere l'offset calcolato. Poi usi il puntatore al posto di dove metti l'indirizzo Modificato: 1 febbraio 2024 da 84paolo
acquaman Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 é lo stesso che avevo usato io con il 300.
84paolo Inserita: 1 febbraio 2024 Segnala Inserita: 1 febbraio 2024 Qui dal sito siemens https://support.industry.siemens.com/cs/mdm/91696622?c=44399800843&lc=it-IT
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora