Вверх ↑
Этот топик читают: Гость
Ответов: 15
Рейтинг: 1
#1: 2013-02-28 22:47:29 ЛС | профиль | цитата
Доброго времени суток. Есть нужда принимать данные по последовательному порту, но как это правильно сделать - не понимаю. Данные будут приходить в асинхронном режиме, их надо принять, а после принятия обработать. Размер данных заранее не известен. У кого какие идеи? И еще, неплохобы было если бы знающий человек поподробнее расписал компонент

Add(COMEX,16733627,903,336)
{
AddHint(22,4,42,13,Port)
}

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

Предлагайте ваши варианты, может общими силами соберем какой-никакой приемник. Заранее спасибо.
карма: 0

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#2: 2013-02-28 22:59:58 ЛС | профиль | цитата
mark2013 писал(а):
И еще, неплохобы было если бы знающий человек поподробнее расписал компонент

Интересно, и кто кроме меня его знает, если это именно мой COMEX имеется в виду
Почему нельзя напрямую задать мне вопрос, а не в обезличенном виде.
mark2013 писал(а):
а то ей-богу не очень понятно из хелпа как происходит прием данных в асинхронном и синхронном режиме

А что там понимать-то -- в асинхронном режиме данные выдаются на точку onRead, но в другом потоке, эту точку нельзя использовать напрямую с интерфейсными элементами, потому, что их отрисовка и обработка их сообщений происходит в главном потоке, те в другом, по отношению к потоку чтения. Точка чтения onSyncRead синхронизирована с очередью сообщений главного потока и потому, может спокойно работать с интерфейсными элементами.
Преимущество компонента COMEX перед обычным в том, что ему не нужно указывать количество байт для чтения, у него количество считанных байт определяется внутри обработчика чтения, и срабатывают точки чтения автоматически по приходу данных, так же, как, например, а компоненте TCP_Client
карма: 22

1
Голосовали:hitman249
Ответов: 15
Рейтинг: 1
#3: 2013-03-01 09:57:12 ЛС | профиль | цитата
Интересно, и кто кроме меня его знает, если это именно мой COMEX имеется в виду
Почему нельзя напрямую задать мне вопрос, а не в обезличенном виде.


Многоуважаемый Nesco, я понятия не имею чей это компонент, поэтому прошу простить меня за такое обращение.

А что там понимать-то...

Ну для Вас это естественно, вы же сами говорите что это Ваш компонент...

в асинхронном режиме данные выдаются на точку onRead, но в другом потоке, эту точку нельзя использовать напрямую с интерфейсными элементами, потому, что их отрисовка и обработка их сообщений происходит в главном потоке, те в другом, по отношению к потоку чтения.

А тут можно поподробнее? Имеется ввиду, что данные нужно куда-то складывать? Если да, то куда?

Преимущество компонента COMEX перед обычным в том, что ему не нужно указывать количество байт для чтения, у него количество считанных байт определяется внутри обработчика чтения, и срабатывают точки чтения автоматически по приходу данных, так же, как, например, а компоненте TCP_Client

Если следовать логике, то из ваших слов я понял следующее: для простого компонента COM-порта нужно указать количество принимаемых(ожидаемых) байтов и именно столько он примет и выдаст, а для COMEX ничего указывать не нужно, он сам должен принять пакет байт ЛЮБОЙ длины. Но на деле происходит следующее, если в COMEX заслать строку длиной более некогорого количества символов, например больше 5, то он примет эту строку в виде двух кусков, а не целиком. Компонент "откусывает" от пакета сначала 2-3 байта, после чего принимает оставшиеся. Как именно компонент определяет конец пакета? Что можно сделать чтобы компонент не разрывал пакет?

С уважением, участник форума mark2013. Заранее благодарю за ответ.
карма: 0

0
Ответов: 8930
Рейтинг: 823
#4: 2013-03-01 10:40:04 ЛС | профиль | цитата
mark2013, на моём компьютере (Win7, 64) и в синхронном режиме и в асинхронном принимаемые данные разбиваются на подстроки по 8 символов
code_30471.txt
(На разъёме порта контакты №2 и №3 соеденены -- "Тихо сам с собою я веду беседу")
карма: 19

1
файлы: 1code_30471.txt [1.8KB] [143]
Голосовали:mark2013
Разработчик
Ответов: 26164
Рейтинг: 2127
#5: 2013-03-01 10:46:45 ЛС | профиль | цитата
mark2013 писал(а):
я понятия не имею чей это компонент

Вот те раз, а посмотреть вилы

COMEX.ini писал(а):
[About]
Version=1.00
Author=nesco
Mail=hiasm@mail.ru


mark2013 писал(а):
Если да, то куда?

Строковый накопитель делать, примеров на форуме валом

mark2013 писал(а):
Но на деле происходит следующее, если в COMEX заслать строку длиной более некогорого количества символов, например больше 5, то он примет эту строку в виде двух кусков, а не целиком. Компонент "откусывает" от пакета сначала 2-3 байта, после чего принимает оставшиеся

Это проблемы не компонента, а передающего устройства, ищите проблемы у себя. Если происходит разрыв, то значит происходит ошибка передачи фрейма, и это для компонента означает, что буфер заполнился и произошел разрыв данных. Компонент реально проверялся на передаче данных до 4096 байт без разрыва
карма: 22

0
Ответов: 15
Рейтинг: 1
#6: 2013-03-01 11:07:00 ЛС | профиль | цитата
Леонид, спасибо за пример. У меня Win XP 32. Когда я отправляю через Ваш пример 128 байт, все нормально, но вот когда хочу принять, то получается в списке кусочки по 1-3 символа(байта). Спасибо за помощь, Вы мне очень помогли.

[offtop]Многоуважаемый Nesco, я понимаю что вам влом что-то разжевывать новичку... Но может Вы все же будете относится не так критически к зеленой, в плане работы с этой замечательной программой, массе. Форум на то и форум... Если тут нельзя задавать вопросы, Вы так и напишите, мол идите и сами во всем разбирайтесь путем проб и ошибок коих и так не мало... Желаю Вам Чуть больше терпения в моменты общения с такими пользователями как я. Надеюсь Вы не обиделись, это всего лишь небольшая критика в Ваш адрес и не более... [/offtop]

С уважением, участник форума mark2013.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#7: 2013-03-01 11:09:46 ЛС | профиль | цитата
Леонид, [flood]
o_o.gif
а чем отличается верхняя от нижней [/flood]
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1o_o.gif [5KB] [191]
Разработчик
Ответов: 26164
Рейтинг: 2127
#8: 2013-03-01 11:15:54 ЛС | профиль | цитата
mark2013 писал(а):
Но может Вы все же будете относится не так критически к зеленой, в плане работы с этой замечательной программой, массе.

Я не отношусь критически, я просто констатирую факты. Разрыв соединения -- это проблема или штатная работа передающего устройства в первую очередь.
mark2013 писал(а):
Если тут нельзя задавать вопросы,

Я разве не отвечаю на вопросы. Просто такие вопросы задаются уже не первый раз, а поиском пользоваться у нас не хотят

карма: 22

0
Ответов: 8930
Рейтинг: 823
#9: 2013-03-01 11:15:58 ЛС | профиль | цитата
Tad писал(а):
а чем отличается верхняя от нижней
Инерцией мышления
карма: 19

0
Разработчик
Ответов: 26164
Рейтинг: 2127
#10: 2013-03-01 11:17:07 ЛС | профиль | цитата
[flood]
Tad писал(а):
чем отличается верхняя от нижней

Мы не ищем легких путей... (шютка) [/flood]

карма: 22

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)