Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поочерёдность задач! [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]


Наверх

Титульная страница Поиск, карта сайта Написать письмо