Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Delphi

Выпуск № 880
от 27.07.2007, 13:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 469, Экспертов: 81
В номере:Вопросов: 2, Ответов: 6


Вопрос № 95930: доброго времени суток! Передо мной стоит задача: нужна программа, которая управляла бы последовательным портом компьютера, т.е. подавала бы логический ноль (0 вольт)или единицу(+5 вольт) на нужный пин портапомогите кто сможет, пожалуйста....
Вопрос № 95934: Нужно написать прогу. помогите пожайлуста. Есть текстовый документ, в нем написаны ссылки на сайты построчно(см. прил.) нужно чтобы, запустив программу открылась первая ссылка а через 60-70 секунд открывалась следующая ссылка, а затем следующ...

Вопрос № 95.930
доброго времени суток! Передо мной стоит задача: нужна программа, которая управляла бы последовательным портом компьютера, т.е. подавала бы логический ноль (0 вольт)или единицу(+5 вольт) на нужный пин портапомогите кто сможет, пожалуйста.
Отправлен: 22.07.2007, 08:57
Вопрос задал: Deimos25 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Deimos25!
Пример компонета для работы с последовательным портом, взята из справочника DelphiWorld. Скопируйте из приложения текст. Создайте Unit и вставьте текст. Сохраните, как Comm.pas, затем зарегистрируйте компонент. Уточнения пишите в минифорум.

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Практикант)
Ответ отправлен: 22.07.2007, 12:02

Отвечает: Виктор Пырлик
Здравствуйте, Deimos25!

