Меню Рубрики

Управление lpt портом windows 7

Управление lpt портом windows 7

Программа для управления LPT портом

Программа для управления LPT портом с 17 битным анализатором протокола обмена данными устройств использующих параллельный порт компьютера. Написана под Windows и имеет следующие возможности:

1. Три независимых канала, с помощью которых реализуется: ввод адреса порта (регистра), автоматическое чтение данных с порта, запись данных в порт в формате HEX или как десятичное число; отображение данных в форматах bite, word, Dword.

2. Отображение состояния каждого из 17 битов LPT порта и управление выходными битами с Pin клавиатуры.

3. Девять программируемых порт / данные банков памяти.

4. 17 канальный (бит на канал) анализатор – осциллограф логического состояния каждого бита (1/0) с возможностью установки скорости анализа (по времени), синхронизации по любому из 17 бит как по высокому уровню (1) так и по низкому (0), счетчик переданных данных по каждому биту и др. функции для удобной проверки и настройки цифровых устройств подключенных к компьютеру.

5. Может быть использована в качестве цифрового (1/0) многоканального осциллографа, а также для управления внешними устройствами посредством компьютера.

Программа предназначена для управления LPT портами компьютера из ОС Windows 9x/2000/XP и имеет следующие возможности:

1. Автоматическая регистрация драйвера в Windows XP на правах администратора системы.
2. Автоматическая проверка установленных портов и внесение в список.
3. Одновременное чтение регистров данных, контроля и состояния выбранного LPT порта.
4. Одновременное отображение содержимого регистров в форматах Hex и Byte, что избавляет от необходимости пересчета.
5. Запись данных в порт в форматах Hex и Byte.
6. Отображение логического (1/0) состояния битов (Pin) выбранного порта в реальный период времени.
7. Управление логическим состоянием бит (Pin) LPT порта с помощью Pin клавиатуры.
8. Проверка порта на двунаправленность (если включен в Bios).
9. Доступный исходный код, описание, примеры создания программ для управления внешними устройствами посредством LPT порта на основе данной программы (Делфи), техническая поддержка на сайте.

Программа работает через драйвер ввода-вывода LPTWDMIO, разработанна специально для обучения и отладки самостоятельно изготовляемых программ управления внешними устройствами посредством LPT порта в среде Win 9x/2000/XP.

Источник

Управление lpt портом windows 7

Продолжая цикл статей по программированию устройств сопряжения, а конкретно LPT порта, думаю настало время рассказать Вам о том, как написать программу для работы с данным портом под ОС Windows, т.е. в виде «привычного» взору окна с кнопочками, окошками ввода и тому подобными атрибутами.

Ну чтож, давайте приступим. Создаем новый MFC проект в Microsoft Visual C++ 6.0, выбирая в меню пункт File -> New. В открывшемся окне указываем тип проекта MFC AppWizard(exe). В поле Location выберете место расположения проекта. В поле Project Name введите имя проекта, например LPTWin.

Нажимаете Ok. Дальше запускается мастер построения приложения. На первом (и в нашем проекте последнем) шаге на вопрос о типе приложения выбирете пункт Dialog Based. Нажимаем книпку Finish.

Выскочит информационное окно, в котором будет дана некоторая информация по построению проекта. Не обращайте на него внимание и нажимайте Ok.

После этого перед нами появится рабочия область нашего проекта с пустой заготовкой формы, где мы сейчас начнем ваять приложение.

Сначала наполним наш диалог необходимыми элементами управления. На окне Controls выбирете элемент Group Box и разместите его на окне заготовки диалога. Должно получиться что-то похожее на рис. ниже.

Данный элемент не несет накакой фактической нагрузки и нужен он только для «декоративного» обрамления других элементов. Пока что он имеет заголовок по умолчанию Static. Давайте исправим это. Нажмите правой кнопкой мыши на него, и в выпавшем списке выбирите пункт Properties.

В появившемся окне в поле Caption введите Write to Port. Закройте окно.

Далее, выбирите элемент управления Static Text и разместите его в диалоге. По умолчанию он будет содержать текст Static. Замените его на Port Adress:, зайдя в свойства этого элемента.

Далее, выбирите элемент управления Edit Box, и разместите его, как показано на рис. ниже. Зайдите в свойста и в поле ID вместо ID_EDIT1 введите IDC_ADRtoWrite. То что мы сейчас указали называется идентификатором элемента управления и теперь в программе данный элемент ассоциируется с этим именем.

Теперь абсолютно аналогично разместите еще один элемент Static Text с именем Data и Edit Box с идентификатором IDC_DATAtoWRITE.

Далее, выбирите элемент управления Button и разместите его в диалоге. Зайдите в его совойства и в качестве заголовка укажите Write to Port. В итоге должно получиться нечто похожее на рис. ниже.

