Utilisez c # pour réaliser l'envoi personnalisé de données sérialisées dans la communication, ce qui peut réaliser la fonction d'envoi programmable dans une certaine mesure

C # réalise un port série pour envoyer des données sérialisées

Comme indiqué ci-dessous:

La zone rouge montre l'image de l'effet. La première zone de texte est l'octet spécifique à envoyer, qui peut être modifié manuellement. Le bouton à l'arrière peut être cliqué pour contrôler l'envoi unique. En même temps, la zone de texte à envoyer par deux ordinateurs peuvent être envoyés. Modifiez le titre du bouton pour les remarques. Les nombres rouges à l'arrière permettent de définir la séquence d'envoi de la séquence. Ce que j'ai défini ici est inférieur à 20. Lorsqu'il est supérieur à 20, il sera pas être transféré. Le nombre bleu à la fin est une fois l'envoi terminé. Temps d'attente, en millisecondes;

Lorsque la case à cocher (boucle) ci-dessous est cochée, il commencera à envoyer selon la séquence personnalisée. Lorsqu'il n'est pas sélectionné, il arrêtera l'envoi. Le bouton Enregistrer la configuration peut enregistrer la configuration modifiée ci-dessus, et la prochaine fois que le programme sera lancé , la configuration peut être sauvegardée. Il est temps de rééditer.

Voici une brève description de la méthode d'écriture:

Cliquez sur la fonction de case à cocher de boucle

