Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Добавить проверку или исправить баг

22.03.2019, 08:44. Показов 1180. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не хватает какой-то проверки или тут мелкий косяк, помогите найти

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
internal override string GetVersion()
        {
            var cmdFirmvare = new byte[] { 0x0D, 0x24, 0x2B, 0x24, 0x21, 0x0D };
 
            try
            {
                if (_port.BytesToRead == 0)
                {
                    _port.Write(cmdFirmvare, 0, cmdFirmvare.Length);
                    _port.BaseStream.Flush();
                }
 
                var fw = new List<byte>();
                while (true)
                {
                    if (_port.BytesToRead == 0)
                    {
                        if (fw.Count == 0) continue;
                        string firmware = ASCIIEncoding.ASCII.GetString(fw.ToArray());
                        string pattern = "RELEASE ";
                        var index = firmware.IndexOf(pattern);
                        if (index != -1)
                        {
                            _FirmwareVersion = firmware.Substring(index + pattern.Length, firmware.Length - index - pattern.Length);
                        }
                        break;
                    }
                    var data = new byte[_port.BytesToRead];
                    _port.Read(data, 0, data.Length);
                    fw.AddRange(data);
                }
            }
            catch (Exception ex)
            {
                OnError(new DevicesBase.DeviceErrorEventArgs(DevicesBase.ErrorLevel.Error, "Ошибка во время опроса.", ex));
            }
            return cmdFirmvare.ToString();
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.03.2019, 08:44
Ответы с готовыми решениями:

Баг или что? как исправить
procedure TForm1.Button5Click(Sender: TObject); var a,b,e,x0,x,F2,F1,n,F,C:real; // {Комбинированный} begin ...

Баг программы или как его исправить
вылазят два бага : 1) если я еще не нажал кнопку сформировать матрицу ,а сразу жму система уравнений,то вылетает вот такая ошибка (см фото...

std::regex : баг на сайте или баг компилятора?
http://en.cppreference.com/w/cpp/regex/regex_match этот код выкидывает throw... Добавлено через 35 секунд компилятор gcc 4.8

9
Эксперт .NET
 Аватар для Usaga
14319 / 9404 / 1356
Регистрация: 21.01.2016
Сообщений: 35,468
22.03.2019, 08:48
ShmelVG, и начать нам надо с того, что угадать как оно должно работать и как работает сейчас, да?
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
22.03.2019, 08:57  [ТС]
Usaga, этот метод используется в методе Open() (который вызывается для открытия сканера), а этот метод всего лишь отправляет массив байт в порт и получает байтовый ответ, переводит ответ в строку и из текста получает именно версию прошивки. Практически всё работает правильно, но сказали что тут есть небольшой баг (возможно не хватает проверки?), но я не могу понять, при инициализации масс ошибок не должно быть, а всё остальное в try/catch
0
Эксперт .NET
 Аватар для Usaga
14319 / 9404 / 1356
Регистрация: 21.01.2016
Сообщений: 35,468
22.03.2019, 09:04
ShmelVG, на самом деле весь код - шлак.

Одна из ошибок, точно находится тут:
C#
1
_FirmwareVersion = firmware.Substring(index + pattern.Length, firmware.Length - index - pattern.Length);
Вы, почему-то, понимаете, что строка "RELEASE" может прийти не сразу и завели буфер, с которым очень криво работаете. Но как только вы распознали подстроку, почему-то, решили, что вся остальная информация за ней сразу всем куском пришла.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
22.03.2019, 09:21  [ТС]
Usaga,
Цитата Сообщение от Usaga Посмотреть сообщение
на самом деле весь код - шлак.

Окей, а какой есть вариант? Я всего лишь реализовал _FirmwareVersion который я буду применять в проекте, этот код в библиотеке
C#
1
2
3
private string _FirmwareVersion = string.Empty;
 
        public override string FirmwareVersion { get { return _FirmwareVersion; } }
0
Эксперт .NET
 Аватар для Usaga
14319 / 9404 / 1356
Регистрация: 21.01.2016
Сообщений: 35,468
22.03.2019, 09:27
ShmelVG, у вас должен быть чёткий критерий конца строки с версией. Когда в принимающем буфере окажется вся строка, тогда и разбирайте её.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
22.03.2019, 09:29  [ТС]
Usaga, мне кажется дело в другом, сейчас отлаживаю и попадаю в бесконечный цикл
C#
1
2
3
4
5
 while (true)
                {
                    if (_port.BytesToRead == 0)
                    {
                        if (fw.Count == 0) continue;
Видимо вон он баг)
0
Эксперт .NET
 Аватар для Usaga
14319 / 9404 / 1356
Регистрация: 21.01.2016
Сообщений: 35,468
22.03.2019, 09:38
ShmelVG, юнит-тесты примените. Такой код на ура юнит-тестируется.
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
22.03.2019, 12:42  [ТС]
Usaga, не писал ещё) Надо попробовать)

Добавлено через 2 часа 42 минуты
Usaga, подскажите, как записать в _FirmwareVersion версию?

Когда в программ тестирую, оно возвращается
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void Main(string[] args)
        {            
            BarcodeScanner sc = new ScannerBC();
            sc.PortName = "COM8";
            sc.Scan += Sc_Scan;
            sc.Open();
            Console.WriteLine(sc.FirmwareVersion);
            Console.Read();
        }
 
        private static void Sc_Scan(object sender, BarcodeScanEventArgs e)
        {
            Console.WriteLine(ASCIIEncoding.ASCII.GetString(e.Data));            
        }
Добавлено через 1 минуту
но в конечном итоге не записывается в
C#
1
public override string FirmwareVersion { get { return _FirmwareVersion; } }
тк в _FirmwareVersion пусто

Добавлено через 39 секунд
Вот он где баг)

Добавлено через 11 минут
Сделал так, теперь возвращает то что нужно
C#
1
return FirmwareVersion;
Но проблема в том, что в приложении виснет в бесконечном цикле, надо поменять условие While, но не знаю на что((

Добавлено через 3 минуты
Предполагаю, надо выполнять пока собирается сообщение выйти, т.е. по идее в вайл надо заменить на длинну массива, но как это сделать?
0
9948 / 2948 / 497
Регистрация: 05.10.2013
Сообщений: 8,019
Записей в блоге: 242
23.03.2019, 18:56
Цитата Сообщение от ShmelVG Посмотреть сообщение
не писал ещё) Надо попробовать)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.03.2019, 18:56
Помогаю со студенческими работами здесь

Баг asio? или баг TCP стека?
всем привет. повстречался с очень странным багом. и не могу определить кто бажит, asio, или TCP-стек. на стороне клиента,...

Letter-spacing баг или не баг?
Здравствуйте! Использовал letter-spacing для увеличения расстояния между буквами. Как оказалось расстояние появилось и после последней...

Забавный баг Делфи ...или не баг?
кароч кидаем на форму 2 editа и кнопку и пишем такой код unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

Как проще исправить или добавить, в регистрации на PHP
Здравствуйте! Где исправить или добавить,...(я новичок в php) Если из файла reg.php перебрасывается на файл save_user.php и...

Мерцание картинки OpenGL. Как исправить или что нужно добавить?
Начинаю знакомиться с OpenGL, задание было нарисовать картинку: белый треугольник, пурпурный и белый круг. Я сделала, все работало, потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru