Vai al contenuto
PLC Forum


Conversione Intero A Binario


messina-dario

Messaggi consigliati

Ciao a tutti,

mi serve sapere quale istruzione devo usare per un fpx, per potere convertire un intero in binario..tipo 2---0010..

Ho letto varie istruioni tipo int to bcd, e altre, ma non trovo quella che fa al caso mio...Chiedo aiuto a voi :rolleyes:

Saluti.

Link al commento
Condividi su altri siti


mi serve sapere quale istruzione devo usare per un fpx, per potere convertire un intero in binario..tipo 2---0010..

Ho letto varie istruioni tipo int to bcd, e altre, ma non trovo quella che fa al caso mio...Chiedo aiuto a voi rolleyes.gif

ciao

non conosco i plc panasonic comunque ciò non toglie che le conversioni de dati non sia possibile....comunque sia non mi risulta che ci sia un blocco funzione in grado di convertire un numero int in un numero binario ed ecc...però credo che potresti visualizzare il risultato di una conversioni in codice binario nell'apposita tabella per esempio..

spero di esserti d'aiuito al limite ci penserà qualcun'altro più esperto di me ciao

:)

Link al commento
Condividi su altri siti

ti ringrazio alfa84,

puòessere che questa funzione non è prevista, ma mi sembra strano, infatti io la sto cercando per trasmettere via seriale dei numeri in formato binario...però è possibile che non esista, o più probabile che io non la trovi :rolleyes:

saluti.

Link al commento
Condividi su altri siti

Vedi, per me un numero intero è intero, un binario è un binario...

Tu intendi nel senso che il plc per interpretrarlo lo codifca in binario ok...

comunque, hai ragione tu, è inutile l'istruzione che cercavo, infatti ho preso un'altra strada...Per ora mi sto buttando un po nelle trasmissioni seriali e la codifica dei dati che trasmetto mi mette un po in difficoltà...e capita di sparare cavolate :rolleyes: .

infatti è la istruzione f159_mtrn che mi causa un po di problemi, non la conversione...supereremo anche questa :rolleyes:

comunque, grazie mille per la risp, alla prox...

Link al commento
Condividi su altri siti

Roberto Gioachin
Vedi, per me un numero intero è intero, un binario è un binario...

Quando si parla di conversione, si presuppone che esista una regola di conversione.

Se tu devi convertire un numero decimale in un numero BCD, oppure un intero in un floating-point, devi utilizzare una regola ed effettuare dei calcoli.

Nel caso di un numero intero, che sia rappresentato in binario o in esadecimale oppure decimale, non viene effettuata nessuna conversione, se non una diversa rappresentazione dello stesso numero.

Nella memoria del plc, infatti, il numero è sempre in binario, quindi da binario a binario non serve convertire.

Questa è una regola generane, non vale solo per panasonic.

Altra questione riguarda invece l'struzione F159.

Ti posso assicurare che funziona a meraviglia, ma devi stare attento al formato dei dati che scrivi nella stringa da inviare sulla seriale.

Se devi scrivere una stinga in formato ascii, (questo dipende da protocollo che stai implementando), devi convertire i tuoi caratteri in codici ascii equivalenti, quindi devi inviarli con l'istruzione F159.

Leggi bene le istruzioni sul manuale, se non commetti errori ti accorgi che hai a disposizione tutti gli stumenti per realizzare qualsiasi tipo di comunicazione via seriale.

Ciao

Roberto

Modificato: da Roberto Gioachin
Link al commento
Condividi su altri siti

Quello che voleva rappresentare Dario è un pò diverso dalle interpretazioni che avete dato sul binario, se

osservate meglio la domanda la rappresentazione riguardava proprio una conversione da formato numerico

a formato binario in rappresentazione estesa, ovvero sembra che servisse una stinga di 16 caratteri composta

da 0 e 1 con assegnazione rispettiva al peso binario equivalente al numero di Bit.

Questo non esiste come libreria già pronta ma lo si dovrebbe fare a codice, ma visto che Dario a già trovato un alternativa

sembra inutile andare oltre...

Link al commento
Condividi su altri siti

