Oppure

Loading
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 :

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
10/08/11 9:18
Il Totem
Un carattere sta sempre in un byte. Il fatto di vederlo come ascii, come numero in base 10 o come numero in base 16 è semplicemente una questione di lettura e decodifica. Il contenuto reale in memoria, o, come in questo caso, sullo stream, è sempre lo stesso byte. Quindi questo non può essere l'errore che cerchi.
Per il resto il codice è uguale a quello fornito nel documento, perciò dovresti fornire il sorgente in vb che tu hai tradotto: è lì che probabilmente si troverà l'errore.
aaa