Страница 1 из 4
программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 11:18:30
memento
добрый день,
знаю, что на лпт порт можно как-то использовать, как источник входов-выходов сигналов, а есть ли какая-нибудь программа, в которой без навыков программирования можно составить простенькую логику, а так же сделать оболочку на компьютере, где было бы показаны эти сигналы.
идея сделать из старенького лаптопа систему сигнализации и другие интересные идеи "умного дома": контроль освещения, отопления и т.д..
Умею программировать Siemens-овские контроллеры S5 и S7. Но они слишком дороги, чтобы устанавливать дома.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 11:43:07
ARV
я начинал было заниматься чем-то очень похожим на сабж, но не заметил какого-либо интереса публики - и бросил.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 12:21:42
Yftul
LPT порт уходит в прошлое. Если хотите что-то более интересное сделать - сделайте некий USB девайс, имеющий входы/выходы и управляющую программу на комп, чтобы реализовать подобную логику.
Думаю, что такая постановка вопроса куда более интересна
ЗЫ: Еще один аспект. Важно, чтобы все это дело работало на x64 системах, так как там есть определенные проблемы с драйверами(к примеру валяется программатор AVR910 от протосса без дела, так как лениво каждый раз перегружаться в тестовом режиме, проще было спаять еще один программатор от Петьки)
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 12:52:13
PB_EXPERT
memento писал(а):знаю, что на лпт порт можно как-то использовать, как источник входов-выходов сигналов, а есть ли какая-нибудь программа, в которой без навыков программирования можно составить простенькую логику, а так же сделать оболочку на компьютере, где было бы показаны эти сигналы.
На самом деле, программирование под Windows это не так сложно как кажется!
Вот код простой проги, управляющей пинами LPT1
Код: Выделить всё
If OpenLibrary(1, "inpout32.dll")=0 ; Открываем библиотеку inpout32.dll
MessageRequester("", "Нет "+Chr(34)+"inpout32.dll"+Chr(34)+"", 64)
End ; Завершение работы программы
EndIf
Prototype Out32(Address, Value) ; Дакларация функции Out32 из inpout32.dll
Global Out_LPT.Out32=GetFunction(1,"Out32")
Procedure SendLPT1() ; Процедура передачи данных в LPT1
Out.c=0
For i=8 To 1 Step -1 ; В цикле сканируются "флажки" (CheckBoxGadget) отвечающие за пины порта
If GetGadgetState(i)=1 ; Определяем состояние "флажка"
Out | 1 ; Операция "Логическое ИЛИ"
Else
Out & %11111110 ; Операция "Логическое И"
EndIf
If i>1
Out << 1 ; Сдвиг переменной на 1 бит влево
EndIf
Next i
Out_LPT($378, Out) ; Данные в LPT1
EndProcedure
; Открываем окно
OpenWindow(0,0,0,120,240,"lpt Pin", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
Frame3DGadget(#PB_Any,20,10,80,180,"Pins")
y=28
For i=1 To 8
CheckBoxGadget(i,36,y,50,16,"Pin "+Str(i)) ; "флажки"
y+20
Next i
ButtonGadget(9,6,210,110,24,"Отправить в LPT 1") ; Экранная кнопка
HideWindow(0,0) ; Отображение окна на экране
Repeat ; Главный (оконный) цикл программы "Repeat - Until"
Event=WaitWindowEvent() ; Идентификатор события
If Event=#PB_Event_Gadget ; Произошло событие в гаджете
Gadget=EventGadget() ; ID гаджета, в котором произошло событие
If Gadget=9 ; Обнаруден клик по экранной кнопке
SendLPT1() ; Процедура передачи информации по порт LPT1
EndIf
EndIf
Until Event=#PB_Event_CloseWindow ; Когда закрывают окно, цикл будет прерван и прога завершит работу
Скрин проги
Исзодник проги и скомпилированый исполняемый файл в архиве
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 13:31:57
memento
PB_EXPERT
а можете посоветовать, где об этом можно почитать, поучиться?
я в программировании ничего не смыслю, поэтому и просил программу, где можно составить логику типо этой:
Код: Выделить всё
| in1 in2 out1
|---[ ]---[/]---( )
| out1 in3 out2
|---[ ]---[ ]---( )
|
ну и с какими-нибудь примочками, типа таймеров или триггеров.
Конечно, если посоветуете какой-нибудь онлайн учебник по простенькому программированию, то я буду рад учиться.
а на счёт лпт, думал так проще будет в усб хаб поставить несколько переходников и тем самым получить много входов/выходов
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 13:39:14
PB_EXPERT
можете посоветовать, где об этом можно почитать, поучиться?
Тут всё зависит от языка программирования.
Например, прога, выложеная выше, написана на
PureBasic
Найти учебники можно здесь
http://pure-basic.narod.ru/docs.html
а на счёт лпт, думал так проще будет в усб хаб поставить несколько переходников и тем самым получить много входов/выходов
То есть использовать переходники USB - LPT?
Плохая идея!
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 13:49:07
memento
PB_EXPERT писал(а):Тут всё зависит от языка программирования.
мне бы тот, который проще освоить самостоятельно. Именно, чтобы можно было PC заставить руководить релюшками и чтобы PC получал сигналы от датчиков и согласно этим сигналам принимал необходимые действия.
пример: получил сигнал о включении -> включил свет (например) -> через 5 минут, если свет небыл выключен включил вытяжку в ванной -> если три часа и никаких изменений выключил свет и вытяжку, а если свет был выключен раньше, то вытяжка в ванной ещё работает 10 минут.
вот примерно такую логику я и хочу сделать.
То есть использовать переходники USB - LPT. Плохая идея!
почему? а что лучше сделать?
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 13:59:17
PB_EXPERT
мне бы тот, который проще освоить самостоятельно
PureBasic один из простых языков.
Можете попробовать освоить.
почему? а что лучше сделать?
Потому что с ним нельзя работать как с обычным портом, ведь на самом деле порт не существует в адресном пространстве компа - виртуальный он!
С виртуальным LPT портом можно попробовать работать через API (спец. функции операционной системы), но не факт что получится, ведь он расчитан для работы с принтером, а не для обмена произвольной информацией - драйвер может не поддерживать это.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:05:47
memento
PB_EXPERT писал(а):Потому что с ним нельзя работать как с обычным портом, ведь на самом деле порт не существует в адресном пространстве компа - виртуальный он!
а что тогда делать, если на компьютере имеются только USB порты? Есть варианты или забыть про эту затею?

И спасибо большое за ссылки, уже изучаю.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:11:15
PB_EXPERT
memento писал(а):PB_EXPERT писал(а):Потому что с ним нельзя работать как с обычным портом, ведь на самом деле порт не существует в адресном пространстве компа - виртуальный он!
а что тогда делать, если на компьютере имеются только USB порты? Есть варианты или забыть про эту затею?
Умеете программировать микроконтроллеры, типа PIC или AVR?
Если да, то или в самом контроллере создаёте USB клиента или используйте переходник USB - COM и связывайте контроллер с этим переходником. Ну а дальше уже микроконтроллер будет всем управлять и отправлять/принимать данные из компа.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:11:46
Yftul
Выход есть:) Сделать самому нечто подобное переходнику USB-LPT, как я писал выше) Как заметил уважаемый PB_EXPERT можно использовать что-то вроде FT232+контроллер и получить что-то не совсем совместимое, но ввиду отсутствия аналогов перспективное, при условии создания достойной документации и управляющей программы
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:25:18
memento
Yftul писал(а):Если хотите что-то более интересное сделать - сделайте некий USB девайс, имеющий входы/выходы и управляющую программу на комп, чтобы реализовать подобную логику.
Думаю, что такая постановка вопроса куда более интересна

