Аватар для vladvsalat
0 / 0 / 1
Регистрация: 01.04.2014
Сообщений: 14

Посылать в COM-порт число 34 (в восьмиричной системе) с частотой 0,1 сек

06.04.2015, 21:35. Показов 1335. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер!

Имеется устройство подсоединенное к компьютеру через COM-порт. Прием\отправка данных работает. Требуется посылать в COM-порт число 34 (в восьмиричной системе) с частотой 0,1 сек.

C#
1
2
3
4
5
6
7
8
9
10
public void WriteData(string msg)
        {
            //сначала убеждаемся что порт открыт
            //если он не открыт открывает его
            if (!(comPort.IsOpen == true)) comPort.Open();
            //конвертируем сообщение в массив байтов
            byte[] newMsg = OctToByte(msg);
            //посылаем сообщение 
            comPort.Write(newMsg, 0, newMsg.Length);
        }
8-я система счисления:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private byte[] OctToByte(string msg)
        {
            //убираем пробелы из строки
            msg = msg.Replace(" ", "");
            //создаем массив данных деленных на 3 (в Oct 3 символа длинной)
            byte[] comBuffer = new byte[msg.Length / 3];
            for (int i = 0; i < msg.Length; i += 3)
                //преобразовать каждый комплект из 3 символов байт и добавляем в массив
                comBuffer[i / 3] = (byte)Convert.ToByte(msg.Substring(i, 3), 8);
            //возвращаем массив
            return comBuffer;
        }
Буду благодарен!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2015, 21:35
Ответы с готовыми решениями:

Арифметика в восьмиричной системе счисления.
Помогите пожалуйста произвести следующую манипуляцию: 1704,248 - 12,78 +125,168+ 445,68 (числа в восьмиричной системе) Добавлено...

Вычитания в восьмиричной системе счисления
Здравствуйте помогите выполнить разность чисел: 1. 342- 76 2. 518-310 3. 605-77 И показать как это...

Напечатать таблицу умножения и сложения натуральных чисел в двоичной, восьмиричной системе счисления
Составить программу которая печатает таблицу умножения и сложения натуральных чисел в двоичной, восьмиричной системе счисления. Основание...

4
 Аватар для AlexDorkus
-1 / 0 / 10
Регистрация: 05.04.2015
Сообщений: 80
06.04.2015, 22:19
Лучший ответ Сообщение было отмечено vladvsalat как решение

Решение

Попробуйте поставить таймер с определенными интервалами
0
 Аватар для vladvsalat
0 / 0 / 1
Регистрация: 01.04.2014
Сообщений: 14
07.04.2015, 10:07  [ТС]
Сейчас попробуем!

Добавлено через 59 минут
Все разобрался! Добавил на форму таймер, в функцию открытия порта
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public bool OpenPort()
        {
            try
            {
                //сначала проверяем открыт ли порт, если он открыт закрываем его
                if (comPort.IsOpen == true) comPort.Close();
                //установка параметров для нашего SerialPort
                comPort.BaudRate = 9600;              //BaudRate
                comPort.DataBits = 8;                 //DataBits
                comPort.StopBits = StopBits.One;      //StopBits
                comPort.Parity = Parity.None;         //Parity
                comPort.Handshake = Handshake.None;   //Handshake
                comPort.PortName = "COM1";            //PortName
                comPort.Open();                       //сейчас открываем порт
                timer1.Enabled = true;
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                return false;
            }
        }
И собственно посылаю сообщение:
C#
1
2
3
4
5
6
7
8
9
10
11
private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                comPort.Write(OctToByte("034"), 0, OctToByte("034").Length);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
И нужно не забыть остановить таймер:
C#
1
2
3
4
5
6
7
private void closeButton_Click(object sender, EventArgs e)
        {
           this.Close();
           ClosePort();
           PpuRtbDisplay.Clear();
           timer1.Enabled = false;
        }
0
[Bicycle Reinventor]
 Аватар для Exerion
332 / 270 / 109
Регистрация: 19.10.2011
Сообщений: 668
Записей в блоге: 2
07.04.2015, 14:34
vladvsalat, таким способом вы не сможете посылать байт чаще, чем раз в 16мс. Никаких 1мс даже близко нет.
Timers other than Stopwatch are incremented by the clock interrupt. Which by default ticks 64 times per second on Windows. Or 15.625 milliseconds. So a Thread.Sleep() argument less than 16 doesn't give you the delay you are looking for, you'll always get at least that 15.625 interval. Similarly, if you read, say, Environment.TickCount or DateTime.Now and wait less than 16 millisecond then you'll read the same value back and think 0 msec has passed.
Сам с этим сталкивался, без дополнительных танцев с бубном осциллограф показывает 15-16мс между байтами, с учётом битов стартового, стопового и чётности, если всё задано.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
07.04.2015, 16:33
Exerion, ) ему надо 1мс, а 100мс интервал
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.04.2015, 16:33
Помогаю со студенческими работами здесь

На панели должны появляться (с частотой 1 сек) фамилия студента и слово 'Зачет'.
На форме разместить компоненты Timer и Panel. На панели должны появляться (с частотой 1 сек) фамилия студента и слово 'Зачет'. ...

Как посылать пакеты из программки на все машины сети в определенный порт?
Как посылать пакеты из программки на все машины сети в определленый порт? Просто надо сделать небольшой чат под ЛВС, но хотелось бы без...

Дана строка, содержащая число в десятичной системе исчисления. Преобразовать число в строке к восьмеричной системе.
Разработать программу согласно варианту задания. Максимальная длина строк не менее 50 символов. При реализации программы использование...

Число а записано в p-ичной системе.Прямым делением в этой системе перевести его в систему по основанию q
Задача 1: p=5,q=16,a=2022321. Задача 2: p=15,q=6,a=13(13)(12)(14) Помогите решить,делаю типовой расчет по теории чисел,остался один...

Узнать, что в системе занимает 443 порт?
Подскажите, пожалуйста, как бы узнать, кто в системе занимает, например, 443 порт? netstat, PID, по PID смотрим в таск-менеджере и...


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

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

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru