Aiuto per stringhe HEX a RS232

Buongiorno a tutti.

Ho fatto un applicativo che via RS232 comanda alcuni apparati e vanno tutti tranne uno... una telecamera ELMO.

Allora, dalla lacunosissima ed unica documentazione di questa telecamera si legge che per (ad esempio) portare in una certa posizione la telecamera bisogna inviare la seguente stringa: 81 01 06

04 FF. Ho provato dal mio programma a mandarla in vari modi: \81\01\06\04\FF /81/01/06/04/FF 81 01 06 04 FF 81.01.06.04.FF 81010604FF \81010604FF

ma nessuno di questi la muove.

Allora ho provato per sfizio con HYPERTERMINAL (di microsoft windows

2000 ita) e SECURECRT di Dik Van Keye... FERMA.

Avevo perso ogni speranza poi ho provato con Serial port communication analyzer v1.0.0

formatting link
**SETTANDO IL TYPE DEL TRASMITTED DATA** come HEX e inviando 81010604FF e la telecamera si muove che è un amore.

A questo punto è chiaro che nelle mie/altre stringhe manca un qualcosa che gli dica di usare quei dati come esadecimali.

Dove sbaglio/cosa dimentico?

Reply to
selidori
Loading thread data ...

Non devi mettere i numeri in una stringa ma devi convertire il numero esadecimale in carattere (se non ho capito male), ad esempio in Visual basic sarebbe:

Dim s As String s = Chr(&H81) & Chr(&H1) & Chr(&H6) & Chr(&H4) & Chr(&HFF)

e poi si invia la stringa s su RS232.

in C dovresti accodare in un array di char i byte 0x81, 0x01, 0x06, 0x04,

0xFF e poi inviarli su RS232.

Spero che il problema fosse questo e di essere stato di aiuto.

William.

Reply to
William

hai provato a convertire i numeri HEX in decimali (es. 81-01-06-04-ff ==

129-1-6- 4-255) ? O meglio, ti sei assicurato di specificare correttamente il tipo di dato che mandi sulla seriale?
Reply to
Iw7

Ciao selidori. Scusa se mi intrometto ma potresti darmi qualche ragguaglio sulla tua interfaccia rs232? Mi interessa molto, quindi se potessi dirmi qualcosa in più (sempre che non sia per scopia commerciali) mi faresti un favore. Ad ogni modo, per il tuo problema quello che ti ha consigliato William dovrebbe risolvere la faccenda. Fammi sapere :)

--
Ciao,
Giulio "RedXIII"
Reply to
RedXIII

Dunque, innanzitutto grazie a tutti per le risposte.

Ho provato sia a mandare la stringa nel formato 0x81, 0x01, 0x06,

0x04, 0xFF anche in alcune versioni con \ o con / o con - ecc ed il risultato non cambia: la telecamera rimane ferma. Tuttavia le prove da me fatte erano direttamente da terminali sulla rs232 (come hyperterminal) e quindi simulato il carattere ascii del valore e non lo facevo direttamente calcolare dall'applicativo, questo vuol dire che di fatto i caratteri non stampabili probabilmente non riuscivo ad inviarli. Pertanto mi riservo di ripercorrere meglio questa strada dall'applicativo (che purtroppo non ho fra le mani fino a lunedì) anche perchè questa ipotesi mi sembra la + promettente!

