Реализация передачи файлов через com-порт - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, я только недавно начал изучать с#, мой скил соу лоу, так что для того чтобы сделать следующее задание мне нужна некоторая поддержка, надеюсь получить её здесь. Итак, задача заключается в следующем, перебросить какие-то данные через ком-порт, к примеру, файл. Вот что я сумел нашкодить:

Решение задачи: «Реализация передачи файлов через com-порт»

textual
Листинг программы
        //-----------------------------------
        // Метод ассинхронного приёма данных
        //-----------------------------------
        protected override void OnDoWork(DoWorkEventArgs e)
        {
            Message("Поток приёма стартовал\n");
 
            int readedBytesCount = 0;               // счётчик считанных байтов
            byte len = 0;                           // длина поля DATA
            byte[] receiveBuffer = new byte[60];    // приёмный буфер
            byte[] resultBuffer;                    // результирующий буфер
 
            while (true)
            {
                readedBytesCount = 0;
                if (CancellationPending)
                {
                    e.Cancel = true;
                    break;
                }
 
                try
                {
                    if (!com.IsOpen)
                    {
                        Message("Порт закрыт\n");
                        break;
                    }
                    lock (comLocker)
                    {
                        //stx
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
                        if (readedBytesCount < 1)
                        {
                            Message("[err 0]\n");
                            continue;
                        }
                        if (receiveBuffer[0] != 0xB5)
                        {
                            Message("[err 1]\n");
                            continue;
                        }
                        //address
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
 
                        //len
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
                        len = receiveBuffer[2];
 
                        //cmd
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
 
                        //data
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, len);
 
                        //crc
                        readedBytesCount += com.Read(receiveBuffer, readedBytesCount, 1);
 
                        resultBuffer = new byte[readedBytesCount];
                        Array.Copy(receiveBuffer, resultBuffer, resultBuffer.Length);
 
                        Debugger.MessageDateTime("COM получил пакет, генерирует событие");
                        OnPackageReceived(this, new ObjectEventArgs(resultBuffer));
                    }
                }
                catch (TimeoutException err) { continue; }
                catch (IOException err) { Message(err.Message); continue; }
 
                Thread.Sleep(1);
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы