|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
Работа с ComPort05.10.2023, 16:03. Показов 6587. Ответов 149
Метки нет (Все метки)
Здравствуйте, работаю с ComPort и хочу передать данные через Writeport. Столкнулась с такой проблемой, что при вызове функции OutputBuffer заполнен, а когда перехожу по дебагу, то в этой функции значение буфера=no value (размер вычислился и передался).
Почему буфер не передался? Вообще для чего мне это надо. Мне надо принять данные со сторонней программы подключенное к ComPort . Как я понимаю для того,чтобы принять, мне надо сигнализировать,что принимаю. Поэтому изначально использую Writeport.
0
|
|
| 05.10.2023, 16:03 | |
|
Ответы с готовыми решениями:
149
Асинхронная работа с ComPort Работа с ComPort Library RS-232 ComPort |
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||
| 10.10.2023, 08:20 [ТС] | |||
|
Buf= no value А это не поняла. Если я хочу слушать, почему я что-то должна так передавать?
0
|
|||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||
| 10.10.2023, 08:58 | |||
|
Разумеется, можно не париться и сразу выделить под буфер какой-то массив, но если фиксированный, то ShortString уже такой))), а если динамический, то нужно следить за памятью.
0
|
|||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||||||||||||||||||||||||||||||||
| 10.10.2023, 12:30 [ТС] | |||||||||||||||||||||||||||||||||
|
S[1]:='.....'; Если бы мы указали,что буфер будет этого типа,хорошо, но тут это S[1]:='.....'; а мне принять еще надо, следовательно наложения типа только ShortString и если я делаю
Если реализую
Наверное, ShortString скорее всего будет правильно, но не догоняю с изначальным присвоением. Поняла,что показывает длину строки,но а дальше Добавлено через 10 минут Кстати! Если я делаю
Добавлено через 2 минуты Эххх, сделала извращение... Мне очень не нравится.
0
|
|||||||||||||||||||||||||||||||||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
||
| 10.10.2023, 12:34 | ||
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||||||||||
| 10.10.2023, 12:39 | ||||||||||||
Тогда
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||||||
| 10.10.2023, 12:58 [ТС] | |||||||
|
Constcat, теперь понятно. Тут подразумевается тандем WriteData и ReadData.
А у меня понятие было, что я отправила WriteData и хотела не поминать его лихом))) и просто заняться чтением порта) у меня просто две кнопки на передачу и чтения,а действительно сейчас так попробую. Добавлено через 2 минуты
0
|
|||||||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
||
| 10.10.2023, 13:17 | ||
|
По поводу WinAPI, в примере, что я вам выкладывал, оповещение о приходе данных сделано через посылку основной программе сообщения. До того, она ничего не читает. Компонент он точно так же отслеживает состояние линий, и если появляется сигнал готовности передачи, начинает эти данные выбирать. Зачем вы мучаетесь с прямым чтением, и кому это надо, я не понимаю. Если вы используете компонент, то и делать должны через компонент, иначе зачем вы его используете, или не делать через компонент вообще, если у вас требование, что не используются нестандартные компоненты. Иногда это может быть оправдано. Есть много заброшенных библиотек, особенно со времен D7, которые могут не подойти новым версиям Delphi. Но в случае библиотеки comport411f, ее последняя версия была для Delphi XE, она давно не обновляется, т. к. сами интерфейсы RS-232, RS-485, RS-422 давно устарели (или правильнее сказать, достигли своего совершенства) и не обновляются, и без проблем ставится на любую версию.
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||
| 10.10.2023, 14:45 [ТС] | ||||
|
Так же Ответ на то,что "Те ли мне данные приходят?" Приходят правильные. В стороннем приложении есть для экрана. Первый Экран с командой(температура-это команда 30) и его параметром/значением команды (Пример вывода температуры: >30<0 1A 1A 1A 1). Во втором экране подсоединенная БД с читабельной для человека цифрой=13,5(это и есть 0 1A 1A 1A 1) в нашем случае температуры. Этот параметр сейчас читается( 0 1A 1A 1A 1) и потом необходимо уже в моей программе сделать читабельным и записать в БД, и вывести)))) А сейчас хочется адекватно сделать ReadPort. Добавлено через 18 минут Просто Передача/WritePort прошла и сторонне приложение получила команду. Но когда по дебагу иду я не могу посмотреть буфер. Меня это бесит, хотя пишется, что пакет передан. В чтении/ReadPort такая же шляпа( не могу посмотреть буфер) , но приходит,что порт прочитан. Значит, может я в memo не так передаю. Добавлено через 21 минуту
0
|
||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 10.10.2023, 14:51 [ТС] | |
|
и там, и там no value , но передает и "типа" примает))
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 10.10.2023, 14:56 | ||
|
Связь с оборудованием подразумевает, во-первых, частичную передачу данных (кусками), во-вторых - паузы между этими кусками, в-третьих - возможный обрыв передачи. Про поврежденные данные говорить не будем, чтобы совсем не загрузить)))) Т.е., нельзя ожидать, или рассчитывать, что данные придут целиком (они могут прийти куском и не до конца), либо что они прийдут в какой-то заранее определенный интервал времени. Исходя из этого, протокол связи с оборудованием обычно подразумевает либо фиксированный размер пакета, либо передача этого размера в самом начале пакета - для того, чтобы принимающая сторона понимала, сколько ей еще нужно ждать байт и прекращала связь, если за определенный таймаут пакет не пришел. Вопрос к вам: У вас размер данных (вот эти вот команды) фиксированный? Или могут быть варианты?
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 10.10.2023, 15:03 [ТС] | |
|
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 10.10.2023, 15:10 | |
|
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 10.10.2023, 15:17 | ||
|
Тогда можно заранее завести некий буфер, хоть array[0..16] of char и читать в него. После чтения у вас в нулевом элементе будет команда. А в остальных будет пакет данных. Теперь вопрос такой - как определить, весь ли пакет пришел за один раз? Пришла команда $11, ожидается 16 байт ответ. Далеко не факт, что они прийдут в этом же пакете. Поэтому нужно "выгрести" то, что пришло (ориентируясь на количество прочитанных байт) и в случае необходимости повторять цикл чтения пока не придет все. Понятное дело, что в этой ситуации мы уже в нулевом байте команду не смотрим, туда будут приходить остатки данных.
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 10.10.2023, 15:19 [ТС] | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||
| 10.10.2023, 15:38 [ТС] | ||
|
В JAVA есть HashMap..Ключ-Значение, но вроде в delphi нет
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||
| 10.10.2023, 15:44 | |||
|
Т.е., строка - это ключ, объект - это значение. Понятно, что ключ нужно преобразовывать в строку, а значения хранить в виде TObject, но тем не менее)))
0
|
|||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||
| 10.10.2023, 15:50 [ТС] | |||
|
У меня просто такой подход сейчас,что мне надо хотя бы в идеальных условиях все сделать. Если получится, то надо идти дальше и уже о разных заковырках думать. Я этот проект продавать не буду или кому-нибудь втюхивать с таким написание кода))) так- что по этому поводу можно не волноваться за свою безопасность))) Это просто мне надо попробовать разобраться с такой темой Добавлено через 5 минут Если к баранам вернуться, то вывод ShortString обычный в Memo? Порт прочитан, но не выводится.
0
|
|||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||
| 10.10.2023, 16:01 | ||||
|
Чтение данных по частям - это не заковыка, а ситуация, с которой обязательно столкнешься, если придется что-то читать снаружи. Тем более, что то, что я тебе предложил, будет работать и в идеальных условиях. Смотри: 1. Приходят данные. Кстати, как ты узнаешь, что они к тебе должны прийти? Просто ожидаешь ReadPort? 2. Читаешь нулевой байт, получаешь команду. Хотя бы один байт точно прийдет))). 3. По этой команде получаешь размер пакета, заносишь его в какую-то переменную 4. Вычитаешь из этой переменной количество прочитанных байт из ReadPort - 1 (команду в нулевом байте не учитываем). 5. Если получился 0 - значит условия "идеальные", все прочитали за один раз, всем спасибо, мы молодцы! 6. Если нет - снова ждем ReadPort. 7. Переходим к пункту 4. Могу еще добавить ситуацию, когда в один буфер может прийти остаток первой команды и кусок следующей. Так тоже бывает))) Добавлено через 2 минуты Добавлено через 3 минуты Для организации ассоциативного массива (твой HashMap) тебе придется писать гораздо больше, потому что у тебя там диапазоны.
0
|
||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||
| 10.10.2023, 16:16 [ТС] | ||
|
Сейчас разберусь почему в memo не выводится, хотя в S[1] записывается с ReadPort
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||||||
| 10.10.2023, 16:20 | |||||||
P.S. Это уже хакерство какое-то получается. Может, на массив перейдем?)))
0
|
|||||||
| 10.10.2023, 16:20 | |
|
Comport vs Delphi PHP+ComPort Переназначить comport Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|