Работа с аппаратурой под Windows накладывает ограничения, в частности, вы должны использовать функции API для доступа к аппаратной части, или, использовать/писать собственные драйвера для доступа – например, драйвер GiveIO (http://www.void.ru/content/701).
Для получения доступа к аппаратуре средствами API используется следующая последовательность шагов:
1. Получить Handler устройства вызовом CreateFile с именем устройства. Более подробно см Windows SDK Help.
2. Для управления устройством вызывать функции API для данного устройства, либо посылать IOCTL(input - otput control) последнее через DeviceIOCtl(подробно см Windows SDK Help).
3. Закрыть устройство CloseHandle(Handler);
Последовательный порт
Открытие порта:
Var
FHandle: Thandle;

FHandle := CreateFile(
PChar(ComString), // тут может быть например COM1 COM2 b и т.д.
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
Параметр 1: Имя порта – ‘COM1’, итд
Параметр 2: режим открытия GENERIC_READ – чтение, GENERIC_WRITE – запись
Параметр 3: режим разделения ресуртса. Примечание: 0 – неразделяемый (именно так описано открытие последовательного порта в WIN SDK, другие режимы не проверял).
Параметр 4: Режим безопасности. Имеет смысл в Windows NT, Windows 9x игнорирует его.
Параметр 5: Способ открытия. Для порта - OPEN_EXISTING – открыть, когда устройство реально существует.
Параметр6: режим наложения операций - FILE_FLAG_OVERLAPPED – разрешение таких операций. При этом операции чтения – записи, требующие значительного времени, выполняются фоново по отношению к основному потоку программы.
Параметр7: шаблон файла, для последовательного порта – всегда 0.
В случае нормального открытия порта FHandle – дескриптор порта, при неудаче содержит значение INVALID_HANDLE_VALUE.
Закрытие порта:
Закрытие порта выполняется вызовом CloseHandle(FHandle).
Настройка параметров передачи (скорость, кол-во бит, стоп биты)
Структура данных о настройках порта (device control block) DCB содержит информацию о настройках порта. Поля структуры:
DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate // Скорость передачи (baud rate). Есть стандартный набор
// скоростей: все константы скоростей выглядят как CBR_<число>.
//Пример CBR_9600, CBR_115200.

Flags
DWORD fBinary: // режим проверки символа Eof – включение данного режима Windows
// не поддерживает ( по крайней мере сейчас). Маска $01
DWORD fParity: //Контроль четности Маска $02 – включение контроля четности
DWORD fOutxCtsFlow: // Маска $04 – Включение контроля сигнала CTS при выводе байтов.
DWORD fOutxDsrFlow: // Маска $08 – Включение контроля сигнала DSR при выводе байтов.
DWORD fDtrControl: // Маска $30 – Тип контроля сигнала DTR: значения
DTR_CONTROL_DISABLE деактивация сигнала.
DTR_CONTROL_ENABLE конкретное значение сигнала можно задавать через
вызов EscapeCommFunction.
DTR_CONTROL_HANDSHAKE Автоматическое управление сигналом.
DWORD fDsrSensitivity: // Маска $40 - Включение контроля сигнала DSR.
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX: // Маска $100. Включение режима работы по XON XOFF при передаче
DWORD fInX: // Маска $200 -//- при приеме
DWORD fErrorChar: // Маска $400. Разрешение замещения при ошибочном приеме
// (несовпадение четности) принятого байта на член структуры ErrorChar.
DWORD fNull: // Маска $800 enable null stripping – пропускать при приеме символы NULL
DWORD fRtsControl: // Маска $3000. Тип контроля:
RTS_CONTROL_DISABLE
RTS_CONTROL_ENABLE
RTS_CONTROL_HANDSHAKE Аналогично сигналу DTR
RTS_CONTROL_TOGGLE – Высокий уровень пока, есть данные для передачи.

DWORD fAbortOnError // Маска $4000. Прекращение операций
// чтения – записи при возникновении ошибок
DWORD fDummy2:17; // Не используются
Другие данные структуры

WORD wReserved; // Не используется
WORD XonLim; // минимальное число байт в приемном буфере до отправки символа XON
WORD XoffLim; // максимальное число байт в приемном буфере до отправки символа XOFF
BYTE ByteSize; // количество бит в байте от 4 до 8
BYTE Parity; // 0-4=no,odd,even,mark,space бит паритета,
BYTE StopBits; // 0,1,2 = 1, 1.5, 2 – стоп биты,
// 1,5 используются только при 5 битах в посылке для мелкосхемы 8250.

ONESTOPBIT 1 stop bit
ONE5STOPBITS 1.5 stop bits
TWOSTOPBITS 2 stop bits

char XonChar; // Tx and Rx XON символ
char XoffChar; // Tx and Rx XOFF символ
char ErrorChar; // Символ, которым заменяется ошибочно принятый байт

char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // Не используется
Delphi имеет оболочку для DCB – TDCB.
Получить текущую конфигурацию порта можно функцией GetCommState(Fhandle:Handle; fDCB:TDCB).
Установить соответственно SetCommDCB.
После установки параметров порта. Читать и писать можно через ReadFile и WriteFile.
В приложение приводится модуль работы с ком-портом. Для сокращения кода, убраны некоторые проверки, что в реальной программе необходимо сделать.

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 22.07.2007, 13:14


Вопрос № 95.934
Нужно написать прогу. помогите пожайлуста.
Есть текстовый документ, в нем написаны ссылки на сайты построчно(см. прил.)
нужно чтобы, запустив программу открылась первая ссылка а через 60-70 секунд открывалась следующая ссылка, а затем следующая и так далее. Ссылки меняются в зависимости от содержания текстового документа.
Я думаю понятно описал суть проги.
Помогите. очень нуна. Спасибо всем кто откликнется.

Приложение:

Отправлен: 22.07.2007, 11:06
Вопрос задал: Колпаков Александр Константинович (статус: 3-ий класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Колпаков Александр Константинович!
Посмотрите, пожалуйста листинг в приложении, на форму помещается Button1, OpenDialog1 и Timer1.

Исправлено по просьбе самого эксперта [Denisss]

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Практикант)
Ответ отправлен: 22.07.2007, 11:37

Отвечает: DimonSoft
Здравствуйте, Колпаков Александр Константинович!

Решение задачи достаточно просто. Если нет никаких ограничений на использование, например, VCL, то я бы решил эту проблему так...

1. С помощью объекта TStringList загружаем файл в ОЗУ. Выбрать файл можно OpenDialog'ом или любым другим способом (зависит от Вашей программы).
2. Размещённый на форме TTimer с нужным интервалом. По таймеру открываем очередной адрес (см. ниже), который соответствует первой строке TStringList'а, и удаляем первую строку.
3. Открыть адрес в броузере можно при помощи ShellExecute. Для использования этой функции не забудьте подключить модуль ShellAPI. Описание функции есть в справке по WinAPI, которая идёт вместе с Delphi.

Теперь приблизительный код. В объявлении формы добавляем описание

AddressList:TStringList;

Рекомендую создать TStringList во время создания формы (OnCreate) и удалить при удалении формы (OnDestroy): так Вам удастся избежать разных Access Violation'ов и прочих неприятностей.

procedute TYourForm.FormCreate(...);
begin
...
AddressList:=TStringList.Create;
...
end;

procedute TYourForm.FormDestroy(...);
begin
...
AddressList.Free;
...
end;

Процедура загрузки списка из файла может быть реализована по какому-либо событию. Я приведу просто фрагмент кода, нужный для загрузки с учётом того, что мы создаём AddressList вместе с формой.

AddresssList.LoadFromFile(...); //Единственный параметр - строка-имя файла

Теперь событие таймера.

procedure TYourTimer.TimerTimer(...);
begin
...
if AddressList.Count>0 then
begin
//Среди параметров ShellExecute в соответствии со справкой указываем
//вместо имени файла нужный адрес. Это записывается так:
//
//PChar(AddressList[0])
//
//PChar - это приведение типов
ShellExecute(...);
AddressList.Delete(0); //Удаляем первый элемент списка
end
else
begin
... //Здесь можно отключить таймер, т.к. адресов в списке больше не осталось
end;
...
end;

В примере кода использованы имена контролов YourForm и YourTimer. В Вашем случае они, естесственно, будут другими.

С уважением, DimonSoft.
Ответ отправил: DimonSoft (статус: 3-ий класс)
Ответ отправлен: 22.07.2007, 11:40

Отвечает: Виктор Пырлик
Здравствуйте, Колпаков Александр Константинович!

В приложении рабочий код.

Приложение:

---------
Если ничего не помогло - надо читать инструкцию

Ответ отправил: Виктор Пырлик (статус: Студент)
Ответ отправлен: 22.07.2007, 14:23

Отвечает: Vlad Cepesh
Здравствуйте, Колпаков Александр Константинович!
Попробуйте вот это.

Приложение:

Ответ отправил: Vlad Cepesh (статус: 1-ый класс)
Ответ отправлен: 23.07.2007, 10:15


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное