/// <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; }
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; } }
/// <summary> /// Освобождение ресурсов /// </summary> public void Dispose() { if (_port != null) { _port.Dispose(); _port = null; } }
/// <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" }; }
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)); }
private void ActivatePort(EasyCommunicationPort port) { if (_portActivated) { return; } try { // дополнительные действия после открытия порта OnAfterActivate(); _portActivated = true; } catch (Win32Exception e) { ErrorCode = new ServerErrorCode(this, e); throw; } }
/// <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); }
public SPProtocol(EasyCommunicationPort port, string password) { _port = port; _password = password; }
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); }
public short Execute(EasyCommunicationPort Port) { return(Execute(Port, new byte[] { })); }
/// <summary> /// Создает экземпляр класса /// </summary> /// <param name="portName">Имя порта</param> public SerialPortsHelper(string portName) { _port = new EasyCommunicationPort(); _port.PortName = portName; _deviceId = string.Empty; }
public StrokeProtocol(EasyCommunicationPort port) { _port = port; }