09/08/11 18:48
robyfertz
Buongiorno a tutti !!!!
Premessa : sono un perito elettronico quindi Hardware no problem, conosco VB e stò cominciando a divertirmi con VB.Net ( e qui son dolori) quindi portate pazienza…
Ora veniamo alla richiesta :
devo comandare, dal programma che sto scrivendo con vb9, una scheda che viene venduta con il suo software di gestione fatto in Processing.
Compito di questo s/w è quello di inviare via seriale dei comandi alla scheda...
Ora sono giorni che tento di "convertire" la sub di questo programma che esegue prima la costruzione dell'array da trasmettere e poi la trasmissione dei dati appunto in vb9 ma senza successo....
A questa sub vengono passate da altre sub le seguenti variabili :
id : che è l'indirizzo della scheda (nel nostro caso è sempre uguale a 0)
Cmd : che sono dei caratteri ascii (il comando vero e proprio)
ValueLen : che è il numero di parametri da spedire ( ogni comando spedisce un diverso numero di parametri)
IntFlag : che è il tipo dei parametri da spedire
La descrizione del protocollo di trasmissione la potete trovare nel file zip allegato….
Quindi riassumendo la sub che devo scrivere in vb9 deve, dopo essere stata chiamata, prendere le 4 variabili che ho scritto sopra ( id,Cmd, ValueLen e IntFlag)
che vengono di volta in volta modificate da altre sezioni del programma, costruire un array che rispetti il protocollo di trasmissione che ho allegato e trasmettere infine questo array via seriale..
codice da convertire :
Il problema è che quando vado in trasmissione I caratteri sono convertiti in decimale e non in esadecimale (questo perlomeno è quello che vedo con un monitor sulla seriale) e quindi la scheda non funge…..
Grazie mille per le eventuali risposte…….
Premessa : sono un perito elettronico quindi Hardware no problem, conosco VB e stò cominciando a divertirmi con VB.Net ( e qui son dolori) quindi portate pazienza…
Ora veniamo alla richiesta :
devo comandare, dal programma che sto scrivendo con vb9, una scheda che viene venduta con il suo software di gestione fatto in Processing.
Compito di questo s/w è quello di inviare via seriale dei comandi alla scheda...
Ora sono giorni che tento di "convertire" la sub di questo programma che esegue prima la costruzione dell'array da trasmettere e poi la trasmissione dei dati appunto in vb9 ma senza successo....
A questa sub vengono passate da altre sub le seguenti variabili :
id : che è l'indirizzo della scheda (nel nostro caso è sempre uguale a 0)
Cmd : che sono dei caratteri ascii (il comando vero e proprio)
ValueLen : che è il numero di parametri da spedire ( ogni comando spedisce un diverso numero di parametri)
IntFlag : che è il tipo dei parametri da spedire
La descrizione del protocollo di trasmissione la potete trovare nel file zip allegato….
Quindi riassumendo la sub che devo scrivere in vb9 deve, dopo essere stata chiamata, prendere le 4 variabili che ho scritto sopra ( id,Cmd, ValueLen e IntFlag)
che vengono di volta in volta modificate da altre sezioni del programma, costruire un array che rispetti il protocollo di trasmissione che ho allegato e trasmettere infine questo array via seriale..
codice da convertire :
void TxData(int Id, int Cmd, int ValueLen, int IntFlag) { /* Transmit a string toward dsNavCon board */ int TxBuffCount; int ChkSum = 0; int CmdLen = 0; if (IntFlag == 0) // byte value { CmdLen = ValueLen; for (TxBuffCount = 0; TxBuffCount < ValueLen; TxBuffCount++) { TxBuff[(TxBuffCount*2)+TxHeadLen] = (byte)(TxIntValue[TxBuffCount]); } } if (IntFlag == 1) // integer value { CmdLen = ValueLen*2; // 1 int value = 2 bytes to transmit for (TxBuffCount = 0; TxBuffCount < ValueLen; TxBuffCount++) { TxBuff[(TxBuffCount*2)+TxHeadLen] = (byte)(TxIntValue[TxBuffCount] >> 8); TxBuff[(TxBuffCount*2)+TxHeadLen+1] = (byte)(TxIntValue[TxBuffCount]); } } if (IntFlag == 2) // long value { CmdLen = ValueLen*4; // 1 long value = 4 bytes to transmit for (TxBuffCount = 0; TxBuffCount < ValueLen; TxBuffCount++) { TxBuff[(TxBuffCount*4)+TxHeadLen] = (byte)(TxIntValue[TxBuffCount] >> 24); TxBuff[(TxBuffCount*4)+TxHeadLen+1] = (byte)(TxIntValue[TxBuffCount] >> 16); TxBuff[(TxBuffCount*4)+TxHeadLen+2] = (byte)(TxIntValue[TxBuffCount] >> 8); TxBuff[(TxBuffCount*4)+TxHeadLen+3] = (byte)(TxIntValue[TxBuffCount]); } } TxBuff[0] = (byte)('@'); TxBuff[1] = (byte)(Id); TxBuff[2] = (byte)(Cmd); TxBuff[3] = (byte)(CmdLen+1); // included CheckSum for (i=0;i<(TxHeadLen+CmdLen);i++) { ChkSum += TxBuff[ i ]; } TxBuff[TxHeadLen+CmdLen] = (byte)(ChkSum); for (i=0;i<(TxHeadLen+CmdLen+1);i++) { RS232Port.write(TxBuff[ i ]); } if (IntFlag != 3) TxFlag = true; // avoid to blink TX led for continuos send }
Il problema è che quando vado in trasmissione I caratteri sono convertiti in decimale e non in esadecimale (questo perlomeno è quello che vedo con un monitor sulla seriale) e quindi la scheda non funge…..
Grazie mille per le eventuali risposte…….
Ultima modifica effettuata da Il Totem 10/08/11 9:13
aaa