/// <summary> /// Данные ответа: /// байт[0]= InputData /// байт[1]= 0x03 /// байт[2]= кол-во байт (0x06) /// байт[3]= Статутс Ст. /// байт[4]= Статутс Мл. /// байт[5]= Счетчик обработанных клиентов Ст. /// байт[6]= Счетчик обработанных клиентов Мл. /// байт[7]= № билета 0-9бит (0-1023) - номер билета /// байт[8]= № билета 0-9бит (0-1023) - номер билета /// байт[9]= CRC Мл. /// байт[10]= CRC Ст. /// /// Статус (байт[4]) /// бит 0: Станция в работе /// бит 1: Запрос нового пасажира от сервера /// бит 2: Идет обработка пассажира /// бит 3: Последний пассажир обработанн /// бит 4: Результат обработки - успешно /// бит 5: Результат обработки - отсутсвует (обратно в очередь) /// бит 6: Запрос нового пасажира от сервера ПОЛУЧЕНН. /// </summary> public bool SetDataByte(byte[] data) { if (data == null || data.Length != CountSetDataByte) { IsOutDataValid = false; return(false); } byte[] dataBuffer = null; if (data[0] == InputData && data[1] == 0x03 && data[2] == (NReadRegister * 2) && Crc16.CheckCrc(data)) { dataBuffer = data.Skip(3).Take((NReadRegister * 2)).ToArray(); } if (dataBuffer != null) { OutputData = new CashierOutData { IsWork = (dataBuffer[1] & 0x01) != 0x00, Handling = CashierHandling.IsNotHandling }; if ((dataBuffer[1] & 0x04) == 0x00) // НЕ идет обработка пассажира { if ((dataBuffer[1] & 0x02) != 0x00) { OutputData.Handling = CashierHandling.IsStartHandling; // приглашен новый пассажир. if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x10) != 0x00) //приглашен новый пассажир + Последний пассажир обработан и обработанн успешно { OutputData.Handling = CashierHandling.IsSuccessfulAndStartHandling; } else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x20) != 0x00) //приглашен новый пассажир + Последний пассажир обработан и обработанн НЕ успешно { OutputData.Handling = CashierHandling.IsErrorAndStartHandling; } } else { if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x10) != 0x00) //Последний пассажир обработан и обработанн успешно { OutputData.Handling = CashierHandling.IsSuccessfulHandling; } else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x20) != 0x00) //Последний пассажир обработан и обработанн НЕ успешно { OutputData.Handling = CashierHandling.IsErrorHandling; } } } IsOutDataValid = true; return(true); } return(false); }
/// <summary> /// Обработка ответа на данные записи информации о билете (функц 0x10): /// байт[0]= InputData.Сashbox /// байт[1]= 0x10 /// байт[2]= Адр. Ст. /// байт[3]= Адр. Мл. /// байт[4]= Кол-во. рег. Ст. /// байт[5]= Кол-во. рег. Мл. /// байт[6]= CRC Мл. /// байт[7]= CRC Ст. /// </summary> public bool SetDataByte(byte[] data) { if (data == null || data.Length != CountSetDataByte) { IsOutDataValid = false; return(false); } if (data[0] == InputData.Сashbox && data[1] == 0x10 && Crc16.CheckCrc(data)) { IsOutDataValid = true; return(true); } IsOutDataValid = false; return(false); }
public bool SetSlaveMode() { DetectedSlaveAddress = 0; //redundant,only for notification _logger.Log("SetSlaveMode..."); if (IsSlaveModeActive()) { _logger.Log("Already in slave mode"); return(true); } _logger.Log("RX: " + Convertor.ConvertByteArrayToHexString(_recievedPacket)); if (!Crc16.CheckCrc(_recievedPacket)) { return(false); } byte[] packetToSend = { _recievedPacket[0], (byte)(_recievedPacket[1] + 0x80), (byte)0x05 }; Crc16.AddCrc(ref packetToSend); if (!SendPacket(packetToSend)) { return(false); } _logger.Log("TX: " + Convertor.ConvertByteArrayToHexString(packetToSend)); try { Thread.Sleep(2000); _logger.Log("TX: <ReadHoldingRegisters>"); _modbusSerial.ReadHoldingRegisters(_recievedPacket[0], RegisterMappingOffsets.PasswordRegisterOffset, 1); } catch (Exception) { return(false); } _logger.Log("SetSlaveMode - OK"); DetectedSlaveAddress = _recievedPacket[0]; return(true); }
/// <summary> /// Обработка ответа на данные записи информации о билете (функц 0x10): /// байт[0]= _addressDevice /// байт[1]= 0x10 /// байт[2]= Адр. Ст. /// байт[3]= Адр. Мл. /// байт[4]= Кол-во. рег. Ст. /// байт[5]= Кол-во. рег. Мл. /// байт[6]= CRC Мл. /// байт[7]= CRC Ст. /// </summary> public bool SetDataByte(byte[] data) { if (data == null || data.Length != CountSetDataByte) { _loggerCashierInfo.Info($"Ответ на Запись в планшет БИЛЕТА: НЕ валиден"); IsOutDataValid = false; return(false); } if (data[0] == _addressDevice && data[1] == 0x10 && Crc16.CheckCrc(data)) { _loggerCashierInfo.Info($"Ответ на Запись в планшет БИЛЕТА: ВАЛИДЕН"); IsOutDataValid = true; return(true); } _loggerCashierInfo.Info($"Ответ на Запись в планшет БИЛЕТА: НЕ верно CRC: \"{data.ConertByteArray2String()}\""); IsOutDataValid = false; return(false); }
/// <summary> /// Данные ответа: /// байт[0]= _addressDevice /// байт[1]= 0x03 /// байт[2]= кол-во байт (0x06) /// байт[3]= Статутс Ст. /// байт[4]= Статутс Мл. /// байт[5]= Счетчик обработанных клиентов Ст. /// байт[6]= Счетчик обработанных клиентов Мл. /// байт[7]= № билета 0-9бит (0-1023) - номер билета /// байт[8]= № билета 0-9бит (0-1023) - номер билета /// байт[9]= CRC Мл. /// байт[10]= CRC Ст. /// /// Статус (байт[4]) /// бит 0: Станция в работе /// бит 1: Запрос нового пасажира от сервера /// бит 2: Идет обработка пассажира /// бит 3: Последний пассажир обработанн /// бит 4: Результат обработки - успешно /// бит 5: Результат обработки - отсутсвует (обратно в очередь) /// бит 6: Запрос нового пасажира от сервера ПОЛУЧЕНН. /// бит 7: Результат обработки - перенаправленн на Админа /// </summary> public bool SetDataByte(byte[] data) { if (data == null || data.Length != CountSetDataByte) { _loggerCashierInfo.Info("Ответ на чтение: Данные не валидны !!!!!!!!!!!!!!"); IsOutDataValid = false; return(false); } _loggerCashierInfo.Info($"Ответ на чтение: \"{data.ConertByteArray2String()}\""); byte[] dataBuffer = null; if (data[0] == _addressDevice && data[1] == 0x03 && data[2] == (NReadRegister * 2) && Crc16.CheckCrc(data)) { dataBuffer = data.Skip(3).Take((NReadRegister * 2)).ToArray(); } if (dataBuffer != null) { OutputData = new CashierOutData { IsWork = (dataBuffer[1] & 0x01) != 0x00, Handling = CashierHandling.IsNotHandling }; //Статутс Мл.Байт if ((dataBuffer[1] & 0x04) == 0x00) // (== 0x00) НЕ идет обработка пассажира { if ((dataBuffer[1] & 0x02) != 0x00) { OutputData.Handling = CashierHandling.IsStartHandling; //Приглашен новый пассажир. if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x10) != 0x00) //Приглашен новый пассажир + Последний пассажир обработан и обработанн успешно { OutputData.Handling = CashierHandling.IsSuccessfulAndStartHandling; } else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x20) != 0x00) //Приглашен новый пассажир + Последний пассажир обработан и обработанн НЕ успешно { OutputData.Handling = CashierHandling.IsErrorAndStartHandling; } // бит 7: перенаправление на АДМИНА else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x80) != 0x00) //Приглашен новый пассажир + Последний пассажир обработан и перенаправлен на АДМИНА { OutputData.Handling = CashierHandling.IsRedirectAndStartHandling; } } else { if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x10) != 0x00) //Последний пассажир обработан и обработанн успешно { OutputData.Handling = CashierHandling.IsSuccessfulHandling; } else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x20) != 0x00) //Последний пассажир обработан и обработанн НЕ успешно { OutputData.Handling = CashierHandling.IsErrorHandling; } // бит 7: перенаправление на АДМИНА else if ((dataBuffer[1] & 0x08) != 0x00 && (dataBuffer[1] & 0x80) != 0x00) //Последний пассажир обработан и перенаправлен на АДМИНА { OutputData.Handling = CashierHandling.IsRedirectHandling; } } } _loggerCashierInfo.Info($"Ответ на чтение (OutputData объект): \" IsWork= {OutputData.IsWork}\" \" Handling= {OutputData.Handling}\""); IsOutDataValid = true; return(true); } return(false); }