1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO.Ports;
using System.IO;
using System.Threading;
namespace Communicatio_1
{
public partial class Form1 : Form
{
public byte[] bBufferBytes; //buffer a envoyer
public delegate void myDelegate(byte sData);
//public event SerialDataReceivedEventHandler DataReceived;
public enum LogMsgType { Incoming, Outgoing, Normal, Warning, Error };
public bool RtsEnable ;//{ get; set; };
public bool DtrEnable ;//{ get; set; }
public bool CtsHolding ; //{ get; }
public bool DsrHolding ;//{ get; }
public Form1()
{
InitializeComponent();
this.Refresh();
backgroundWorker1 = new BackgroundWorker();
}
private void Form1_Load(object sender, EventArgs e) //l'événement Form_Load nous lire tous les ports série disponibles et nous assigner les valeurs à la liste déroulante.
{
//on commence par lister les voies séries présentes
String[] ports = SerialPort.GetPortNames(); //fonction statique
//string [] ports = System.IO.Ports.SerialPort.GetPortNames ();
for (int i = 0; i < ports.Length; i++) //on ajoute les ports au combo box
{
portBox.Items.Add(ports[i]);
}
}
private void button_charger_Click(object sender, EventArgs e)
{
openFileDialog1.Title = "Chargement";// Titre
openFileDialog1.FilterIndex = 1;
if (openFileDialog1.ShowDialog(this) == DialogResult.OK) // Ouverture boite de dialogue OpenFile
{
textBox1.Text = string.Empty; // On vide le TextBox
backgroundWorker1.RunWorkerAsync();// executer le Background worker doWork()
StreamReader sr = new StreamReader(openFileDialog1.OpenFile(), Encoding.Default); // Ouverture du fichier sélectionné
// son nom est dans openFileDialog1.FileName
try
{
string data = sr.ReadLine();
while (data != null)
{
bBufferBytes = System.Text.Encoding.ASCII.GetBytes(data); //Place le contenu dans un buffer d'octets (ASCII: 1 char = 1 octet) (UNICODE: 1 Char = 2 octets)
//timer1.Start();
textBox1.AppendText(data + "\r\n");
data = sr.ReadLine();
StatusLabel1.Text = "Transfert en cours...";
// serialPort1.Write(bBufferBytes, 0, bBufferBytes.Length); // Ecrit le buffer complet sur le SerialPort
}
}
finally
{
if (sr != null)
sr.Close();
StatusLabel1.Text = "Transfert Fini ";
}
}
}
private void button_connecter_Click(object sender, EventArgs e)
{
serialPort1.PortName = portBox.SelectedItem.ToString();
serialPort1.BaudRate = 9600;
serialPort1.Parity = Parity.Even;
serialPort1.StopBits = StopBits.One;
serialPort1.DataBits = 8;
serialPort1.Handshake = Handshake.None;
serialPort1.PortName = portBox.Text;
serialPort1.RtsEnable = false;
serialPort1.DtrEnable = false;
// serialPort1.XonXoffOut = False
//serialPort1.XonXoffIn = False
// serialPort1.Open();
serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);
serialPort1.PinChanged += new SerialPinChangedEventHandler(serialPort1_PinChanged);
try
{
serialPort1.Open(); //Ouvrez le SerialPort
bool blnCTS = serialPort1.CtsHolding;// lire CTS
bool blnDSR = serialPort1.DsrHolding;// lire DSR
bool blnCD = serialPort1.CDHolding;// lire CD
StatusLabel1.Text = "serialPort1 : " + portBox.Text + " Opened";//Mettre à jour le StatusStrip
MessageBox.Show("Opened");
}
catch (Exception ex)
{
MessageBox.Show("Failed: " + ex.Message);
}
button_connecter.Enabled = false;
button_deconnecter.Enabled = true;
textBox1.ReadOnly = false;
textBox2.ReadOnly = false;
radioButton.Enabled = true;
radioButton.BackColor = Color.Black;
}
private void button_deconnecter_Click(object sender, EventArgs e)
{
try
{
serialPort1.Close(); //fermer le SerialPort
StatusLabel1.Text = "serialPort1 : " + portBox.Text + " Closed"; //Mettre à jour le StatusStrip
MessageBox.Show("Closed");
}
catch (Exception ex)
{
MessageBox.Show("Failed: " + ex.Message);
}
button_connecter.Enabled = true; // activer le button connecter
button_deconnecter.Enabled = false;// desctiver le bitton deconnecter
textBox1.ReadOnly = true;
textBox2.ReadOnly = true;
radioButton.BackColor = Color.White;
}
private void button_recevoir_Click(object sender, EventArgs e)
{
StatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez...";
serialPort1.WriteLine("13"); // lance la tache envoiFil
// textBox2.SelectedText = string.Empty;
//serialPort1.PinChanged += new SerialPinChangedEventHandler(serialPort1_PinChanged);
//textBox2.AppendText(DataReceived.ToString());
}
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string value = "";//string vide
//tant qu'il y a des données entrée on continue
while (serialPort1.BytesToRead > 0)
{
char[] buffer = new char[255]; // on crée un char de 255 caractere
int longueur_bytes_read = serialPort1.Read(buffer, 0, buffer.Length); //lecture du buffer jusqu'a sa longeur buffer.Length
//tes characteres sont contenus dans buffer.
//on remplit notre string value byte par byte par notre tableau de charactere buffer, le += fait que l'on écrase pas les données qui sont inserées, mais on les ajoutes.
for (int i = 0; i < longueur_bytes_read; i++)
{
value += buffer[i];
}
}
safeInput(value.ToString()); //la methode toString passe tes bytes en characteres lisibles.
}
private void safeInput(string msg)
{
MethodInvoker method = delegate
{
textBox2.SelectedText = string.Empty; // on efface la textbox
textBox2.AppendText(msg.ToString() + "\r"); // on met les données dedans en string (conversion char->string)
};
if (InvokeRequired)
BeginInvoke(method);
else
method.Invoke();
}
private void button_envoyer_Click(object sender, EventArgs e)
{
StatusLabel1.Text = "Appuyez sur 'F6' de la commande numérique puis patientez...";
// backgroundWorker1.RunWorkerAsync();// executer le Background worker doWork()
serialPort1.WriteLine("10"); // lance la tache receveFil
StreamReader sr = new StreamReader(openFileDialog1.OpenFile(), Encoding.Default);
try
{
string data = sr.ReadLine();
while (data != null)
{
bBufferBytes = System.Text.Encoding.ASCII.GetBytes(data); //Place le contenu dans un buffer d'octets (ASCII: 1 char = 1 octet) (UNICODE: 1 Char = 2 octets)
serialPort1.Write(bBufferBytes, 0, bBufferBytes.Length); // Ecrit le buffer complet sur le SerialPort
data = sr.ReadLine();
StatusLabel1.Text = "Transfert en cours...";
}
}
finally
{
if (sr != null)
sr.Close();
StatusLabel1.Text = "Transfert Fini ";
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 100; i++ )
{
Thread.Sleep(100);
backgroundWorker1.ReportProgress(i);
//System.Threading.Thread.Sleep(100);
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
backgroundWorker1.ReportProgress(0);
return;
}
}
backgroundWorker1.ReportProgress(100);
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar2.Value = e.ProgressPercentage;
StatusLabel1.Text = "Télechargement en court..." + progressBar1.Value.ToString() + "%";
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
StatusLabel1.Text = ("Télechargement Fini");
}
private void serialPort1_PinChanged(object sender, SerialPinChangedEventArgs e)
{
// Si les trois signaux d'entrée changent au-dessus dudit cet événement PinChanged sera trriggered
bool b;
switch (e.EventType)
{
case System.IO.Ports.SerialPinChange.CDChanged:
b = serialPort1.CDHolding;
break;
case System.IO.Ports.SerialPinChange.CtsChanged:
b = serialPort1.CtsHolding;
break;
case System.IO.Ports.SerialPinChange.DsrChanged:
b = serialPort1.DsrHolding;
break;
default:
break;
}
}
private void button_sauvegarder_Click(object sender, EventArgs e)
{
/* SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
SaveFileDialog1.Filter = "Text Files (*.txt)|*.txt";
SaveFileDialog1.Title = "Save Received As";
if (((SaveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
&& (SaveFileDialog1.FileName.Length > 0))) {
My.Computer.FileSystem.WriteAllText(SaveFileDialog1.FileName, Received.Text, false);
// Overwrite file
}*/
}
} |