Можно ли из командной строки записывать/считывать в LPT

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

Есть сторонние программки, которые можно запускать из командной строки, но функциональность немного не соответствует необходимой, и нужно софт переписывать.
Например эта (имеются исходник) -
_LPT.rar
(29.04 КБ) 329 скачиваний
В общем, необходимо выполнить несколько задач:
1. Есть удаленный ноутбук (WinXP), подключенный к интернету через сотовый роутер, которые, как известно иногда подвисают. Самый простой и надежный способ периодически перезагружать отключением питания (реле времени, будильник), но в этом варианте есть и недостатки.
Нужен батник, чтобы компьютер периодически проверял наличие интернета, например пингуя какой-либо сервер, и при отсутствии соединения с интернет выполнял следующую команду (как это сделать примерно понимаю), управляя через порт принтера релюшкой, отключающий на некоторое время питание роутера.
Для одного порта это возможно реализовать вышеупомянутой программой, но требующих управление портом может быть несколько устройств, для этого нужно считывать состояние других задействованных портов и изменять состояние только определенных.
2. Необходимо периодически проверять наличие сетевого питания ноутбука и при пропадании питания отправлять сообщение или выполнять другие действия. Для этого наличие питания в электросети или на выходе БП через ключ или оптрон можно подавать на пин LPT и контролировать его состояние. Вопрос как это проще решить.
А есть ли возможность из командной строки узнать, питается ноутбук в данный момент от батареи или сети, есть ли такая функция? Чтобы не заморачиваться с портом.
Реклама
Аватара пользователя
igor-x
Мудрый кот
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение igor-x »

так все просто: проверяеш пинг, если долго нет , то даеш команду print anyfile.txt
к порту ЛПТ на один разряд подключить реле и оно сбросит устойство. ( упрощенная исструкция , возможно необходима настройка по задержкам)

если вопрос по питанию - print powerfile.txt с немного другим содержанием. в отличе от anyfile.txt

* отличие файлов в том что печатаемый байт имеет разные установленные биты - для разных исполнительных устройств, в простом случае только 8 устройств,
если усложнить схему на выходе ЛПТ, то неограниченное число

** PRINT - команда операционной системы, дополнительных прорамм не требуется
Реклама
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

Это примерно понятно, но нужно еще и считывать состояние портов
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение musor »

каманда COPY FILE.EXT LPT нормадно работает тока в голой дозе... в винде нужен драйф портоф для реалтайма... в далекие годы мы его таки юзали тока те старые версии 100% не работали в вистен и dasit надо писать новые под их ядро..
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение BOB51 »

