Vai al contenuto
PLC Forum

Partecipa anche tu alla Live su Youtube martedì 28/01/2025 per festeggiare i 24 anni di PLC Forum

Per ulteriori informazioni leggi questa discussione: https://www.plcforum.it/f/topic/326513-28012025




Come Manipolare I Caratteri Ascii


Messaggi consigliati

Inserito:

Buongiorno ragazzi,

Il mio problema è quello di ricostruire l'informazione che mi proviene via seriale da

un driver.

La comunicazione avviene tramite il modulo CP340. I dati inviati riguardano la posizione dell'asse

e sono in formato ascii.

Quando interrogo il driver per sapere la sua posizione il dato che vado a leggere mi si posiziona

nel DB di ricezione del modulo CP340 in questo modo:

per esempio se ricevo la sopizione 30275:

DB_RICEZIONE:

INDIRIZZO NOME TIPO VALORE

0.0 DATO1 CHAR '3'

1.0 DATO2 CHAR '0'

2.0 DATO3 CHAR '2'

3.0 DATO4 CHAR '7'

4.0 DATO5 CHAR '5'

5.0 DATO6 CHAR '$R'

5.0 DATO6 CHAR '$L'

I due caratteri finali sono il carriage return [CR] e il line feed [LF]

che indicano la terminazione della stringa.

Ora se io voglio manipolare questo dato come faccio?

se per esempio voglio fare un calcolo con questo 30275 come mi muovo?

Insomma io sono abituato a fare calcoli con numeri messi dentro le word

intere a doppia lunghezza DINT, c'è il modo x visualizzare questo numero

in una DINT?

Sperò di essere stato chiaro.

Grazie,

Silver.


Matteo Montanari
Inserita:
FC 38    STRNG_I

Descrizione

Con la funzione FC 38 è possibile convertire una stringa di caratteri in una variabile con formato INT. Il primo carattere nella stringa di caratteri può essere un segno o una cifra, i caratteri successivi devono essere costituiti da cifre. Se la lunghezza della stringa di caratteri è zero o maggiore di 6 oppure si trovano caratteri inammissibili nella stringa di caratteri, non avviene alcuna conversione e il bit BIE viene azzerato. Se il risultato della conversione si trova fuori del campo numerico INT, il risultato viene limitato al valore corrispondente e il risultato binario BIE viene azzerato.

oppure

FC 37    STRNG_DI

Descrizione

Con la funzione FC 37 è possibile convertire una stringa di caratteri in una variabile con formato DINT. Il primo carattere nella stringa di caratteri può essere un segno o una cifra, i caratteri successivi devono essere costituiti da cifre. Se la lunghezza della stringa di caratteri è zero o maggiore di 11 oppure si trovano caratteri inammissibili nella stringa di caratteri, non avviene alcuna conversione ed il bit BIE viene azzerato. Se il risultato della conversione si trova fuori del campo numerico DINT, il risultato viene limitato al valore corrispondente ed il risultato binario BIE viene azzerato.

oppure

FC 39    STRNG_R

Descrizione

Con la funzione FC 39 è possibile convertire una stringa di caratteri in una variabile con formato REAL. La stringa di caratteri deve essere presente nel seguente formato:

±v.nnnnnnnE±xx
±    Segno
v  1 Posizione prima della virgola
n  7 Posizioni dopo la virgola 
x  2 Posizioni esponenti

Se la lunghezza della stringa di caratteri è minore di 14, oppure se non è strutturata come descritto sopra, allora non avviene alcuna conversione ed il bit BIE viene azzerato. Se il risultato della conversione è fuori del campo numerico REAL, il risultato viene limitato al valore corrispondente ed il risultato binario BIE viene azzerato

sai a volte basta leggere i manuali

Inserita:

Grazie keosmm!

In effetti hai ragione a volte basta leggere i manulai.

Spesso però devi sapere "cosa cercare" prima di "cercare" :D

Matteo Montanari
Inserita: (modificato)

