Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2020, 04:19   #1
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию Работа с COM

Добрый день. Пытаюсь послать сразу несколько команд на устройство.
Но при отправке на устройство приходит это все как 1234.
А хотелось бы 1 потом ответ от устройства, 2 ответ от устройства и т.д
Что я делаю не так?
Использую компонент ComPort Library version 4.10

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Label1.Caption:=InttoStr(TIMES);
 if  TIMES = 0  then
 begin
 ComPort1.Open;
 begin
ComPort1.WriteStr('<1>');
end;
begin
 ComPort1.WriteStr('2');
end;
Begin
 ComPort1.WriteStr('3');
end;
begin
NUM:= NUM-1;
 ComPort1.WriteStr('4 ' + IntToStr(NUM));
end;
 TIMES := 30;
 ComPort1.Close;
 end else
 TIMES:=TIMES-1;
 end;
Amilman вне форума Ответить с цитированием
Старый 27.02.2020, 05:18   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Так это от устройства зависит - может ли оно читать команды по одной
Или организуйте задежку до прихода ответа
Black Fregat вне форума Ответить с цитированием
Старый 27.02.2020, 05:22   #3
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Так это от устройства зависит - может ли оно читать команды по одной
Или организуйте задежку до прихода ответа
А как организовать задержку ?
ComPort1.WaitForEvent(Events, Event.Handle, 5000);
не помогает..
Просто есть офф софт, который отправляет команды и они уходят как:
1
2
3
4
А не как 1234 в моей программе..
Amilman вне форума Ответить с цитированием
Старый 27.02.2020, 05:53   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Понимаете, com-порту пофигу. Вопрос только в задержках.
Если железо умеет читать из порта по одному байту, вообще никаких проблем
А тут явно оно вычитывает всё, что успело прибежать

Цитата:
Сообщение от Amilman Посмотреть сообщение
Просто есть офф софт, который отправляет команды и они уходят как:
1
2
3
4
А не как 1234 в моей программе..
А Вы уверены, что софт не пишет, например, #13 после каждой команды?
Black Fregat вне форума Ответить с цитированием
Старый 27.02.2020, 06:00   #5
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Понимаете, com-порту пофигу. Вопрос только в задержках.
Если железо умеет читать из порта по одному байту, вообще никаких проблем
А тут явно оно вычитывает всё, что успело прибежать


А Вы уверены, что софт не пишет, например, #13 после каждой команды?
Если смотреть пакеты отправленные офф софтом это выглядит так
1
Если при отправке в свой программе я дописываю #13
То получаю
Отправку вида:
1 [len=1]
Amilman вне форума Ответить с цитированием
Старый 27.02.2020, 06:16   #6
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
Понимаете, com-порту пофигу. Вопрос только в задержках.
Если железо умеет читать из порта по одному байту, вообще никаких проблем
А тут явно оно вычитывает всё, что успело прибежать


А Вы уверены, что софт не пишет, например, #13 после каждой команды?
Пакеты из офф софта выглядят так:
Отправил
<CMD REGIME 192837465><NUL>
Получил
<CMD REGIME 192837465><NUL>
Отправил
XYZ ttt<NUL>
Получил
XYZ FALSE<NUL>
Отправил
XYZ 0<NUL>
Получил
XYZ FALSE<NUL>

Если отправлять из моей программы с #13
Отправил
<CMD REGIME 192837465><NUL> [len=23]
Отправил
XYZ ttt<NUL> [len=8]
Отправил
XYZ 0<NUL> [len=6]
Получил
<CMD REGIME 192837465><NUL>

Если отправлять из моей программы без #13
Отправил
<CMD REGIME 192837465><NUL>XYZ ttt<NUL>XYZ 0<NUL>
Получил
<CMD REGIME 192837465><NUL>
Amilman вне форума Ответить с цитированием
Старый 27.02.2020, 10:02   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Так не отправляйте команду, пока не придёт ответ.
Ответы как читаются, асинхронно?
Сделайте очередь, по приходу ответа смотрите, есть ли команда в очереди, если есть - отправляйте
Black Fregat вне форума Ответить с цитированием
Старый 28.02.2020, 01:35   #8
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Amilman, у Вас протокол обмена с устройством, предоставленный изготовителем, есть в наличии?
Или проект основан на энтузиазме и каком-нить софте перехватчике пакетов?
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Старый 28.02.2020, 07:41   #9
Amilman
Пользователь
 
Регистрация: 19.12.2012
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Desc Посмотреть сообщение
Amilman, у Вас протокол обмена с устройством, предоставленный изготовителем, есть в наличии?
Или проект основан на энтузиазме и каком-нить софте перехватчике пакетов?
Энтузиазм и софтина перехватчик Advanced Serial Port Monitor. Просто к нам в компанию пршел клиент с прибором который запоролен. А предыдущая компания просто не сообщает пароль для входа чтобы сбросить настройки прибора. Офф софтина предлагает ввести в ручную пин код от прибора и если он неверен, то прибор отключает свой COM на 1 минуту. Вот я хотел чтобы моя софтина перебрала пароли для входа в устройство автоматически.
Amilman вне форума Ответить с цитированием
Старый 28.02.2020, 15:49   #10
Desc
Участник клуба
 
Аватар для Desc
 
Регистрация: 21.11.2007
Сообщений: 1,063
По умолчанию

Так а разве нет возможности связаться с техподдержкой изготовителя прибора?
Наверняка предусмотрен сброс на дефолт, типа как в роутерах.
А так, сами представте. Нужно угадать протокол обмена, чтоб железка воспринимала строку как команду, а не как мусорные помехи на линии. Софт который будет генерить пароли методом перебора комбинаций реализовать возможно. Но представте сколько понадобится времени, с ожиданием в одну минуту перед вводом следующей комбинации. Жуть
I am not a wizard, I am just learning.
Desc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная работа(очень простая) Структуры, работа с файлами yurda Фриланс 2 11.06.2016 08:44
Работа с ems api: корректная работа только при явном указании города mrdemkin JavaScript, Ajax 3 02.03.2015 18:23
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме NewDelphi Фриланс 2 08.10.2009 11:00