Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2014, 14:23   #11
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от digiwo Посмотреть сообщение
А можно по подробнее? Я просто не сильно со всем этим знаком, пример было замечательно. Спасибо
Пример.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 23.01.2014, 20:41   #12
digiwo
Пользователь
 
Аватар для digiwo
 
Регистрация: 13.01.2014
Сообщений: 45
По умолчанию

Хм, надо было полностью запостить, я так же как в примере и делаю. Я как понял само считывание идет string data = mySerial.ReadExisting(); А это стринг. Мне бы хотелось получить hex вместо него.
digiwo вне форума Ответить с цитированием
Старый 23.01.2014, 20:42   #13
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от digiwo Посмотреть сообщение
Хм, надо было полностью запостить, я так же как в примере и делаю. Я как понял само считывание идет string data = mySerial.ReadExisting(); А это стринг. Мне бы хотелось получить hex вместо него.
у него же есть метод ReadByte или что то подобное. Сейчас лень открывать студию. Он вам даст массив байт. а дальше преобразуйте его во что хотите.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 29.01.2014, 08:33   #14
alexusankov
Пользователь
 
Регистрация: 04.01.2011
Сообщений: 66
По умолчанию

Как правило, при получении данных с com-port, ты имеешь представление, сколько именно байт нужно принять.
В моем случае, я знаю, что принимать нужно 73 байта, поэтому просто читаю в цикле 73 байта с помощью SerialPort.ReadByte().
Код:
for (int i = 0; i < 73; i++) { RowBytes[i] = (byte)(Port.ReadByte()); };
Если количество байт пляшет от случая к случаю, то как правило в описании протокола (ModBus в моем случае), явно указано в 5 байте - сколько именно байт содержится в ответе.
alexusankov вне форума Ответить с цитированием
Старый 03.02.2014, 22:05   #15
digiwo
Пользователь
 
Аватар для digiwo
 
Регистрация: 13.01.2014
Сообщений: 45
По умолчанию

Под виндовс все работало, под линукс появилась проблема.
Использую
Цитата:
byte[] _receivedData = new byte[mySerial.BytesToRead];
mySerial.Read(_receivedData, 0, mySerial.BytesToRead);
чтоб считать данные. Но часто вылетает Exception что данных больше чем размер массива. Так как размер постоянно разный, числом указать не получится.
Может есть идея как обойти это?
Код:
Unhandled Exception: System.ArgumentException: offset+count
Parameter name: The size of the buffer is less than offset + count.
  at System.IO.Ports.SerialPort.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Read (byte[],int,int)
  at SerialPortVerbindung.ReadData () [0x00000] in <filename unknown>:0
  at SerialPortVerbindung.Test () [0x00000] in <filename unknown>:0

Последний раз редактировалось digiwo; 03.02.2014 в 22:23. Причина: Добавил ошибки
digiwo вне форума Ответить с цитированием
Старый 03.02.2014, 22:50   #16
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от digiwo Посмотреть сообщение
Под виндовс все работало, под линукс появилась проблема.
Использую чтоб считать данные. Но часто вылетает Exception что данных больше чем размер массива. Так как размер постоянно разный, числом указать не получится.
Может есть идея как обойти это?
Код:
Unhandled Exception: System.ArgumentException: offset+count
Parameter name: The size of the buffer is less than offset + count.
  at System.IO.Ports.SerialPort.Read (System.Byte[] buffer, Int32 offset, Int32 count) [0x00000] in <filename unknown>:0
  at (wrapper remoting-invoke-with-check) System.IO.Ports.SerialPort:Read (byte[],int,int)
  at SerialPortVerbindung.ReadData () [0x00000] in <filename unknown>:0
  at SerialPortVerbindung.Test () [0x00000] in <filename unknown>:0
Значит данные еще продолжают идти, после того как вы запросили количество во входном буфере.
Можно сделать замер в течении 5 мс, 5 раз с задержкой в 1 мс. Если цифра не изменилась значит данные все пришли и можно выделять память и считывать буфер.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 03.02.2014, 23:19   #17
digiwo
Пользователь
 
Аватар для digiwo
 
Регистрация: 13.01.2014
Сообщений: 45
По умолчанию

Спасибо. Вроде помогло.
digiwo вне форума Ответить с цитированием
Старый 04.02.2014, 07:09   #18
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от digiwo Посмотреть сообщение
Спасибо. Вроде помогло.
Задержку выбирать следует исходя из скорости соединения а также средней длины пакетов. Найти необходимый и достаточный минимум чтоб на общем быстродействии не сказывалось.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки при компиляции на Qt под линуксом Eyxeniy Qt и кроссплатформенное программирование С/С++ 3 09.06.2011 15:58
Писать и отлажевать Виндовс програмы под Линуксом? 026rus Помощь студентам 5 25.08.2010 16:31
Ищу задачки на сишке под линуксом zerg Общие вопросы C/C++ 1 04.12.2009 21:59
Flash видео не запускается под линуксом SeRhy Софт 3 12.10.2009 22:10
async serialport Imya Общие вопросы .NET 1 13.07.2009 14:37