Консультация № 67165
15.12.2006, 21:16
0.00 руб.
0 2 2
Привет знатоки. Есть некий прибор считающий расход вещества,
находящийся в отдаление от рабочего места.
У него есть выход на Com-порт. Хотелось бы создать программу
что бы выводить расход (суточный, часовой и т.д.) на компьютер.
В инете про приём данных ничего не нашёл. Может, кто поможет, чем может?
Пожалуйста. И второе нужно, что бы данные сохранялись, допустим, в 9-00 ежесуточно в программе до следующих суток.
Может сумбурно объяснил извините
Не откажите в просьбе начинающему.

Обсуждение

Неизвестный
15.12.2006, 21:29
общий
это ответ
Здравствуйте, SIR!

В общем, алогритм такой:
открываете com-порт на чтение функцией CreateFile(‘COM1‘, GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0)
устанавливаете параметры обмена (скорость, контроль четности и др) с помощью функции SetCommState
и после этого начинаете читать данные функцией ReadFile.

Описание параметров функций можно найти во встроенной справке Delphi
Для работы Вам понадобится точная информация, какие параметры обмена поддерживает ваше устройство, и формат данных, которые Вы будете получать

Если будут вопросы - пишите в личку
Неизвестный
18.12.2006, 13:18
общий
это ответ
Здравствуйте, SIR!

Запись в файл по расписанию:

Ставим таймер с интервалом в минуту (думаю нет разницы запуститься в 9:00:00 или 9:00:59)

в обработчике таймера пишем такой код:
Var
Hour, Min, Sec: Word;
begin
DecodeTime(Time, Hour, Min, Sec);
if (Hour=9)and(Min=0) then
begin
//запись в файл
end;
end;

Записать в файл можно несколькими способами.

Простой текстовый файл:
Var F: TextFile;
...
assignfile(F, FileName);
if fileexists(FileName) then append(f) // если существует открываем
else rewrite(f);
WriteLn(F, String_For_Record);
CloseFile(F);

Нетипизированный файл:
Var F: TextFile;
...
assignfile(F, FileName);
if fileexists(FileName) then reset(F, 1) // если существует открываем
else rewrite(F, 1); // перезаписываем (создаем новый)
BlockWrite(F, String_For_Record, Length(String_For_Record));
CloseFile(F);

Еще можно записывать через TFileStream:
var
FileStream: TFileStream;
...
FileStream:=TFileStream.Create(File_Name, fmOpenReadWrite);
FileStream.WriteBuf(String_For_Record, Length(String_For_Record);
FileStream.Free;
Форма ответа