Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.68 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO.Ports;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8.  
  9. namespace ComConnector
  10. {
  11.     public class ComPort
  12.     {
  13.         private SerialPort _comPort;
  14.         private string _namePort;
  15.         private int _baudRate;
  16.         public SerialPort SerialPort { get => _comPort; }
  17.  
  18.         public string NamePort { get => _namePort; set => _namePort = value; }
  19.  
  20.         public ComPort(string namePort, int baudRate)
  21.         {
  22.             _comPort = new SerialPort();
  23.             NamePort = namePort;
  24.             _baudRate = baudRate;
  25.             _comPort.DataReceived+=new SerialDataReceivedEventHandler(GetAnswer);
  26.         }
  27.  
  28.         public string OpenPort()
  29.         {
  30.             try
  31.             {
  32.                 // если порт был ранее открыт, закрыть его
  33.                 if (_comPort.IsOpen)
  34.                 {
  35.                     _comPort.Close();
  36.                 }
  37.                 // название COM-порта
  38.                 _comPort.PortName = NamePort;
  39.  
  40.                 // скорость работы COM-порта
  41.                 _comPort.BaudRate = _baudRate;
  42.  
  43.                 // число бит данных
  44.                 _comPort.DataBits = 8;
  45.  
  46.                 // число стоповых бит - один
  47.                 _comPort.StopBits = StopBits.One;
  48.  
  49.                 // бит паритета - нет
  50.                 _comPort.Parity = Parity.None;
  51.  
  52.                 // квитировать установление связи - нет
  53.                 _comPort.Handshake = Handshake.None;
  54.  
  55.                 // число принимаемых бит
  56.                 _comPort.ReceivedBytesThreshold = 8;
  57.  
  58.                 // размер буфера для записи
  59.                 _comPort.WriteBufferSize = 20;
  60.  
  61.                 // размер буфера для чтения
  62.                 _comPort.ReadBufferSize = 20;
  63.  
  64.                 // время таймаута чтения - по умолчанию
  65.                 _comPort.ReadTimeout = -1;
  66.  
  67.                 // время таймаута записи - по умолчанию
  68.                 _comPort.WriteTimeout = -1;
  69.  
  70.                 // сигнал готовности терминала к передаче данных - не
  71.                 // установлен
  72.                 _comPort.DtrEnable = false;
  73.  
  74.                 // открыть порт
  75.                 _comPort.Open();
  76.  
  77.                 // запрос передатчика - установлен
  78.                 _comPort.RtsEnable = true;
  79.  
  80.                 // задержка
  81.                 System.Threading.Thread.Sleep(100);
  82.  
  83.                 return "Порт открыт";
  84.             }
  85.             catch (Exception ex)
  86.             {
  87.                 // Возвращаем ошибку
  88.                 return ReturnError(ex);
  89.             }
  90.         }
  91.  
  92.         public string ClosePort()
  93.         {
  94.             try
  95.             {
  96.                 // освободить выходной буфер
  97.                 _comPort.DiscardOutBuffer();
  98.  
  99.                 // освободить входной буфер
  100.                 _comPort.DiscardInBuffer();
  101.  
  102.                 // закрыть порт
  103.                 if (_comPort.IsOpen)
  104.                 {
  105.                     _comPort.Close();
  106.                 }
  107.  
  108.                 return "Порт закрыт";
  109.             }
  110.             catch (Exception ex)
  111.             {
  112.                 // Возвращаем ошибку
  113.                 return ReturnError(ex);
  114.             }
  115.         }
  116.  
  117.         public string SendPort(string command)
  118.         {
  119.             try
  120.             {
  121.                 Thread.Sleep(100);
  122.  
  123.                 Answer = null;
  124.                 // записать команду в COM-порт (символ окончания команды –
  125.                 // 0x0D)
  126.                 _comPort.WriteLine(command + (char)0x0D);
  127.  
  128.                 return $"Команда {command} успешно записана";
  129.             }
  130.             catch (Exception ex)
  131.             {
  132.                 return ReturnError(ex);
  133.             }
  134.         }
  135.  
  136.         public String Answer;
  137.  
  138.         public void GetAnswer(object sender, SerialDataReceivedEventArgs e)
  139.         {
  140.             try
  141.             {
  142.                 Thread.Sleep(100);
  143.                 // буфер для чтения данных из COM-порта
  144.                 byte[] dataR = new byte[_comPort.BytesToRead];
  145.  
  146.                 // прочитать данные
  147.                 _comPort.Read(dataR, 0, dataR.Length);
  148.  
  149.                 // Строку для результата
  150.                 StringBuilder result = new StringBuilder(String.Empty);
  151.  
  152.                 // Получаем результат комнды
  153.                 dataR.ToList() // Приводим к листу
  154.                     .ForEach(obj =>  // Вызываем Foreach - Проход по всем элементам
  155.                     result.Append( // Присоеддиняем к текущей строоке
  156.                     (char)obj) // Конвертируем byte в char
  157.                 );
  158.  
  159.                 // Очищаем буффер
  160.                 _comPort.DiscardInBuffer();
  161.              
  162.                 Answer = $"{result}";
  163.             }
  164.             catch (Exception ex)
  165.             {
  166.                 Answer=ReturnError(ex);
  167.             }
  168.         }
  169.  
  170.         private string ReturnError(Exception ex)
  171.         {
  172.             return $"Произошла ошибка: {ex.Message}";
  173.         }
  174.  
  175.    
  176.     }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement