Lire et Stocker des Octets à partir du Port Série
Je suis en train de créer un RS232 application qui lit les données entrantes et les stocke dans une mémoire tampon. J'ai trouvé le code suivant dans un RS232 exemple, mais je ne suis pas sûr de la façon de l'utiliser
*RS232 Exemple port_DataReceived*
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (!comport.IsOpen) return;
if (CurrentDataMode == DataMode.Text)
{
string data = comport.ReadExisting();
LogIncoming(LogMsgType.Incoming, data + "\n");
}
else
{
int bytes = comport.BytesToRead;
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
LogIncoming(LogMsgType.Incoming, ByteArrayToHexString(buffer) + "\n");
}
}
Je suis en train d'écrire une autre méthode qui prend l'arrivée d'un tableau d'octets et il se combine avec un autre tableau ... voir ci-dessous:
private void ReadStoreArray()
{
//Read response and store in buffer
int bytes = comport.BytesToRead;
byte[] respBuffer = new byte[bytes];
comport.Read(respBuffer, 0, bytes);
//I want to take what is in the buffer and combine it with another array
byte AddOn = {0x01, 0x02}
byte Combo = {AddOn[1], AddOn[2], respBuffer[0], ...};
}
J'ai actuellement deux méthodes dans mon code que je ne sais pas comment faire pour lire et stocker les octets entrants sur le port. Puis-je utiliser le "port_DataReceived" de la méthode dans mon "ReadStoreArray" méthode? Dois-je modifier mon "ReadStoreArray" méthode? Ou devrais-je recommencer?
port_DataReceived
appel ReadStoreArray
au lieu de LogIncoming
Vous aurez besoin de garder à l'esprit que vous ne pouvez pas recevoir la totalité de votre message dans un gestionnaire d'événement. Vous avez besoin de lire jusqu'à ce que vous obtenir le nombre d'octets dont vous avez besoin.
Merci pour votre réponse. Dans la plupart des cas, je veux quitter le gestionnaire d'événements. Je ne veux combiner la réponse avec un autre tableau pour la méthode mentionnée ci-dessus "ReadStoreArray". Comment pourrais-je tirer les octets lus dans le "tampon" dans mon "ReadStoreArray" méthode?
Par exemple je voudrais stocker la réponse dans un nouveau tableau dans l'ordre à manipuler (c'est à dire lire certains octets, combiner avec un autre tableau). Est-il un moyen de capturer la réponse et de le stocker dans un tableau dans le "ReadStoreArray" méthode?
Dans port_DataReceived passer tampon à ReadStoreArray. J'ai posté un exemple
OriginalL'auteur Nevets | 2014-01-24
Vous devez vous connecter pour publier un commentaire.
Lorsque vous créez votre SerialPort:
ReadStoreArray
est pas un bon nom pour une fonction qui ne lit pas, aussi sont ceux qui sont les habitants censé être des tableaux?Oui, j'ai copié et collé. Répare.....
Dans l'accrochage de l'ensemble des DataReceived cas, je reçois de la classe, struct, ou la méthode de l'interface doit avoir un type de retour"; aussi "Identificateur attendu" à la fin de l'.
OriginalL'auteur Johnny Mopp
Ne vous embêtez pas avec l'aide de la DataRecieve gestionnaire, c'est horriblement inexactes, vous êtes mieux de commencer un thread qui ne cessent de lit le port série et saisit chaque octet qui vient à travers.
OriginalL'auteur user1772086
Vous ne pouvez pas lire les mêmes données à partir du port deux fois. Vous aurez besoin de le lire une fois dans un tampon, puis partager le tampon (passer comme paramètre de la fonction) ou le clone de donner à chaque fonction sa propre copie.
OriginalL'auteur Ben Voigt