C#はシリアル化されたデータを送信するためのシリアルポートを実現します
以下に示すように:
赤いボックスはエフェクト画像を示しています。最初のテキストボックスは送信する特定のバイトで、手動で変更できます。背面のボタンをクリックして単一の送信を制御できます。同時に、送信するテキストボックス2台のコンピュータで送信できます。コメント用のボタンのタイトルを変更します。後ろの赤い数字は、シーケンス送信のシーケンスを定義するために使用されます。ここで定義したのは20未満です。20より大きい場合は、転送されません。最後の青い数字は送信が完了した後です。待機時間(ミリ秒単位)。
下のチェックボックス(ループ)を選択すると、カスタムシーケンスに従って送信が開始されます。選択しないと、送信が停止します。[構成の保存]ボタンを使用すると、上記の変更した構成を保存でき、次にプログラムを起動したときに保存できます。 、構成を保存できます。再編集する時間。
書き込み方法の簡単な説明は次のとおりです。
ループチェックボックス機能をクリックします
{ if(checkBox1.Checked) { forcanrun = true; //ループ送信フラグが有効です //他のインターフェイスボタンのステータスを定義します btn_sttestcom.Text = "End" ; commname = comboBox4.Text; commbps = combobps.Text; commcrc =combocrc。SelectedIndex; sendstr = richTextBox3.Text; //上記のテキストボックスを収集し、シリアル番号を送信し、時間データを遅延させて配列に保存し ます oradata(); //制御および送信するスレッドを作成して forsend =新しいスレッド(func_forsend); forsend.IsBackground = true; forsend.Start(); forcanrun = true; Console.WriteLine( "func_forsendスレッドが開始されました\ r \ n"); }
else //チェックボックスが選択されていない場合は、送信を停止してスレッドを終了します
{ forcanrun = false; forsend.Join(0); Console.WriteLine( "func_forsendスレッドが参加しました\ r \ n"); Thread.Sleep(1000); } }
//データを収集し、データを配列に保存する関数
public string [] oradata()
{
arraytxt [0] = richTextBox3.Text; // 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。テキスト;
sendindex [0] = Convert.ToInt16(textBox8.Text); //ρ送インデックス
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); //送信遅延sleeptime
[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);
文字列arrtxt1 = "";
int sendindex1 = 0;
int sleeptime1 = 0;
for(int m = 0; m <14; m ++)
{ for(int j = m + 1; j <14; j ++) { if(sendindex [j] <sendindex [m]) { sendindex1 = sendindex [j]; arrtxt1 = arraytxt [j]; sleeptime1 = sleeptime [j];
sendindex [j] = sendindex [m];
arraytxt [j] = arraytxt [m];
sleeptime [j] = sleeptime [m];
sendindex [m] = sendindex1;
arraytxt [m] = arrtxt1;
sleeptime [m] = sleeptime1;
}
}
}
return arraytxt;
}
//データを送信するスレッド関数
publicvoid func_forsend()
{ while(forcanrun)//チェックボックスが無効な場合にスレッドを終了するタイミングを制御するために使用されます。 { for(int i = 0; i <14; i ++) { if(sendindex [i] <20)//送信したくない場合は、20以上として定義できます { string bb = ""; if(crcselectindex> 0) bb = GetCRCData(arraytxt [i]); //送信するデータに応じて、crcチェックコードを計算し、最後の文字位置に追加します。 else bb = arraytxt [i]; int n = 0; //ここで自分で変更できます。ここで実装したのは、ネットワークモードとシリアル ポートモードの両方と互換性のあるif(!netflag)//シリアルモードです。方法送信するのはここではありません
{
n = ycomm.Sendstr(bb、Convert.ToInt16(ycomm.HexFlag));
}
else //ネットワークモード
{
if(netclientflag)//クライアントモード
n = csocket.Sendstr(bb、csocket.hexflag);
else //サーバーモード
{ if(scsocket.islisten) n = scsocket.SendData(bb); } } string sendstr1 = ""; //正常に送信されると、データがインターフェイスに表示され、タイムスタンプが追加され ます。 (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")+ "]"; } //数値表示データは手数料で実現されます。 ShowThreadDataToRec(sendstr1 + "送信→◇:" + bb + "\ r \ n"); if(savefilebz)//インチログマークが有効な場合は、メッセージをファイル txtfile.WriteLogFile( "送信→◇: "+ bb +" \ r \ n "、"メッセージ保存 "、1);
Thread.Sleep(sleeptime [i]); //送信が完了した後、一定時間遅延し、シリアルポートをブロックします
}
}
}
}
具体的には、シリアルポートとネットワークを使用してデータを送信する方法と、チェックコードの実装コードを計算する方法については、ここでは長々と説明します。