|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
Работа с ComPort05.10.2023, 16:03. Показов 6598. Ответов 149
Метки нет (Все метки)
Здравствуйте, работаю с ComPort и хочу передать данные через Writeport. Столкнулась с такой проблемой, что при вызове функции OutputBuffer заполнен, а когда перехожу по дебагу, то в этой функции значение буфера=no value (размер вычислился и передался).
Почему буфер не передался? Вообще для чего мне это надо. Мне надо принять данные со сторонней программы подключенное к ComPort . Как я понимаю для того,чтобы принять, мне надо сигнализировать,что принимаю. Поэтому изначально использую Writeport.
0
|
|
| 05.10.2023, 16:03 | |
|
Ответы с готовыми решениями:
149
Асинхронная работа с ComPort Работа с ComPort Library RS-232 ComPort |
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
||
| 09.10.2023, 12:57 | ||
|
А что, функцию IntToHex отменили? Вот насчет побитового вывода не знаю, есть ли готовая, но можно самостоятельно сделать с помощью операций or и shr\shl.
Комп только в двоичной системе работает и передает.
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||||||
| 09.10.2023, 13:14 [ТС] | |||||||
|
Но из-за того, что у меня
оно сразу в dec. Так мне тип другой сделать или как вы говорите функцию преобразования сделать? для меня лучше с исходником Bin работать.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||||
| 09.10.2023, 13:30 [ТС] | ||||||
|
Если я делаю не integer, а
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||||||||||||||||
| 09.10.2023, 14:00 [ТС] | ||||||||||||||||
|
Скорее всего надо, чтобы приемный буфер был
0
|
||||||||||||||||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
|
| 09.10.2023, 14:00 | |
|
Она вам что передает? Числа в двоичном формате, или в текстовом? Других опций нет. Нет никаких Hex-команд, если только у вас там не какой-то строковый протокол, а на принимающей стороне строковый парсер.
Функции преобразования лишь выводят число в том, или ином виде, либо считывают. Вы хотите набрать побайтно посылку в виде Hex значений, и отправить в порт? Тогда надо эти байты в массив Byte'ов переводить. Это очень старый проект на основе старого юнита для работы COM-портом, который просто позволяет прослушивать приходящее в порт или гонять данные м/у двумя портами, в т. ч. байтовые посылки записанные в Hex-виде. Я тогда парсер для таких строчек сделал.
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 09.10.2023, 14:01 | ||
|
Тогда нужно убедиться в правильной последовательности байт. 1A1B и 1B1A - это, как ты понимаешь, разные числа.
0
|
||
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
|
||||||||
| 09.10.2023, 14:10 | ||||||||
|
Если устройство принимает команды вида "SIZE=1A", то это текстовые команды. Можно так:
0
|
||||||||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
||||||
| 09.10.2023, 14:13 | ||||||
0
|
||||||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|
| 09.10.2023, 14:16 [ТС] | |
|
Beltar, Beltar, WriteFile уже сделала. Теперь надо получить посылку/ прочитать ReadFile.
Но мне не то приходит или вообще все зависает. Спасибо за арфи,сейчас разбираться буду.
0
|
|
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
|
| 09.10.2023, 14:21 | |
|
А чем вас onRxChar компонента не устраивает? Просто открыть порт и слушать, что приходит. Тем более что приходить может кусками.
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||
| 09.10.2023, 14:56 [ТС] | ||
|
Добавлено через 3 минуты Constcat, байты данных передаются младшим разрядом (битом) вперёд. Добавлено через 7 минут Стороння программа распознаёт команду, которая введена мной в моей программе. к примеру есть два параметра рост и вес. В зависимости от команды мне или рост, или вес значения должны придти) Сейчас отправляю команду и она ее распознает, и выводит в стороннем приложении ее значения (рост - ВА (это 186dec)). Сейчас мне надо получить эти BA или 10111010.
0
|
||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
|
| 09.10.2023, 15:17 | |
|
Как называется протокол, может стандартный?
Если вы используете компонент, то это точно не WinAPI напрямую. Да и я от реализации на WinAPI отказался в пользу компонента просто потому, что я про работу с COM-портом не знаю ни хрена, и надежность моей работы неизбежно будет низкая, а создатель компонента на котором половина проектов в мире поди сделана, знал про порты ВСЁ. Добавлено через 19 минут Что касается строковых протоколов вообще, то они удобны принимающей стороне, я видел такое на теплосчетчике, когда готовый отчет с него просто через порт посылается, или просто непрерывная отправка текстовых значений параметра. Не надо парсера. Для команд, идущих на устройство, текст не имеет смысла, т. к. строка в терминах конкретного языка программирования это одно, а передается иное, просто поток байт. Передача именно строки может быть вообще не предусмотрена. А если предусмотрена, то это будет что-то очень примитивное, вроде Си-строки, т. е. набора байтов с #0 в конце. И намного проще делать команды числовыми. Типа: Номер N, дай Integer по адресу XX. Допустим дай Integer имеет код 1. Номер, скажем 10 (хотя как именно устройства понимают, что сейчас пришел именно номер - это отдельная тема, мне известны такие критерии, как тишина на линии и смена четности для адреса, наверняка еще способы есть). Адрес AC BD. И вы пошлете "0A 01 AC BD" плюс 1-2 байта контрольной суммы. Прислать же вам значение параметра в виде строки, прибор вполне может. Тем более, если там только числа, а значит вопросы кодировки отсутствуют. Но вместо того, чтобы гадать, лучше выложите документацию.
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||
| 09.10.2023, 15:35 [ТС] | |||
|
Документацию не могу выкладывать. Изначально ссылалась на эту статью, но у меня программа не работала http://delartidea.blogspot.com/2015/07/com.html Пришла сюда на форум и подсказали с WriteFile, a теперь к ReadFile пришла. Добавлено через 1 минуту
0
|
|||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
|
| 09.10.2023, 15:45 | |
|
Сначала сделайте, чтобы заработало любым удобным способом, а потом можно пытаться достичь того же результата любым др. способом.
Протокол обмена с разными устройствами в свободной продаже секретным не бывает. Мне как-то для весов вообще ничего не дали, но т. к. фирменное ПО все равно есть, то определить простой протокол с помощью сниффера и небольшого предположения о структуре ответа заняло ОЧЕНЬ немного времени.
0
|
|
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
||
| 09.10.2023, 16:03 [ТС] | ||
|
мне кажется это из-за того, что я буферу тип integer дала и мало ли знающие люди, скажут,что лучше другой тип. я понимаю,что железо общается bin, так тогда хотя бы bin получить. Если использую как автор в той статье (Array of Char),то программа зависает. Мне то приходит,что порт прочитан, но теперь надо это отшлифовать.
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 09.10.2023, 16:13 | ||
|
Если с ним разобраться, то будет очень удобно. Для гарантированно небольших буферов иногда использую обычный ShortString (с учетом нулевого элемента длины).
0
|
||
|
0 / 0 / 0
Регистрация: 05.10.2023
Сообщений: 116
|
|||||||||||
| 09.10.2023, 16:47 [ТС] | |||||||||||
|
Constcat, я когда сделала
то оно то прочитало))) но буфер='' ) Поэтому сделала
И если я несколько раз буду нажимать на кнопку прием , то приходит по порядку значения. К примеру. В источнике : 0 A8 7 3 AC // вообще из этого параметра/числа я в коде потом буду с бубном плясать,чтобы адекватное для человека значения получила. ко мне приходят : 0 168 7 3 172 (соответствуют hex) если я дальше бы нажимала кнопку чтения, то выводились бы нули. Поэтому мне надо сделать сделать цикл в функции чтения,чтобы оно записывало до тех пор, пока не встретит нуль?
0
|
|||||||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||||||||||||
| 09.10.2023, 17:10 | ||||||||||||
|
В качестве параметра нужно так и оставлять var Buf - это позволит передавать в процедуру любую переменную в качестве буфера, нужно только Size правильно назначать.
0
|
||||||||||||
|
1071 / 512 / 41
Регистрация: 05.05.2022
Сообщений: 3,603
|
||||||
| 09.10.2023, 18:03 | ||||||
|
Я помню у меня в начале 2019-го с линии контроллеров на станках вообще шла помеха, которая была даже визуально видна и как моргание светодиода на преобразователе, и как приход обрывочных FF при открытом порте диагностической программы. Так что если вы что-то получили, то это не значит ничего. Вам может прийти искаженное 100 раз и даже просто шум.
Вы понимаете, что именно вам пришло и правильные ли это данные? Может нужно байты переставить, если младший байт идет первым. Вы же должны видеть показания прибора, соотносится ли то что пришло с тем, что вы видите? Читать в цикле можно либо, когда вам непрерывно данные присылаются, либо вы послали запрос, вам пришел ответ. Или не пришел, т. е. нужен таймаут. Циклическое чтение делается через таймер и может быть довольно сложно организовано. Про прямое управление линиями RX и TX я даже не заикаюсь.
Если не очень понимаете, что делаете, то лучше array of Byte. Можно даже фиксированной длины.
0
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 09.10.2023, 18:21 | |
|
0
|
|
| 09.10.2023, 18:21 | |
|
Comport vs Delphi PHP+ComPort Переназначить comport Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
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С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|