Главная arrow Проекты arrow LptSW - программа управления нагрузками при помощи LPT-порта  
27.03.2017 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
LptSW - программа управления нагрузками при помощи LPT-порта Печать E-mail
Рейтинг: / 34
ХудшаяЛучшая 
Автор ARV   
01.11.2007 г.

ImageТолчком к разработке всего проекта послужила статья "Программное управление отключением компьютерных АС" в журнале Радиолюбитель №9 за 2007 год. У описанной там программы и схемы имеются, на мой взгляд, некоторые недостатки:

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

 

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

Известно, что для проверки работоспособности схем ввода-вывода часто используется вывод байтов 0x55 и 0xAA (в двоичном коде это 01010101 и 10101010), и я предположил, что именно такие байты и выводит BIOS и Widnwos при тестировании 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
Всплывающее меню программы имеет (по умолчанию) вид, показанный на рисунке 2.

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

Основное окно
Рисунок 3. Вид основного окна

На рисунке 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. Справедливости ради следует признать, что недостатки есть и в моем варианте... Во-первых, толком программу и схему я не протестировал, надеюсь, что кто-нибудь это сделает и поправит меня, если где-то что-то не так окажется... А во-вторых, программа моя немножко (всего раза в 3) больше размером вышла, чем ее праобраз...

 


Добавить в любимые (2) | Просмотров: 37465

  Коментарии (5)
 1 Написал(а) Денис, в 09:15 09.02.2009
Спасибо за идею с оптронами!  
Я одно время думал собрать адаптер так, чтобы он контроллировал определенный байт на линии data, он есть- тогда линия control через регистр управляет нагрузками, если нет- регистр защелкивает последние значения control-a. Софтина при запуске выставляет этот байт на линию data, при закрытии записывает туда 00h или FFh, что больше нравится, а посредством линии control, собственно, управляет. После выключения любимой железяки, таким образом, последнее состояние нагрузок сохраняется, а при включении софтина посредством входов Ack, Busy, Select, PaperEnd (не помню, как этот регистр называется) считывает как и что. Идея, правда, до практического воплощения пока не дошла. 
 
Большая просьба- можно взглянуть на LptSW? 
мой ящик Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
 2 Написал(а) Cka3o4nuk, в 21:05 19.04.2010
В программе очень нужно функция горячих клавиш. Особенно на выход. Или возможность нормального выхода через командную строку. 
В данный момент если командной строкой закрывать приложение [CODE]taskkill /f /im lptsw.exe[/CODE] то питание не отключается (стоит опция откл. всё при выходе. 
Вот и вопрос, как выйти грамотно из проги через командную строку. 
Прошу по возможности ответить на Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script
 3 Написал(а) ARV, в 22:03 21.04.2010
когда процесс убивается системой - это ненормальное завершение, в этом случае любая программа завершается аварийно и не сохраняет свои данные (ну а LptSW не отключает ничего). это нормальное поведение. 
 
по остальному обсуждению - милости прошу в форум.
 4 Написал(а) Евгений, в 13:48 21.08.2010
Спасибо за статью. Давно хотел попробовать сделать управление стиральной машинкой через ПК(стоит одна сломанная). Теперь возьмусь. 
У меня к Вам два вопроса.  
1. Как отследить входной сигнал. Например, при срабатывании датчика уровня воды, схеме принять сигнал и отключить соответствующий канал управления подачей воды? 
2.Можете ли Вы выложить исходник программы или отправить его на мой ящик Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script  
Имею определенные знания в Делфи и хотел бы доработать ваш вариант с учетом моих задач (очередность включения, задержки времени, варианты программ стирки и т.п.). 
Спасибо!
 5 Написал(а) ARV, в 15:08 21.08.2010
Прошу все вопросы, просьбы, предложения и т.п. ОБСУЖДЕНИЕ ПРОБЛЕМ и ПРОЕКТОВ вести ИСКЛЮЧИТЕЛЬНО на ФОРУМЕ.

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

 
След. »
Полезные материалы по сходным темам
BannerFans.com