Теперь мы закончили с оформлением элементов управления, с помощью которых можно будет ввести адрес порта, указать число для записи в порт и провести запись по нажатию кнопки Write to Port. Конечно, это все пока что еще не работает, поскольку мы еще не написали ни одной строчки кода. Но это дальше. Продолжим.

Далее, по аналогии создайте набор элементов для чтения данных из порта, а именно Group Box с именем Read from Port, два Static Text`a с именами Port Adress:, Data: и два Edit Box`a с идентификаторами IDC_ADRtoRead, IDC_DATAfromRead соответственно. В результате должно получиться что-то похожее на это:

Для призентабельного вида нашего приложения растяните («стяните») до нужных размеров как само диалоговое окно так и элементы управления, расположенные в нем.

Иногда бывает удобно посмотреть внешний вид окна не на рабочей области, а в живую. Для этого вовсе не обязательно компилировать и запускать приложение, а можно воспользоваться командой Test. Для ее запуска нужно нажать «рычажок» в нижнем левом углу программы.

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

Далее нам необходимо создать переменные для улементов управления. Для этого выбирайте в главном меню пункт View — > ClassWizard.

В открывшемся окне перейдите на вкладку Member Variables. Если в списке Class Name установлен не CLPTWinDlg то выбирите его. В списке просмотра Control IDs показаны все идентификаторы для элементов управления использующихся в нашем диалоге. Будем создавать переменные только для окон редактирования. Для этого выбирайте нужный идентификатор и нажимайте книпку Add Variable.

Например, создадим переменную для IDC_ADRtoRead. В открывшемся окне в поле Member Variable Name введите m_ADRtoRead, в списке CategoryValue, а в списке Variable Type тип int. Нажмите Ok. Имя переменной не критично и может быть выбрано любым (по правилам Си, конечно), но для того чтобы не путалься какой переменной соответствует тот или иной идентификатор элемента управления, я задал их имена похожими друг на друга.

Далее, по аналогии, создаем переменные для оставшихся трех окон редактирования с темиже значениями параметров Category, Variable Type и соответствующими именами. В результате окно идентификаторов должно выглядеть так:

Последнее, что нам осталось сделать, прежде чем мы возмемся за программирование, так это подключить файлы библиотеки inpout32.dll к нашему проекту, поскольку именно с помощью ее мы будем работать с LPT портом под Windows. Процесс подключения этих файлов я подробно рассматривал в предыдущих статьях. Напомню, только, что файл inpout32.dll должен находиться в одной директории с запускаемой программой. После подключения файлов древо нашего проекта должно принять вид:

И еще один важный момент: необходимо с помощью оператора #include подключить файл с описаниями функций библиотеки (h.h) в код программы. Для этого откройте файл LPTWinDlg.cpp и добавьте в верху строчку:

после записи #include «stdafx.h».

Все, наконец-то, добрались до места, где собственно начнем писать код программы. Перейдите в редактор диалога (туда, где мы наполняли диалог элементами управления) и дважды щелкните по кнопке Write to Port. Появится окно, в котором предлагается создать функцию-обработчик на нажатие это книпки. Ей будет дано имя OnButton1. Соглашаемся с этим и нажимаем на кнопку Ok.

Нас «перенесет» к пустой заготовке кода этой фцнкции.

Допишите тело этой функции, используя код ниже. После этого она должна выглядеть так:

Рассмотрим, как работает этот код. Сначала идет обращение к функции UpdateData() с параметром true. При этом в созданные нами переменные элементов управления скопируются введенные в них данные. Далее проводится проверка на корректность этих данных. Например, если адрес порта или передаваемое в него данное меньше нуля, то ситуация не совсем корректная. Если все в порядке, то идет обращение к функции Out32() библиотеки inpout32.dll.

Теперь оживим функцию предназначенную для чтения данных из порта. Для этого создайте функцию-обработчик на нажатие книпки Read from Port, оставьте ей имя OnButton2 и добавьте в нее следующий код:

Я думаю, что принцип работы данного кода вполне понятен, только хотел обратить внимание на на вызов функции UpdateData() с параметром false. При этом значения переменных элементов управления скопируются в них и мы сможем наблюдать из на экране.

Все, готово! Можно компилировать и запускать. Для тестирования этой программы я использовал устройство для LPT порта в виде блока светодиодов, описанное в предыдущей стаье.

Источник

LptSW — программа управления нагрузками при помощи LPT-порта

Сначала я задумался о причинах ложных срабатываний аппаратуры. Наиболее вероятно, что при самотестировании в начале (средствами BIOS), а затем при загрузке драйвера параллельного порта в самой Windows, происходит вывод каких-то данных. При помощи осциллографа я зафиксировал процессы, возникающие на выводах шины данных LPT-порта при включении и отключении компьютера. Как и предполагалось, вначале, при процедуре тестирования BIOS, происходит вывод нескольких байтов, а затем через несколько секунд (уже когда бежит «червячок-индикатор» загрузки Windows XP — все сказанное здесь и далее относится к этой ОС), снова выводится пачка байтов. Естественно, что если схема использует сигнал с какого-либо бита шины данных порта для управления нагрузкой, она реагирует на выводимые байты.

