Exemplo n.º 1
0
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="portName">Имя порта</param>
 /// <param name="baudRate">Скорость обмена</param>
 public SerialCommunicator(string portName, int baudRate)
     : base()
 {
     _port          = new EasyCommunicationPort();
     _port.PortName = portName;
     _port.BaudRate = baudRate;
 }
Exemplo n.º 2
0
        private void OpenPort(EasyCommunicationPort port)
        {
            if (_portOpened)
            {
                return;
            }

            port.SetCommStateEvent += SetCommStateEventHandler;
            try
            {
                // дополнительные действия до открытия порта
                OnBeforeActivate();

                // открываем порт на заданной скорости
                port.BaudRate = _baudRate;
                port.Open();

                _portOpened = true;
            }
            catch (Win32Exception e)
            {
                // устанавливаем код ошибки
                ErrorCode = new ServerErrorCode(this, e);
                throw;
            }
            finally
            {
                port.SetCommStateEvent -= SetCommStateEventHandler;
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Освобождение ресурсов
 /// </summary>
 public void Dispose()
 {
     if (_port != null)
     {
         _port.Dispose();
         _port = null;
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="portName">Имя порта модема</param>
        /// <param name="baud">Скорость связи с модемом</param>
        public ShortMessageSender(string portName, int baud)
        {
            _port          = new EasyCommunicationPort();
            _port.PortName = portName;
            _port.BaudRate = baud;
            _port.DataBits = 8;
            _port.StopBits = StopBits.One;
            _port.Parity   = Parity.None;
            _port.DsrFlow  = false;

            _finalResults = new string[] { "OK", ">", "ERROR", "+CMS ERROR", "Call Ready" };
        }
Exemplo n.º 5
0
        public short Execute(EasyCommunicationPort Port, byte[] nRsp)
        {
            byte nResponse;
            int  nRetries = 0;

            try
            {
                Port.DiscardBuffers();

                // отправка запроса на передачу данных
                do
                {
                    nRetries++;
                    // если максимальное число попыток исчерпано, считаем, что вышел таймаут
                    if (nRetries > MAX_RETRIES_COUNT)
                    {
                        throw new TimeoutException();
                    }

                    Port.WriteByte(ENQ);
                    nResponse = (byte)Port.ReadByte();
                }while (nResponse != ACK);

                // передача данных и ожидание ответа
                nRetries = 0;
                do
                {
                    nRetries++;
                    // если максимальное число попыток исчерпано, считаем, что вышел таймаут
                    if (nRetries > MAX_RETRIES_COUNT)
                    {
                        throw new TimeoutException();
                    }

                    Port.Write(GetCommandRequest(), 0, m_FullLen);
                    nResponse = (byte)Port.ReadByte();
                }while (nResponse != ACK);
            }
            catch (TimeoutException)
            {
                return((short)GeneralError.Timeout);
            }

            return(ReadResponse(Port, nRsp));
        }
Exemplo n.º 6
0
        private void ActivatePort(EasyCommunicationPort port)
        {
            if (_portActivated)
            {
                return;
            }

            try
            {
                // дополнительные действия после открытия порта
                OnAfterActivate();
                _portActivated = true;
            }
            catch (Win32Exception e)
            {
                ErrorCode = new ServerErrorCode(this, e);
                throw;
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Создает экземпляр класса
        /// </summary>
        /// <param name="parent">Родительское устройство</param>
        /// <param name="port">Коммуникационный порт</param>
        /// <param name="address">Адрес модуля</param>
        public RelayModule(IDevice parent, EasyCommunicationPort port, byte address)
        {
            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }
            if (port == null)
            {
                throw new ArgumentNullException("port");
            }
            if (address > 7)
            {
                throw new ArgumentOutOfRangeException("address");
            }

            _parent  = parent;
            _port    = port;
            _address = address;

            // сбрасываем все реле модуля в "выключено"
            ExecuteCommand(0, 1);
        }
Exemplo n.º 8
0
 public SPProtocol(EasyCommunicationPort port, string password)
 {
     _port     = port;
     _password = password;
 }
Exemplo n.º 9
0
        private short ReadResponse(EasyCommunicationPort Port, byte[] nRsp)
        {
            short nErrorCode = 0;
            bool  bSuccess   = false;

            byte[] nRequest     = new byte[MAX_CMD_LEN];
            int    nRetries     = 0;
            short  dwPrefixSize = 3 + 3;
            //                 |CMD| RC|
            byte nResponse   = 0;
            int  nRequestLen = 0;

            short dwDataSize = (short)nRsp.Length;

            try
            {
                do
                {
                    nRetries++;
                    // если максимальное число попыток исчерпано, считаем, что вышел таймаут
                    if (nRetries > MAX_RETRIES_COUNT)
                    {
                        throw new TimeoutException();
                    }

                    Port.ReadTimeout = 600;
                    do
                    {
                        nResponse = (byte)Port.ReadByte();
                    }while (nResponse == SYN);

                    nRequestLen = 0;
                    // чтение полей CMD и RC - 6 байт
                    nRequestLen += Port.Read(nRequest, nRequestLen, 6);
                    nErrorCode   = Convert.ToInt16(Encoding.ASCII.GetString(nRequest, 3, 3));

                    // если ошибок не было, читаем данные ответа
                    if (nErrorCode == 0)
                    {
                        nRequestLen += Port.Read(nRequest, nRequestLen, nRsp.Length);
                    }

                    // читаем ETX и BCC
                    nRequestLen += Port.Read(nRequest, nRequestLen, 2);
                    bSuccess     = CalcBCC(nRequest, 0, nRequestLen - 1) == nRequest[nRequestLen - 1];

                    // если контрольная сумма не сошлась, нужно запросить повтора отправки данных
                    if (!bSuccess)
                    {
                        Port.WriteByte(NACK);
                    }
                    // если все успешно, скопировать данные в nRsp
                    else
                    {
                        Array.Copy(nRequest, dwPrefixSize, nRsp, 0, nRequestLen - dwPrefixSize - 2);
                    }
                }while (!bSuccess);
            }
            catch (TimeoutException)
            {
                nErrorCode = (short)GeneralError.Timeout;
            }

            if (nErrorCode == 0)
            {
                nErrorCode = (short)GeneralError.Success;
            }

            return(nErrorCode);
        }
Exemplo n.º 10
0
 public short Execute(EasyCommunicationPort Port)
 {
     return(Execute(Port, new byte[] { }));
 }
Exemplo n.º 11
0
 /// <summary>
 /// Создает экземпляр класса
 /// </summary>
 /// <param name="portName">Имя порта</param>
 public SerialPortsHelper(string portName)
 {
     _port          = new EasyCommunicationPort();
     _port.PortName = portName;
     _deviceId      = string.Empty;
 }
Exemplo n.º 12
0
 public StrokeProtocol(EasyCommunicationPort port)
 {
     _port = port;
 }