Из-под ХР "и старше" прямое управление регистрами LPT не допускается.
:(
Реклама
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

Если нельзя управлять портом напрямую, поставлю вопрос по другому. Есть программа:
_LPT.rar
(29.04 КБ) 323 скачивания
#Name="PB_LPT - Управление LPT портом."

Count=CountProgramParameters()
If Count<>2
MessageRequester(#Name, "Некорректное число параметров коммандной строки!"+Chr(10)+"Должно быть 2, а их "+Str(Count)+Chr(10)+Chr(10)+"Первый параметр - адрес LPT порта (2 байта) в десятичной системе счисления."+Chr(10)+"Второй параметр - код (1 байт), отправляемый в порт в десятичной системе счисления", #MB_OK|#MB_ICONWARNING)
End
EndIf

Port.s=RemoveString(ProgramParameter(),Chr(34))
Pin.s=RemoveString(ProgramParameter(),Chr(34))

PortW=Val(Port)
If (PortW<>888 And PortW<>632 And PortW<>956) Or Len(Port)<>3
MessageRequester(#Name, "Неправильный адрес порта - "+Chr(34)+Port+Chr(34)+""+Chr(10)+"Должен быть 888 для LPT1 или"+Chr(10)+"632 для LPT2 или 956 для LPT3", #MB_OK|#MB_ICONWARNING)
End
EndIf

PinC=Val(Pin)
If PinC<0 and PinC>255
MessageRequester(#Name, "Передаваемый байт (второй аргумент коммандной строки)"+Chr(10)+"должен быть в виде целого положительного числа "+Chr(10)+"в пределах 0...255!", #MB_OK|#MB_ICONWARNING)
End
EndIf

If IO_IsDriverInstalled()=0
MessageRequester(#Name, "Не удалось активировать драйвер."+Chr(10)+"Перезапустите программу.", #MB_OK|#MB_ICONERROR)
End
EndIf

Может ли кто модифицировать ее, чтобы при ее запуске из командной строки с аргументами какой бит нужно в какое состояние перевести (например C:\PB_LPT.exe 5 1), она считывала состояние портов и изменяла только указанный. И еще желательно, чтобы если аргументов нет, то выдавала состояние порта. Указывать номер порта не обязательно, достаточно чтобы она работала на LPT1
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение Мурик »

Попробуйте.
Не проверял, т. к. для этого нужен LPT порт и ОС не требующая подпись драйвера.
BOB51 писал(а):Из-под ХР "и старше" прямое управление регистрами LPT не допускается.
В приложении используется драйвер, который если подписать, будет работать и на Win10.
Вложения
LPT.7z
(11.9 КБ) 276 скачиваний
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

Спасибо! :beer:
Сейчас компа с LPT под рукой нет, через недельку заберу бук с портом, буду пробовать.
А считывать состояние портов как-то можно?
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение Мурик »

В программе состояние порта считывается. Установка битов методом "Чтение-модификация-запись".
Но лучше для этих целей использовать микроконтроллер (например STM32F103C8T6 на плате BluePill) подключаемый USB. Дело в том что винда иногда изменяет логические уровни на LPT порту. С USB такого не будет и можно использовать любой комп/ноутбук.
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

Отлично, то что нужно.

Есть еще пара вопросов:
1. Нужно сделать Watch-Dog (СОМ-порта нет, порт USB занимать нежелательно) тогда можно изменять бит порта LPT с подходящей частотой, если комп зависает, то генерация пропадает и схема делает ресет. В таком режиме программа будет сильно нагружать процессор?
2. Для контроля наличия сетевого питания, как я понимаю, из командной строки нельзя определить источник питание в данный момент, сеть или АКБ? Можно конечно средствами Windows при уровне заряда например меньше 90% запускать нужную программу, но время разряда до этого состояния может сильно изменяться в зависимости от текущего потребления, состояния АКБ и т.д., кроме того АКБ может быть не полностью заряжена с момента предыдущего отключения сети.
Тогда периодически (допустим раз в минуту) нужно считывать состояние определенного бита порта (например 5) и в зависимости от его состояния запускать другую программу, которая будет оправлять сообщение или выполнять какие-то другие действия.
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение Мурик »

vlad465 писал(а):USB занимать нежелательно
USB хаба нет?
vlad465 писал(а):В таком режиме программа будет сильно нагружать процессор?
Не должна сильно грузить если не часто запускать ее (тысячи раз в секунду).
vlad465 писал(а):Для контроля наличия сетевого питания, как я понимаю, из командной строки нельзя определить источник питание в данный момент, сеть или АКБ?
Командная строка это по сути запуск других программ. Лучше изучить какой-то язык программирования. Это значительно расширит ваши возможности.
Например PureBasic на котором написана программа для LPT порта, относительно не сложный. Его можно изучить по справке из дистрибутива. Переведенная на русский https://www.cyberforum.ru/pure-basic/th ... st14610676

Для получения информации об аккумуляторе есть функция GetSystemPowerStatus http://rusproject.narod.ru/winapi/g/get ... tatus.html

Код: Выделить всё

Power.SYSTEM_POWER_STATUS
GetSystemPowerStatus_(Power)

If Power\ACLineStatus = 0
  Debug "Питание от аккумулятора"
ElseIf Power\ACLineStatus = 1
  Debug "Питание от сети"
EndIf
Эта же функция позволяет узнать и другие сведения об аккумуляторе http://rusproject.narod.ru/winapi/s/sys ... tatus.html
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

1. USB хаб есть, но замечено что некоторые девайсы, подключенные к хабу виснут. Может хаб не айс.
Также есть ЮСБишные LPT и СОМ (иногда очень полезно при отсутствии портов СОМ и LPT в современных девайсах), но они тоже иногда виснут, даже от штатного ЮСБ порта.
2. Программа LPT будет запускаться батником при отсутствии пинга отключая на время питание роутера и возможно других устройств для перезагрузки, если получится определять отсутствие пинга или отсутствия подключения к определенной сети Wifi. Или тупо перезагружать питанием по расписанию, что вреднее для девайсов.
Другая программа типа LPT будет запускаться при загрузке системы и периодически, например раз в минуту, по состоянию порта или через предложенную функцию GetSystemPowerStatus определять наличие сетевого питания и при его отсутствии запускать другую программу, а также эта программа будет использоваться для реализации сторожевого таймера при зависании.
Схемотехнику вижу такой - при наличии питания очень медленно, например минут пять, заряжается конденсатор, когда напряжение на нем откроет транзистор - формируется импульс сброса компьютера. Программа, пока комп не зависнет, раз в несколько минут разряжает этот конденсатор. Так что грузить процессор программа не должна. Такой интервал выбираю чтобы при включении компьютера успела загрузиться программа, а загрузку в некоторых случаях еще может замедлить скандиск, который отключать пока не хочу.
Чтобы не искать в ноутбуке пин ресета, лучше бы реализовать сброс через кнопку питания, которая уже будет использоваться для автоматического включение после отсутствия питания, но это сложнее, для отключения ноутбука нужно держать кнопку нажатой достаточно долго, и если точно не выдержать это время, то после выключения кнопка окажется отпущенной и ноутбук не включится, или наоборот, будет нажатой дольше необходимого и ноутбук снова отключится еще при загрузке биос.
3. PureBasic качнул, буду изучать, основы программирования знаю, но очень давно этим не занимался, надеюсь что-то получиться.
74LS00
Друг Кота
Сообщения: 7690
Зарегистрирован: Вс июл 24, 2011 11:38:09
Контактная информация:

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение 74LS00 »

В 98 винде напрямую работало и писали проги. Живьём не застал эту ОС. в NT работа была через драйвер. Но я чтото не помню никаких командных програм, были только бинарники.
С приходом 64 потребовался проброс порта через комерческий драйвер, прог под 64 для LPT я не встречал. Некоторые даже с таким драйвером (который кстати не подписан) вообще никак не работают в 64.

Мне кажется проще ардуину на усб повесить
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение BOB51 »

"Доступ через API" - т.е. не из командной строки, а через приложения виндовс.
Разбираться чего там и как устроено - это удел программистов ПК.
Да и добраться удастся только до порта ввода/вывода - к другим регистрам доступа не будет.
Как уже вышепредлагали - цепляйте на USB адуринку да посылайте туда из любого терминала или ищ командной строки свои команды.
8)
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение musor »

идея сама по себе зашкварная... но готоф понять и простить катенка для решения сей задачи есть платы втыкаемые в системные порты PCI|PCI E а вдревних компах была идеалная шина ISA спецзаточеная под это
понятно что разработка такой девайсины на быстпрой логике или ПЛИС не для лохоф и котят...
но можно переделать таки УЖЕ готовую POST CARD слегка подправиф ей firmware///
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

[uquote="musor",url="/forum/viewtopic.php?p=4087473#p4087473"]есть платы втыкаемые в системные порты PCI|PCI E а вдревних компах была идеалная шина ISA[/uquote]
Это ноутбук :facepalm:
Аватара пользователя
musor
Друг Кота
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение musor »

тогдп мини PCI и ПЛИС в помошь....
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Аватара пользователя
vlad465
Друг Кота
Сообщения: 5717
Зарегистрирован: Чт июн 24, 2010 22:59:35
Откуда: С-Петербург

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение vlad465 »

а когда нет мини PCI?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Можно ли из командной строки записывать/считывать в LPT

Сообщение BOB51 »

Ставим абдуринку.
Ту же нанку например или мегу для "пожирнее" или ESP с вай-фаем...
8)
Можно понавороченнее -
https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
(собственно там изначально и была идея "порт-расширитель для ПК")
там даже в последней версии "программатор для ат89с51" интерактив с помощью терминалки сделан
https://radiokot.ru/forum/viewtopic.php ... 5#p4081965
только с адуринкой в примитив приложении значительно проще будет.
:tea:
Ответить

Вернуться в «Интеграция с ПК»