usb to lpt
В том-то и фокус, что задача стоит не байт передать, а ногой порта дернуть! И о использовании стандартного драйвера не может быть и речи. Надо писать по “железным” адресам, в обход всех буферов, непосредственно в порт.
Открою страшную тайну, ни один порт в PC не имеет битового доступа. Запись и чтение идет байтами (или 16- или 32 битными словами) 😃
Т.е. принципиально нет разницы куда слать байт 😉
Разница есть в самой программе, какой механизм доступа она использует.
можете мне поверить. что в случае с pci-платой, что в случае с isa речь идет об адресах портов. в виндах все эти адреса портов виртуальные. драйвер перехватывает обращение к портам и дальше уже его дело, как этим распорядиться.
Это опять же неправильно. Все адреса портов реальны, но надо понимать, что в x86 архитектуре существуют IO адреса и Memory адреса.
ДОступ к ним осуществляется разными механизмами. Где и какой адрес используется зависит от конкретной реализации контроллера и т.п.
знатоки собрались системного программирования. когда вы в программе на ассемблере пишете “out dx,al” и при этом это пользовательская программа в виндах, то это “прямое” обращение может перехватываться соответствующим драйвером виртуального устройства. при этом перехватываться могут одни порты, а вывод осуществляться вообще через другие механизмы, пример - “прямой” доступ к виртуальному com-порту из vdm.
Все адреса портов реальны, но надо понимать, что в x86 архитектуре существуют IO адреса и Memory адреса.
надо так же понимать, что есть железо с его реальными портами и адресами, и есть windows с его hal. когда мы говорим о программах под управлением windows, то им ичего неизвестно о том, с реальным устройством они общаются или нет, тем более, прямого доступа к аппаратным средствам у них либо нет совсем, либо доступ крайне ограничен.
Открою страшную тайну, ни один порт в PC не имеет битового доступа. Запись и чтение идет байтами (или 16- или 32 битными словами) 😃
Т.е. принципиально нет разницы куда слать байт 😉
…
Согласен, но можно записать байт, изменить бит в байте и повторить запись.
знатоки собрались системного программирования. когда вы в программе на ассемблере пишете “out dx,al” и при этом это пользовательская программа в виндах, то это “прямое” обращение может перехватываться соответствующим драйвером виртуального устройства. при этом перехватываться могут одни порты, а вывод осуществляться вообще через другие механизмы, пример - “прямой” доступ к виртуальному com-порту из vdm.
Себя к таковым не причисляю и пользуюсь чужими наработками типа DLPortIO, TvicHW32. Это драйвера виртуального устройства, которые работают на уровне ядра, а там можно практически все, а в пользовательских программах все происходит так как описали Вы.
В подтверждение слов: после установки мача в диспечере устройств появляется Mach1 Pulseing Engine - это и есть примочка, которой пользуется мач для прямого ногодрыгства 😃😃😃
С ком-портом все намного проще. Можно обойтись виндузовыми драйверами.
В подтверждение слов: после установки мача в диспечере устройств появляется Mach1 Pulseing Engine - это и есть примочка, которой пользуется мач для прямого ногодрыгства 😃😃😃
Это немного не то. Это устройство предназначено, прежде всего, для генерации импульсов с четко заданными временными характеристиками, насколько это вообще возможно в виндах. Это для тех, кто уже научился “дрыгать ногами”, но пока еще не добился приемлемой плавности перемещения, разгона и торможения.
С ком-портом все намного проще. Можно обойтись виндузовыми драйверами.
Там тоже не все радостно, ногами дрыгать можно, но не быстро. С каждой новой операционкой скорость падает.
Причем использование TvicHW32 толком ускорят не дает.
Но это все оффтопик.
А по существу получается, что если программа не умеет работать со сторонними приблудами типа TvicHW32, или какими либо конвертерами USB/Ethernet->LPT то тут ничего не сделаешь.
Вроде где-то пробегало, что Mach знает про MODBUS. Протокол довольно простой. На мой взгляд самый правильный вариант это собрать контроллер движков с поддержкой MODBUS или MODBUS\TCP.
А по существу получается, что если программа не умеет работать со сторонними приблудами типа TvicHW32, или какими либо конвертерами USB/Ethernet->LPT то тут ничего не сделаешь.
Вроде где-то пробегало, что Mach знает про MODBUS. Протокол довольно простой. На мой взгляд самый правильный вариант это собрать контроллер движков с поддержкой MODBUS или MODBUS\TCP.
Все что ниже - ИМХО.
Для того что бы понять что можно, а что нельзя, надо прочесть SDK. Можно даже написать свой драйвер 😃
Я могу ошибаться, но “стандартный” драйвер имеет три подпрограммы опроса/ввода-вывода : дергание портов (до 75 кГц причем он просто расчитывает когда где какие пины изменять - это не частота импульсов на выходе порта), вторая 10 раз в секунду и третья 40 раз в секунду, эти две последние для обратной связи (опрос входов). Поэтому после аварии мач не знает точно на каком шаге произошла остановка.
Да поддержка MODBUS есть, но она на так называемом 1 (а не 0 порту) и поэтому не может быть использована для Pulse Engine.
Только для медленного вывода или опроса (polling) - 20 раз в секунду.
Подробности имеет смысл искать на странице www.machsupport.com/artsoft/plugin.htm
Есть например SmoothStepper, который все это уже делает.
Было у меня несколько задач,где требовалась работа с лпт, сначала использовал DLPortIO, но когда потребовалась работа с PCI->LPT пришлось искать новый драйвер для прямого доступа к железу…
Если пишете на Delphi, попробуйте это. На PCI-LPT нет возможности попробвать - нет его просто. Но по крайней мере до PCI модема пускает.
www.usbcnc.com может быть кому пригодится.
Случайно натолкнулся:
kpv.nnov.ru/texas.html
files.kpv.nnov.ru/sm510pci_r0.zip
Смотрел по диагонали. Вроде реализован LPT порт на шине PCI с возможностью установки стандартных адресов. Вообще замута интересная…
Буду рад, если кто-нибудь сможет использовать это для управления станком!
ЗЫ По предыдущим постам: Все мы были в чем-то правы и не правы…
Существует такая прога “Userport” , вроде как помогает перенаправить данные с 0378 - 037F на другие адреса (PCMCIA в частности). Правда вчера у меня ничего не получилось. Диаппазон адресов FFD8 - FFDF, FFD0 - FFD7, FFF0 - FFFF не дает ввести. А может я что делаю не так?
ТНК правильный совет даёт , я сам по началу столкнулся с этой проблемой (роверовский PCMCI>LPT), хотел сначало выкинуть , но в матче выставил адрес как было написано выше и всё заработало. На других прогах ещё не тестил.
Опять ничего не выходит. Уже забабашил LPT разем со светодиодами через резистор 1к на землю, думал по индикации буду смотреть что происходит.
В Мах вводил все адреса FFD8 - FFDF, FFD0 - FFD7, FFF0 - FFFF - но там получаются они как 0xffd8 или 0xffdf и.т.д. И никакого толку, святятся светодиоды и моргать не хотят.
А производитель отфутболил -“Возможно Ваша программа сканирует только адреса 278, 378, соответственно с этой картой она работать не будет”.
Что еще можно попробовать?
три глупых вопроса:
- вы в ports and pins в mach какой номер порта для пинов указываете для каждого пина?
- вы reset каждый раз жмете?
- вы назначили emergency stop?
три глупых вопроса:
- вы в ports and pins в mach какой номер порта для пинов указываете для каждого пина?
- вы reset каждый раз жмете?
- вы назначили emergency stop?
- вы в ports and pins в mach какой номер порта для пинов указываете для каждого пина?
Спасибо ОГРОМНОЕ! Так вот бывает когда тестишь на нескольких компах. На одном настроил, на другом проглядел. Заморгали мои светодиоды, буду тестить дальше.
Так чем дело закончилось? Вот глянул на свой ноутбук, а LPT порта нет (а был уверен что он есть). А контроллер уже куплен.
вот к примеру из Никса “USB Docking Station (клавиатураPS/2, мышьPS/2, COM9M, LPT25F, 2xUSB-) ПРЕДУПРЕЖДЕНИЕ Порт LPT работает только в режиме SPP” - будет такая штука работать?
Или может кто посоветует уже опробованный вариант?
Я сижу на докинг Docking Station своим ноутом HP но не посредством УСБ.На ноуте с низу есть спец разем, Docking Station плагается к ноуту через данный разем.Docking Station имеет отдельное питание, которое питает так же и ПК itd.Когда отключаю питало Docking Station то LPT port не вырубается и соответственно режим SPP будет поддерживаться.LPT у меня выведен физически на режиме SPP.
Mah3 дружит с передником PCMCI>LPT от Ровера. Загрузил какой-то G код и моторы закрутились (станка пока нет, только моторы + контроллер). Вообщем процесс пошел.
Mah3 дружит с передником PCMCI>LPT от Ровера. Загрузил какой-то G код и моторы закрутились (станка пока нет, только моторы + контроллер). Вообщем процесс пошел.
А почему не должен был дружить ? PCMCIA это ISA, CardBus32 это PCI, ExpressCard это PCI Express
(тот же PCI только сериализированный - логика осталась такой же).
Все переходники должны работать (а точнее Add-On карты).
Mah3 дружит с передником PCMCI>LPT от Ровера. Загрузил какой-то G код и моторы закрутились (станка пока нет, только моторы + контроллер). Вообщем процесс пошел.
Похожая штука от PureLogic (Russia) www.purelogic.ru/adapter.html:
“PLZ004. Плата расширения для ноутбука. Позволяет добавить в систему дополнительный LPT порт, плата устанавливается в PCMCI слот ноутбука. Плата необходиа тем, у кого в ноутбуке отсутствует LPT порт (при построении станка ЧПУ).”
Видно только появился PLZ004. Пока еще нет описания.
три глупых вопроса:
3. вы назначили emergency stop?
Еще один глупый вопрос…
А хде можно отключить emergency mode? Потому как на кнопку Reset Mach не реагирует. Моргает и бежит строка про emergency mode.
Или куда глянуть чтоб это поправить?
Еще один глупый вопрос…
А хде можно отключить emergency mode? Потому как на кнопку Reset Mach не реагирует. Моргает и бежит строка про emergency mode.
Или куда глянуть чтоб это поправить?
Если кнопка прописана как физическая (в инпутах), то возможно, нужно поставить Active low, ну или убрать наоборот 😉
Еще один глупый вопрос…
А хде можно отключить emergency mode? Потому как на кнопку Reset Mach не реагирует. Моргает и бежит строка про emergency mode.
Или куда глянуть чтоб это поправить?
отключить ее в PORT and PIN (она по умолчанию ставится).