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

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

Вт авг 31, 2021 14:41:27

Есть сторонние программки, которые можно запускать из командной строки, но функциональность немного не соответствует необходимой, и нужно софт переписывать.
Например эта (имеются исходник) -
_LPT.rar
(29.04 KiB) Скачиваний: 253

В общем, необходимо выполнить несколько задач:
1. Есть удаленный ноутбук (WinXP), подключенный к интернету через сотовый роутер, которые, как известно иногда подвисают. Самый простой и надежный способ периодически перезагружать отключением питания (реле времени, будильник), но в этом варианте есть и недостатки.
Нужен батник, чтобы компьютер периодически проверял наличие интернета, например пингуя какой-либо сервер, и при отсутствии соединения с интернет выполнял следующую команду (как это сделать примерно понимаю), управляя через порт принтера релюшкой, отключающий на некоторое время питание роутера.
Для одного порта это возможно реализовать вышеупомянутой программой, но требующих управление портом может быть несколько устройств, для этого нужно считывать состояние других задействованных портов и изменять состояние только определенных.
2. Необходимо периодически проверять наличие сетевого питания ноутбука и при пропадании питания отправлять сообщение или выполнять другие действия. Для этого наличие питания в электросети или на выходе БП через ключ или оптрон можно подавать на пин LPT и контролировать его состояние. Вопрос как это проще решить.
А есть ли возможность из командной строки узнать, питается ноутбук в данный момент от батареи или сети, есть ли такая функция? Чтобы не заморачиваться с портом.

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

Вт авг 31, 2021 15:12:57

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

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

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

** PRINT - команда операционной системы, дополнительных прорамм не требуется

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

Вт авг 31, 2021 15:30:41

Это примерно понятно, но нужно еще и считывать состояние портов

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

Вт авг 31, 2021 19:06:28

каманда COPY FILE.EXT LPT нормадно работает тока в голой дозе... в винде нужен драйф портоф для реалтайма... в далекие годы мы его таки юзали тока те старые версии 100% не работали в вистен и dasit надо писать новые под их ядро..

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

Ср сен 01, 2021 07:36:25

Из-под ХР "и старше" прямое управление регистрами LPT не допускается.
:(

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

Сб сен 04, 2021 15:57:25

Если нельзя управлять портом напрямую, поставлю вопрос по другому. Есть программа:
_LPT.rar
(29.04 KiB) Скачиваний: 210

#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

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

Сб сен 04, 2021 23:30:08

Попробуйте.
Не проверял, т. к. для этого нужен LPT порт и ОС не требующая подпись драйвера.

BOB51 писал(а):Из-под ХР "и старше" прямое управление регистрами LPT не допускается.
В приложении используется драйвер, который если подписать, будет работать и на Win10.
Вложения
LPT.7z
(11.9 KiB) Скачиваний: 223

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

Сб сен 04, 2021 23:52:29

Спасибо! :beer:
Сейчас компа с LPT под рукой нет, через недельку заберу бук с портом, буду пробовать.
А считывать состояние портов как-то можно?

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

Вс сен 05, 2021 11:30:47

В программе состояние порта считывается. Установка битов методом "Чтение-модификация-запись".
Но лучше для этих целей использовать микроконтроллер (например STM32F103C8T6 на плате BluePill) подключаемый USB. Дело в том что винда иногда изменяет логические уровни на LPT порту. С USB такого не будет и можно использовать любой комп/ноутбук.

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

Вс сен 05, 2021 12:01:18

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

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

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

Вс сен 05, 2021 13:01:47

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

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

Вс сен 05, 2021 15:17:59

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

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

Пн сен 06, 2021 03:54:26

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

Мне кажется проще ардуину на усб повесить

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

Пн сен 06, 2021 15:38:14

"Доступ через API" - т.е. не из командной строки, а через приложения виндовс.
Разбираться чего там и как устроено - это удел программистов ПК.
Да и добраться удастся только до порта ввода/вывода - к другим регистрам доступа не будет.
Как уже вышепредлагали - цепляйте на USB адуринку да посылайте туда из любого терминала или ищ командной строки свои команды.
8)

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

Пн сен 06, 2021 19:12:06

идея сама по себе зашкварная... но готоф понять и простить катенка для решения сей задачи есть платы втыкаемые в системные порты PCI|PCI E а вдревних компах была идеалная шина ISA спецзаточеная под это
понятно что разработка такой девайсины на быстпрой логике или ПЛИС не для лохоф и котят...
но можно переделать таки УЖЕ готовую POST CARD слегка подправиф ей firmware///

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

Пн сен 06, 2021 19:29:41

есть платы втыкаемые в системные порты PCI|PCI E а вдревних компах была идеалная шина ISA

Это ноутбук :facepalm:

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

Пн сен 06, 2021 19:33:19

тогдп мини PCI и ПЛИС в помошь....

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

Пн сен 06, 2021 20:02:17

а когда нет мини PCI?

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

Ср сен 08, 2021 09:22:24

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