|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.12.2013, 17:24 | #21 | |
Пользователь
Регистрация: 04.01.2011
Сообщений: 66
|
Цитата:
Raxp - CRC это чудесно, но вы обратите внимание на суть вопроса. Суть вопроса - как мне считать 73 байта? Нужно - отправить запрос, выждать секунду, и принять 73 байта. Все. Поставленный вопрос - а вдруг не пришли 2 байта, идет как опровержение предложения "сидеть и ждать пока не придут 73 байта, читая их кол-во в DataRecieved". Суть то проста - дать устройству секунду, и считать 73 байта. Вариации, что не пришли некоторые байты, обрабатываются иначе, на одном участке стоит 12 устройств, для страховки, даже при отвале 11 девайсов, информацию, я получу. Не дошли пару байтов? Не сошлась CRC? Да и хрен с ними, главное не задерживаться на одном устройстве дольше 1 секунды P.s.s. слово "концентратор" - использовалось в другом смысле, нежели возможно поняли его ВЫ. Я так назвал блок управления Последний раз редактировалось alexusankov; 01.12.2013 в 17:27. |
|
01.12.2013, 18:22 | #22 |
Форумчанин
Регистрация: 03.10.2013
Сообщений: 142
|
Ну поставьте жестко вшитую в код секунду ожидания.
Никто Вас не заставляет писать как "было бы хорошо" (событийная модель, четко поделенный код на оправителя, получателя, прием данных, парсер данных) - пишите как хотите. По сабжу - все у Вас получится. Кстати, мб просветите, откуда такой лимит "не задерживаться более 1 сек на одном девайсе"? |
01.12.2013, 19:25 | #23 | ||
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Вы TC читаете между строк. Считать 73 байта вам удасться в том случае, если придут 73 байта, а не придут, то и не примите, никогда. Ответ от запрашиваемого устройства может быть либо одним длинным пакетом, либо разбит на несколько, вот для этого и считается CRC (которая в Modbus-е присутствует жестко в составе пакета). Если CRC принятого вами пакета не совпадает, пакет не принят, и ваше жесткое ограничение в 73 байта на прием граничит с маразмом, длина пакетов может быть разная.
Цитата:
Цитата:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 01.12.2013 в 19:31. |
||
04.12.2013, 10:29 | #24 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Почему только мне бросилось в глаза
что после отправки сообщения порт закрывается? Код:
Ждете секунду для уверенности и считываете пакет. затем его разбираете и принимаете решение стоит ли ждать еще данных или это конец посылки. Порт открываете во время старта приложения и закрываете тогда когда приложение заканчивает работу. Это на случай если устройство шлет данные рандомно, необходимо оперативно оценивать ситуацию.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
04.12.2013, 11:47 | #25 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...дык, в посту #5 для TC уже говорилось, что данные элементарно могут не успеть все прийти и их нужно ожидать в потоке.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
04.12.2013, 12:23 | #26 |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
ДатаРесивер сработает когда будут получены какие либо данные .. а секунду ждать уже с момента срабатывания.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. |
04.12.2013, 14:06 | #27 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Некошерный вариант. Если запускать событие ожидания (считай поток, таймер) только с момента прихода данных, то проверка "неприхода" данных при отсутствии данных с одного из устройств никогда не будет запущена. Секунду следует ждать с момента отправки запроса.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
05.12.2013, 07:59 | #28 | |
Старожил
Регистрация: 25.08.2011
Сообщений: 2,841
|
Цитата:
Ежу понятно что нужно делать цикл из нескольких попыток отправки. А приход контролировать по свойству ByteToReceive (Не помню как точно называется).
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два. Последний раз редактировалось WorldMaster; 05.12.2013 в 08:01. |
|
05.12.2013, 08:47 | #29 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Это не просто тонкости, это главный нюанс. Есть большая разница между запуском контроля по приему и запуском контроля после передачи, это события разные и асинхронные.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Com port | Эрвин1233 | Visual C++ | 1 | 29.06.2013 23:58 |
Банальное обновление программы. | qwizz | Общие вопросы Delphi | 7 | 08.04.2013 09:44 |
ip:port | Reglament_ | Работа с сетью в Delphi | 3 | 29.12.2011 18:50 |
com port чтение запись delphi | SonicBob | Помощь студентам | 5 | 15.11.2011 10:20 |
Банальное равенство парсинга | bulldog5293 | Общие вопросы Delphi | 2 | 29.03.2011 00:29 |