![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поочерёдность задач! [D7, XP]
FreeZ © (2007-03-13 23:05:00)Вечер добрый! Снова к Вам за помощью!
Дано:
- устройство, подключено на сом-порт,
- Данные читаю с помощью команды ReadStr
- Записываю соответственно WriteStr
var
Form1: TForm1;
c: String;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Port.Open;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Port.WriteStr('?=' + #13); //Отправляю запрос на получение положения устройства.
Port.ReadStr(c,19); //Читаю положение устройства, и помешаю в String
end;
//Считываю примерно такое '+=abcdefghijklmn'
// Регистр букв, может меняться!!!
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if c[11]= 'I' then Port.WriteStr('=A' + #13); //Работает
if c[11]= 'i' then Port.WriteStr('=a' + #13); //Работает
if c[12]= 'J' then Port.WriteStr('=D' + #13); //НЕ Работает, ПОЧЕМУ???
if c[11]= 'j' then Port.WriteStr('=d' + #13); //НЕ Работает, ПОЧЕМУ???
end;
end.
ПОЧЕМУ НЕ РАБОТАЮТ???ПОМОГИТЕ!!!!
Ещё, чуть не забыл:
object Timer1: TTimer
Interval = 250
OnTimer = Timer1Timer
Left = 64
Top = 56
end
object Timer2: TTimer
Interval = 700
OnTimer = Timer2Timer
Left = 128
Top = 48
end
PowerAnt (2007-03-17 10:48:00) [1]Посмотрите примеры программ на C, Visual Basik, Perl :). Они есть не только на сайте но и у Вас на компакт диске. Это коненчо не delphi, но кое что полезное оттуда подчерпнуть можно.
PowerAnt (2007-03-17 10:38:00) [2]Случайно наткнулся на обсуждение Вашего кусочка программы.
После посылки команды управления =A не вычитывается отчет о выполнении: +=
Получается посылаем 2 команды - теряем 2! отчета. Потом эти отчеты будут вычитаны в первом таймере (буферизацию данных никто не отменял), то есть длинна строки будет меньше 12 :).
Конструкцию типа c[] использовать не стоит - удобнее искать букву в строке. Это как раз решит ошибку c[12] или c[11].
Отсутствует логгирование команд и отчтов об их выполнении.
Использовать следует только 1 таймер в котором можно использовать команду ?%.
В программе есть стратегический просчет - следует всю работу с Муравьем вести через функцию, которая посылает команду удправления и сразу после этого вычитывает отчет о её выполнении. И то и другое следует логгировать.
SlymRO (2007-03-14 04:19:00) [3]откуда такая уверенность что c[12] наличиствует? а вдруг length(c)<12? или вообще равна 0?
1. Проверки на длинну/диапазон!
2. Зачем 2 таймера?
Германн (2007-03-14 01:56:00) [4]
> FreeZ © (14.03.07 01:22) [5]
>
>
> > Первый раз в своей жизни вижу "устройство", которое в
> ответ
> > посылает алфавит. Бред, да и только. Может всё-таки это
> > устройство посылает не текст, а набор байт?
>
>
> Работа с устройством идёт в текстовом варанте! С ним можно
> работать даже через обычный виндовский хипертерменал!!!
>
>
> > Ну кто-нибудь наконец научится работать с СОМ-портом
> грамотно,
> > т.е. естественно?
>
>
> Обьясни, как это??? Я же новичёк!
>
> Можешь сам посмотреть на устройство и подсказать, буду очень
> благодарен!!!
>
> http://www.anthillsolutions.com/main.html
Не. Я сам не хочу ничего смотреть, а точнее, не хочу изучать то, что меня не интересует. У меня и так забот хватает! Дай мне протокол связи с устройством, я может быть подскажу что делать.
RASkov (2007-03-14 01:41:00) [5]в случае применения PowerAnt программу управления Умным Домом с легкостью сможет
написать даже школьник (предварительно прочитав руководство программиста).
FreeZ (2007-03-14 01:22:00) [6]
> Первый раз в своей жизни вижу "устройство", которое в ответ
> посылает алфавит. Бред, да и только. Может всё-таки это
> устройство посылает не текст, а набор байт?
Работа с устройством идёт в текстовом варанте! С ним можно работать даже через обычный виндовский хипертерменал!!!
> Ну кто-нибудь наконец научится работать с СОМ-портом грамотно,
> т.е. естественно?
Обьясни, как это??? Я же новичёк!
Можешь сам посмотреть на устройство и подсказать, буду очень благодарен!!!
http://www.anthillsolutions.com/main.html
Германн (2007-03-14 01:01:00) [7]
> FreeZ © (13.03.07 23:05)
>
> Вечер добрый! Снова к Вам за помощью!
>
> Дано:
> - устройство, подключено на сом-порт,
> - Данные читаю с помощью команды ReadStr
> - Записываю соответственно WriteStr
> //Считываю примерно такое '+=abcdefghijklmn'
> // Регистр букв, может меняться!!!
>
1. Первый раз в своей жизни вижу "устройство", которое в ответ посылает алфавит. Бред, да и только. Может всё-таки это устройство посылает не текст, а набор байт?
2. Опять, блин, с СОМ-портом работают в синхронном режиме :(((((((((( Ну кто-нибудь наконец научится работать с СОМ-портом грамотно, т.е. естественно?
3. На кой, извините, хрен нужен тут таймер2?! Разбор полученной информации можно и нужно выполнять в Timer1Timer сразу после выполнения Port.ReadStr(c,19).
4. После принятия строки можно и нужно при её разборке проверять её длину.
P.S.
Всё это только, если я правильно понял суть процедуры Port.ReadStr(c,19). Смущает меня наличие в ней второго параметра а также то, что посылка в порт строки подразумевает добавление #13.
Johnmen (2007-03-14 00:20:00) [8]
> ПОЧЕМУ НЕ РАБОТАЮТ???
Кто не работают?
> Ещё, чуть не забыл:
> ...
Это очень важная инфа. Спасибо. Я записал...
DrPass (2007-03-13 23:52:00) [9]
> if c[11]= 'j' then Port.WriteStr('=d' + #13);
Или наоборот, тут c[12]
DrPass (2007-03-13 23:51:00) [10]
> if c[12]= 'J' then Port.WriteStr('=D' + #13); //НЕ Работает,
> ПОЧЕМУ???
Попробуй вместо c[12] указать c[11]