Известно, что для проверки работоспособности схем ввода-вывода часто используется вывод байтов 0x55 и 0xAA (в двоичном коде это 01010101 и 10101010), и я предположил, что именно такие байты и выводит BIOS и Windows при тестировании LPT. Если бы мое предположение оказалось верным, можно было бы модифицировать схему и программу так, чтобы управление светодиодом оптронной развязки велось не относительно общего провода сигналом с одной линии шины данных, а с пары линий: когда уровни на выбранной паре линий одинаковы — светодиод будет светиться только при одной-единственной комбинации уровней из четырех возможных. Если это и не решит проблему ложных срабатываний, то существенно уменьшит ее вероятность. Именно с такой идеей я обратился к автору разработки по почте, однако, он ответил, что, хотя идея по его мнению заслуживает рассмотрения, он в настоящее время не может заняться ее проверкой. Ну, а я смог.

Логического анализатора у меня нет, потому я ограничился проверкой только пары линий D0 и D2. Оказалось, что при тестировании BIOS уровни на этих линиях действительно всегда одинаковы, а вот во время старта Windows бывают моменты, когда они разные, хотя, как и предполагалось, таких моментов очень немного: все «нежелательные» импульсы происходили в течение не более чем 20-50 микросекунд. То есть, я оказался прав наполовину.
Однако, «ложный» импульс в пару десятков микросекунд — это вовсе не проблема, он легко фильтруется простейшей RC-цепочкой с постоянной времени, скажем, 10-20 миллисекунд (на 3 порядка больше длительности фильтруемого импульса), что абсолютно не скажется на эксплуатационных удобствах (задержка коммутации нагрузки в 20 миллисекунд абсолютно незаметна человеку).

В общем, путь решения проблемы был намечен. Так как автор не смог (или не пожелал) модифицировать под него свою программу, я решил написать собственный вариант, заодно устранив по возможности все недостатки предыдущего. И вот что получилось.

Новый вариант схемы показан на рисунке 1. По сравнению с прототипом она не сильно изменилась (в расчете на 1 канал, естественно). К выбору типов элементов схемы особых требований не предъявляется, допустима замена элементов на любые, сходные по параметрам. VT2 может потребовать установки на небольшой теплоотвод. VD1КД209, 1N400x или иной на ток не менее 0,8А и обратное напряжение не ниже 25В. Оптрон VU1 может быть практически любым транзисторным: ОАТ127, АОТ128, АОТ110, 4N35 и др. Реле должно быть рассчитано на срабатывание при выбранном напряжении питания. Обратите внимание: резистор R7 добавлен в схему в результате исправления ошибки (вначале он отсутствовал). Его сопротивление должно быть от 150 до 240 Ом. Чем меньше напряжение питания, тем меньше сопротивление.

Это не единственный возможный вариант схемы, можно модифицировать ее, оставив, например, только один канал управления и превратив ее в аналог схемы из первоисточника. Можно изменить конструкцию ключевого каскада, применить оптореле, «переставить» линии управления порта. Но при разработке других вариантов схемы необходимо соблюдать 3 важных условия: обязательно обеспечивать гальваническую развязку — раз, ограничивать ток через линии LPT порта на уровне не более 10 мА — два, и обеспечивать соединение контактов 11 и 12 разъема порта с общим проводом порта — три. Несоблюдение первых двух условий может привести к порче компьютера, а третьего — к зависанию программы.

Конструктивно устройство можно выполнить в виде сетевого удлиннителя на 5 розеток (1 обычная розетка для питания компьютера и 4 для управляемых нагрузок). Печатная плата устройства не разрабатывалась.

Управляющая программа в виде исполняемого файла, как всегда, доступна для скачивания ЗДЕСЬ. Программа тестировалась в Windows XP Pro SP2. Она обладает следующими возможностями и особенностями:

  • Не требует инсталляции, ничего не пишет в системный реестр
  • После запуска работает в системном трее Windows
  • При помощи всплывающих подсказок информирует о состоянии нагрузок
  • Управление режимами ведется при помощи всплывающего меню по щелчку правой кнопкой на иконке в системном трее
  • Позволяет управлять четырмя раздельными нагрузками
  • Каждый из 4-х каналов нагрузки может иметь заданное пользователем название для удобства работы
  • При запуске программы заранее указанные нагрузки могут включаться автоматически
  • При завершении программы все нагрузки могут быть или автоматически отключены, или оставлены в текущем состоянии
  • Имеет простой интерфейс в стандартном стиле Windows
  • Не использует для работы с портом дополнительных библиотек