Интересна, но и более сложна для меня. Но я готов учиться!
PB_EXPERT писал(а):Умеете программировать микроконтроллеры, типа PIC или AVR?
К сожалению, нет, но готов учиться. Умею программировать контроллеры (не микро

типо Siemens, Omron, Vipa...
Yftul писал(а):при условии создания достойной документации и управляющей программы
c этим и будет сложнее, потому что программировать не умею
Спасибо, буду PureBasic изучать. А так же учиться микроконтроллеры паять и прошивать на работе долгими ночами...

Подскажите пожалуйста, что конкретно может подойти под мои нужды? Ссылками статьями.
Спасибо за помощь!
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:26:31
PB_EXPERT
Yftul писал(а): Важно, чтобы все это дело работало на x64 системах, так как там есть определенные проблемы с драйверами
Ну тогда нужно сделать HID устройство.
Проблем с драйверами не будет.
Замутить устройство можно на PIC18F4550 или на одном из AVRов.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 14:32:03
Yftul
Вот и вырисовываются общие черты:)
Взять за основу HID девайс хоть на PIC хоть на AVR и написать для него, а не для LPT порта управляющую программу

Девайсов таких(эмулирующих клавиатуру/джойстик/мышь и имеющих возможность зажигать светодиоды) пруд пруди:) можно сосредоточиться на написании программы и документировании.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 16:17:12
PB_EXPERT
Работать с USB HID устройствами со стороны компа, не сложнее чем с LPT портом.
Вот немного переработаный предыдущий пример.
Код: Выделить всё
; Для компиляции нужна библиотека HID_Lib
; http://pure-basic.narod.ru/libs.html#HID_Lib
#USB_PID=$1 ; USB идентификаторы устройства
#USB_VID=$1234
Procedure Send_USB_HID() ; Процедура передачи данных в USB HID устройство
Out.c=0 ; Переменная (один байт)
Dim Buffer.c(1) ; Массив однобайтных переменных
For i=8 To 1 Step -1 ; В цикле сканируются "флажки" (CheckBoxGadget) отвечающие за пины порта
If GetGadgetState(i)=1 ; Определяем состояние "флажка"
Out | 1 ; Операция "Логическое ИЛИ"
Else
Out & %11111110 ; Операция "Логическое И"
EndIf
If i>1
Out << 1 ; Сдвиг переменной на 1 бит влево
EndIf
Next i
HID_Handle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) ; Открываем USB HID устройство
If HID_Handle ; Успешно получен доступ к устройству
Buffer(0)=0
Buffer(1)=Out ; Копирование данных из переменной в массив
HID_Lib_WriteDevice(HID_Handle, @Buffer(), 2) ; Передача данных HID устройству
HID_Lib_CloseDevice(HID_Handle) ; Закрытие доступа к устройству
Else
MessageRequester("PID = 1; VID = 1234 H", "Нет требуемого HID устройства!", 16)
EndIf
EndProcedure
; Открываем окно
OpenWindow(0,0,0,120,240,"HID", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered|#PB_Window_Invisible)
Frame3DGadget(#PB_Any,20,10,80,180,"Биты")
y=28
For i=1 To 8
CheckBoxGadget(i,30,y,60,16,"Бит № "+Str(i)) ; "флажки"
y+20
Next i
ButtonGadget(9,2,210,116,24,"Отправить в USB HID") ; Экранная кнопка
HideWindow(0,0) ; Отображение окна на экране
Repeat ; Главный (оконный) цикл программы "Repeat - Until"
Event=WaitWindowEvent() ; Идентификатор события
If Event=#PB_Event_Gadget ; Произошло событие в гаджете
Gadget=EventGadget() ; ID гаджета, в котором произошло событие
If Gadget=9 ; Обнаруден клик по экранной кнопке
Send_USB_HID() ; Процедура передачи информации USB HID устройствe
EndIf
EndIf
Until Event=#PB_Event_CloseWindow ; Когда закрывают окно, цикл будет прерван и прога завершит работу
Из кода исключены строки, свазанные с работой с DLLкой "inpout32.dll"
И добавлен код, передачи информации HID устройству
Код: Выделить всё
HID_Handle=HID_Lib_OpenDevice(#USB_PID, #USB_VID) ; Открываем USB HID устройство
If HID_Handle ; Успешно получен доступ к устройству
Buffer(0)=0
Buffer(1)=Out ; Копирование данных из переменной в массив
HID_Lib_WriteDevice(HID_Handle, @Buffer(), 2) ; Передача данных HID устройству
HID_Lib_CloseDevice(HID_Handle) ; Закрытие доступа к устройству
Else
MessageRequester("PID = 1; VID = 1234 H", "Нет требуемого HID устройства!", 16)
EndIf
Устройство идентифицируется по PID и VID.
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 19:20:55
memento
Yftul писал(а):Вот и вырисовываются общие черты:)
Взять за основу HID девайс хоть на PIC хоть на AVR и написать для него, а не для LPT порта управляющую программу

Девайсов таких(эмулирующих клавиатуру/джойстик/мышь и имеющих возможность зажигать светодиоды) пруд пруди:) можно сосредоточиться на написании программы и документировании.
То есть, как я понял, нужно на микроконтроллер записать логику, которая будет управлять выходами, а программа написанная на бейсике будет отображать её работу и выдавать ещё сигналы для обработки?
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 19:33:00
Yftul
Держу в руках журнал "Радио" за март этого года. На странице 25 начинается статья "Обмен информацией с USB HID устройством". Схема состоит из единственного контроллера atmega88 и десятка деталей(резисторы, конденсаторы, стабилитроны, кварц).
На основе данной статьи банально реализуется все что Вы хотели с минимальными переделками, если Вас конечно устроят две кнопки и 3 светодиода(или любых нагрузки вместо них).
Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 19:35:50
PB_EXPERT
memento писал(а):
То есть, как я понял, нужно на микроконтроллер записать логику, которая будет управлять выходами, а программа написанная на бейсике будет отображать её работу и выдавать ещё сигналы для обработки?
Нужно написать программу для микроконтроллера, которая будет анализировать команды от компа, полученые через USB и выполнять требуемые действия, скажем, чтение (или запись) информации в один из портов контроллера.
Получится что-то наподобие LPT порта, но с интерфейсом USB.
Можно часть алгоритма перенести из проги на компе в микроконтроллер. В этом случае получится "умный" LPT порт на основе МК.

Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 19:57:26
PB_EXPERT
Yftul писал(а):На основе данной статьи банально реализуется все что Вы хотели с минимальными переделками, если Вас конечно устроят две кнопки и 3 светодиода(или любых нагрузки вместо них).
Здесь вот есть 2 кнопки и
4 
светодиода.

Re: программа оболочка для win и программирование
Добавлено: Вт май 18, 2010 20:07:51
memento
PB_EXPERT писал(а):memento писал(а):
То есть, как я понял, нужно на микроконтроллер записать логику, которая будет управлять выходами, а программа написанная на бейсике будет отображать её работу и выдавать ещё сигналы для обработки?
Нужно написать программу для микроконтроллера, которая будет анализировать команды от компа, полученые через USB и выполнять требуемые действия, скажем, чтение (или запись) информации в один из портов контроллера.
Получится что-то наподобие LPT порта, но с интерфейсом USB.
Можно часть алгоритма перенести из проги на компе в микроконтроллер. В этом случае получится "умный" LPT порт на основе МК.

А для написания программы микроконтроллера достаточно знать бейсика или же программа там пишется исключительно на ассемблере?
Если так, то имея определённый тип микроконтроллера и готовую прошивку, то всё сводится лишь к написанию программы на бейсике, которая будет всем этим руководить?
В таком случае не думаю, что мне понадобится переносить часть алгоритма на МК. Просто где-нибудь скачать "универсальную" прошивку.
Уже пытаюсь разобраться с бейсиком. Пока что кажется всё дремучим лесом. Но может скоро снизойдёт озарение

...
20 страниц инструкции нужно переварить. Понимаю, что там не может быть всего, но я и не считаю, что моя задача очень уж сложная.
Yftul писал(а):На основе данной статьи банально реализуется все что Вы хотели с минимальными переделками, если Вас конечно устроят две кнопки и 3 светодиода(или любых нагрузки вместо них).
Ну, на такой случай у меня где-то валяется Siemens Logo!. Там как раз 6 входов и 4 выхода и программа его кажется мне простой. Мне же для моей задумки нужно побольше входов-выходов, а на S7 или модули разширения Logo! у меня денег нет

. Тем более графический интерфейс виндовса более симпатичен
П.С. Понимаю, что разговор со мной, кажется вам разговором с деревом. Большое спасибо за терпение и за разъяснения.