In risposta a Iw7, ho provato (dopo che me l'hai detto tu) ad inviare la stringa in quel formato anche qua con vari delimitatori come spazio, \, /, virgole e NULL. Non va. Tuttavia secondo me il problema sta li': come dire alla telecamera che quello che gli mando è una cosa esadecimale?

Infine per RedXIII. Si l'applicativo che 'sto facendo è un applicativo a fini commerciali (per ora un esperimento) ma posso e voglio comunque risponderti. Allora di fatto è un applicativo per videorosrveglianza che a particolari eventi (gestiti dall'utente o ricevuti via RS232) manda su varie porte RS232 dei ben definiti comandi. L'ambiente che fa ciò è il PHP. Lo so che il PHP nasce come generatore di pagine web ed è sconsigliatissimo da usarsi per comandare direttamente l'hardware, tuttavia esso puo' farlo molto facilmente con l'emulazione CLI in ambiente windows ed ancora più facilmente col file system in ambiente linux (dove infatti le porte com sono directory del file system). La principale richiesta dell'applicativo è la PORTABILITA' ovvero che il front-end sia eseguibile su tutte le piattaforme ed oggi penso che lo standard in questo senso sia l'HTML puro. L'altra richiesta è la raggiungibilità, ed ancora internet ci aiuta potento utilizzare un IP pubblico.

Quesot applicativo deve permettere:

- di collegarsi dappertutto (da internet) a questo web server il quale controlla fisicamente alcuni apparati tramite le RS232 come ad esempio le telecamere che possono essere mosse od i videoregistratori che possono essere azionati (il trasporto del segnale stesso avviene poi per altri canali proprietari).

- poter comandare il tutto da locale ma via WI-FI (magari blutooth che non è direttivo ed ha un maggior campo rispetto all'irda) attraverso PDA con il loro browser che a questo punto diventa una specie di telecomando molto evoluto (si pensi solo che di fatto l'interfaccia è disegnata dal webserver).

Questo applicativo sarà utilizzato per:

1- videosorveglianza remota 2- controllo apparecchiature multimediali entrambi o alternativi.

Ovviamente entrambi gli utilizzi prevedono tutta una serie di routine di sicurezza (sopratutto nel caso 1) o di maggior peso dei comandi se impartiti da più parti e discordanti.

Ma queste sono cose facilissime a farsi in php perchè native stesse del linguaggio.

Reply to
selidori

la questione delimitatori dipende dal protocollo di comunicazione, ovvero se è richiesto un carattere di separazione tra un byte e l'altro sarai costretto ad usarlo. Segui l'esempio in VB di William, ma controlla i pametri delle seriale (Baud-rate, bitd di dati, bit di start, di stop e di parità).

Reply to
Iw7

"selidori" ha scritto nel messaggio news: snipped-for-privacy@posting.google.com...

Credo che in PHP puoi fare la stringa in questo modo: $miastringa="\x81\x01\x06\x04\xFF" Questo in base a quanto ho potuto trovare tramite google perchè io di PHP non so niente...

William.

Reply to
William

cosa

sic

Salve a tutti, approfittando del forum volevo sollevare il mio problema, os sia devo trasmettere una serie di valori esadecimali (o decimali che siano)

a spedizione mi vengono cancellati tutti quelli a zero, ma io ho necessit

Reply to
slomengm

Il 26/02/2016 10:30, snipped-for-privacy@gmail.com ha scritto:

ci concateni in testa i caratteri "0" necessari a completare la stringa!

P.S. le News di Usenet NON sono un forum

PP.SS. non ha senso far ripartire una "discussione" del 2004 meglio iniziare un nuovo thread

Reply to
mmm

snipped-for-privacy@gmail.com ha spiegato il 26/02/2016 :

Semplice: NON li converti in stringa, ma li assegni uno alla volta ad un array binario ed infine trasmetti l'array.

Public Sub Trasmetti() Dim TxBuffer(3) as Binary TxBuffer(0) = 65 TxBuffer(1) = 0 TxBuffer(2) = 66 TxBuffer(3) = 0 TxBuffer(2) = 67 Form1.MSComm1.Output = TxBuffer End Sub

Reply to
Franz_aRTiglio
&u ha detto:

Non esiste il tipo "binary" per le variabili in VB... Semmai Byte.

--
Know Thy User. 
News 2002 [v 2.07] / StopDialer / PopDuster - http://www.socket2000.com 
Akapulce portal: http://www.akapulce.net
Reply to
Megazone

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.