prova invece a consultare prima tutte le routine pre caricate del programma Step7, una volta lette, se la memoria non fà acqua, più o meno te le ricordi oppure sai che ci sono. poi se non trovi quello che fà per te, allora poi fare una ricerca magari mettendo i criteri corretti, e non abbandonare dopo il primo fallimento...

(non ti mettono bendato e con la sigaretta in bocca davanti ad un plotone di esecuzione se sbagli o fallisci)

un altra cosa non nasconderti dietro frasi del genere:

Spesso però devi sapere "cosa cercare" prima di "cercare"

in quanto leggendo questo mi pento di averti dato le dritte.

pensi che quando non c'era internet non si lavorava, tutta l'automazione fatta da 20 anni a questa parte? ci si rimboccava le maniche e ci si sporcava le mani un pò di più, magari non si andava al lavoro in giacca e cravatta, aspettando che qualcuno risolvesse il problema per me o mi indicasse come raggiungere l'uscita del labirinto, ma olio di gomito e pedalare.

sia bene inteso che non c'è l'ho con te ma con tutto il sistema che si è creato

Modificato: da keosmm
Inserita:

salve a tutti,

e buon inizio di settimana!

domanda: posso collegare un sensore di temperatura con uscita 4-20 mA a un modulo di in analogico per s7 200 direttamente?

ps: ho già usato la funzione "cerca" ma credo di non aver trovato la risposta alla mia domanda...

Matteo Montanari
Inserita:
salve a tutti,

e buon inizio di settimana!

domanda: posso collegare un sensore di temperatura con uscita 4-20 mA a un modulo di in analogico per s7 200 direttamente?

ps: ho già usato la funzione "cerca" ma credo di non aver trovato la risposta alla mia domanda...

visto che l'argomento trattato in questo Post non centra nulla con la tua domanda, dovresti aprire un nuovo Post.

risposta alla tua domanda.

perchè credi siano state inventate le schede di ingresso analogiche, se non per collegare direttamente i sensori con uscita analogica?

gli ingressi analogici ne esistono di vari tipi, i principali sono:

resitenza, tensione, corrente

chiaramente un sensore con uscita analogica in corrente non potrà mai essere collegato ad un ingresso analogico in tensione o resistenza ma solamente ad un ingresso analogico in corrente

nel tuo caso specifico il sensore di temperatura con uscita 4..20mA dovrà essere collegato ad un ingresso analogico in corrente 4..20mA.

leggendo le caratteristiche tecniche della sonda (fogliettino dentro la scatola della sonda o sul sito internet del produttore consultando i manuali in linea) saprai che temperatura dovrai leggere a 4mA, a 12mA ed a 20mA.

utilizzando questi dati potrai fare la scalatura del tuo segnale di temperatura.

molti utilizzano i blocchi standard SIEMENS (SCALE FC105)

ma esistono anche altre alternative ed utilizzando la funzione cerca penso che queste alternative saltano fuori (link)

Inserita:

keosmm so benissimo che hai ragione come ho scritto immediatamente dopo la tua risposta la battuta era solo x sdrammatizzare....

Però vedo che qualcuno mi batte qui sul forum.....

lucamodica tu non sai nulla??

:D:D

Matteo Montanari
Inserita:

personalmente io mi trovo meglio a dare informazioni su come deve essere collegato un sensore ad una scheda di ingresso, notando dalla domanda che si tratta di una persona alle prime arimi, ma proprio alle prime armi se fà questo tipo di domande, piuttosto che dare consigli ad una persona più esperta che mi parla di CP340, codice ASCII, DINT ed operazioni da fare con una quota proveniente in seriale, ciò dimostra che la persona non è alle prime armi e almeno una lettura veloce, ma sempre lettura, al manuale dovrebbe averla data. inoltre la comunicazione con CP340 la deve aver presa da qualche parte (copiata anche quella??).

ripeto che non c'è l'ho con te ma con il modo di atteggiarsi a voler ricevere informazioni sul forum, come aspettare la manna dal cielo.

Inserita:

ragazzi,il forum è per scambiare idee e dare aiuto ai poveri principianti come me...

non per litigare...boni!... e ciao!

Inserita:

Per convertire asci in intero , ti consiglio di fartelo da solo

