Bonjour, bonsoir à vous tous.

Nous sommes un groupe de travail en deuxième années de BTS SN, et nous avons pour projet de fin d'années de faire communiquer via une interface Ethernet/Série à plusieurs machines outils à commande numérique (MOCN).
Nous devons faire en sorte de crée une interface en PHP sur laquelle tout les PCs du réseaux pourront y accéder et y envoyer des fichiers sur les machines via les ports séries.

Actuellement, nous avons notre interface PHP de fonctionnel et notre base données où sont ranger les configuration des différentes machines, et nous avons déjà la configuration des ports séries d'opérationnelle. L'interface PHP modifie le contenue de fichier .txt ranger sur un PC console, ces fichier sont constamment vérifier par le code d’envois de fichier en C#. Nous avons aussi les ports séries de configurer, et ça grâce à quelques discussions sur ce site.

Notre problème est que nous ne savons pas comment envoyer des fichiers sur le port série pour l'envoyer sur les machines, et nous voudrions avoir votre avis sur la question. Merci à vous tous.

Voici le code d’envois de fichier: (Fais sur Microsoft Visual Studio 2010)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
using System;
using System.Net;
using System.Net.Sockets;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Ports;
using System.Threading;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Collections;
using System.Collections.Generic;
using System.Xml.Linq;
using MySql.Data.MySqlClient;
 
namespace MOCN_V3
{
    class Program
    {       
        private static void Main()
        {
            while (true)
            {
                string numeromachines = System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testportmachines.txt"); //J'instance une première fois les fichiers à récupérer
                                                                                                                    //sinon le programme ne fonctionne pas par la suite
                string semaphore = System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testpourbosser.txt");
                string fichiermachines = System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testenvoyermachines.txt"); //Les fichiers suivants sont des fichiers test
                string PortCom; //Je met en place des variables pour enregistrer les valeurs de la base de données
                string BaudRate;
                string Pariter;
                string StopBit;
                string DataBit;
                string HandShake;
 
                MySqlConnection Connection = null; 
                MySqlCommand RecupTable = new MySqlCommand();
                Connection = new MySqlConnection("SERVER=localhost; DATABASE=projet_bts-sn_mocn; UID=Eleve; PASSWORD="); // Connection à la base de données
                RecupTable.Connection = Connection;
 
                Connection.Open();
                DataSet InfosMachines = new DataSet();
                RecupTable.CommandText = "SELECT Port Com, Baud Rate, Parity, Stop Bits, Data Bits, HandShake FROM machine_outils WHERE ID = numeromachines"; //Sélectionne la table 
                MySqlDataReader Lecteur = RecupTable.ExecuteReader();
 
                PortCom = Lecteur["Port Com"].ToString(); //Je récupère les différentes valeurs de la table
                BaudRate = Lecteur["Baud Rate"].ToString();
                Pariter = Lecteur["Parity"].ToString();
                StopBit = Lecteur["Stop Bits"].ToString();
                DataBit = Lecteur["Data Bits"].ToString();
                HandShake = Lecteur["HandShake"].ToString();
                Lecteur.Close();
 
                if (Connection != null) //Petite boucle pour éviter les erreurs, j'ai essayer de mettre un try catch finally pour le même résultat
                                        //mais je ne pouvais pas récupérer les valeurs de la base de données plus tard dans le code
                {
                    Console.WriteLine("Erreur Base de données");
                    Connection.Close();
                }
                else
                    if (Connection.State == ConnectionState.Open)
                    {   Connection.Close();     }
 
                while (semaphore != "1")
                {
                    System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testpourbosser.txt");
                    semaphore = System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testpourbosser.txt");
                    File.Delete(semaphore);
                    System.Threading.Thread.Sleep(10000); //Timer de 10s pour les tests //Sera changer plus tard en timer de 1/2 sec 
                }
 
                if (semaphore == "1")
                {
                    File.Delete(numeromachines); //Supprime dans la mémoire le fichier instancier, car si on changeais le fichier en cours de lancement, 
                                                 //le programme prenait le fichier dans la mémoire et non là où il était à chercher
                    string portName;
                    portName = "COM" + PortCom; //Création du port série choisis où sera brancher la machine choisis
 
                    string PCBDD = PortCom;
                    int COMBDD;
                    COMBDD = Convert.ToInt32(PCBDD);
                    COMBDD = int.Parse(PCBDD);
                    string defaultPortName = "COM" + 1;
 
                    if (COMBDD == 100 || COMBDD == 0 || portName == "" || !(portName.ToLower()).StartsWith("COM")) //Si il y a une erreur ça enverras sur le port série par défaut COM1
                    {   
                        portName = defaultPortName;
                        Console.WriteLine("Erreur, fichier envoyer sur port série");
                    }
 
                    System.IO.File.ReadAllText(@"C:\Temp\temp_test_mocn\testenvoyermachines.txt");
 
                    SerialPort CSerialPort = new SerialPort(portName); //Création du port série et récupération des données
                    CSerialPort.BaudRate = Convert.ToInt32(BaudRate); //On a dut convertir pour certaines données ce que nous récupérions de la base de données
                    CSerialPort.DataBits = Convert.ToInt32(DataBit);
 
                    if (HandShake.Equals("NONE"))   //Toutes les machines ont des configuration différentes d'où e fait que l'ont prends tout les cas possibles
                    {   CSerialPort.Handshake = Handshake.None;    }
                    else
                        if (HandShake.Equals("DTR"))
                        {   CSerialPort.Handshake = Handshake.RequestToSend;    }
                        else
                            if (HandShake.Equals("BOTH"))
                            {   CSerialPort.Handshake = Handshake.RequestToSendXOnXOff;    }
                            else
                                if (HandShake.Equals("XON/XOFF"))
                                {   CSerialPort.Handshake = Handshake.XOnXOff;  }
 
                    if (Pariter.Equals("PAIRE"))
                    {   CSerialPort.Parity = Parity.Even;   }
                    else
                        if(Pariter.Equals("1"))
                        {   CSerialPort.Parity = Parity.Mark;   }
                        else
                            if (Pariter.Equals("NONE"))
                            {   CSerialPort.Parity = Parity.None;   }
                            else
                                if (Pariter.Equals("IMPAIRE"))
                                {   CSerialPort.Parity = Parity.Odd;    }
                                else
                                    if (Pariter.Equals("0"))
                                    {   CSerialPort.Parity = Parity.Space;  }
 
                    if (StopBit.Equals("NONE"))
                    {   CSerialPort.StopBits = StopBits.None;   }
                    else
                        if(StopBit.Equals("1"))
                        {   CSerialPort.StopBits = StopBits.One;    }
                        else
                            if(StopBit.Equals("1.5"))
                            {   CSerialPort.StopBits = StopBits.OnePointFive;   }
                            else
                                if (StopBit.Equals("2"))
                                {   CSerialPort.StopBits = StopBits.Two;    }
 
                    byte[] buffer = new byte[255];
                    CSerialPort.Open();
                    //PROBLEME !!!//PROBLEME !!!//PROBLEME !!!//PROBLEME !!!//PROBLEME !!!
 
                    //CSerialPort.Write("testenvoyermachines.txt");
 
                    //--
 
                    //********************************************************************
 
                    CSerialPort.Close();
                    System.Threading.Thread.Sleep(1000); //Timer de 1s
                }
            }
        }
    }
}
Si jamais vous avez des questions, où des suggestions par rapport au code n'hésitez pas à demander, j'ai rajouter quelque commentaires pour aider à comprendre ce que j'ai fait.

Bonne journée à vous tous