Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

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

22.03.2019, 08:44. Показов 1154. Ответов 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
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
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
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
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
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
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
14301 / 9386 / 1353
Регистрация: 21.01.2016
Сообщений: 35,385
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
9933 / 2936 / 494
Регистрация: 05.10.2013
Сообщений: 7,983
Записей в блоге: 239
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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru