Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/64: Рейтинг темы: голосов - 64, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28

Отправка массива в serialPort

02.03.2016, 00:15. Показов 12984. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста. Программа создаёт
C#
1
int mas01[]={82,164,73,146,37,74,148,41}
и мне это массив надо отправить в serialPort, я пишу:
C#
1
2
3
4
5
6
7
8
char[] buffer01 = new char[8];
char[] kon01=new char[8];
for (int i = 0; i < 8; i++)
{
char str = (char)kon01[i];
buffer01[i] = kon01[i];
}
serialPort1.Write(buffer01, 0, 4);
Скажите, это правильно или нет? А то я не могу понять где у меня проблема, до порта или уже после
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.03.2016, 00:15
Ответы с готовыми решениями:

Подготовка массива данных или строки для передачи в Serialport
Привет ребята! Я не являюсь программистом, чисто любительски пишу для собственных нужд от редкого случая к случаю. Суть проблемы: ...

Serialport.write и serialport.basestream.write - в чем разница
в чем разница между следующими способами отправки данных на ком-порт?: serPort.BaseStream.Write(data,0,datalen); ...

Serialport
Всем привет) подскажите пожалуйста, может кто встречался с такой проблемой. Иногда при получении ответа с ком порта не все данные сразу...

37
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
02.03.2016, 06:18
Надо как строки отправить или в двоичном виде? Никакого протокола обмена не предусмотрено?
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 08:56
Какая проблема? Где проблема? Что не получается? Что должно получиться?
А то получается: мне надо приготовить яичницу, я встаю рано утром и иду на кухню, где у меня проблема?
1
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28
02.03.2016, 16:59  [ТС]
Мне надо передавать массивы с вот такими числами (82,164,73,146,37,74,148,41) на устройство подключенное к USB. причём получить устройсво должно тип char, поэтому я конвертирую int в char. Но устройство их либо не получает, либо не правильно обрабатывает, потому что делает оно точно не то что ей отправляется. Вот я и спрашиваю, такой код как у меня написан может передать эти числа, или нет? Просто я не совсем понимаю как вообще отправить например число 82. Пока у меня получалось отправлять только числа от 0 до 9.
0
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
02.03.2016, 17:01
Woland50, потому и не работает, что не понимаете
Вот эти числа (82,164,73,146,37,74,148,41) это запись для людей в десятичном виде, в виде строки даже.
Устройство, подключённое к RS-232, что ожидает? Массив байт какой-то, строку символов, или как-то по особенному закодированное сообщение?

Добавлено через 20 секунд
И причём тут USB? Мост USB-UART? Адаптер USB-RS232?

Вот, например, кусочек краткого описания протокола HART:

Там далее подробно описано где какой байт расположен, что означает, и что нужно скормить HART устройству, чтобы оно Вас поняло.
А то, как Вы описали - "поди туда не знаю куда, возьми то не знаю что".
1
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 17:04
Woland50, ну так по твоему коду ты создаёшь 2 пустых массива char длинной по 8 элементов, перегоняешь один в другой и отсылаешь в порт. Элементы массива по умолчанию инициируются нулями, т.о. в порт ты отправляешь массив нулей.
Я тебе по секрету скажу, только никому....можно поставить точку останова и посмотреть что происходит в нужной тебе строке.
1
02.03.2016, 17:05

Не по теме:

Цитата Сообщение от aquaMakc Посмотреть сообщение
можно поставить точку останова и посмотреть что происходит в нужной тебе строке.
Всё, под расстрел !

0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 17:09
Rius, ну это одна конкретная реализация протокола обмена. Кто знает что у автора за железка и какие данные оно ждёт. Вполне может быть, что и массив двухбайтных знаковых char.
1
02.03.2016, 17:11

Не по теме:

aquaMakc, да вот и надо вытрясти с автора, что же ему надо! А он не говорит. :)

0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 17:15
Woland50, в общем на тебе две строчки кода, включая правильную инициализацию твоего исходного массива:
C#
1
2
int[] mas01 = { 82, 164, 73, 146, 37, 74, 148, 41 };
char[] outmas = mas01.Select(p => (char)p).ToArray();
1
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28
02.03.2016, 17:25  [ТС]
То что я не понимаю, это я хоршо понимаю
Но надеюсь у меня получится. А если я запишу то же число 82 в виде (01001000) не помню или правильно, я не дома сейчас, но 82 я получил именно из подобной комбинации по формуле
C#
1
2
3
4
5
int[] mas1 = new int[8];
int[] mas_b = new int[] {1,2,4,8,16,32,64,128}; 
  // тут mas1 заполняется ноликами и единичками 