Всплывающее меню программы имеет (по умолчанию) вид, показанный на рисунке 2.

Пункт «Показать» откроет в центре экрана рабочее окно программы. То же самое произойдет по двойному щелчку на иконке в системном трее. Назначение пунктов «О программе» и «Выход» очевидно, а 4 недоступные (при первом запуске) пункта предназначены для управления соответствующими нагрузками.

На рисунке 3 показано основное окно программы. Галочкой в столбце «Канал» можно разрешить управление соответствующим каналом. Для разрешенных каналов становятся доступны соответствующие поля настройки их параметров (запрещенные каналы всегда выключены).

Каждый канал управления может иметь свое наименование, по умолчанию это просто «Канал» с номером — на рисунке как раз показано, что 3 канала поименованы, а последний — еще нет. Если необходимо, чтобы при запуске программы канал включался автоматически, нужно установить галочку в столбце «Состояние при старте». Галочка в столбце «Состояние сейчас» управляет текущим состоянием канала, т.е. при ее установке нагрузка немедленно включится, при снятии — выключится. Наконец, есть еще одна галочка, общая для всех каналов — «Перед выходом все отключить». Ее назначение, надеюсь, понятно без комментариев.

После того, как все параметры заданы, основное окно можно свернуть, оно при этом не появится в панели задач, а останется, как и ранее, в системном трее. Зато теперь уже меню преобразится (см. рисунок 4)! Теперь каналы получили заданные названия. Включенные нагрузки в меню отмечаются галочками.

Лично мне такой интерфейс представляется более привычным и удобным, нежели тот, что в программе-прототипе.

В программе предусмотрена возможность «тонкой» настройки, однако она немного завуалирована. Дело в том, что эта возможность предназначена для тех, кто решит изменить схему адаптера, а это может потребоваться по двум причинам:

  • Неудобная разводка платы адаптера по имеющейся схеме
  • Процедура самотестирования BIOS работает не так, как на моей материнской плате, из-за чего пары линий шины данных LPT не обеспечивают реализации вышеописанных функций

В обоих случаях наверняка потребуется изменить назначение линий порта LPT, и, чтобы программа могла адекватно на такие модификации реагировать, необходимо «проинформировать» ее об этом. Делается это путем ручной правки файла lptsw.ini, который появляется в папке программы после первого ее запуска. Этот файл необходимо открыть в редакторе, хоть в том же «Блокноте», и добавить в него следующие строки:

[Extra]
1_a = 0
1_c = 4
2_a = 1
2_c = 5
3_a = 2
3_c = 6
4_a = 3
4_c = 7

Будьте внимательны: в этих строках перечислены пары линий для каждого канала — номер канала определяется первой цифрой в строке. После символа «подчеркивание» следует назначение линии — для анода светодиода или для катода («» и «» соответственно). После знака равенства указан номер линии шины данных LPT-порта, который назначен для соответствующей задачи. В приведенном примере указаны те значения, которые используются программой по умолчанию. Если нужно, например, настроить программу на схему, в которой к нечетным линиям подключены аноды светодиодов а к четным — катоды, надо ввести такие строки:

1_a = 0
1_c = 1
2_a = 2
2_c = 3
3_a = 4
3_c = 5
4_a = 6
4_c = 7

Программа не контролирует корректность заданных значений, если справа или слева от знака равенства будут некорректные значения, поведение программы при управлении нагрузками непредсказуемо (зависаний или ошибок, возможно и не будет, но что и как будет включено — неизвестно). Именно поэтому данная возможность по умолчанию скрыта.

Следует признать, что способ «параллельного» управления несколькими нагрузками очень неудобен: для 4-х нагрузок нужно «дотянуть» до удлинителя аж 8 проводов от разъема порта. Единственное существенное достоинство схемы — простота, особенно при использовании мощных оптореле, например 5П19Т или 5П20Б: в этом случае схема канала управления вырождается в токоограничительный резистор и оптореле. Для управления бОльшим количеством каналов усложнение параллельной схемы становится неоправданным по числу деталей и количеству соединительных проводников. Очевидным выходом в этом случае будет переход на управление через последовательный порт, причем при использовании интерфейса RS485 возможно управление нагрузками на расстоянии до 1 км и более. Но эта тема уже не попадает в рамки данного проекта.

P.S. Сейчас уже актуальней управление устройствами через USB, благо есть готовые модули.

Не пропустите обновления! Подписывайтесь на нашу группу Вконтакте и страницу в Twitter!
Так же у нас есть Telegram канал.

Вам понравился наш материал? Поделитесь с друзьями!

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Управление hdmi windows 10
  • Управление asterisk под windows
  • Управление android с windows
  • Упала скорость торрента windows 10
  • Упала скорость жесткого диска windows 7