Grazie a tutti per le risposte,

alen ha interpretrato alla grande ciò che intendevo dire...Roberto, la funzione f159 funziona benissimo.

C'è solo un problema, ossia, carico un array di word, per esempio sendbuffer[0...3] of word.

supponiamo che si abbaino questi valori:

sendbuffer[0]=0

sendbuffer[1]=30

sendbuffer[2]=10

sendbuffer[3]=20

Nel "pin" s_start della f159 metto sendbuffer[0], nel pin n_number metto 4(numero di byte da inviare),nella d-port metto 16#0000 (invio i dati dalla tool port).

"Ascolto" con il docklight(simile hyperterminal, mamolto migliore) i dati trasmessi dal plc, e ad ogni commutazione da 0-1 del pin di enable quello che ric<evo è questo

030 000 010 000 020 000, perchè?Io non ho chiesto di tramettere gli 000, ho eleminato qualsiasi tipo di carattere di terminzione,ecc tramite l'impostazione dei registri di sistema corrispondenti.

Non che questa presenza provochi grossi problemi, ma vorrei capireil perchè succede questo.

Ho fatto l'esepio con gli interi per una maggiore chiarezza, spero qesta volta di essermi fatto capire :rolleyes:

Link al commento
Condividi su altri siti

premetto che non conosco i plc della panasonic e quindi non so come ragiona la funzione che hai usato

però, tu hai fatto un array di word, le word sono variabili a 16 bit

se in una word scrivi 30, il contenuto della word è composto dal byte superiore tutto a zero, e dal byte inferiore uguale a 30

ed è normale che una funzione di trasmissione dati in seriale trasmetta TUTTI i byte che gli dai

forse se fai un array di byte...

ciao

Link al commento
Condividi su altri siti

Ciao dario,

sono quello della discussione "studio protocollo, tools" se ti ricordi.

Volevo solo dirti che sono daccordo con cisio: solitamente quando si compongono in trasmisione

e/o scompongono in ricezione messaggi via seriale, si ragiona in termini di bytes.

:) Buon proseguimento per il tuo lavoro

Link al commento
Condividi su altri siti

scusate, rettifico, comunque il num di byte che inserivo era 6...per ottenere in uscita quanto detto nell'intervento precedente e non 4.

con quattro otterrei solo 030 000 010 000..

Comunque la spiegazione che date voi, convice anche me, anche perchè tutto combacia, in effetti il primo (030) corrisponde al valore del byte superiore che è 030, e del byte iferiore che è tutto a 000.. ;)

Grazie e saluti....

Per dny65, certo che ricordo chi sei...Sto usando il dockligh per l'ascolto della seriale..è ottimo..

Link al commento
Condividi su altri siti

Roberto Gioachin
perchè?Io non ho chiesto di trasmettere gli 000

Come dice Cisio, tu stai inviando dei dati dichiarati a 16 bit, in questo modo via seriale vengono inviati sia il byte basso che quello alto delle tue word, quindi esattamente quello che hai rilevato.

Se devi usare un array di word devi caricarti due byte su ogni word, esistono istruzioni apposite per questo.

Una cosa importante, se invii 4 byte, dovresti vedere inviati 4 byte e non 6 come sul tuo esempio. Inoltre vengono inviati i codici di inizio e fine trasmissione, in base alla configurazione della seriale.

Ti invito a consultare il manuale del plc o del software, con un pò di prove otterrai i risultati che cerchi.

Ciao

Roberto

Link al commento
Condividi su altri siti

Si roberto, infatti ho rettificato, dicendo che il primo intervento non era corretto.

Nell'utlimo intervento ho detto che per visualizzare quanto scritto nel primo mio intervento ossia 030 000 010 000 020 000 ho inserito 6 come umero di byte da inviare..

Comunque ilmanuale l'ho letto ed è proprio da li che è nato tutto...Comunque lasciamo stare l'importante è che ho risolto...Non faccio mai nulla senza leggere i manuali, non avrebbe senso, vai brancolando nel buio e non si impara nulla..Graize, a tutti.

Saluti.

Link al commento
Condividi su altri siti

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...