x1 = mas1[i] * mas_b[i];
x = x + x1;
и буду отправлять эту комбинацию, так будет правильней?
Через USB у меня подключена Arduino, на неё и пытаюсь передать данные. Программу которая их генерирует осилил как-то, а вот передать не получается. Вы мне скажите куда копать, а то я направления не вижу
0
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
02.03.2016, 17:28
Woland50, нет, не правильно.
Отправляются либо строки, где один байт представляет собой код одного символа (в однобайтовой кодировке для простоты). Либо бинарные данные. Где, не учитывая даже протокола обмена, целое число может быть представлено в виде от 1 до 8 байт.
Цитата Сообщение от Woland50 Посмотреть сообщение
Через USB у меня подключена Arduino, на неё и пытаюсь передать данные.
А покажите код, которые ждёт данные на стороне Ардуинки.
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28
02.03.2016, 17:31  [ТС]
Действительно из пустого в пустой получается. Либо я не скопировал нужную строку, либо просто забыл её написать, если в двух словах то я пытался в этот буфер01 скопировать масс01, а потом его отправить в serialPort но по ходу не вышло
0
Эксперт .NET
 Аватар для Rius
13236 / 7731 / 1681
Регистрация: 25.05.2015
Сообщений: 23,551
Записей в блоге: 14
02.03.2016, 17:33
Woland50, у вас вообще неправильные представления о протоколах обмена. Которые могут сработать только если очень повезёт и потом даже не дышать.
Покажите код с Ардуины.
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 17:40
Woland50, Как перегнать массив int в массив char я тебе уже написал. Надо вообще определиться в каком виде данные нужны ардуине.
Также меня смутило
C#
1
serialPort1.Write(buffer01, 0, 4);
здесь ты из массива отправляешь в порт первые 4 элемента. А остальные не нужны?

Добавлено через 1 минуту
Rius, ) ну слава богу ардуина не лицензируется под определённый протокол и каждый желающий может придумать свой формат обмена.

Добавлено через 3 минуты
Woland50, кстати, в c++ и c# char - это разные типы. В c и c++ это 1 байт, в c# - это 2 байта.

Добавлено через 1 минуту
Так-что скорее всего надо использовать не char, а byte
0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28
02.03.2016, 17:41  [ТС]
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
const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
 void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT); 
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600); 
delay(1000);
 
}
void loop()
{
  char x[9];
  if(Serial.available()>0)
{ 
  Serial.readBytes(x,8);
  }
  for(int i=0; i<8; i++)
  {
  digitalWrite(latchPin, LOW); 
  shiftOut(dataPin, clockPin, MSBFIRST, x[i]); //нижний ряд
  shiftOut(dataPin, clockPin, MSBFIRST, x[i]); //верхний ряд
  delay(200);
  digitalWrite(latchPin, HIGH);
  } 
}
к ней подключны два сдвиговых регистра в каскаде, и на каждом 8 светодиодов. Вот когда я пишу туже 82 сюда вместо x[i], то всё отлично, либо массив подставляю в скетч с уже пощитанными данными, тоже всё работает. А когда пытаюсь передать данные с ПК, то получаю просто хаотичное мигание
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
02.03.2016, 17:49
Woland50, пробуй
C#
1
2
3
int[] mas01 = { 82, 164, 73, 146, 37, 74, 148, 41 };
byte[] outmas = mas01.Select(p => (byte)p).ToArray();
serialPort1.Write(outmas, 0, outmas.Length);
1
02.03.2016, 17:50

Не по теме:

Цитата Сообщение от aquaMakc Посмотреть сообщение
Rius, ) ну слава богу ардуина не лицензируется под определённый протокол и каждый желающий может придумать свой формат обмена.
Я не про то. Я привёл просто пример документированного протокола. И именно описание другого протокола нужно с ТС, какое бы оно там ни было.

0
02.03.2016, 17:53

Не по теме:

Цитата Сообщение от Rius Посмотреть сообщение
Я не про то. Я привёл просто пример документированного протокола. И именно описание другого протокола нужно с ТС, какое бы оно там ни было.
Как я и предполагал он передаёт набор состояний. Для такой простой операции заводить целый протокол обмена нет смысла.

Те, кто используют документированные протоколы обмена не будут задавать такие вопросы, как автор.

0
0 / 0 / 0
Регистрация: 03.11.2014
Сообщений: 28
03.03.2016, 15:59  [ТС]
Не закрывайте тему, я пока читаю что такое информация и как она передаётся Как разберусь, потом будут ещё вопросы
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2016, 15:59
Помогаю со студенческими работами здесь

SerialPort
Добрый день! Никак не выходит реализовать протокол 1Wire. Вроде бы на шину удается кинуть данные, а вот корректно прочитать - нет. ...

SerialPort
Добрый день форумчане! Подскажите пожалуйста, используя библиотеку qserialport и команду readline, как мне кажется я считавыю строку...

SerialPort в C++
Привет всем! Я начинаю изучать C++, помогите разобраться. Нужно по сериал порту передать строку. как это сделать? Пишу на c++ win32 console...

SerialPort
Здравствуйте. Использую компонент SerialPort для чтения символов с ком-порта. Примерный код: private void...

Serialport
Есть программа но на этапе компиляции выдает ошибку. для компиляции использую ActiveState Perl Dev Kit 9.1.1 #!/usr/bin/perl #...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
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/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru