Forum
>>
Principianti
>>
Conversione ASCII a HEX II puntata prosecuzione
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Pietro Bruno Lancerotto |
2024-02-03 17:16:49 - Conversione ASCII a HEX II puntata prosecuzione
|
Intanto Ti ringrazio per il tempo che dedichi
La non breve carriera passata a scrivere programmi per macchine automatiche mi ha insegnato *** qui avevo fatto la battuta circa la necessità di dover imparare a nuotare; non vorrei mai Per cui ho sezionato l'intera stringa e sostituito il punto cruciale col un \xf0 Un altro punto ostico era la lunghezza del testo a cui ovvierò allo stesso modo ricavando i caratteri necessari in questo modo: ******************** import binascii num = 255 # numero da sostituire per le varie prove nume = hex(num) print(nume) a = nume.encode() print(a) b = str(a) c = b[:-1] # tolgo ' a destra c = c[4:] # tolgo b'0x a Sinistra # ricostruisco la stringa come va bene a me if len(c) > 1 : c = 'x' + c else : c = 'x0' + c c = "\\" + c print(c) # c sarà \xff ******************* Da qui ne viene la Max lunghezza messaggio Dimmi pure che sono fuori fase ma per me basta che funzioni All'alba dei 75 anni ...... Allegherò una immagine del famigerato SoundModem Fatta la prova col 240 in doppio byte \xc3\xb0 ma no lo accetta Adesso mi dedicherò al socket e sicuramente tornerò a scassare l'anima Grazie ancora --
Bruno L. |
|
Scritto da Pietro Bruno Lancerotto |
2024-02-03 20:28:35 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Purtroppo non funziona perchè alla fine quel c deve essere
b'\xff' nella parte del 240 funziona perché c'è un x2 = b'\xf0' scritto così brutalmente nel caso di un valore 2 si ha 0x2 Valore esadecimale del numero b'0x2' risultato di encode purtroppo a me serve b'x02' Altrimenti chi riceve la stringa non la "digerisce" Qualche suggerimanto ?? --- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-03 20:43:37 --- --
Bruno L. |
|
Scritto da nuzzopippo |
2024-02-03 21:56:00 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
La parte riguardante il "c" non l'ho capita dato che:
Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license()" for more information. value = b'\xff' int.from_bytes(value, 'little') 255 chr(255) 'ÿ'Cosa era quello "c" cui riferisci? Riguardo al "2": value = 2 value.to_bytes(1, 'little') b'\x02'forse, c'è un po' di fretta in giro. Comunque, è un po' difficile starTi dietro su di un discorso che non si conosce, hai qualche link alla documentazione di ciò che Ti occorre? ... giusto per farsi una idea, al momento le idee sono molto vaghe. Ciao Edit: forse ho compreso quel "c", ricade nella manipolazione del post prima ... restando genericamente nell'ambito dei numeri interi senza segno invece di quella "elaborazione" farei qualcosa del genere : Python 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] on linux Type "help", "copyright", "credits" or "license()" for more information. value = 12500 length = value.bit_length() // 8 if not value.bit_length() % 8 else 1 + value.bit_length() // 8 value.to_bytes(length, 'little') b'\xd40'la documentazione correlata può essere d'aiuto --- Ultima modifica di nuzzopippo in data 2024-02-03 22:53:42 --- Fatti non foste a viver come bruti... |
|
Scritto da Pietro Bruno Lancerotto |
2024-02-04 10:25:22 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Ricapitolo un po'
Si tratta di inviare verso un programma ( SoundModem ) una stringa codificata in un certo modo PS: il tracciato complessivo \x00\x00\x00\x00\x4d\x00\xf0\x00 <- intestazione (fissa) \x4e\x4f\x56\x45\x47\x31 <- mittente da 6 byte \x00\x00\x00\x00 <- separatore (fisso) \x41\x4c\x4c\x31\x32\x33 <- destinatario da 6 byte \x00\x00\x00\x00 <- separatore (fisso) \x06 <- dimensione messaggio massimo 256 caratteri \x00\x00\x00\x00\x00\x00\x00 <- separatore (fisso) \x63\x69\x61\x6f\x31 <- messaggio (ciao1) \x0d <- chiusura Cosa faccio io intes = chr(0)+chr(0)+chr(0)+chr(0)+chr(77)+chr(0)+chr(240)+chr(0) mittente = "NOVEG1" separatore = chr(0)+chr(0)+chr(0)+chr(0) destinatario = "ALL123" num = len(messaggio) lunghezza = str(num) print(lunghezza) separ7 = chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0) chiusura = chr(13) k = intes + mittente + separatore + destinatario + separatore + chr(num) + separ7 + messaggio + chiusura request = k.encode() print("generata", request) Problema 1 chr(240) viene codificato in 2 byte lui ne vuole Risolto taroccando la stringa dividendola in 2 parti e infilandoci in mezzo x2 = b'\xf0' e dipoi x4 = x1 + x2 + x3 request = x4 Problema 2 La lunghezza della stringa adesso la passo con chr(num) perchè come si capisce lui aspetta un carattere ed interpreta come lunghezza il valore decimale del caraattere che a rigor di logica dovrebbe essere inviato in esadecimale Tutto dovrebbe essere esadecimale ma la cosa funziona lo stesso Alla fine viene inviato questo e funziona col limite della lunghezza a 127 altrimenti si cade nei 2 byte ma a me i 127 caratteri bastano \x00\x00\x00\x00M\x00\xf0\x00NOVEG1\x00\x00\x00\x00ALL123\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00Ciao1\r Allego una immagine del famigerato Suondmodem Vi ringrazio infinitamente per la pazienza --
Bruno L. |
|
Scritto da Pietro Bruno Lancerotto |
2024-02-04 11:08:15 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Accidenti
value = 240 value.to_bytes(1, 'little') b'\xf0' Funziona anche il 240 Rifaccio tutto Vi assicuro di aver consumato gli occhi sul monitor alla ricerca di questo E su PYTHON Guida Completa non ho trovato nulla di ciò --- Ultima modifica di Pietro Bruno Lancerotto in data 2024-02-04 11:10:15 --- --
Bruno L. |
|
Scritto da Pietro Bruno Lancerotto |
2024-02-04 13:40:07 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Alla fine ho fatto questo :
inte1 = chr(0)+chr(0)+chr(0)+chr(0)+chr(77)+chr(0) intes3 = chr(0) mittente = "NOVEG1" separatore = chr(0)+chr(0)+chr(0)+chr(0) destinatario = "ALL123" num = len(messaggio) print("Lunghezza: ",lunghezza) separ7 = chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0)+chr(0) b_inte1 = inte1.encode() values = 240 b_inte2 = values.to_bytes(1,'little') b_inte3 = intes3.encode() b_mitte = mittente.encode() b_separ = separatore.encode() b_desti = destinatario.encode() b_lungh = num.to_bytes(1,'little') b_sepa7 = separ7.encode() b_messa = messaggio.encode() values = 13 b_fine = values.to_bytes(1,'little') request = b_inte1 + b_inte2 +b_inte3 + b_mitte + b_separ + b_desti + b_separ + b_lungh + b_sepa7 + b_messa + b_fine Ringrazio tutti per l'aiuto Purtroppo non trovo un Mentore qui in Alto Vicentino Dovendo aprire e mantenere aperto un Socket che deve accettare quanto spedito ( ma fin qui ci sono ), dovrà anche rimanere in ascolto su quanto arriverà chiedo consiglio su cosa devo "STUDIARE" Link e tutorial ... bon tutto Grazie ancora --
Bruno L. |
|
Scritto da nuzzopippo |
2024-02-04 17:27:41 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Ma con quanto hai fatto su, Ti sei connesso?
Per quanto riguarda i socket sono un argomento complesso, la base di partenza minimale è la documentazione, oltre, naturalmente, una robusta infarinatura su reti e protocolli di rete (UDP e TCP-IP almeno) in rete puoi trovare esempi (in genere semplici) sullo stabilire connessioni con detti protocolli, se devi utilizzare i socket Ti conviene studiarli un po' con esempi "normali" per acquisirli quanto più riesci ... è un argomento complesso, questo. In ogni caso, una volta stabilita una connessione i socket rimangono in ascolto sin quando uno dei due non chiude. Ho guardato l'immagine da Te fornita, è esattamente quella che avevo già messo in link, nella pagina ci sono varie risorse tra cui, credo un terminale (easyterm49.zip), forse, Ti potrebbe essere utile? Comunque, ho scaricato la guida in inglese, specifica che l'applicazione è basata sul del protocollo ax.25, scaricare da questa pagina specifiche del layer 2 non sarebbe una brutta idea. Non ho trovato sulla guida e ne sito esempi relativi alla connessione con quel software, probabilmente Tu li hai, dato che sai già cosa vuoi ottenere, almeno personalmente non ho idea del Tuo problema, le Tue spiegazioni non le ho comprese, probabilmente per miei limiti. Ciao Fatti non foste a viver come bruti... |
|
Scritto da Pietro Bruno Lancerotto |
2024-02-04 20:45:41 - Re: Conversione ASCII a HEX II puntata prosecuzione
|
Certamente
Diciamo che in parte sono stati parte del mio lavoro 2 robot con CN slave collegati al Master nonchè HMI , tutto rigorosamente Wireless 5 GHz Gli stessi Robot collegati ad un convertitore RS232<->Ethernet per il monitoraggio della consolle Un groviglio di porte dato il numero di canali di comunicazioni in gioco Ormai anche il più banale PLC ha abbandonato la RS232 Visto che citi Term.exe io uso SuondModem a casa su un RTX ed il Term in remoto collegandomi tramite PortForwarding sul router al PC casalingo Il tutto per poter far le prove in autonomia con una doppia sessione di Term in esecuzione sul remoto Diciamo che IP e Porte ovviamente li conosco Purtroppo quel Term.exe serve per l'APRS dei radioamatori A me serve un terminale specifico per fare quello che serve a me e che ovviamente si connette al SoundModem che farà la trasmissione Packet in AX25
Per trasmettere la cosa è "semplice" clientSocket.send(request) print("FINE TRASMISSIONE") E funziona Chiaramente la parte ricevente deve essere nel LOOP in modo che continui a verificare l'arrivo di caratteri ed è qui che casca l'asino ( cioè io ) Ci sono alcune postazioni che trasmettono e ricevono; l'arrivo riceve ma invia messaggi di servizio Il sistema serve a controllare una gara che senza quello che stò facendo ci costringe ad usare un foglio di calcolo predisposto opportunamente ed andare di Seleziona tutto, copia ed incolla sul Term L'autosave del Log sul Term non funziona e questo è un altro problema perchè il salvataggio normale non Appende, sicchè sempre un file nuovo ( Log1 Log2 ) Le persone addette poi non sono dei gran geni Un aggiustamento del Term lo vedo impossibile. L'autore è Ucraino e non credo stia passando dei bei momenti Ho scritto qui ma forse queste discussioni sarebbe meglio farle in privato per non tediare gli altri Ci leggiamo --
Bruno L. |
Pagina: 1
Esegui il login per scrivere una risposta.