molto stupidamente ASCI 456 ( 3 byte )

prendo il primo byte in decimale , sottraggo 48 moltiplico per 100 che sommo in variabile temp 1

prendo secondo byte , sottraggo 48 e moltiplico per 10 e sommo alla var temp 1

terzo byte sottraggo 48 e sommo alla var temp 1

sposto var temp 1 su MW

chiaramente se lo indicizzi e' meglio

ciao

Luca

Inserita:

Non voglio essere noioso

se cercavi nel forum avresti trovato QUESTO

e leggendo saresti arrivato alla conclusione senza utilizzare fc 38 in maniera probabilmente più semplice.Questo chiaramente (come ha gia' detto Keosmm) dal tipo di domanda non sei uno alle prime armi.

Matteo Montanari
Inserita:

se utilizzi la funzione CERCA del Forum con parola CHIAVE "ASCII" viene fuori la lista delle discussioni dove guarda a caso c'è questa dove è spiegato, con un esempio di programma come ricavare un ascii da un intero... senza utilizzare le funzioni SIEMENS.

basta solamente eseguire le operazioni al contrario, come del resto ha anche suggerito Luca Bab.

si tratta sempre di cercare quello che si desidera trovare.

ragazzi,il forum è per scambiare idee e dare aiuto ai poveri principianti come me...

non per litigare...boni!... e ciao!

Scambiare idee, anche in modo acceso senza mai arrivare ad offendere, è un modo come un altro per aiutare, serve per vedere le cose da una prospettiva differente.

Se riesci a trovare giovamento da questo, modificare il tuo modo di vedere le cose, o riuscire a rapportarti meglio con altre persone, hai comunque guadagnato.

Inserita:

Grazie ragazzi!

In effetti ho provato a convertire una stringa in una DINT e tutto funziona.

Come ti dicevo però i dati che ho memorizzati nel DB di ricezione non sono in formato stringa ma sono in formato char.

Se provo ad usare la stessa "FC 37 STRNG_DI" chiaramente non accetta come ingresso il char.

Ora provo a smanettare come dite voi e poi vi faccio sapere.

Grazie ancora,

Silver.

X keosmm

No tranquillo per far funzionare il modulo seriale ho usato l'apposito manuale.

Non ci crederai ma oltre al corriere dello sport a volte leggo anche i manuali siemens.

Lo so che non c'è l'hai con me ci mancherebbe nemmeno ci conosciamo. :P

Ciao e grazie Ancora.

x lucamodica

Non mi sembra che stiamo litigando anzi keosmm ha detto quello che pensava e io gli ho risposto che aveva ragione se questo è litigare....

Detto questo Credimi anche io sono un principiavte essendo la 1 volta che utilizzo siemens, e ho tanti di quei problemi che non so più dove sbattere la testa.

Ragazzi io sono un tipo che scherza sempre molto a volte può sembrare che prendo in giro le persone ma non è affatto così apprezzo sempre le vostre risposte qualunque esse siano.

Grazie ancora,

La prossima volta cercherò meglio.

Silver.

Matteo Montanari
Inserita:

se utilizzi i suggerimenti di Luca Bab o il link proposto da STEU non ti devi prendere la briga di convertire i tuoi caratteri in stringa...

e comunque la stringa è formata da char, devi solamente togliere i dati che non ti servono, ma questo devi comunque farlo ugualmente anche se lavoro direttamente con char.

Inserita: (modificato)

Silver,

se i valori che potresti ricevere potrebbere essere anche negativi allora la soluzione migliore e usare FC37/38:

- crea in una DBx la variabile 0.0 BUFFER stringa[10]

- imposta i parametri del FB della 340 DB_NO=x e DBB_NO=2

- esegui la chiamata

- modifica il dato 1.0: DATO1.0 = LEN - 2 (devi sotrarre CR e LF)

- chiama FC 38 con BUFFER

chiarimento, per DATO1.0 intendo:

L LEN

+ -2

T DBx.DBB1

saluti

Modificato: da d.majovsky
Inserita:

Chiarimento:

per DATO1.0 intendo

L LEN

+ -2

T DBx.DBB1

ciao

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...