Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 2
Регистрация: 08.12.2013
Сообщений: 14
.NET 4.x

Асинхронная функция которая считывает всего несколько раз данные с микроконтроллера (Arduino) через СОМ порт

26.03.2017, 01:57. Показов 1612. Ответов 1

Студворк — интернет-сервис помощи студентам
Такая проблема: Пишу небольшой проектик (задание:визуализация на диплом). Схема работы должна быть такой: Считываем с другого компа данные, либо через виртуальный(реальный) СОМ-порт, либо получаем данные на тот же СОМпорт, через интернет, через программу VSPE. После получения данных передаем на форму для отображения. Сама проблема: при последовательной передаче данных (строки "1", "2", "3", "4", "5") в СОМ порт, на визуализации отображается любых 3 числа ("5", "1", "3" или "2", "4", "1"), а дальше как будто зависает Task или весть Thread. Прошу помочь мне.
Часть ардуины

Часть Визуала

Код Ардуино
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void setup() {
  // put your setup code here, to run once:
  Serial1.begin(9600);
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
  Serial1.println("1");
  delay(1000);
  Serial1.println("2");
  delay(1000);
  Serial1.println("3");
  delay(1000);
  Serial1.println("4");
  delay(1000);
  Serial1.println("5");
  delay(1000);
 
}

Код Таска
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
39
  public delegate void AddTextDelegate();
 
        public Task<string> DataRd()
        {
 
            return Task.Run(() =>
             {
                 while (true)
                 {
                     data = serialPort1.ReadLine();
                     SetTextSafe(data);
                     return data;
 
                 }
             });
 
        }
        public async void doRead()
        {
            param = await DataRd();
            data = null;
            param = null;
 
        }
 
        void SetTextSafe(string newText)
        {
            BeginInvoke(new Action<string>((s) => label3.Text = s), newText);
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
 
            asyncSht();
        }
        public void asyncSht()
        {
            BeginInvoke(new AddTextDelegate(doRead));
        }

button1_Click_1 - это принудительный вызов Таска, но он почему-то на label3 возвращает только одно значение
Ещё я пытался перезапустить Таск через событие, поставив мой метод asyncSht(); в событие Move- результат работает также как и Form_load, возвращает 2-3 значения.

Во вложение есть файлики дипломного проекта
Вложения
Тип файла: zip diplom.zip (2.77 Мб, 4 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2017, 01:57
Ответы с готовыми решениями:

проинициализировать СОМ-порт и считать с его данные
Не судите строго, я только начинаю. При создании obj-файла ошибок нет, а вот при линковании выдает Fatal: 32-bit record encountered in...

управление через СОМ порт
Как сдельть сигнал на RTS,DTR по нажатию BUTTON1и2 соответственно. Причём при их отпускании сигналы должны обнульться! Кто шарит в этом?!

Обмен данными через СОМ-порт
Помогите новичку, пожалуйста) Нужно написать программу, которая ловит нажатия клавиш(стрелок) и соответственно отправляет это все через...

1
0 / 0 / 2
Регистрация: 08.12.2013
Сообщений: 14
26.03.2017, 22:16  [ТС]
Допер сам вот решение:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 public string data;
 
        public string param;
 
        public delegate void AddTextDelegate();
 
        public Task<string> DataRd()
        {
 
            return Task.Run(() =>
            {
                try
                {
                    data = serialPort1.ReadLine();
 
                }
 
                catch (Exception e)
                {
                 //   MessageBox.Show(e.ToString());
                }
                //   serialPort1.ReadTimeout = 1500;
                SetTextSafe(data);
                data = null;
                return data;
            });
 
        }
        public async void doRead()
        {
 
            while (true)
            {
                param = await DataRd();
            }
 
 
        }
 
        void SetTextSafe(string newText)
        {
            BeginInvoke(new Action<string>((s) => label3.Text = s), newText);
        }
 
        private void button1_Click_1(object sender, EventArgs e)
        {
 
            asyncSht();
        }
        public void asyncSht()
        {
            BeginInvoke(new AddTextDelegate(doRead));
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2017, 22:16
Помогаю со студенческими работами здесь

Отправка запроса на прибор через сом-порт
Имеется прибор, который пишет наклоны, т.е. наклономер. Он выдает результаты по запросу. Есть протокол обмена данными. Вот, например, ...

Передача пакета по протоколу ОВЕН через СОМ порт
задача такая. Я должна сделать скаду-систему контоля микроклимата. Т.е. я как пользователь, задаю параметры работы (т.е. устанавливаю мин...

Программа для связи с устройством через СОМ порт.Фиаско(
Друзья, всем добрый день. Решил написать программу для передачи и приема данных через СОМ порт. Писал всё с нуля не зная ни языка ни среды...

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

Примеры использования Async Free (СОМ-порт) или Async Pro (СОМ-порт)
Здравствуйте! Скажите пожалуйста есть пример где используют Async Free (СОМ-порт) или Async Pro (СОМ-порт)? почему то не могу найти и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru