C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Программа для работы с LPT-портом / Примеры программ / C#

Управление LPT портом из C#

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

Встал вопрос, как перезагружать модем, если он завис. Можно было взять готовое реле времени на 10-30 минут. Такое реле в виде платы продаются во многих магазинах радиодеталей и стоят рублей 300-500. Устанавливаются в разрыв цепи питания и периодически перезапускают модем. Но лучше сделать по-нормальному.

А именно, если от модема не приходят некоторое время команды, его нужно перезагрузить. Если модем дорогой и в нем 2 процессора, то можно перезагрузить программно, отправив DTR (но такие модемы редкость, я ни одного не видел).

Самый простейший способ управления внешними устройствами - через LPT порт. Сейчас он почти нигде не используется в отличии от COM и USB и не занят.

Распиновка порта показана на Рис. 1. Нас интересуют только контакты 2-9 - это регистр данных (18-25 - общий вывод), в него из программы можно записать двоичное число. То есть можно без проблем подавать на эти контакты 0В или 5В. Меняя число, управлять работой 8-ми устройств.

Стандартный порт, в который надо записать число, 0x378 или 888 в десятичной системе. На новых материнских платах он может быть другим и выставляться в BIOS. А также быть виртуальным, тогда ничего не выйдет.

Для управления LPT портом из C# понадобится библиотека Inpout32.dll. Она бесплата для некоммерческого использования. Для использования в коммерческом софте, сделайте небольшое пожертвование автору.

Для удобства создайте CS-файл с именем ComInterop.cs и пропишите в нем вызов функции из неуправляемого кода:
using System;
using System.Runtime.InteropServices;

public class PortAccess
{
	[DllImport("inpout32.dll", EntryPoint="Out32")]
	public static extern void Output(int adress, int value);
}

А в нужном участве кода пишем в порт таким образом:
PortAccess.Output(0x378, 1);//Подает 5В на контакт "2" относительно общего вывода.

Вот, собственно, весь код. Остальное - дело техники. В моем случае та программа записывала отчет в файл, а в своей программе я ввел проверку на последнюю дату записи в файл и если она отличалась более чем на 10 минут, контакты перезапускались.


Скачать исходник «Управление LPT из C#»