Доброго времени суток. Есть нужда принимать данные по последовательному порту, но как это правильно сделать - не понимаю. Данные будут приходить в асинхронном режиме, их надо принять, а после принятия обработать. Размер данных заранее не известен. У кого какие идеи? И еще, неплохобы было если бы знающий человек поподробнее расписал компонент
Add(COMEX,16733627,903,336)
{
AddHint(22,4,42,13,Port)
}
, а то ей-богу не очень понятно из хелпа как происходит прием данных в асинхронном и синхронном режиме.
Предлагайте ваши варианты, может общими силами соберем какой-никакой приемник. Заранее спасибо.
Этот топик читают: Гость
Ответов: 15
Рейтинг: 1
|
|||
карма: 0 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
mark2013 писал(а): И еще, неплохобы было если бы знающий человек поподробнее расписал компонентИнтересно, и кто кроме меня его знает, если это именно мой COMEX имеется в виду Почему нельзя напрямую задать мне вопрос, а не в обезличенном виде. mark2013 писал(а): а то ей-богу не очень понятно из хелпа как происходит прием данных в асинхронном и синхронном режимеА что там понимать-то -- в асинхронном режиме данные выдаются на точку onRead, но в другом потоке, эту точку нельзя использовать напрямую с интерфейсными элементами, потому, что их отрисовка и обработка их сообщений происходит в главном потоке, те в другом, по отношению к потоку чтения. Точка чтения onSyncRead синхронизирована с очередью сообщений главного потока и потому, может спокойно работать с интерфейсными элементами. Преимущество компонента COMEX перед обычным в том, что ему не нужно указывать количество байт для чтения, у него количество считанных байт определяется внутри обработчика чтения, и срабатывают точки чтения автоматически по приходу данных, так же, как, например, а компоненте TCP_Client |
|||
карма: 22 |
| ||
Голосовали: | hitman249 |
Ответов: 15
Рейтинг: 1
|
|||
Интересно, и кто кроме меня его знает, если это именно мой COMEX имеется в виду Почему нельзя напрямую задать мне вопрос, а не в обезличенном виде. Многоуважаемый Nesco, я понятия не имею чей это компонент, поэтому прошу простить меня за такое обращение. А что там понимать-то... Ну для Вас это естественно, вы же сами говорите что это Ваш компонент... в асинхронном режиме данные выдаются на точку onRead, но в другом потоке, эту точку нельзя использовать напрямую с интерфейсными элементами, потому, что их отрисовка и обработка их сообщений происходит в главном потоке, те в другом, по отношению к потоку чтения. А тут можно поподробнее? Имеется ввиду, что данные нужно куда-то складывать? Если да, то куда? Преимущество компонента COMEX перед обычным в том, что ему не нужно указывать количество байт для чтения, у него количество считанных байт определяется внутри обработчика чтения, и срабатывают точки чтения автоматически по приходу данных, так же, как, например, а компоненте TCP_Client Если следовать логике, то из ваших слов я понял следующее: для простого компонента COM-порта нужно указать количество принимаемых(ожидаемых) байтов и именно столько он примет и выдаст, а для COMEX ничего указывать не нужно, он сам должен принять пакет байт ЛЮБОЙ длины. Но на деле происходит следующее, если в COMEX заслать строку длиной более некогорого количества символов, например больше 5, то он примет эту строку в виде двух кусков, а не целиком. Компонент "откусывает" от пакета сначала 2-3 байта, после чего принимает оставшиеся. Как именно компонент определяет конец пакета? Что можно сделать чтобы компонент не разрывал пакет? С уважением, участник форума mark2013. Заранее благодарю за ответ. |
|||
карма: 0 |
|
Ответов: 8930
Рейтинг: 823
|
|||
mark2013, на моём компьютере (Win7, 64) и в синхронном режиме и в асинхронном принимаемые данные разбиваются на подстроки по 8 символов
code_30471.txt (На разъёме порта контакты №2 и №3 соеденены -- "Тихо сам с собою я веду беседу") |
|||
карма: 19 |
| ||
файлы: 1 | code_30471.txt [1.8KB] [143] | ||
Голосовали: | mark2013 |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
mark2013 писал(а): я понятия не имею чей это компонентВот те раз, а посмотреть вилы COMEX.ini писал(а): [About]Version=1.00 Author=nesco Mail=hiasm@mail.ru mark2013 писал(а): Если да, то куда?Строковый накопитель делать, примеров на форуме валом mark2013 писал(а): Но на деле происходит следующее, если в COMEX заслать строку длиной более некогорого количества символов, например больше 5, то он примет эту строку в виде двух кусков, а не целиком. Компонент "откусывает" от пакета сначала 2-3 байта, после чего принимает оставшиесяЭто проблемы не компонента, а передающего устройства, ищите проблемы у себя. Если происходит разрыв, то значит происходит ошибка передачи фрейма, и это для компонента означает, что буфер заполнился и произошел разрыв данных. Компонент реально проверялся на передаче данных до 4096 байт без разрыва |
|||
карма: 22 |
|
Ответов: 15
Рейтинг: 1
|
|||
Леонид, спасибо за пример. У меня Win XP 32. Когда я отправляю через Ваш пример 128 байт, все нормально, но вот когда хочу принять, то получается в списке кусочки по 1-3 символа(байта). Спасибо за помощь, Вы мне очень помогли.
[offtop]Многоуважаемый Nesco, я понимаю что вам влом что-то разжевывать новичку... Но может Вы все же будете относится не так критически к зеленой, в плане работы с этой замечательной программой, массе. Форум на то и форум... Если тут нельзя задавать вопросы, Вы так и напишите, мол идите и сами во всем разбирайтесь путем проб и ошибок коих и так не мало... Желаю Вам Чуть больше терпения в моменты общения с такими пользователями как я. Надеюсь Вы не обиделись, это всего лишь небольшая критика в Ваш адрес и не более... [/offtop] С уважением, участник форума mark2013. |
|||
карма: 0 |
|
Ответов: 16884
Рейтинг: 1239
|
|||
Леонид, [flood]
o_o.gif |
|||
карма: 25 |
| ||
файлы: 1 | o_o.gif [5KB] [191] |
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
mark2013 писал(а): Но может Вы все же будете относится не так критически к зеленой, в плане работы с этой замечательной программой, массе. Я не отношусь критически, я просто констатирую факты. Разрыв соединения -- это проблема или штатная работа передающего устройства в первую очередь. mark2013 писал(а): Если тут нельзя задавать вопросы,Я разве не отвечаю на вопросы. Просто такие вопросы задаются уже не первый раз, а поиском пользоваться у нас не хотят |
|||
карма: 22 |
|
Ответов: 8930
Рейтинг: 823
|
|||
Tad писал(а): а чем отличается верхняя от нижней |
|||
карма: 19 |
|
Разработчик
Ответов: 26164
Рейтинг: 2127
|
|||
[flood]
Tad писал(а): чем отличается верхняя от нижнейМы не ищем легких путей... (шютка) [/flood] |
|||
карма: 22 |
|
10