{     if (checkBox1.Checked)     {         forcanrun = true; // L'indicateur d'envoi de boucle est valide         // Définit l'état des autres boutons d'interface         btn_sttestcom.Text = "End";         commname = comboBox4.Text;         commbps = combobps.Text;         commcrc = combocrc. SelectedIndex;         sendstr = richTextBox3.Text;         // Collectez la zone de texte ci-dessus, envoyez le numéro de série,         retardez les données de temps et enregistrez-les dans le tableau oradata ();         // Créez un thread à contrôler et envoyez-le dans l'ordre         forsend = new Thread (func_forsend);         forsend.IsBackground = true;         forsend.Start ();                         forcanrun = true;         Console.WriteLine ("func_forsend thread started \ r \ n");     }









        









    else // Si la case n'est pas cochée, arrêtez l'envoi et mettez fin au thread
    {         forcanrun = false;         forsend.Join (0);         Console.WriteLine ("func_forsend thread rejoint \ r \ n");         Thread.Sleep (1000);     } }






// Une fonction pour collecter des données, enregistrer les données dans un tableau
chaîne publique [] oradata ()
{          
    arraytxt [0] = richTextBox3.Text; // Envoyer str
    arraytxt [1] = richTextBox4.Text;
    arraytxt [2] = richTextBox5 . Text;
    arraytxt [3] = richTextBox6.Text;
    arraytxt [4] = richTextBox7.Text;
    arraytxt [5] = richTextBox8.Text;
    arraytxt [6] = richTextBox9.Text;
    arraytxt [7] = richTextBox10.Text;
    arraytxt [ 8] = richTextBox11.Text;
    arraytxt [9] = richTextBox12.Text;
    arraytxt [10] = richTextBox13.Text;
    arraytxt [11] = richTextBox14.Text;
    arraytxt [12] = richTextBox15.Text;
    arraytxt [13] = richTextBox16. Texte;

    sendindex [0] = Convert.ToInt16 (textBox8.Text); // 发送 index
    sendindex [1] = Convert.ToInt16 (textBox10.Text);
    sendindex [2] = Convert.ToInt16 (textBox12.Text);
    sendindex [3] = Convert.ToInt16 (textBox14.Text);
    sendindex [4] = Convert.ToInt16 (textBox16.Text);
    sendindex [5] = Convert.ToInt16 (textBox18.Text);
    sendindex [6] = Convert.ToInt16 (textBox20.Text);
    sendindex [7] = Convert.ToInt16 (textBox22.Text);
    sendindex [8] = Convert.ToInt16 (textBox24.Text);
    sendindex [9] = Convert.ToInt16 (textBox26.Text);
    sendindex [10] = Convert.ToInt16 (textBox28.Text);
    sendindex [11] = Convert.ToInt16 (textBox30.Text);
    sendindex [12] = Convert.ToInt16 (textBox32.Text);
    sendindex [13] = Convert.ToInt16 (textBox34.Text);

    sleeptime [0] = Convert.ToInt16 (textBox9.Text); // 发送 retarder le temps de
    sommeil [1] = Convert.ToInt16 (textBox11.Text);
    sleeptime [2] = Convert.ToInt16 (textBox13.Text);
    sleeptime [3] = Convert.ToInt16 (textBox15.Text);
    sleeptime [4] = Convert.ToInt16 (textBox17.Text);
    sleeptime [5] = Convert.ToInt16 (textBox19.Text);
    sleeptime [6] = Convert.ToInt16 (textBox21.Text);
    sleeptime [7] = Convert.ToInt16 (textBox23.Text);
    sleeptime [8] = Convert.ToInt16 (textBox25.Text);
    sleeptime [9] = Convert.ToInt16 (textBox27.Text);
    sleeptime [10] = Convert.ToInt16 (textBox29.Text);
    sleeptime [11] = Convert.ToInt16 (textBox31.Text);
    sleeptime [12] = Convert.ToInt16 (textBox33.Text);
    sleeptime [13] = Convert.ToInt16 (textBox35.Text);

    chaîne arrtxt1 = "";
    int sendindex1 = 0;
    int sleeptime1 = 0;
    pour (int m = 0; m <14; m ++)
    {        pour (int j = m + 1; j <14; j ++)        {            if (sendindex [j] <sendindex [m])            {                sendindex1 = sendindex [j];                arrtxt1 = arraytxt [j];                sleeptime1 = temps de sommeil [j];






               sendindex [j] = sendindex [m];
               arraytxt [j] = arraytxt [m];
               temps de sommeil [j] = temps de sommeil [m];

               sendindex [m] = sendindex1;
               arraytxt [m] = arrtxt1;
               temps de sommeil [m] = temps de sommeil1;
           }
       }
    }
    return arraytxt;
}

// Fonction de thread pour envoyer des données
public void func_forsend ()
{     while (forcanrun) // Utilisé pour contrôler quand la case à cocher est invalide, le thread se termine.     {              for (int i = 0; i <14; i ++)         {             if (sendindex [i] <20) // Si vous ne voulez pas envoyer, vous pouvez le définir comme 20 ou plus             {                 string bb = "";                 if (crcselectindex> 0)                     bb = GetCRCData (arraytxt [i]); // En fonction des données à envoyer, calculer le code de contrôle crc et l'ajouter à la dernière position de caractère.                                                 else                     bb = arraytxt [i];                 int n = 0;                 // Vous pouvez le modifier vous-même ici, ce que j'ai implémenté ici est                 if (! netflag) // Mode série compatible avec le mode réseau et le mode port série . Comment envoyer n'est pas ici Longtemps














                {                                
                    n = ycomm.Sendstr (bb, Convert.ToInt16 (ycomm.HexFlag)); 
                }
                else // Mode réseau
                {                    
                    if (netclientflag) // Mode client
                        n = csocket.Sendstr (bb, csocket.hexflag);
                    else / / Mode serveur
                    {                         if (scsocket.islisten)                             n = scsocket.SendData (bb);                     }                 }                 string sendstr1 = "";                 // S'il est envoyé avec succès, les données seront affichées sur l'interface et l'horodatage sera ajouté                 si (n> 0)







                {                     if (timebz)                     {                         DateTime t1 = DateTime.Now;                         sendstr1 = "[" + t1.Hour.ToString ("00") + ":" + t1.Minute.ToString ("00") + ":" + t1 .Second.ToString ("00") + "." + T1.Millisecond.ToString ("000") + "]";                                                         }                     // Les données d'affichage du nombre sont réalisées par commission.                     ShowThreadDataToRec (sendstr1 + "Send → ◇:" + bb + "\ r \ n");                     if (savefilebz) // Si la marque de journal en pouces est valide, enregistrez le message dans le fichier                         txtfile.WriteLogFile ("Send → ◇: "+ bb +" \ r \ n "," Sauvegarde des messages ", 1);
                    









                Thread.Sleep (sleeptime [i]); // Une fois la transmission terminée, retardez pendant un certain temps et mettez le port série bloqué                
            }
        }        
    }           
}

Plus précisément, comment utiliser le port série et le réseau pour envoyer des données et comment calculer le code d'implémentation du code de contrôle, ce n'est pas un tirage au sort prolongé.
 

Je suppose que tu aimes

Origine blog.csdn.net/mainmaster/article/details/115123804
conseillé
Classement