Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 27.02.2020, 05: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, 06:18   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,682
По умолчанию

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

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

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

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

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


А Вы уверены, что софт не пишет, например, #13 после каждой команды?
Если смотреть пакеты отправленные офф софтом это выглядит так
1
Если при отправке в свой программе я дописываю #13
То получаю
Отправку вида:
1 [len=1]
Amilman вне форума Ответить с цитированием
Старый 27.02.2020, 07: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, 11:02   #7
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,682
По умолчанию

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

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

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

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


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


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS