Beispiel #1
0
        private ModbusException HandleIOException(IOException ioe)
        {
            ModbusException moe;

            if (ioe.InnerException is SocketException)
            {
                SocketException soe = ioe.InnerException as SocketException;
                //attenteEnCours = false;
                if (soe.ErrorCode == 10060) // Read timed out
                {
                    moe = new ModbusTimeoutException("Expiration du timer d'attente de connexion ou de réponse.", soe);
                }
                else
                {
                    moe = new ModbusException("Erreur de connexion ou de lecture du Socket.", soe);
                }
            }
            else
            {
                moe = new ModbusException("IOException innattendue.", ioe);
            }
            return(moe);
        }
Beispiel #2
0
        private void recevoirReponse()
        {
            NetworkStream readNws         = socket.GetStream();
            int           nbOctetsALire   = 0;
            int           nbOctetsLus     = 0;
            int           indexFinReponse = 0;

            try
            {
                nbOctetsLus = readNws.Read(tamponReponse, 0, 7);
                if (nbOctetsLus > 0)
                {
                    nbOctetsALire = tamponReponse[4] * 256 + tamponReponse[5] - 1;
                    while ((indexFinReponse < nbOctetsALire) || (nbOctetsLus == 0))
                    {
                        nbOctetsLus = readNws.Read(tamponReponse, indexFinReponse + 7, nbOctetsALire - indexFinReponse);
                        Console.WriteLine("{0} octets lus.", nbOctetsLus);
                        indexFinReponse += nbOctetsLus;
                        Thread.Sleep(50);   // On laisse un peu de temps pour que la suite de la trame arrive
                    }
                    trameReponse = new byte[indexFinReponse + 7];
                    Buffer.BlockCopy(tamponReponse, 0, trameReponse, 0, indexFinReponse + 7);
                }
            }
            catch (IOException ioe)
            {
                ModbusException moe = HandleIOException(ioe);
                if (!(moe is ModbusTimeoutException))
                {
                    throw moe;
                }
            }
            finally
            {
                finReception = true;
            }
        }